天天看點

資料庫 --關聯查詢(多表查詢)

需求:查詢員工及其所在部門(顯示員工姓名,部門名稱)

1.交叉連接配接查詢(笛卡爾積 有些是重複記錄 不推薦)

select empName ,deptName from employee,dept;

2.内連接配接查詢 (隻有滿足條件的結果才會顯示)

規則:1.先确定你要查哪些表

2.确定查詢哪些字段

3.表與表之間的連接配接條件(規律:連接配接條件數量是表數量-1)

員工表 id name deptId 部門表 id deptName

select empName,deptName ———– 2.确定哪些字段

from employee,dept ————– 1.确定查詢哪些表

where employee.deptId=dept.id —————- 3.表與表之間的連接配接條件

内連接配接的另外一種文法

select

empName,deptName

from employee

inner join dept

on employee.id=dept.id;

多表基本架構

SELECT
    A.ID,
    A.NUMBER,
    A.PRICE,
    A.ORDER_TIME,
    B.USER_ID,
    B.STARTIME,
    B.STOPTIME,
    C.CHANNEL_PAY,
    D.COMPANY
FROM
    D表 D
LEFT JOIN A表 A ON A.COMPANY_ID = D.UID
LEFT JOIN B表 B ON B.COMPANY_ID = D.UID
LEFT JOIN C表 C ON C.COMPANY_ID = D.UID
有條件的再加行:
WHERE ..........
排序(如A表的ID由大到小排):
ORDER BY A.ID DESC
           

優化 (使用别名)

select 
         empName,deptName
     from employee AS e
     inner join dept AS d
      on e.id=d.id;
           

需求:查詢每個部門的員工

預期結果:

軟體開發部 張三

總經辦 null

select

d.deptName,e.emoName

from dept d,employee e

where d.id=e.deptId;

查詢結果:總經辦 不顯示

是以 現在内連接配接不符合需求了!!!!!

那就使用左外連接配接 使用左邊表的資料去比對右邊表的資料,如果符合條件的就顯示,如果不符合條件就是用null!!!!

左 (外)連接配接:左邊的資料一定會完整顯示!

select

d.deptName,e.employee

from dept d

left outer join employee e

on d.id=e.deptId;

右外連接配接:右邊的資料一定會完整顯示!

select

d.deptName,e.employee

from employee e

right outer join dept d

on d.id=e.deptId;