MySQL数据操作与查询- 连接查询


一、引入

1、为什么需要使用连接查询?
查询信息的来源如果来自多张表,则必须对这些表进行连接查询。
2、连接查询的分类
内连接和外连接。


二、内连接
1、概述
将两张表的记录组合在一起,产生一个新的结果。
(1)具体实现:将表1的每一行和表2的每一行进行比较,找出满足条件的组合。
(2)分类:交叉连接(笛卡尔积)、 相等连接 、自然连接。
2、交叉连接(笛卡尔积)
返回两张表所有的组合情况。
语法:
1 select 字段列表 from 表 1 , 表 2
【实例】 求出学生表和课程表的笛卡尔积。
【解答】

复制代码
1 select * from student,course


【说明】
学生表有4条记录,课程表有6条记录,所有的组合方式共有4*6=24种。
3、 相等连接

返回满足条件的组合情况。
语法:
1 select 字段列表
2 from 表名 1
3 inner join 表名 2 on 表名 1. 字段名 1 = 表名 2. 字段名 2
4 where 条件表达式
【说明】
inner可以省略不写。
【实例】 查询得到学生的所有成绩。
【解答】

复制代码
1 select *
2 from student
3 inner join score on student.student_id=score.student_id


【实例】 查询得到课程的所有成绩,显示的内容包括:课程号、课程名、成绩
【解答】

复制代码
1 select c.course_id 课程号,
2 name as 课程名,
3 score 成绩
4 from course c ‐‐ 给course表取个别名c
5 join score sc on c.course_id=sc.course_id


4、自然连接

实现过程:将两张表的所有 名称相同的列 都将被比较,并且在结果集中把 重复的列去掉 , 结果集
中两张表中名称相同的列仅出现一次。而普通的内连接并不去掉重复的列。
语法:
1 select 字段列表 from 表名 1 natural join 表名 2
【实例】 使用自然连接将学生表和成绩表连接起来。
【解答】

复制代码
1 select * from student natural join score


5、三表连接查询

语法:
1 select 字段列表
2 from 表名 1
3 join 表名 2 on 表名 1. 字段名 1 = 表名 2. 字段名 2
4 join 表名 3 on 表名 2. 字段名 3 = 表名 3. 字段名 4
5 where 条件表达式
【实例】 查询得到每位学生各门课程的成绩。显示内容包括:学号、姓名、课程名、成
绩。
【解答】

复制代码
1 select s.student_id 学号,
2 s.name 姓名,
3 c.name 课程名,
4 score 成绩
5 from student s
6 join score sc on s.student_id=sc.student_id
7 join course c on c.course_id=sc.course_id


【实例】 查询得到修读了"HTML5网页设计"的所有学生信息,显示内容包括:学号、姓
名。
【解答】

复制代码
1 select s.student_id 学号,
2 s.name 姓名
3 from student s
4 join score sc on s.student_id=sc.student_id
5 join course c on c.course_id=sc.course_id
6 where c.name='HTML5网页设计'


三、外连接

在内连接查询中,只有满足连接条件的记录才能出现在查询结果中。 如果希望不满足连接条件
的记录也在查询结果中出现,这时需要使用 外连接 查询。
分类:左连接和右连接。
1、左外连接(left join)
结果集包括 左表的所有记录 和右表中满足连接条件的记录,结果集中那些不符合连接条件的来源于
右表的列值为 null。
1 select 字段列表
2 from 表名 1
3 left join 表名 2 on 表名 1. 字段名 1 = 表名 2. 字段名 2
【实例】 使用"左外连接"查询得到学生的所有成绩。
【解答】

复制代码
1 select *
2 from student s
3 left join score sc on s.student_id=sc.student_id


2、右外连接(right join)

结果集包括 右表的所有记录 和左表中满足连接条件的记录,结果集中那些不符合连接条件的来源于
左表的列值为 null。
1 select 字段列表
2 from 表名 1
3 right join 表名 2 on 表名 1. 字段名 1 = 表名 2. 字段名 2
【实例】 使用"右外连接"查询得到课程的所有成绩。
【解答】

复制代码
1 select *
2 from score sc
3 right join course c on c.course_id=sc.course_id
相关推荐
2301_32241428045 小时前
springboot学生课堂出勤统计系统15835-计算机毕设 原创(免费领源码+部署教程+开发环境)
java·mysql·随机森林·微信小程序·uni-app·微信开发者工具·推荐算法
对空六课6 小时前
两个统计平台数据不同:用同一时间窗和事件样本做差异定位
大数据·前端·网络·数据库
wno70411 小时前
postgresSQL压缩版安装与基本命令
数据库·postgresql
聚美智数13 小时前
智能结构化识别-图片结构解析-图像结构化解析-照片结构化解析
android·java·数据库
瀚高PG实验室13 小时前
瀚高数据库常用系统表查询入门指南(附常用SQL)
数据库·sql·postgresql·瀚高数据库
ben9518chen13 小时前
mysql数据库基本操作
数据库·mysql
2603_9651481113 小时前
电商选品调研:通过关键词搜索API获取市场热销商品,结合商品详情API分析竞品卖点与定价
开发语言·数据库·人工智能·python·信息可视化
土豆.exe14 小时前
nf_tables 的 verdict 被读了两次:一个十年未闭合的位域错配
java·数据库·网络安全·缓存
缓慢更新14 小时前
表单引擎的存储建模:宽表与文档库的取舍
运维·服务器·网络·数据库·低代码·oracle·适配器模式
Web3&Basketball16 小时前
实测Gemini4Argon:ERQA 87%登顶长程任务榜
数据库·python·大模型·多模态·gemini·长上下文·推理优化