JOIN对比



-- ======================联表查询 join=============================-- 查询参加了考试的同学(学号,姓名,科目编号,分数)SELECT * FROM studentSELECT * FROM result/* 思路 分析需求,分析查询的字段来自哪些表,(连接查询) 确定使用哪种连接查询:7种 确定交叉点(这两个表中哪个数据是相同的) 判断的条件:学生表中 studentNo = 成绩表 studentNo*/SELECT s.studentNo,studentName,SubjectNo,StudentResultFROM `student` AS sINNER JOIN `result` AS rON s.studentNo= r.studentNo-- RIGHT JOINSELECT s.studentNo,studentName,SubjectNo,StudentResultFROM `student` sRIGHT JOIN `result` rON s.StudentNo = r.StudentNo-- LEFT JOINSELECT s.studentNo,studentName,SubjectNo,StudentResultFROM `student` sLEFT JOIN `result` rON s.StudentNo = r.StudentNo-- 查询缺考的同学SELECT s.studentNo,studentName,SubjectNo,StudentResultFROM `student` sLEFT JOIN `result` rON s.StudentNo = r.StudentNoWHERE StudentResult IS NULL-- 思考题(查询了参加考试的同学的信息:学号,学生姓名,科目名,分数)/* 思路 1.分析需求,分析查询的字段来自哪些表,student result subject (连接查询) 2.确定使用那种连接查询 7种 3.确定交叉点(这两个表那个数据是相同的) 判断的条件:学生表中 studentNo = 成绩表 studentNo*/SELECT s.StudentNo,StudentName,sub.SubjectName,StudentResultFROM `student` sRIGHT JOIN `result` r ON r.StudentNo = s.StudentNoINNER JOIN `subject` subON r.SubjectNo = sub.SubjectNo -- 我要查询哪些数据 select.....-- 从几个表中查 FROM 表 xxx Ioin 连接的表 on 交叉条件-- 假设存在一种多长表查询,慢慢来,先查询两张表后慢慢增加-- From a left jion b
| 操作 |
描述 |
| Inner join |
如果表中至少有一个匹配,就返回行 |
| left join |
会从左表中返回所有的值,即使右表中没有匹配 |
| right join |
会从右表中返回所有的值,即使左表中没有匹配 |