2018-10-26多表关联&嵌套
一、多表关联
两表关联必须得有一个关联字段
-
14245353-d2b14f4a1941f56b.png
下图中的 cst_id 为 us 和 cu 里面的共同关联字段
关联方法
- where
- 第一步 拿两表数据做笛卡尔乘积
-
第二步 根据where条件进行筛选
14245353-ce69b5417f6685e2.png
- join
- 原理
- 第一步 先用on条件进行数据筛选
-
第二步 满足条件的显示,不满足条件的丢弃
14245353-b94521c5accf8bf4.png
- 内连接
-
只显示满足条件的数据 用 join 或者 inner join 进行连接
14245353-67a3b5c0a639bb66.png
- 格式
select * from 表1 join 表2 on 连接条件
3. 左连接 left join
左表为主表,左表中所有数据都显示,右表中只显示满足条件的数据,如若右表没有数据,则用null表示。
14245353-d4fd1c7af619c1a0.png
格式
- select * from 表1 left join 表2 on 连接条件
-
右连接 right join
右表为主表,右表中所有数据都显示,左表中只显示满足条件的数据,如若左表没有数据,则用null表示
14245353-aaba22bfb2d58c33.png
14245353-447976955158ec07.png
格式
- select * from 表1 right join 表2 on 连接条件
二、嵌套
14245353-4d0112e8ff2d73ab.png21、查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。
SELECT * FROM scores
WHERE degree>(SELECT MAX(degree) FROM scores
WHERE sno='109')AND cno='3-105';
22、查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。
SELECT sbirthday FROM students
WHERE sno='108';
SELECT sno,sname,sbirthday FROM students
WHERE sbirthday =(SELECT sbirthday FROM students
WHERE sno='108');
23、查询“张旭“教师任课的学生成绩。
SELECT tno FROM teachers
WHERE tname ='张旭'; -- 根据姓名查找tno
SELECT cno FROM courses
WHERE tno=(SELECT tno FROM teachers
WHERE tname ='张旭'); -- 根据上一步的 tno 查找 cno
SELECT degree FROM scores
WHERE cno = (SELECT cno FROM courses
WHERE tno=(SELECT tno FROM teachers
WHERE tname ='张旭')); -- 根据上一步的cno展示degree