天天看點

DQL語言(Data Query Language)——(6)連接配接查詢連接配接查詢連接配接類型關鍵字:連接配接查詢的特點示範提出問題

連接配接查詢

按功能分類:内連接配接(等值連接配接,非等值連接配接,自連接配接),外連接配接(左外連接配接,右外連結,全外連接配接),交叉連接配接

按年代分類:sql92标準(僅支援内連接配接),sql99标準(都支援,除了全外連接配接)

現在我們介紹sql99标準

文法:select 查詢清單

​ from 表1 别名 連接配接類型

​ join 表2 别名

​ on 連接配接條件

​ 【where 篩選條件】

​ 【group by 分組】

​ 【having 篩選條件】

​ 【order by 排序清單】

注意:【】中的代表可以省略

連接配接類型關鍵字:

内連接配接 【inner】 ,

外連接配接【left(左外),right(右外),full(全外)】,

交叉連接配接【cross】概念:沒有 WHERE 子句的交叉聯接将産生連接配接所涉及的表的笛卡爾積。第一個表的行數乘以第二個表的行數等于笛卡爾積結果集的大小。

連接配接查詢的特點

特點: 1:外連接配接的查詢結果為主表中的所有記錄,如果從表中有和它比對的,則顯示比對值,如果沒有則顯示null值。

2:外連接配接查詢結果=内連接配接結果+主表中有而從表中沒有的記錄

3:左外連接配接,left,join左邊的是主表

4:右外連接配接,right,join右邊的是主表

5:左外連接配接和右外連接配接交換兩表順序,可以實作同樣效果

6:inner join 是比較運算符,隻傳回符合條件的行。

示範

1;示範左外連接配接和右外連接配接及内連接配接

在Navicat中建立兩個表

表名:student

DQL語言(Data Query Language)——(6)連接配接查詢連接配接查詢連接配接類型關鍵字:連接配接查詢的特點示範提出問題

表名:course

DQL語言(Data Query Language)——(6)連接配接查詢連接配接查詢連接配接類型關鍵字:連接配接查詢的特點示範提出問題

在Navicat中點選New QUERY

輸入: SELECT * FROM student RIGHT JOIN course ON course.id=student.id;

結果:

DQL語言(Data Query Language)——(6)連接配接查詢連接配接查詢連接配接類型關鍵字:連接配接查詢的特點示範提出問題

輸入: SELECT * FROM student LEFT JOIN course ON course.id=student.id;

結果:

DQL語言(Data Query Language)——(6)連接配接查詢連接配接查詢連接配接類型關鍵字:連接配接查詢的特點示範提出問題

輸入:SELECT * FROM student INNER JOIN course ON course.id=student.id;

結果:

DQL語言(Data Query Language)——(6)連接配接查詢連接配接查詢連接配接類型關鍵字:連接配接查詢的特點示範提出問題

以上三個結果滿足連接配接查詢特點的1,2,3,4,6

示範交叉連接配接

依然用到上面的兩個表student ,course

輸入: SELECT * FROM student CROSS JOIN course;

結果:

DQL語言(Data Query Language)——(6)連接配接查詢連接配接查詢連接配接類型關鍵字:連接配接查詢的特點示範提出問題

如果我們在此時給這條SQL加上WHERE子句的時候

比如 SELECT * FROM student CROSS JOIN course WHER course.id=student.id;

此時将傳回符合條件的結果集,結果和inner join所示執行結果一樣。

輸入: SELECT * FROM student CROSS JOIN course WHER course.id=student.id;

結果:

DQL語言(Data Query Language)——(6)連接配接查詢連接配接查詢連接配接類型關鍵字:連接配接查詢的特點示範提出問題

提出問題

上面兩表為一對一關系,那麼如果表A和表B為一對多、多對一或多對多的時候,我們又該如何寫連接配接SQL語句呢?

解決方法:

當兩表為多對多關系的時候,我們需要建立一個中間表student_course,中間表至少要有兩表的主鍵,當然還可以有别的内容。

如下示範

在前面兩表student,course的基礎上

在建立一個student_course表

DQL語言(Data Query Language)——(6)連接配接查詢連接配接查詢連接配接類型關鍵字:連接配接查詢的特點示範提出問題

輸入:SELECT s.name,c.game FROM student_course sc RIGHT JOIN student s ON sc.sid=s.id RIGHT JOIN course c ON sc.cid=c.id;

結果:

DQL語言(Data Query Language)——(6)連接配接查詢連接配接查詢連接配接類型關鍵字:連接配接查詢的特點示範提出問題

繼續閱讀