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学习日记(三)相关推荐

  1. 【Mysql学习日记2——修改】

    系列文章目录 [Mysql学习日记1--排序与修改] 文章目录 系列文章目录 前言 一.修改表的名字(修改) 1.题目要求 2.解题思路 3.代码示例 二.按日期分组销售(查询:非重复计量) 1.题目 ...

  2. 数据库MYSQL学习系列三

    数据库MYSQL学习系列三 三.MYSQL事务与存储引擎 3.1-数据库事务 什么是事务 一系列有序的数据库操作: o要么全部成功 o要么全部回退到操作前的状态 o中间状态对其他连接不可见 事务的 ...

  3. MYSQL学习笔记三:日期和时间函数

    MYSQL学习笔记三:日期和时间函数 1. 获取当前日期的函数和获取当前时间的函数 /*获取当前日期的函数和获取当前时间的函数.将日期以'YYYY-MM-DD'或者'YYYYMMDD'格式返回 */ ...

  4. MySQL学习记录 (三) ----- SQL数据定义语句(DDL)

    相关文章: <MySQL学习记录 (一) ----- 有关数据库的基本概念和MySQL常用命令> <MySQL学习记录 (二) ----- SQL数据查询语句(DQL)> &l ...

  5. MySQL学习笔记(三)查询

    写在前面:本篇为作者自学总结,学习内容为课堂所学和网络学习笔记汇总,对于内容引用部分在文中和文末注明. 文章仅供参考,如需深入了解,请查阅MySQL参考手册.附上下载链接: 链接:https://pa ...

  6. Python学习日记(三十四) Mysql数据库篇 二

    外键(Foreign Key) 如果今天有一张表上面有很多职务的信息 我们可以通过使用外键的方式去将两张表产生关联 这样的好处能够节省空间,比方说你今天的职务名称很长,在一张表中就要重复的去写这个职务 ...

  7. Python学习日记(三十三) Mysql数据库篇 一

    背景 Mysql是一个关系型数据库,由瑞典Mysql AB开发,目前属于Oracle旗下的产品.Mysql是目前最流行的关系型数据库管理系统之一,在WEB方面,Mysql是最好的RDBMS(Relat ...

  8. mysql学习笔记三 —— 数据恢复与备份

    要点: 1.存储引擎 2.导入导出 3.备份与恢复 查看当前数据库中的所有表 use db1: show tables: 1.存储引擎 不同的发动机(引擎)适用的汽车类型不一样. 存储和处理的不同方式 ...

  9. MySQL学习(三) 数据类型约束、TCL语言、流程控制

    数据类型和约束(ddl) 数据类型 一.数值型 1.整型 tinyint.smallint.mediumint.int/integer.bigint 1 2 3 4 8 特点: ①都可以设置无符号和有 ...

最新文章

  1. rda冗余分析步骤_分子生态网络分析(MENA)构建微生物网络示例
  2. .NET Core 首例 Office 开源跨平台组件(NPOI Core)
  3. 踩不出足迹(牛客练习赛88 )
  4. Win10应用程序无法正常启动0xc0000142错误的解决方法
  5. 计算机网络-自顶向下方法(7th) 第五章 Problems 英文题目1-15+中文答案
  6. python 命名管道_Linux 下 Python 读取命名管道的疑惑
  7. csdn学院的python培训怎么样_这段 Python 代码让程序员赚 300W,公司已确认!网友:神操作...
  8. blob类型对象转为file类型对象
  9. Markdown制作表格
  10. 强烈推荐一个在线caffe网络可视化工具!!
  11. 中国移动MM7 API用户手册
  12. 微信扫一扫二维码直接打开手机默认外部浏览器
  13. pm runtime
  14. 如何系统学习计算机编程?自学还是培训?怎么选?
  15. OSPF虚链路与认证
  16. android系统息屏设置_安卓实现熄屏功能。
  17. mysql 1356错误_MySQL ERROR 1356 (HY000)
  18. 四种“不使用第三方变量就可以交换两个变量值”的方法
  19. CF855B Marvolo Gaunt‘s Ring题解
  20. 对前期代码的升级打造

热门文章

  1. 上海尤劲恩AI视觉检测为工业制造赋能,帮助企业实现智造升级
  2. 玩转手机中的linux系统termux并搭建java开发环境
  3. vue.runtime.esm.js?2b0e:619 [Vue warn]: Error in nextTick: “TypeError: Cannot read properties of und
  4. NASM:Loop指令中的ecx/cx
  5. python爬取国内代理ip_【python】国内高匿代理爬取,并验证代理ip有效性
  6. 【U盘刷机】小米路由器变砖如何100%刷机成功
  7. 330pics-shell scripts-second
  8. 页面中的表格如何画斜线
  9. Redis过期策略---实现原理
  10. C++ - STL标准库