多表聯查(多表連線)(join)

2021-08-16 19:35:14 字數 3092 閱讀 9030

多表聯查

(多表連線)(join)

1、 分類

內連線、自然連線、外鏈結(左外連線、右外連線、全外連線(mysql不支援))

2、 內連線 inner join(等值連線,制定對應的等值條件)

select * from emp,dept;/*得到的資料是不對的

*/得到的資料叫做笛卡爾積:結果是兩個表資料的乘積

使用內連線去查

select * from emp inner join dept;

結果依然是笛卡爾積,是因為我們沒有制定對應的等值條件

select * from emp e inner join dept d where e.deptno = d.deptno;

/*emp.deptno和

dept.deptno

這樣的寫法叫做:完全限定名

兩個表中有相同的字段,類似於a村有個老張家,孩子叫張三

b村也有乙個老張家,孩子也叫張三,

如果沒有用到多表聯查,就沒有必要使用完全限定名,類似於

a村老張家的爸爸說,張三,吃飯了,指的是自己的孩子

用到了奪標聯查,兩家在一起,a村的老張家的爸爸說:張三,吃飯了

這個張三指的是誰?(不一定)

標準寫法:select * from 表

1 別名

1 inner join 表2

別名2 where

別名1.*** =

別名2.***;

select * from emp e inner join dept d where e.deptno = d.deptno;

方言寫法:select * from 表

1 別名1,表

2別名2 where

別名1.*** =

別名2.***;

select * from emp e,dept d where e.deptno = d.deptno;

3、 自然連線 natural(不需要指定等值條件)

select * from 表

1 別名

1 natural join 表2

別名2;4、 外鏈結(難點)

左外:select * from 表

1 別名

1 left [ outer ] join 表2

別名2 on

等值條件;

select * from emp e left outer join dept d on e.deptno = d.deptno;

左外的意思是:左表的記錄無論是否滿足條件,都會被查出來,而右表的記錄只有滿足條件的,才會被查出來。(左表中資料在右表中如果不存在,則右表的字段值為null)

理解左外右外:

先看兩個表資料:

/*左外

左外連線是以左邊的表為基準。通俗的講,先把左表的資料全都顯示出來,然後右邊的表id與左邊表的

id的值是一樣的,就拼接上去,比如說上面的

id=1

的資料,就拼接了。

如果沒有匹配的,比如說id=2的資料,右邊沒有,用

null

拼接。/*右外

右外跟左外的機制剛好相反。

如何去判斷主副表?(左外連線:左邊的是主表,右外連線:右邊的是主表)

跟講過的內連線做個簡單的比較

注意:使用多表聯查,不一定要有外來鍵。

例題:/*查詢所有工作為文員的員工姓名及部門名稱

*/select e.ename,e.job,d.dname

from emp e left join dept d on e.deptno = d.deptno

where e.job = '文員

例題:/*查詢至少有乙個員工的部門資訊

結果很顯然不對,因為40部門沒人。

分析:因為我把dept作為主表,而主表的資料都顯示,所以不合適,更改如下:

如下寫法也可以

其實可以不用外鏈結,也可以查詢

子查詢

子查詢:查詢中還有查詢(數select的個數)

1、 出現的位置

a from前:作為字段存在的

b where後:作為條件存在的

/*查詢出工資高於在

30部門工作的所有員工的工資的員工資訊

*/c from後:表(極為罕見)

mysql 多表聯查 MySQL的多表聯查

今天是周二,我們一起來研究下mysql的多表聯查啊。或許你也知道,表之間的關係有 1對1 1對多 多對多。然後.1.巢狀查詢 乙個查詢的結果是另外sql查詢的條件 如 查詢stu表中年齡最大的是誰?mysql select from stu where age select max age from...

jpi多表聯查 多表查詢

select查詢不但可以從一張表查詢資料,還可以從多張表同時查詢資料。查詢多張表的語法是 select from 例如,同時從students表和classes表的 乘積 即查詢資料,可以這麼寫 from students,classes select from students,classes 這...

mysql多表聯查 mysql 多表聯查 例項

多表查詢 笛卡爾積查詢 笛卡爾積查詢 就是兩張表相乘,若左邊表有m條資訊,右邊表有n條資訊,那麼查詢顯示的資訊總共為m n條,這其中往往包含大量錯誤資料,需要用where 條件來過濾無用資訊 笛卡爾積查詢語句 select from dept,emp id name id name dept id ...