把查询结果插入到另一个表中(相当于复制表)

要求查询结果临时表的列数和列的类型,要和student2这里匹配

聚合查询

本质上是针对行和行之间的运算

聚合查询需要搭配聚合函数

1、count

不一定非要写星号(*),还可以写成任意的 列名/表达式

虽然有一行是全NULL,count计算会把全为NULL的行也给计算进去

2、sum

sum求和,把这一列的所有行进行加和,要求这个列得是数字(不能是字符串/日期)

3、AVG

4、MAX&&MIN

求和,平均,最大,最小这些操作都是针对数字类型的列进行的。

表达式的聚合计算

联合查询

包括:内连接,外连接,子查询,合并查询

多表查询的基本执行过程:笛卡尔积

笛卡尔积通过排列组合:列数是两个表列数的和,行数是两个表行数的积

通过条件,排除无意义的数据。

练习:

drop table if exists classes;
drop table if exists student;
drop table if exists course;
drop table if exists score;create table classes (id int primary key auto_increment, name varchar(20), `desc` varchar(100));create table student (id int primary key auto_increment, sn varchar(20),  name varchar(20), qq_mail varchar(20) , classes_id int);create table course(id int primary key auto_increment, name varchar(20));create table score(score decimal(3, 1), student_id int, course_id int);insert into classes(name, `desc`) values
('class1', 'desc1'),
('class2','desc2'),
('class3','desc3');insert into student(sn, name, qq_mail, classes_id) values
('09982','likui','xuanfeng@qq.com',1),
('00835','puti',null,1),
('00391','baisuzhen',null,1),
('00031','xuxian','xuxian@qq.com',1),
('00054','buxiangbiye',null,1),
('51234','haohaoshuohua','say@qq.com',2),
('83223','tellme',null,2),
('09527','laowai','foreigner@qq.com',2);insert into course(name) values
('Java'),('wenhua'),('yuanli'),('chinese'),('math'),('english');insert into score(score, student_id, course_id) values
-- likui
(70.5, 1, 1),(98.5, 1, 3),(33, 1, 5),(98, 1, 6),
-- puti
(60, 2, 1),(59.5, 2, 5),
-- baisuzhen
(33, 3, 1),(68, 3, 3),(99, 3, 5),
-- xuxian
(67, 4, 1),(23, 4, 3),(56, 4, 5),(72, 4, 6),
-- buxiangbiye
(81, 5, 1),(37, 5, 5),
-- haohaoshuohua
(56, 6, 2),(43, 6, 4),(79, 6, 6),
-- tellme
(80, 7, 2),(92, 7, 6);

4个表:student 学生表 、 classes 班级表 、 course 课程表 、 score 分数表

 查询许仙同学的成绩

写法1:from多个表

1、先笛卡尔积

2、引入连接条件

3、根据必要需求,加入必要的条件即可

4、把不必要的列去掉,保留想关注的列

写法二:join on

写法三:inner join

注意: from多个表只能够实现内连接,而join on既可以实现内连接也可以使用外连接。

查询所有同学的总成绩及个人信息

第一步:笛卡尔积

第二步:加上连接条件

第三步:加上聚合查询,把同一个学生的行合并到一个组里,同时计算总分

第一步:笛卡尔积

第二步:引入连接条件:三张表需要两个连接条件

第三步:精简一些不必要的列

​​​

用join on也是没问题的

内连接和外连接在大多数情况下是没有区别的,比如要连接的两个表里面的数据都是一一对应的,这时是没有区别的,如果不是一一对应,内连接和外连接就有区别了。

如果不是一一对应

自连接:自己和自己进行笛卡尔积

SQL中无法针对行和行之间的条件比较,需要使用自连接,把行转成列

 显示所有‘计算机原理’成绩比‘java’成绩高的成绩信息

子查询:把多个SQL组合成一个,把一个查询作为另一个查询的一部分条件(套娃),代码可读性非常差,执行效率也非常差(慎用)

单行子查询:返回一行记录的子查询

insert into classes(name, `desc`) values
('计算机系2019级1班', '学习了计算机原理、C和Java语言、数据结构和算法'),
('中文系2019级3班','学习了中国传统文学'),
('自动化2019级5班','学习了机械自动化');
insert into student(sn, name, qq_mail, classes_id) values
('09982','黑旋风李逵','xuanfeng@qq.com',1),
('00835','菩提老祖',null,1),
('00391','白素贞',null,1),
('00031','许仙','xuxian@qq.com',1),
('00054','不想毕业',null,1),
('51234','好好说话','say@qq.com',2),
('83223','tellme',null,2),
('09527','老外学中文','foreigner@qq.com',2);
insert into course(name) values
('Java'),('中国传统文化'),('计算机原理'),('语文'),('高阶数学'),('英文');
insert into score(score, student_id, course_id) values
-- 黑旋风李逵
(70.5, 1, 1),(98.5, 1, 3),(33, 1, 5),(98, 1, 6),
-- 菩提老祖
(60, 2, 1),(59.5, 2, 5),
-- 白素贞
(33, 3, 1),(68, 3, 3),(99, 3, 5),
-- 许仙
(67, 4, 1),(23, 4, 3),(56, 4, 5),(72, 4, 6),
-- 不想毕业
(81, 5, 1),(37, 5, 5),
4.2.1 内连接
-- 好好说话
(56, 6, 2),(43, 6, 4),(79, 6, 6),
-- tellme
(80, 7, 2),(92, 7, 6);

查询“不想毕业”的同学的同班同学

多行子查询:返回多行记录的子查询

查询“语文”或“英语”课程的成绩信息

  1. 先根据课程名字查询出课程id
  2. 再根据课程id查询出课程分数

