SQL之連接查詢
一、連接查詢的分類
sql中將連接查詢分成四類:
- 內鏈接
- 外連接
- 左外連接
- 右外連接
- 自然連接
- 交叉連接
二、連接查詢的分類
數據庫表如下:
1.學生表

2.老師表

3.班級表

表用於連接查詢教學,不要糾結表的設計~
三、連接查詢之內連接
概念
內鏈接[inner]join,從左表中取出每一條記錄,去右表中與所有記錄進行匹配;
是某個條件在左表中與右表中相同最終才會有保留結果,否則不保留。
基本語法
左表[inner] join 右表 on 左表.字段=右表.字段;on表示連接條件;條件字段就是代表相同的業務含義
例子
查詢sql語句如下:
SELECT
student.s_name,
student.c_id,
class.id,
class.c_name
FROM
student
INNER JOIN class ON student.c_id = class.id;
查詢結果:

分析:從查詢結果不難看出,student的c_id和class的id是連接條件,以左表student為主表,以student表中每一條記錄的c_id作為右表class的id主鍵的查詢條件去匹配相關的信息。
擴展:內連接還可以使用where 代替on關鍵字,或者如下寫法代替:
SELECT
student.s_name,
student.c_id,
class.id,
class.c_name
FROM
student,
class
where student.c_id = class.id;
四、連接查詢之外連接
概念
外連接:outer join,以某張表為主,取出里面所有的記錄,每條與另外一張表進行連接,不管能不能匹配上條件,最終都會保留;能匹配正確保留,不能匹配,其他標的字段都是空null
外連接分為兩種;是以某張表為主表;
left join:左連接,已左表為主表;
right join:右鏈接 ,以左表為主表。
基本語法
左表left/right join 右表 on 左表.字段=右表.字段
例子
(1)左連接
sql語句:
SELECT
student.s_name,
student.c_id,
class.id,
class.c_name
FROM
student
left JOIN class ON student.c_id = class.id;
查詢結果:

分析:左連接,以左表student為主表,每條與另外一張表進行連接,多余同學的c_id在class匹配不上,並沒有這個班級,但是依舊保留下來,其他字段顯示NULL。
(2)右連接
sql語句:
SELECT
student.s_name,
student.c_id,
class.id,
class.c_name
FROM
student
right JOIN class ON student.c_id = class.id;
查詢結果:

這里我就不再分析啦~都很好理解,不懂的看看上面的左連接自己推導一下~
五、連接查詢之自然連接
概念
自然連接;natural join,自然連接,就是自動匹配連接條件;系統以字段名字作為匹配模式(同名字段就作為條件,多個同名字段都作為條件)
ps: 自然連接很沒有用!!!實際開發中並不會用到所以了解就好了!!!
內鏈接和外連接都可以模擬自然連接;
使用同名字段,合並字段
左表 left/right/inner join 左表 using(字段名);
六、連接查詢之交叉連接
概念
交叉連接; cross join,從一張表中循環取出每一條記錄,每條記錄都去另外一張表進行匹配,匹配一定保留(沒有條件匹配),而連接本身字段就會增加(保留),最終形成的結果叫做笛卡爾積。
基本語法
左表 cross join右表;也可以攜程 from 左表,右表。
例子
sql語句:
SELECT
*
FROM
student,
class ;
查詢結果:

分析:簡單來說就是,左表中的每一條記錄都與由表中的每一條記錄匹配一遍。
ps: 交叉連接沒什么用,只是保證連接這種結構的完整性!!!
筆記就到這了,但是上面說到的都是兩個表的連接查詢,那么,是否可以多個表進行連接查詢呢?當然是可以的。
多表連接查詢
sql語句如下:
SELECT
student.s_name,
student.c_id,
class.id,
class.c_name,
class.t_id,
teacher.id as tid,
teacher.t_name
FROM
student
left JOIN class ON student.c_id = class.id
left JOIN teacher ON class.t_id = teacher.id;
查詢結果:

分析:多表連接查詢,其實就是兩個表連接查詢組成一個新的表,這個新的表再與第三個表進行連接查詢,以此類推,不懂的,思考一下?
