MySQL分组查询与连接查询
一,分组查询
使用ORDER BY子句将表中的数据分成若干组(还是按行显示)
语法:
SELECT 字段名[,聚集函数] FROM 表名 [WHERE子句] GROUP BY 要分组的字段名 [ORDER BY子句]
需要注意的是:在GROUP BY子句后出现的字段名必须在SELECT后的查询的字段中
1.分组查询中筛选条件分为两种:
| 类别 | 筛选数据源 | 在语句中的位置 | 使用的关键字 |
|---|---|---|---|
| 分组前筛选 | 原始数据表 | GROUP BY子句前 | WHERE |
| 分组后筛选 | 分组后的结果集 | GROUP BY子句后 | HAVING |
注意:
(1)能用分组前筛选(WHERE子句)完成查询优先使用分组前筛选
(2)如果聚集函数做筛选条件,则条件一定是放在HAVING子句中
2.GROUP BY子句中同时按多个字段分组
此时,GROUP BY子句后的多个字段的各个值都相同的会合并成为一行记录,就算两行记录前n-1个字段的值相同,而第n个字段的值不同也不会合并成一行而是两个不同的行。
3.添加排序
直接在GROUP BY子句后添加排序子句ORDER BY
二,连接查询
连接查询又称为多表查询。
语法:
SELECT 查询字段 FROM 表a [别名] [连接类型关键字] JOIN 表b [别名] ON 连接条件
[WHERE 筛选条件] [GROUP BY子句] [HAVING 筛选条件] [ORDER BY 排序字段]
1.按功能分类:
内连接:包括 等值连接、非等值连接、自连接
外连接:包括 左外连接、右外连接、全外连接
交叉连接:实际上就是多个表的笛卡儿积
等值连接:
在连接条件中使用符号 =
非等值连接:
在连接条件中使用除 = 外其他符号,如>,<,between...and...等
自连接:inner
表自身的连接查询,一半这种情况下,很可能对表起两次不同的别名
需要注意的是:为表起别名后,要对查询字段进行表限定,则要使用别名去限定二不能再使用原表名了,这个和MySQL中解析SQL语句的顺序有关。
左外连接:left [outer]
以左边的表作为主表
右外连接:right [outer]
以右边的表作为主表
全外连接full [outer]
其实在MySQL中不支持圈外连接。
交叉连接:cross
左右表的笛卡儿积
2.按SQL标准分
在SQL92标准中:仅仅支持内连接
在SQL99标准中:支持内连接+外连接(左外,右外)+交叉连接
3.总结
以上总共有七种连接查询,我们用一张图来形象区分:

