連接查詢(交叉連接,內連接,外連接,自然連接)

創建一個學生表和一個課程表。先放出實驗的表結構:

create table student(
id int,
name varchar(15),
gender varchar(15),
cid int
);
create table class(
cid int,
cname varchar(15)
);

插入數據:

insert into student values(1,"lilei","male",1),(2,"hanmeimei","male",2),(3,"jack","male",1),(4,"alice","female",4),(5,"lili","female",NULL); 
--這裏特意創建了一個class中沒有的4,以及一條cid爲NULL值的記錄。

insert into class values(1,"linux"),(2,"python"),(3,"java"),(5,"html5");
--這裏特意創建了一個student中沒有的5

查看數據:

1.交叉連接 cross join

不需要連接條件的連接。

交叉連接產生的結果就是笛卡兒積,左表的每一條記錄都會與右表的所有記錄連接並保留。

產生記錄數 = A表記錄數 × B表記錄數

例如:

           select * from student cross join class;
或者:      select * from student,class;

產生20條記錄。(截圖不完整

總結:交叉連接沒有實際數據價值,應儘量避免。

2.內連接 [inner] join

將兩張表根據指定的條件連接起來,嚴格連接

內連接是將一張表中的每一條記錄去另外一張表中根據條件匹配:匹配成功,保留連接數據;匹配失敗,都不保留。

語法:左表 join 右表 on 連接條件

(不用on條件的時間,結果與交叉連接相同。)

例如:

SELECT * FROM student JOIN class ON student.cid = class.cid;

3.外連接 outer join

是一種不嚴格的連接方式

分爲兩種:左外連接(左連接)left join,右外連接(右連接)right join

外連接有主表和從表之分。左外連接左表爲主表;右外連接右表爲主表。  

外連接是將主表的記錄去匹配從表的記錄:匹配成功,記錄保留;匹配失敗,也保留,只是從表字段置空。

例如:

select * from student left join class on student.cid = class.cid;
select * from student right join class on student.cid = class.cid;

總結:外連接與內連接區別在於數據匹配失敗的時候,外連接會保留一條記錄(主表數據保留,從表數據置空)

4.自然連接 natural join

是一種自動尋找連接條件的連接查詢。

  • 自然內連接:類似內連接,但不提供連接條件。
  • 自然外連接:類似外連接,但不提供連接條件。

例如:

select * from student natural join class;

select * from student natural left join class;

總結:自然連接根據相同的列名來匹配連接條件,並且會將兩個表中列名相同的列合併爲一個列。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章