MYSQL学习日记(三)
1. 多表关联查询
1. 内连接
标准语法:
select * from 表1 inner join 表2 on 关联条件;
两个表中所有符合关联条件的两条数据,就拼接成一个数据,作为本次查询的一条结果。
select * from 表1
inner join 表2 on 关联条件1
inner join 表3 on 关联条件2
...
所有表中,符合这些关联条件的数据,会组合成一条数据,作为查询的结果
# 1. 查询学生的信息及所在班级名称
SELECT * FROM student INNER JOIN clazz ON student.class_id = clazz.id;
SELECT * FROM student s INNER JOIN clazz c ON s.class_id = c.id;# 2. 查询科目信息及代课老师姓名
SELECT * FROM `subject` s INNER JOIN teacher t ON s.teacher_id = t.id;#3. 查询学生每门科目的成绩 学生的信息 科目名称 分数
SELECT * FROM student s
INNER JOIN score sc ON s.id = sc.student_id
INNER JOIN `subject` su ON sc.subject_id = su.id;#4. 查询学生每门科目的成绩 学生的信息 科目名称 分数 代课老师姓名
SELECT * FROM student s
INNER JOIN score sc ON s.id = sc.student_id
INNER JOIN `subject` su ON sc.subject_id = su.id
INNER JOIN teacher t ON su.teacher_id = t.id;# 5. 显示指定类的数据
SELECT s.`name`, s.`code`, su.`name`, sc.score, t.`name`
FROM student s
INNER JOIN score sc ON s.id = sc.student_id
INNER JOIN `subject` su ON sc.subject_id = su.id
INNER JOIN teacher t ON su.teacher_id = t.id;# 6. 查询学生姓名, 编号,所在班级, 科目名称, 分数, 代课老师SELECT s.`name`, s.`code`, c.`name`, su.`name`, sc.score, t.`name`
FROM student s
INNER JOIN score sc ON s.id = sc.student_id
INNER JOIN `subject` su ON sc.subject_id = su.id
INNER JOIN teacher t ON su.teacher_id = t.id
INNER JOIN clazz c ON s.class_id = c.id;
简单写法:
select * from
表1,表2,表3,...
where
关联条件1 and 关联条件2 and 关联条件3 and ...
# 简化写法
SELECT s.`name`, s.`code`, c.`name`, su.`name`, sc.score, t.`name`
FROM student s, score sc, `subject` su, teacher t, clazz c # 关联的表
WHERE # 关联条件
s.id = sc.student_id and sc.subject_id = su.id
and su.teacher_id = t.id and s.class_id = c.id;#把上面5个sql使用简话的写法 重写一遍
SELECT * FROM student s, clazz c where s.class_id = c.id;SELECT * FROM `subject` s, teacher t WHERE s.teacher_id = t.id;SELECT * FROM student s , score sc,`subject` su
WHERE s.id = sc.student_id AND sc.subject_id = su.id;SELECT * FROM student s, score sc, `subject` su, teacher t
WHERE s.id = sc.student_id and sc.subject_id = su.id AND su.teacher_id = t.id;SELECT s.`name`, s.`code`, su.`name`, sc.score, t.`name`
FROM student s, score sc, `subject` su, teacher t
WHERE s.id = sc.student_id and sc.subject_id = su.id AND su.teacher_id = t.id;
1.1 条件查询
在进行多表内连接查询时,也可以对数据进行条件过滤
select * from
表1,表2,表3,...
where
关联条件1 and 关联条件2 and 关联条件3 and ... -- 这里是表关联条件
and 过滤条件1 and/or 过滤条件2 and/or ... -- 这里是数据过滤条件
# 查询性别为男的同学信息 学生主键 姓名 学号 所在班级
SELECT s.id, s.`name`, s.`code`, c.`name`, s.gender
FROM student s, clazz c
WHERE
class_id = c.id # 表的关联条件
AND s.gender = 1; # 数据的过滤条件#查询王仁老师所带科目 科目id 科目名称 代课老师
SELECT s.id, s.`name`,t.`name`
FROM `subject` s, teacher t
WHERE s.teacher_id = t.id
AND t.`name` = '王仁';#1. 查询姓王的同学, 姓名 学号 所在班级
#2. 查询学号包含00的同学, 姓名 学号 所在班级,科目,成绩
#3. 查询学习了 陶知 所带科目的学生, 姓名 学号 所在班级,科目,成绩,代课老师
SELECT s.`name`, s.`code`, c.`name`
FROM student s, clazz c
WHERE s.class_id = c.id
AND s.`name` LIKE '王%';SELECT s.`name`, s.`code`, c.`name`, su.`name`, sc.score
FROM student s, clazz c, `subject` su, score sc
WHERE s.class_id = c.id AND s.id = sc.student_id
AND sc.subject_id = su.id
AND s.`code` LIKE '%00%';SELECT s.`name`, s.`code`, c.`name`, su.`name`, sc.score
FROM student s, clazz c, `subject` su, score sc, teacher t
WHERE s.class_id = c.id AND s.id = sc.student_id
AND sc.subject_id = su.id AND su.teacher_id = t.id
AND t.`name` = '陶知';-- 查询有不及格成绩的学生 姓名 学号
SELECT DISTINCT s.`name`, s.`code`
FROM student s, score sc
WHERE s.id = sc.student_id
AND sc.score <60;-- 查询学习java的女同学的成绩,按照倒叙排列 姓名 学号 科目名 成绩
SELECT s.`name`, s.`code`, c.`name`, su.`name`, sc.score
FROM student s, clazz c, `subject` su, score sc, teacher t
WHERE s.class_id = c.id AND s.id = sc.student_id
AND sc.subject_id = su.id AND su.teacher_id = t.id
AND su.`name` = 'java' AND s.gender = 0
ORDER BY sc.score DESC;
2. 聚合函数
- count()
- max()
- min()
- avg()
- sum()
2.1 count()
count() 计算条数
count(*)
count(列名)
# 1. 查询学生表有多少数据
SELECT count(*) FROM student;
# 2. 查询 code列 不为 null的条数
SELECT count(`code`) FROM student;
2.2 max()
max() 计算一列的最大值
max(列名)
2.3 min()
max() 计算一列的最小值
min(列名)
2.4 avg()
avg() 计算一列的平均值
avg(列名)
2.5 sum()
sum() 计算一列的总和
sum(列名)
# 1. 查询学生表有多少数据
SELECT count(*) FROM student;#2. 查询 code列 不为 null的条数
SELECT count(`code`) FROM student;#3. 计算score表 score列 的最大值
SELECT max(score) FROM score;#4. 计算score表 score列 的最小值
SELECT min(score) FROM score;#5. 计算score表 score列 的平均值
SELECT avg(score) FROM score;#6. 计算score表 score列 的和
SELECT sum(score) FROM score;-- 1. 李恺学了几门科目
-- 2. 李恺成绩的最高分
-- 3. 李恺成绩的最低分
-- 4. 李恺总分
-- 5. 李恺平均分
-- 6. java科目的最高分
-- 7. java科目的最低分
-- 8. java科目的平均分SELECT * FROM student s, score sc
WHERE s.id = sc.student_id
AND s.`name` = '李恺';SELECT count(*), max(sc.score), min(sc.score), avg(sc.score), sum(sc.score)
FROM student s, score sc
WHERE s.id = sc.student_id
AND s.`name` = '冰冰';SELECT count(*), max(sc.score), min(sc.score), avg(sc.score), sum(sc.score)
FROM `subject` s, score sc
WHERE s.id = sc.subject_id
AND s.`name` = '心学';
MYSQL学习日记(三)相关推荐
- 【Mysql学习日记2——修改】
系列文章目录 [Mysql学习日记1--排序与修改] 文章目录 系列文章目录 前言 一.修改表的名字(修改) 1.题目要求 2.解题思路 3.代码示例 二.按日期分组销售(查询:非重复计量) 1.题目 ...
- 数据库MYSQL学习系列三
数据库MYSQL学习系列三 三.MYSQL事务与存储引擎 3.1-数据库事务 什么是事务 一系列有序的数据库操作: o要么全部成功 o要么全部回退到操作前的状态 o中间状态对其他连接不可见 事务的 ...
- MYSQL学习笔记三:日期和时间函数
MYSQL学习笔记三:日期和时间函数 1. 获取当前日期的函数和获取当前时间的函数 /*获取当前日期的函数和获取当前时间的函数.将日期以'YYYY-MM-DD'或者'YYYYMMDD'格式返回 */ ...
- MySQL学习记录 (三) ----- SQL数据定义语句(DDL)
相关文章: <MySQL学习记录 (一) ----- 有关数据库的基本概念和MySQL常用命令> <MySQL学习记录 (二) ----- SQL数据查询语句(DQL)> &l ...
- MySQL学习笔记(三)查询
写在前面:本篇为作者自学总结,学习内容为课堂所学和网络学习笔记汇总,对于内容引用部分在文中和文末注明. 文章仅供参考,如需深入了解,请查阅MySQL参考手册.附上下载链接: 链接:https://pa ...
- Python学习日记(三十四) Mysql数据库篇 二
外键(Foreign Key) 如果今天有一张表上面有很多职务的信息 我们可以通过使用外键的方式去将两张表产生关联 这样的好处能够节省空间,比方说你今天的职务名称很长,在一张表中就要重复的去写这个职务 ...
- Python学习日记(三十三) Mysql数据库篇 一
背景 Mysql是一个关系型数据库,由瑞典Mysql AB开发,目前属于Oracle旗下的产品.Mysql是目前最流行的关系型数据库管理系统之一,在WEB方面,Mysql是最好的RDBMS(Relat ...
- mysql学习笔记三 —— 数据恢复与备份
要点: 1.存储引擎 2.导入导出 3.备份与恢复 查看当前数据库中的所有表 use db1: show tables: 1.存储引擎 不同的发动机(引擎)适用的汽车类型不一样. 存储和处理的不同方式 ...
- MySQL学习(三) 数据类型约束、TCL语言、流程控制
数据类型和约束(ddl) 数据类型 一.数值型 1.整型 tinyint.smallint.mediumint.int/integer.bigint 1 2 3 4 8 特点: ①都可以设置无符号和有 ...
最新文章
- rda冗余分析步骤_分子生态网络分析(MENA)构建微生物网络示例
- .NET Core 首例 Office 开源跨平台组件(NPOI Core)
- 踩不出足迹(牛客练习赛88 )
- Win10应用程序无法正常启动0xc0000142错误的解决方法
- 计算机网络-自顶向下方法(7th) 第五章 Problems 英文题目1-15+中文答案
- python 命名管道_Linux 下 Python 读取命名管道的疑惑
- csdn学院的python培训怎么样_这段 Python 代码让程序员赚 300W,公司已确认!网友:神操作...
- blob类型对象转为file类型对象
- Markdown制作表格
- 强烈推荐一个在线caffe网络可视化工具!!
- 中国移动MM7 API用户手册
- 微信扫一扫二维码直接打开手机默认外部浏览器
- pm runtime
- 如何系统学习计算机编程?自学还是培训?怎么选?
- OSPF虚链路与认证
- android系统息屏设置_安卓实现熄屏功能。
- mysql 1356错误_MySQL ERROR 1356 (HY000)
- 四种“不使用第三方变量就可以交换两个变量值”的方法
- CF855B Marvolo Gaunt‘s Ring题解
- 对前期代码的升级打造
热门文章
- 上海尤劲恩AI视觉检测为工业制造赋能,帮助企业实现智造升级
- 玩转手机中的linux系统termux并搭建java开发环境
- vue.runtime.esm.js?2b0e:619 [Vue warn]: Error in nextTick: “TypeError: Cannot read properties of und
- NASM:Loop指令中的ecx/cx
- python爬取国内代理ip_【python】国内高匿代理爬取,并验证代理ip有效性
- 【U盘刷机】小米路由器变砖如何100%刷机成功
- 330pics-shell scripts-second
- 页面中的表格如何画斜线
- Redis过期策略---实现原理
- C++ - STL标准库