注意:查询结果放在内存中,如果查询结果太大了,内存放不下,in就用不了了,可以使用exists代替,exists本质上就是让数据库执行很多个查询操作, 但是exists可读性比较差,执行效率也大大低于in(适合解决特殊场景)

合并查询:本质上是把两个查询的结果集合成一个,union、union all

查询id小于3,或者名字为“英文”的课程:

 or和union的区别:

or查询只能来自同一张表,union查询可以是来自不同的表,只要查询的结果的列匹配即可。

union和union all的区别:

union 会进行去重(把重复的行只保留一行),union all可以保留多份,不会去重。

聚合查询、联合查询【mysql数据库】相关推荐

  1. mysql联合查询怎么加子查询_MySQL数据库 —子查询,联合查询

    编程之家收集整理的这篇文章主要介绍了MySQL数据库 -子查询,联合查询,编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考. <MySQL数据库 -子查询,联合查询>要点: 本文 ...

  2. mysql限制查询/外连接查询和内连接查询/联合查询

    mysql查询之limit限制查询 作用:对查询结果起到限制条数的作用 语法:limit n,m n:代表起始条数值,默认为0:m代表取出的条数 应用场合:数据量过多时,起到限制作用 如图 mysql ...

  3. ArcGIS Engine属性查询和空间查询联合查询要素

    ArcGIS Engine属性查询和空间查询联合查询要素 项目中遇到了需要通过属性查询和空间查询两种查询方式联合,查找要素,主要流程是先通过空间查询,选择到符合条件的要素,添加到选择集中,然后再通过属 ...

  4. MySQL基础——数据库和SQL概述\MySQL基本使用\DQL语言学习\条件查询\排序查询\常见函数\分组查询\连接查询\子查询\分页查询\联合查询

    本文详细讲解了MySQL中DQL语言,也就是数据查询语句的使用.全文3w余字,是对学习MySQL知识的整理总结,因为篇幅较长,MySQL基础知识余下部分发表在余下博客中 DML语言学习\插入数据\删除 ...

  5. MySQL - 表的增删改查(约束+聚合、联合查询)

    本节目标: 数据库约束 表的关系 新增: 删除 修改 查询 1.数据库约束 1.1约束类型 NOT NULL -指示某列不能存储 NULL值. UNIQUE -保证某列的每行必须有唯一的值. DEFA ...

  6. mysql数据库入门教程(5):多表操作(连接查询,子查询,分页查询,联合查询)

    前文介绍了单表查询:mysql数据库入门教程(4):查询讲解大全 今天介绍下多表查询 一.连接查询 含义:又称多表查询,当查询的字段来自于多个表时,就会用到连接查询 先送上下面所讲用到的sql脚本 h ...

  7. 聚合查询+联合查询+子查询

    文章目录 一.聚合查询 1.聚合函数 2.GROUP BY子句 3.HAVING 二.联合查询 join on 1.内连接 2.外连接 3.自连接 三.子查询 EXISTS关键字 四.联合查询 总结 ...

  8. 分页查询+联合查询(MySQL)

    目录 前言 分页查询 语法 示例 特点 联合查询 语法 示例 特点 前言 介绍MySQL的分页查询.联合查询操作我们选择使用可视化软件Navicat,对应的数据库使用了某公司员工数据库,该数据库包含员 ...

  9. 使用python对学生表的查询_多表组合查询——Python操作Mysql数据库

    前面我们介绍了单张表的查询,包括模糊查询.分组.排序.各种筛选条件等等操作,在实际应用中,查询的数据往往不止局限在一张表里,通常需要多张表在一起进行组合查询,今天我们将会对Mysql当中的多张有关联的 ...

  10. 关联查询mysql_《MySQL数据库》关联查询

    原标题:<MySQL数据库>关联查询 一.关联查询 1.概念 在查询数据时,所需要的数据不只在一张表中,可能在两张或多张表中.这个时候,需要同时操作这些表来查询数据,即关联查询. 关联查询 ...

最新文章

  1. std::tuple类型
  2. Linux 性能分析的前 60 秒
  3. PHP 实现一个可用的redis 事务锁, 解决并发问题
  4. C# 移除最后一个字符
  5. 新版微信小程序即将上线 新增微信支付功能
  6. vmware-images
  7. JAVA 面向对象-2-继承(Inheritance)
  8. html选择树形菜单代码,jquery+css实现html选择树或树形菜单
  9. php 5.4 安装xcache,安装xcache为你的PHP加速
  10. Python3 高级编程技巧(部分)
  11. Flink 生成数据源
  12. 生命游戏 并行化_新加坡电音制作人楚晴Jasmine《困兽游戏》,讲述爱情间的博弈...
  13. singleton pattern的推荐实现
  14. 组件上传之AspUpload使用方法
  15. 福利 | 启迪之星2018首期AI创业加速营免费名额
  16. 小红书赞助和广告有什么区别,小红书赞助和广告一样吗?
  17. arduino ide 2.0 中文设置
  18. laravel 压缩图片 Intervention/image
  19. MySQL 数据库文件 详解
  20. C++多线程详细讲解

热门文章

  1. 公司年会抽奖(javaScript+html)
  2. 响应式设计与自适应设计
  3. Unity 行首不出现中文标点
  4. 水仙花数和变种水仙花数
  5. 硅谷中关村人脉网络(柳传志、胡昭广、张景安、许成钢 倾力推荐!)
  6. Lode Runner 2 Credits Level
  7. BOM部分 总结【详细】
  8. 时间转换格式比较大小
  9. php图片水印制作教程,使用PHP给图片加水印的方法
  10. 如何启动一个 kafka connector (步骤详解+问题解决)