第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

JOIN 表連接

前面小節(jié)介紹了表的設(shè)計(jì)三范式和單表的查詢,本小節(jié)介紹如何將通過多個(gè)表進(jìn)行關(guān)聯(lián)查詢數(shù)據(jù),其中連表查詢包括 LEFT JOIN、INNER JOIN、RIGHT JOIN。前面小節(jié)介紹過表的設(shè)計(jì),其中有學(xué)生信息表 student、教師信息表 teacher、課程表 course、學(xué)生選課關(guān)聯(lián)表 student_course。

1. 插入表測(cè)試數(shù)據(jù)

為了演示方便,分別清空學(xué)生信息表 student、教師信息表 teacher、課程表 course、學(xué)生選課關(guān)聯(lián)表 student_course 數(shù)據(jù),并分別插入測(cè)試數(shù)據(jù)。

1.1 清空表數(shù)據(jù)

分別清空學(xué)生信息表 student、教師信息表 teacher、課程表 course、學(xué)生選課關(guān)聯(lián)表 student_course 數(shù)據(jù):

 TRUNCATE TABLE student;
 TRUNCATE TABLE teacher;
 TRUNCATE TABLE course;
 TRUNCATE TABLE student_course;

執(zhí)行結(jié)果如下圖:

圖片描述

1.2 向?qū)W生信息表 student 插入數(shù)據(jù)

 INSERT INTO student (name,age,id_number) VALUES
 ('趙小明',21,'420117199303036666'),
 ('王小紅',22,'420117199303037777'),
 ('張小虎',18,'420117199303038888'),
 ('李小平',19,'420117199303039999'),
 ('劉美麗',21,'420117199303035555'),
 ('周杰',22,'420117199303034444'),
 ('秦小賢',19,'420117199303033333'),
 ('馬笑',23,'420117199303032222'),
 ('艾倫',22,'420117199303031111'),
 ('包小天',20,'420117199303030000');

執(zhí)行結(jié)果如下圖:

圖片描述

Tips:如果上述添加表數(shù)據(jù)出現(xiàn)報(bào)錯(cuò),可能是因?yàn)橹靶薷谋碜侄蔚臅r(shí)候把表的字段長(zhǎng)度或者類型更改了,請(qǐng)檢查字段類型和長(zhǎng)度是否正確,還可以刪除所有表按照之前建表步驟重新建表。

1.3 向教師信息表 teacher 插入數(shù)據(jù)

INSERT INTO teacher (name,age,id_number,email) VALUES
('Tom',29,'420117202006040000''tom@qq.com'),
('Jack',30,'420117202006041111','jack@qq.com')('Mary',31,'420117202006042222','mary@qq.com')('Timo',35,'420117202006043333''timo@qq.com'),
('Faker'38,'420117202006044444','faker@qq.com'),
('Bob'35,'420117202006045555','bob@qq.com'),
('kelly',40,'420117202006046666''kelly@qq.com'),
('Rose'42,'420117202006047777','rose@qq.com'),
('Hale'55,'420117202006048888','hale@qq.com')('John',49,'420117202006049999''john@qq.com'),
('Amy',55,'42011720200604888X''amy@qq.com'),
('Judy'49,'42011720200604999X','judy@qq.com');

執(zhí)行結(jié)果如下圖:

圖片描述

1.4 向課程表 course 插入數(shù)據(jù)

因?yàn)楸? course 有 teacher_id 字段,所以插入數(shù)據(jù)之前,需要獲取 teacher 表數(shù)據(jù):

SELECT * FROM teacher;

執(zhí)行結(jié)果如下圖:

圖片描述

teacher 表 id 的值如上圖所示,對(duì)應(yīng) course 表 teacher_id,按照上面 id 可插入相關(guān)課程信息:

INSERT INTO course (course_name,teacher_id) VALUES
('高等數(shù)學(xué)',1),
('英語(yǔ)',2),
('政治',3),
('信息論',4),
('數(shù)據(jù)結(jié)構(gòu)和算法',5),
('體育',6),
('模擬電路',7),
('數(shù)字電路',8),
('通信原理',9),
('信號(hào)系統(tǒng)',10),
('概率論',13),
('光學(xué)原理',14);

