需求:查詢員工及其所在部門(顯示員工姓名,部門名稱)
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;