MySQL——联表查询JoinON详解

Join 对比(7种)


代码演示:

sql 复制代码
-- 查询参加了考试的同学(学号,姓名,科目编号,分数)
SELECT * FROM student
SELECT * FROM result

/*
1. 分析需求:分析查询的字段来自哪些表(超过一张表就要使用连接查询)
2. 确定使用哪种连接查询  共7种
3. 确定交叉点(这两个表中哪个数据是相同的)
4. 判断的条件:学生表中的 studentno = 成绩表 studentno
*/

SELECT s.studentno,studentname,subjectno,studentresult
FROM student AS s
INNER JOIN result AS r
WHERE s.studentno = r.studentno


-- LEFT JOIN
SELECT s.studentno,studentname,subjectno,studentresult
FROM student s
LEFT JOIN result r
ON s.studentno = r.studentno


-- RIGHT JOIN
SELECT s.studentno,studentname,subjectno,studentresult
FROM student s
RIGHT JOIN result r
ON s.studentno = r.studentno

|------------|------------------------|
| 操作 | 描述 |
| Inner join | 如果表中至少有一个匹配,就返回行 |
| left join | 即使右表中没有匹配,也会从左表中返回所有的值 |
| right join | 即使左表中没有匹配,也会从右表中返回所有的值 |

sql 复制代码
-- 查询缺考的同学
SELECT s.studentno,studentname,subjectno,studentresult
FROM student s
LEFT JOIN result r
ON s.studentno = r.studentno
WHERE studentresult IS NULL
sql 复制代码
-- 思考题:查询参加考试的同学信息(学号,学生姓名,科目名,分数)
SELECT s.studentno,studentname,`subjectname`,studentresult
FROM student s
RIGHT JOIN result r
ON r.studentno = s.studentno
INNER JOIN `subject` sub
ON r.subjectno = sub.subjectno

-- 若要在多张表查询,可以慢慢来,先查询两张表然后再增加
相关推荐
心思这就是4 分钟前
sql注入
数据库·sql
福赖10 分钟前
《微服务即使通讯中redis的作用》
数据库·redis·缓存
自己的九又四分之三站台17 分钟前
向量数据库PGVector实操
数据库
sa1002718 分钟前
walmart沃尔玛关键词商品搜索实现逻辑
数据库·python
handsome123431 分钟前
Navicat 查数据 乱码 解决 的经历
数据库·mysql·oracle
AllData公司负责人36 分钟前
【亲测好用】数仓建模平台能力演示
大数据·数据库·算法
上海合宙LuatOS1 小时前
LuatOS框架的使用(2)
java·服务器·开发语言·前端·数据库·嵌入式硬件·php
一起养小猫1 小时前
Flutter for OpenHarmony 实战 文件存储与数据库操作完全指南
开发语言·jvm·数据库·spring·flutter·harmonyos
2301_765703141 小时前
深入理解Python的if __name__ == ‘__main__‘
jvm·数据库·python
tellmewhoisi1 小时前
面试题mysql 2000万数据怎么建表
mysql