1. 程式人生 > >mysql中的多表查詢基礎

mysql中的多表查詢基礎

1:多表查詢:

員工表(employee):(deptid:部門號)

id name deptid
1 張三 4
2 李四 5
3 王五 4
4 陳六 5
部門表(dept):
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
這張表有員工2人,和他們的上司id,比如李四的上司就是員工為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