MySQL的多表查询及习题练习
目录
多表查询
1. 笛卡尔积
2. 内连接
2.1 等值连接
2.2 自然连接
3. 外连接
3.1 左连接
3.2 右连接
习题练习
题目
用到的表(Student表和SC表上面有)
答案
多表查询
表与表存在关系:一对一关系,一对多关系和多对多的关系。
示例:
多表联合查询: 给定学生表,Student和成绩表SC
mysql> select * from Student;
+------+-------+------+------+
| SID | Sname | Sage | Ssex |
+------+-------+------+------+
| 1 | 赵雷 | 20 | 男 |
| 2 | 钱电 | 20 | 男 |
| 3 | 孙风 | 21 | 男 |
| 4 | 吴兰 | 18 | 女 |
| 5 | 孙兰 | 17 | 女 |
+------+-------+------+------+
5 rows in set (0.00 sec)mysql> select * from SC;
+------+------+-------+
| SID | CID | score |
+------+------+-------+
| 1 | 1 | 80 |
| 1 | 2 | 71 |
| 1 | 3 | 87 |
| 2 | 1 | 88 |
| 2 | 2 | 70 |
| 2 | 3 | 89 |
| 3 | 1 | 68 |
| 3 | 2 | 78 |
| 3 | 3 | 87 |
| 4 | 1 | 67 |
| 4 | 2 | 58 |
| 4 | 3 | 89 |
| 5 | 1 | 56 |
| 5 | 2 | 89 |
| 6 | 3 | 38 |
+------+------+-------+
15 rows in set (0.00 sec)
分析:Student表中的每一条数据对应SC表中的多条数据,反之,SC表中的每一条数据对应Student中的一条学生信息,故而两表存在一对多的关系。
1. 笛卡尔积
将表A中数据的行数乘以表B中的数据的行数。
假如表A(m行数据),表B(n行数据),则笛卡尔积的结果m*n行结果。
示例:
select * from Student,SC;
(部分结果截图 )
2. 内连接
内连接是将符合条件的结果集返回(两个表中都存在的数据),内连接分为等值连接和自然连接。
2.1 等值连接
当条件有 “=” 的连接称为等值连接,其结果是连接表的所有列(包含重复列)。
select * from Student s ,SC sc where s.SID=sc.SID;
显性连接:[inner] join XXX on XXX
select * from Student s inner join SC sc on s.SID=sc.SID;
运行结果:(运行结果相同)
2.2 自然连接
自然连接不仅要求连接的两个字段值必须相同,并且要求对结果中重复的属性去重.
示例: (这里对重复属性SID进行去重)
select * from Student natural join SC;
3. 外连接
外连接,不仅包含符合条件的结果,还包括左表(左连接)或者右表(右连接)中所有数据返回。
3.1 左连接
left join :左表记录的所有数据全部显示处理,而右表只会显示符合条件的记录,右表记录不足的地方均为null。
示例:
查询所有同学的课程成绩:
select * from Student left joinSC on Student.SID = sc.SID;
3.2 右连接
right join :左表记录的显示符合条件的记录,而右表显示全部的数据结果,左表表记录不足的地方均为null。
示例:
查询所有的成绩的学生信息
select * from Student s right join SC sc on s.SID=sc.SID;
习题练习
常用基本函数:
count():计数
avg():平均值
max():最大值
min():最小值
sum():求和
题目
1、查询"01"课程比"02"课程成绩高的学生的信息及课程分数
2、查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩
3、查询在sc表中不存在成绩的学生信息。
4、查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩
5、查询"李"姓老师的数量
6、查询学过"张三"老师授课的同学的信息
7、查询学过编号为"01"并且也学过编号为"02"的课程的同学的信息
8、查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩
用到的表(Student表和SC表上面有)
1、学生表
Student(SID,Sname,Sage,Ssex)
--SID 学生编号,Sname 学生姓名,Sage 年龄,Ssex 学生性别
2.课程表
Course(CID,Cname,TID)
--CID --课程编号,Cname 课程名称,TID 教师编号
3.教师表
Teacher(TID,Tname)
--TID 教师编号,Tname 教师姓名
4.成绩表
SC(SID,CID,score)
--SID 学生编号,CID 课程编号,score 分数
课程表:
课程号 课程名称 教师编号
1 语文 2
2 数学 1
3 英语 3
教师表:
教师编号 教师名
1 张三
2 李四
3 王五
⭐小tips:Sublime text可以对数据进行批量操作哦~ 如下所示,特别方便数据的插入。
答案
1、查询"01"课程比"02"课程成绩高的学生的信息及课程分数
2、查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩
3、查询在sc表中不存在成绩的学生信息
4、查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩
5、查询"李"姓老师的数量
6、查询学过"张三"老师授课的同学的信息
7、查询学过编号为"01"并且也学过编号为"02"的课程的同学的信息
8、查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩
以上都是学习过程中的知识点总结,如果有错误或者有疑问,欢迎一起交流吖~~ /手动抱拳/
MySQL的多表查询及习题练习相关推荐
- mysql的联表查询和去重复数据
mysql的联表查询和去重复数据 /* SQLyog Ultimate v10.00 Beta1 MySQL - 5.7.17-log : Database - pusmtnew ********** ...
- day15(mysql 的多表查询,事务)
mysql之多表查询 1.合并结果集 作用:合并结果集就是把两个select语句查询的结果连接到一起! /*创建表t1*/ CREATE TABLE t1(a INT PRIMARY KEY ,b V ...
- Mysql的交叉表查询
最近由于找工作,所以在恶补PHP和Mysql方面的东西,发现还是学习的不够.这几天看到关于mysql的交叉表查询的内容,根据自己的理解简单的尝试了下. 由于MonsterHunter World较火, ...
- MySQL的多表查询
文章目录 MySQL的多表查询 什么是多表联合查询 交叉连接(CROSS JOIN) 笛卡尔积 交叉连接 内连接 外连接 左连接 右连接 分组查询 GROUP BY单独使用 GROUP BY 与 GR ...
- mysql表deptno,MySQL:多表查询
MySQL:多表查询 SELECT查询不但可以从一张表查询数据,还可以从多张表同时查询数据.查询多张表的语法是:SELECT * FROM 表1 表2,普通多表查询会获取M x N行记录,所以一般使用 ...
- mysql怎样两表查询_mysql怎样两表查询?
mysql两表查询的方法:1.使用"select 字段列表 from 表1,表2 [where 条件]"进行查询:2.使用"SELECT 字段列表 FROM 表1 关键字 ...
- mysql数据库多表查询(内连接,外连接,自连接,子查询及案例分析)
mysql数据库多表查询 之前接触的项目或者自己涉及的部分对于多表查询的使用都比较的少,常常是自己更具案例进行学习,最近见到的比较的多,所以今天就好好的总结一下,为下一步学习做准备! 1.多表查询关系 ...
- MySQL数据库多表查询
MySQL数据库多表查询 前言 在之前的文章MySQL数据库之SQL入门中,我们讲到了四类SQL中的DQL(数据库查询语言,用于查询表中数据),但是我仅仅用DQL去查询一张表中数据,而在实际的应用中, ...
- MySQL:单表查询---简单查询+条件查询+高级查询+表和字段取别名
目录 一.通用模版展示 简单查询 条件查询 高级查询 表和字段取别名 二.举例说明 简单查询 条件查询 高级查询 表和字段取别名 三.注意事项 四.Mapper简单举例 简单查询 条件查询 高级查询 ...
最新文章
- 【Sql Server】DateBase-触发器
- 挣值管理不是搞数字游戏
- android view强制重绘_android view 相关方法 layout draw 布局 重绘 | 学步园
- html5 游戏前景怎么样,独家 HTML5游戏目前究竟怎么样?看完这篇文章,你或许会清晰很多...
- 网络协议分析 | 传输层 :史上最全UDP、TCP协议详解,一篇通~
- HTML+CSS+JS实现 ❤️3D建筑结构旋转特效❤️
- 美团最好战的那个男人要走了
- Maven创建的Web项目无法使用EL表达式
- ubuntu18安装vnpyv1.9.2之二
- awesomium This view has carshed!(MarkdownPad2)
- svn插件Subclipse
- 云风的个人空间 : 《代码大全》读书笔记
- 攻防世界crypto新手区writeup
- iterm2新技能-用不同的颜色创建新标签
- java实现微博九宫格图片切分
- 面试可能遇到java基础知识
- 航海王热血航线服务器维护怎么办,航海王热血航线无法登录怎么办
- MySQL数据库密码忘了,怎么修改密码,找回密码。
- 5.Linux下的权限管理
- 【重庆】openGauss Meetup | 倒计时2天