聚合查询、联合查询【mysql数据库】
把查询结果插入到另一个表中(相当于复制表)
要求查询结果临时表的列数和列的类型,要和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);
查询“不想毕业”的同学的同班同学
多行子查询:返回多行记录的子查询
查询“语文”或“英语”课程的成绩信息
- 先根据课程名字查询出课程id
- 再根据课程id查询出课程分数
注意:查询结果放在内存中,如果查询结果太大了,内存放不下,in就用不了了,可以使用exists代替,exists本质上就是让数据库执行很多个查询操作, 但是exists可读性比较差,执行效率也大大低于in(适合解决特殊场景)
合并查询:本质上是把两个查询的结果集合成一个,union、union all
查询id小于3,或者名字为“英文”的课程:
or和union的区别:
or查询只能来自同一张表,union查询可以是来自不同的表,只要查询的结果的列匹配即可。
union和union all的区别:
union 会进行去重(把重复的行只保留一行),union all可以保留多份,不会去重。
聚合查询、联合查询【mysql数据库】相关推荐
- mysql联合查询怎么加子查询_MySQL数据库 —子查询,联合查询
编程之家收集整理的这篇文章主要介绍了MySQL数据库 -子查询,联合查询,编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考. <MySQL数据库 -子查询,联合查询>要点: 本文 ...
- mysql限制查询/外连接查询和内连接查询/联合查询
mysql查询之limit限制查询 作用:对查询结果起到限制条数的作用 语法:limit n,m n:代表起始条数值,默认为0:m代表取出的条数 应用场合:数据量过多时,起到限制作用 如图 mysql ...
- ArcGIS Engine属性查询和空间查询联合查询要素
ArcGIS Engine属性查询和空间查询联合查询要素 项目中遇到了需要通过属性查询和空间查询两种查询方式联合,查找要素,主要流程是先通过空间查询,选择到符合条件的要素,添加到选择集中,然后再通过属 ...
- MySQL基础——数据库和SQL概述\MySQL基本使用\DQL语言学习\条件查询\排序查询\常见函数\分组查询\连接查询\子查询\分页查询\联合查询
本文详细讲解了MySQL中DQL语言,也就是数据查询语句的使用.全文3w余字,是对学习MySQL知识的整理总结,因为篇幅较长,MySQL基础知识余下部分发表在余下博客中 DML语言学习\插入数据\删除 ...
- MySQL - 表的增删改查(约束+聚合、联合查询)
本节目标: 数据库约束 表的关系 新增: 删除 修改 查询 1.数据库约束 1.1约束类型 NOT NULL -指示某列不能存储 NULL值. UNIQUE -保证某列的每行必须有唯一的值. DEFA ...
- mysql数据库入门教程(5):多表操作(连接查询,子查询,分页查询,联合查询)
前文介绍了单表查询:mysql数据库入门教程(4):查询讲解大全 今天介绍下多表查询 一.连接查询 含义:又称多表查询,当查询的字段来自于多个表时,就会用到连接查询 先送上下面所讲用到的sql脚本 h ...
- 聚合查询+联合查询+子查询
文章目录 一.聚合查询 1.聚合函数 2.GROUP BY子句 3.HAVING 二.联合查询 join on 1.内连接 2.外连接 3.自连接 三.子查询 EXISTS关键字 四.联合查询 总结 ...
- 分页查询+联合查询(MySQL)
目录 前言 分页查询 语法 示例 特点 联合查询 语法 示例 特点 前言 介绍MySQL的分页查询.联合查询操作我们选择使用可视化软件Navicat,对应的数据库使用了某公司员工数据库,该数据库包含员 ...
- 使用python对学生表的查询_多表组合查询——Python操作Mysql数据库
前面我们介绍了单张表的查询,包括模糊查询.分组.排序.各种筛选条件等等操作,在实际应用中,查询的数据往往不止局限在一张表里,通常需要多张表在一起进行组合查询,今天我们将会对Mysql当中的多张有关联的 ...
- 关联查询mysql_《MySQL数据库》关联查询
原标题:<MySQL数据库>关联查询 一.关联查询 1.概念 在查询数据时,所需要的数据不只在一张表中,可能在两张或多张表中.这个时候,需要同时操作这些表来查询数据,即关联查询. 关联查询 ...
最新文章
- std::tuple类型
- Linux 性能分析的前 60 秒
- PHP 实现一个可用的redis 事务锁, 解决并发问题
- C# 移除最后一个字符
- 新版微信小程序即将上线 新增微信支付功能
- vmware-images
- JAVA 面向对象-2-继承(Inheritance)
- html选择树形菜单代码,jquery+css实现html选择树或树形菜单
- php 5.4 安装xcache,安装xcache为你的PHP加速
- Python3 高级编程技巧(部分)
- Flink 生成数据源
- 生命游戏 并行化_新加坡电音制作人楚晴Jasmine《困兽游戏》,讲述爱情间的博弈...
- singleton pattern的推荐实现
- 组件上传之AspUpload使用方法
- 福利 | 启迪之星2018首期AI创业加速营免费名额
- 小红书赞助和广告有什么区别,小红书赞助和广告一样吗?
- arduino ide 2.0 中文设置
- laravel 压缩图片 Intervention/image
- MySQL 数据库文件 详解
- C++多线程详细讲解