MySQL分组查询与连接查询的更多相关文章
- Mysql的查询语句(联合查询、连接查询、子查询等)
Mysql的各个查询语句(联合查询.连接查询.子查询等) 一.联合查询 关键字:union 语法形式 select语句1 union[union选项] select 语句2 union[union选项 ...
- mysql查询、子查询、连接查询
mysql查询.子查询.连接查询 一.mysql查询的五种子句 where子句(条件查询):按照“条件表达式”指定的条件进行查询. group by子句(分组):按照“属性名”指定的字段进行分组.gr ...
- mysql 子句、子查询、连接查询
一.mysql查询的五种子句 where子句(条件查询):按照“条件表达式”指定的条件进行查询. group by子句(分组):按照“属性名”指定的字段进行分组.group by子句通常和count( ...
- 深入学习之mysql(五)连接查询
深入学习Mysql(五)连接查询 1.准备数据库: CREATE DATABASE IF NOT EXISTS `db_book2` DEFAULT CHARACTER SET UTF8; USE ` ...
- mysql——多表——外连接查询——左连接、右连接、复合条件查询
), d_id ), name ), age ), sex ), homeadd ) ); ,,,'nan','beijing'); ,,,'nv','hunan'); ,,,'nan','jiang ...
- 【知识库】-数据库_MySQL之高级数据查询:去重复、组合查询、连接查询、虚拟表
简书作者:seay 文章出处: 关系数据库SQL之高级数据查询:去重复.组合查询.连接查询.虚拟表 回顾:[知识库]-数据库_MySQL之基本数据查询:子查询.分组查询.模糊查询 Learn [已经过 ...
- 关系数据库SQL之高级数据查询:去重复、组合查询、连接查询、虚拟表
前言 接上一篇关系数据库SQL之基本数据查询:子查询.分组查询.模糊查询,主要是关系型数据库基本数据查询.包括子查询.分组查询.聚合函数查询.模糊查询,本文是介绍一下关系型数据库几种高级数据查询SQL ...
- MSSQLServer基础05(联合查询,连接查询)
联合结果集union(集合运算符) 集合运算符是对两个集合操作的,两个集合必须具有相同的列数,列具有相同的数据类型(至少能隐式转换的),最终输出的集合的列名由第一个集合的列名来确定.(可以用来连接多个 ...
- 图解SQLSERVER联合查询和连接查询的区别
相信很多人都会用SQLSERVER联合查询和连接查询,但是用起来不一定都得心应手,对于其中的原理可能就模糊不清了,要想很牢固地掌握和运用SQL联合查询和连接查询机制,必须对其根本原理有很清晰认识, ...
随机推荐
- Linux文件属性及权限
一.Linux文件属性: 例如: drwxr-xr-x 2 hdy hdy 4096 11月 28 00:18 桌面 drwxr-xr-x 2 hdy hdy 4096 11月 28 00:18 桌面 ...
- 基本服务器的AAA实验
一.实验拓扑 二.网络地址分配 三.不同网段互相PING通 PC-A ping PC-B PC-A ping PC-C PC-B ping PC-C 四.配置过程 (1)在路由器R1上配置本地用户账号 ...
- Python基础面试,看这篇文章画重点吧,Python面试题No1
为什么有这个系列的文章 一直想写一些更加基础的文章,但是总是想不到好的点子,最近到了就业季,一大堆学生面临就业了,正好,从Python的面试题出发,分析和解答一些常见的面试题,并且总结一些文字. 每一 ...
- .net Lambda表达式与Linq (LINQ TO object)
Lambda表达式,是用来写匿名方法的. 在委托用得比较多,因为委托是传递方法的. 定义几个委托: public delegate void DoNoThing();//无参无返回值 publ ...
- 设计模式 | 工厂方法模式(factory method)
定义: 定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 结构:(书中图,侵删) 一个工厂的抽象接口 若干个具体的工厂类 一个需要创建对象的抽象接口 若干个 ...
- 解决ruby安装后无法添加淘宝gem源------------学习记录
使用sass ,需要安装ruby,会建议移除gem源,添加淘宝的gem源,但是淘宝的镜像源已经停止维护啦!!用https://gems.ruby-china.com 代替即可. 操作如下: 1)删除原 ...
- Android 项目中用得最多最火的第三方框架可能都在这里了
分类 二级分类 框架名称 简介 Star 数 最近更新 UI 刷新 SmartRefreshLayout 智能下拉刷新框架 14k 18天 UI 刷新 Android-PullToRefresh 比较 ...
- uboot的驱动模型理解
uboot的驱动模型,简称dm, 具体细节建议参考./doc/driver-model/README.txt 关于dm的三个概念: uclass:一组同类型的devices,uclass为同一个gro ...
- oracle 简单备注
1. 建立数据库 备注: 1) oracle 不同于mysql 可以直接create database 2) oracle 创建schema时对应一个用户,即该schema的访问用户,与用户一一对应: ...
- IoC和AOP的理解
spring 的优点?1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦 2.可以使用容易提供的众多服务,如事务管理,消息服务等 3.容器提供单例模式支持 4.容器提供了AOP技术,利用它很容易实 ...