mysql中的多表查詢基礎
1:多表查詢:
員工表(employee):(deptid:部門號)
id | name | deptid |
1 | 張三 | 4 |
2 | 李四 | 5 |
3 | 王五 | 4 |
4 | 陳六 | 5 |
id | name |
4 | 軟體開發部 |
5 | 軟體維護部 |
6 | 祕書部 |
需求:員工及其部門
select e.name, d.name from employee e,dept d //這樣查出的是錯誤的,這樣會產生笛卡爾乘積每一個e.name 將對應d.name 中的3個,共有12條;
多表查詢的步驟:
1)確定我們要查詢相關的那些表
2)確定要查詢那些欄位
3)確定查詢的連結條件
需求:員工及其部門
1:內連結查詢:
select e.name,d.name from employee e, deptid d
where e.deptid=d.id;
2:它的另一種語法:內連結查詢:(inner join on )
select e.name,d.name
from employee e
inner join dept d
on e.deptid=d.id;
內連結的效果:當只有滿足連結條件的資料它才會顯示出來;
3:外連結:
需求:查詢部門及其部門的員工:(部門全部都要顯示)
預期效果:
軟體開發部 | 張三 |
軟體開發部 | 王五 |
軟體維護部 | 李四 |
軟體維護部 | 陳六 |
祕書部 | null |
1:下面是按照內連結的做法來查:
select d.name, e.name
from dept d, employee e
where d.id=e.deptid;(sql語句的效果圖如下:)
軟體開發部 | 張三 |
軟體開發部 | 王五 |
軟體維護部 | 李四 |
軟體維護部 | 陳六 |
但我們要左表的資料都要顯示(左外連結效果)
select d.name,e.name
from dept d
left outer join employee e
on d.id=e.deptid; // 這才是正確的sql
2)右外連結:
select e.name, d.name
from employee e
right outer join dept d
on e.deptid=d.id;
3)還有一種自連線,它的思想是我們去虛構一張表:
員工表(employee):
id | name | bossid |
1 | 張三 | null |
2 | 李四 | 1 |
需求:查出沒個員工及他們的上司
select e.name,b.name
from employee e
inner join employee b
on e.bossid=b.id(效果圖)
李四 | 張三 |
select e.name, b.name
from employee e
left outer join employee b
on e.bossid =b.id