联表查询 join
操作 | 描述 |
inner join | 表中有一个匹配的就返回 |
left join | 从左表中返回所有的值,即使右表中没有匹配 |
right join | 从右表中返回所有的值,即使左表中没有匹配 |
/*
思路:
1. 分析需求,确定查询的列来源于哪两个类
2. 确定使用哪种链接查询
确定交叉点
判断的条件
*/
-- 查询参加了考试的同学信息(学号、学生姓名、科目编号、分数)
select*from student;
select*from result;
-- 内联查询
select s.studentno,studentname,subjectno,StudentResult
from student s
innerjoin result r
on r.studentno= s.studentno
-- 右连接
select s.studentno,studentname,subjectno,StudentResult
from student s
rightjoin result r
on r.studentno= s.studentno
-- 左连接 (查询所有同学,不考试的也会查出来)
select s.studentno,studentname,subjectno,StudentResult
from student s
leftjoin result r
on r.studentno= s.studentno
-- 等值连接
SELECT s.studentno,studentname,subjectno,StudentResult
FROM student s , result r
WHERE r.studentno= s.studentno
-- 查询参加了考试的同学信息(学号、学生姓名、科目名、分数)
select s.studentno,studentname,subjectname,StudentResult
from student s
innerjoin result r
on r.studentno= s.studentno
innerjoin`subject` sub
on sub.subjectno= r.subjectno
where 和 on 的区别
- where条件是在临时表生成后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。
- on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录,还会返回on条件为真的记录
- 总结:
- where在查询的临时表生成后,返回符合条件的结果
- on在临时表生成时返回对应连接方式的记录(只要满足连接要求即可)