JOIN对比

image.png
image.png
image.png

  1. -- ======================联表查询 join=============================
  2. -- 查询参加了考试的同学(学号,姓名,科目编号,分数)
  3. SELECT * FROM student
  4. SELECT * FROM result
  5. /*
  6. 思路
  7. 分析需求,分析查询的字段来自哪些表,(连接查询)
  8. 确定使用哪种连接查询:7种
  9. 确定交叉点(这两个表中哪个数据是相同的)
  10. 判断的条件:学生表中 studentNo = 成绩表 studentNo
  11. */
  12. SELECT s.studentNo,studentName,SubjectNo,StudentResult
  13. FROM `student` AS s
  14. INNER JOIN `result` AS r
  15. ON s.studentNo= r.studentNo
  16. -- RIGHT JOIN
  17. SELECT s.studentNo,studentName,SubjectNo,StudentResult
  18. FROM `student` s
  19. RIGHT JOIN `result` r
  20. ON s.StudentNo = r.StudentNo
  21. -- LEFT JOIN
  22. SELECT s.studentNo,studentName,SubjectNo,StudentResult
  23. FROM `student` s
  24. LEFT JOIN `result` r
  25. ON s.StudentNo = r.StudentNo
  26. -- 查询缺考的同学
  27. SELECT s.studentNo,studentName,SubjectNo,StudentResult
  28. FROM `student` s
  29. LEFT JOIN `result` r
  30. ON s.StudentNo = r.StudentNo
  31. WHERE StudentResult IS NULL
  32. -- 思考题(查询了参加考试的同学的信息:学号,学生姓名,科目名,分数)
  33. /*
  34. 思路
  35. 1.分析需求,分析查询的字段来自哪些表,student result subject (连接查询)
  36. 2.确定使用那种连接查询 7种
  37. 3.确定交叉点(这两个表那个数据是相同的)
  38. 判断的条件:学生表中 studentNo = 成绩表 studentNo
  39. */
  40. SELECT s.StudentNo,StudentName,sub.SubjectName,StudentResult
  41. FROM `student` s
  42. RIGHT JOIN `result` r
  43. ON r.StudentNo = s.StudentNo
  44. INNER JOIN `subject` sub
  45. ON r.SubjectNo = sub.SubjectNo
  46. -- 我要查询哪些数据 select.....
  47. -- 从几个表中查 FROM xxx Ioin 连接的表 on 交叉条件
  48. -- 假设存在一种多长表查询,慢慢来,先查询两张表后慢慢增加
  49. -- From a left jion b
操作 描述
Inner join 如果表中至少有一个匹配,就返回行
left join 会从左表中返回所有的值,即使右表中没有匹配
right join 会从右表中返回所有的值,即使左表中没有匹配