執(zhí)行結(jié)果如下圖:

圖片描述

1.5 向?qū)W生選課關(guān)聯(lián)表 student_course 插入數(shù)據(jù)

INSERT INTO student_course (student_id,course_id) VALUES
(1,1),
(1,2),
(2,3),
(2,4),
(3,5),
(3,6),
(4,7),
(4,8),
(5,9),
(5,10),
(6,1),
(6,2),
(7,3),
(7,4);

執(zhí)行結(jié)果如下圖:

圖片描述

2.LEFT JOIN 左連接

以課程表 course 和 teacher 左連接為例:

SELECT c.id AS course_id,c.*,t.* FROM course c LEFT JOIN teacher t ON c.teacher_id=t.id; 

執(zhí)行結(jié)果如下圖:

圖片描述

Tips:這對(duì)上述 sql 語(yǔ)句說明如下:

  • c.id AS course_id 表示將 course表 中 id 字段重命名為 course_id 展示,其目的是為了防止和 teacher表id 字段混淆;
  • c.* 表示 course 表所有字段數(shù)據(jù);
  • t.* 表示 teacher 表字段所有數(shù)據(jù);
  • ON 后面跟著的條件是連接表的條件;
  • course c 表示將 course 簡(jiǎn)寫為 c, teacher t 表示將 teacher 簡(jiǎn)寫為 t
  • LEFT JOIN 為左連接,是以左邊的表為’基準(zhǔn)’,若右表沒有對(duì)應(yīng)的值,用 NULL 來填補(bǔ)。

3.INNER JOIN 內(nèi)連接

同樣以表 courseteacher 內(nèi)連接為例:

SELECT c.id AS course_id,c.*,t.* FROM course c INNER JOIN teacher t ON c.teacher_id=t.id;

執(zhí)行結(jié)果如下圖:

圖片描述

TipsINNER JOIN 為內(nèi)連接,展示的是左右兩表都有對(duì)應(yīng)的數(shù)據(jù)。

4.RIGHT JOIN 右連接

同樣以表 courseteacher 右連接為例:

SELECT c.id AS course_id,c.*,t.* FROM course c RIGHT JOIN teacher t ON c.teacher_id=t.id;

執(zhí)行結(jié)果如下圖:

圖片描述

TipsRIGHT JOIN 為右連接,是以右邊的表為’基準(zhǔn)’,若左表沒有對(duì)應(yīng)的值,用 NULL 來填補(bǔ)。

5. 多表混合連接

以本小節(jié)所有數(shù)據(jù)全部連接查詢?yōu)槔?/p>

SELECT * FROM 
student a 
LEFT JOIN 
student_course b 
ON a.id=b.student_id 
RIGHT JOIN 
course c 
ON b.course_id=c.id 
INNER JOIN teacher d 
ON c.teacher_id=d.id;

執(zhí)行結(jié)果如下圖:

圖片描述

Tips:多表混合連接查詢時(shí),后面可以把前面執(zhí)行的結(jié)果集整體當(dāng)成一個(gè)表,例如 SELECT * FROM student a LEFT JOIN student_course b ON a.id=b.student_id RIGHT JOIN course c ON b.course_id=c.id 可以理解為 studentstudent_course 左連接查詢之后的結(jié)果集再對(duì) course 右連接查詢。

6. 小結(jié)

本小節(jié)介紹了如何使用 LEFT JOIN、INNER JOINRIGHT JOIN 對(duì)表數(shù)據(jù)進(jìn)行連接查詢,需要注意的是,ON 后面的表示對(duì)連表?xiàng)l件,并且還能對(duì)表連接查詢的結(jié)果集用 WHERE 進(jìn)行篩選,例如:

SELECT * FROM 
student a 
LEFT JOIN 
student_course b 
ON a.id=b.student_id 
RIGHT JOIN 
course c 
ON b.course_id=c.id 
INNER JOIN teacher d 
ON c.teacher_id=d.id
WHERE a.age > 18 AND d.age < 55;

以上 sql 語(yǔ)句后面使用了 WHERE 條件篩選,表示學(xué)生年齡大于 18,教師年齡小于 55。