首頁 > 軟體

MySql多表連結查詢詳細教學

2022-10-22 14:01:08

1.什麼是連線查詢:

在實際開發中大部分都不是從一張表中查詢資料,一般都是多張表聯合查詢取得結果。

實際開發中,一般一個業務對應多張表。比如:學生和班級,起碼兩張。(因為一張表可能會出現冗餘的情況,即資料大量重複!)

2. 連線查詢的分類:

1)根據出現年代來劃分,包括:

sql92(一些老的DBA還在使用的語法,已經被淘汰)

sql99(比較新的語法)

2)根據表的連線方式劃分,包括:

內連線: 等值連線

​ 非等值連線

​ 自連結

外連線: 左外連線(左連線)

​ 右外連線(右連線)

*全連線(很少用,瞭解)

3.笛卡爾積現象:

在表的連線查詢方面的一種現象:當兩張表進行查詢的的時候,沒有任何條件限制,最終的查詢結果條數是兩張表的乘積。

SELECT e.ename,d.dname FROM emp e , dept d  ;   #會出現笛卡兒積現象(56條資料)(已經被淘汰的方式sql92寫法)

關於表別名,使用表別名有什麼好處嗎?

執行效率高
可讀性好

4.避免笛卡爾積現象

答:當然是加條件了。

SELECT e.ename,d.dname FROM emp e , dept d WHERE e.deptno = d.deptno ;

思考:避免了笛卡爾積會減少記錄的匹配次數嗎?

不會,還是匹配一樣的次數,但是隻顯示有效條數。(並不能提高效率)

5.內連線

1)等值連線

語法:(inner)join …on…

inner可省略,帶著只為可讀性好一些。兩張表內連線的意思 (常用)

SELECT e.ename,d.dname FROM emp e INNER(可以省略) JOIN  dept d  ON e.deptno = d.deptno WHERE 過濾條件; 

sql99語法:使得表的連線條件和後來的過濾條件分離了!

2)非等值連線

SELECT e.ename,e.sal,s.grade FROM emp e JOIN salgrade s ON e.sal BETWEEN s.losal AND s.hisal

sql99語法:表連線條件並不是一個確切的值!

3)自連線

最大特點:一張表看作兩張表,自己連自己

SELECT a.ename,b.mgr admin FROM emp a JOIN emp b WHERE a.mgr = b.empno ; 

6.外連線

語法格式:left|right(outer)join … on …

outer可省略,帶著只為可讀性好一些。兩張表外連線的意思

左外連線(左連線):表示左邊是主表。

右外連線(右連線):表示右邊是主表。

左連線有右連線的寫法,同樣右連線也有左連線的寫法 :

 

 案例:查詢沒有員工的部門

SELECT d.* FROM dept d LEFT JOIN emp e ON e.`DEPTNO` = d.`DEPTNO` WHERE  e.`EMPNO` IS NULL 

7.內連線和外連線的區別:

內連線:假設有AB兩張表,使用內連線,凡是A表B表能夠匹配上的記錄查詢出來,這就是內連線,AB兩張表並沒有主次之分,兩張表是平等的。
外連線:假設AB兩張表,使用外連線,AB兩張表中的一張是主表,一張是副表,主要查詢主表中的資料,捎帶查詢副表,當副表中的資料並沒和主表中的資料匹配上,副表自動模擬出NULL與之相匹配(主表資料無條件查詢)

8.三個表連線查詢

案例一:查詢每個員工的部門名稱和薪資等級

SELECT e.ename,d.`DNAME`,s.grade FROM emp e 
JOIN dept d ON e.`DEPTNO` = d.`DEPTNO` 
JOIN salgrade s ON e.`SAL` BETWEEN s.losal AND s.hisal

案例二:查詢每個員工的部門名稱、薪資等級、上級領導

SELECT e.`ENAME` '員工' ,d.`DNAME` '部門' , s.grade '薪資等級' , e2.ename '領導' 
FROM emp e 
JOIN dept d ON e.`DEPTNO` = d.`DEPTNO` 
JOIN salgrade s ON e.`SAL` BETWEEN s.losal AND hisal 
LEFT JOIN emp e2 ON e.`MGR` = e2.empno

到此這篇關於MySql多表連結查詢詳細教學的文章就介紹到這了,更多相關MySql多表連結查詢內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com