联表查询
在数据库查询操作中,往往所需要的数据并不是一个表中就能完全查出来的,这就需要外卖操作两个或者多个表,那么如何实现几个表的数据同时查询获取呢?
JOIN ON
七种join理论
join 表名 on 条件判断
思路
1、分析需求,分析查询的字段来自哪些表(脸表查询)
2、确定用哪种查询方式(上图有7种)
3、确定交集
实际操作
测试数据库见之前的文章传送门
这数据库代码可能和我现在用的不太一样,毕竟我在此基础上操作了很多,但基本是可以使用的
比如我要查询学生学号、姓名、成绩
INNER JOIN
这个是用于查询两个存在交集数据库的语句
SELECT s.studentno,studentname,studentresult
FROM student AS s -- 因为studentno是student和result里面共有的
INNER JOIN result AS r -- 所以需要通过起别名的方式区分
WHERE s.studentno=r.studentno
查询结果就是这样的
LEFT JOIN 与 FRGHT JOIN
结合上面的inner join归纳一下吧
语法 | 描述 |
---|---|
inner join | 表中至少有一个匹配,就都返回 |
left join | 即使右表没匹配成功,也会从左表中返回所有的值 |
right join | 即使左表没匹配成功,也会从右表中返回所有的值 |
那么左右怎么区分呢
语句放中间,就有相对位置了
比如我在student表中插入一个学生
但结果表里并没有这个,结果表插入的是1008的成绩
执行语句
SELECT s.studentno,studentname,studentresult
FROM student AS s LEFT JOIN result AS r
ON s.studentno=r.studentno
则会以左边的表为准
此处出现了刘行
反之用right
SELECT s.studentno,studentname,studentresult
FROM student AS s RIGHT JOIN result AS r
ON s.studentno=r.studentno
出现了刚才录入的1008号学生的成绩
具体应用呢,比如要查询缺考的学生,那么就是上文的左查询,如果数据量较大的话,用where限定词筛选
SELECT s.studentno,studentname,studentresult
FROM student AS s LEFT JOIN result AS r
ON s.studentno=r.studentno
WHERE studentresult IS NULL
多表查询
比如我要查询学生,学号,考试科目,考试成绩呢
这就要用到表 student result subject
怎么结合呢?
SELECT s.studentno,studentname,studentresult,subjectname
FROM student AS s LEFT JOIN result AS r
ON s.studentno=r.studentno
INNER JOIN `subject` AS sub -- 在加入一张表
ON r.subjectno = sub.subjectno
结果如图