- 需求:查詢員工及其所在部門(顯示員工姓名,部門名稱)
-- 多表查詢規(guī)則:1)確定查詢哪些表? 2)確定哪些哪些字段? 3)表與表之間連接條件 (規(guī)律:連接條件數(shù)量是表數(shù)量-1)
2.2 內(nèi)連接查詢:只有滿足條件的結(jié)果才會(huì)顯示(使用最頻繁)
SELECT empName,deptName? ? ? -- 2)確定哪些哪些字段
FROM employee,dept? ? -- 1)確定查詢哪些表
WHERE employee.deptId=dept.id? -- 3)表與表之間連接條件
-- 內(nèi)連接的另一種語(yǔ)法
SELECT empName,deptName
FROM employee
INNER JOIN dept(innder join 內(nèi)連接)
ON employee.deptId=dept.id;(on 連接條件)
-- 使用別名(別名as可以省略)
SELECT e.empName,d.deptName
FROM employee as e
INNER JOIN dept as d
ON e.deptId=d.id;
注意:內(nèi)連接出來的結(jié)果是:只有滿足條件才會(huì)顯示。那不滿足條件的怎么辦呢?比如下面?
-- 需求: 查詢每個(gè)部門的員工(以部門為主)
-- 預(yù)期結(jié)果:
--? 軟件開發(fā)部? 張三
--? 軟件開發(fā)部? 李四
--? 應(yīng)用維護(hù)部? 王五
--? 秘書部? ? ? 陳六
--? 總經(jīng)辦? ? ? null
-- 2.2 左[外]連接查詢: 使用左邊表的數(shù)據(jù)去匹配右邊表的數(shù)據(jù),如果符合連接條件的結(jié)果則顯示,如果不符合連接條件則顯示null
-- (注意: 左外連接:左表的數(shù)據(jù)一定會(huì)完成顯示!)(left outer join outer可以省略)
SELECT d.deptName,e.empName
FROM dept d ? ? ? ? ? ?先寫左表,因?yàn)橛貌块T去匹配,去連接哪個(gè)表,去連接員工表
LEFT OUTER JOIN employee e
ON d.id=e.deptId; ? ? ? ? on 連接條件
2.3 右[外]連接查詢: 使用右邊表的數(shù)據(jù)去匹配左邊表的數(shù)據(jù),如果符合連接條件的結(jié)果則顯示,如果不符合連接條件則顯示null
-- (注意: 右外連接:右表的數(shù)據(jù)一定會(huì)完成顯示!)
SELECT d.deptName,e.empName
FROM employee e
RIGHT OUTER JOIN dept d
ON d.id=e.deptId;
2.4 自連接查詢(一張表)
- 需求:查詢員工及其上司
-- 預(yù)期結(jié)果:
-- 張三? ? null
-- 李四? ? 張三
-- 王五? ? 李四
-- 陳六? ? 王五
SELECT e.empName,b.empName
from employee e
left outer join employee b
on e.bossid=b.id