#### 基本语法(查询所有字段)
~~~
select * from 表名;
~~~
#### 基本语法(根据字段查询value)
~~~
select 字段1,字段2,字段3 from 表名;
~~~
#### 完整的数据查询
~~~
select 选项 字段列表 from 数据源 where条件 group by分组 having条件 order by排序 limit限制;
~~~
~~~
select * from 数据源; //这部分是查询主句
~~~
~~~
where条件 group by分组 having条件 order by排序 limit限制; //这部分是条件查询五子句
~~~
#### select选项 : 系统该如何对待查询得到的结果.
1. all : 默认的,表示保存所有的记录.
2. distinct : 去重,去除重复的记录(所有字段都是重复的),只保留一条.
#### 去重
~~~
select distinct * from 表名;
~~~
#### 字段别名
有的时候需要从多张表获取数据,在获取数据的时候,可能存在不同表中有同名的字段,需要将同名的字段命名成不同名的:别名 alias .
~~~
select 字段名 as 别名 from 表名;
~~~
#### from :
1. from 是为前面的查询提供数据 : 数据源只要是一个符合二维表结构的数据即可.
#### 多表数据
~~~
select * from 表1,表2;
~~~
结果:两张表的记录数相乘,字段数拼接
本质:从第一张表取出一条记录,去拼凑第二张表的所有记录,保留所有结果。得到的结果在数学上有一个专业的说法:笛卡尔积,这个结果出了给数据库造成压力,没有其他意义:应该尽量避免出现笛卡尔积.
#### 动态数据
1. from 后面跟的数据不是一个实体表,而是一个从表中查询出来得到的二维结果表(子查询)
语法:
~~~
select * from (select 字段列表 from 表) as 别名;
~~~
#### where子句(判断最原始的数据)
1. 用来从数据表获取数据的时候,然后进行条件筛选.
2. 数据获取原理 : 针对表去对应的磁盘处获取所有的记录(一条条获取的),where的作用就是在拿到一条结果后就进行判断,判断是否符合条件,如果符合就保存下来,如果不符合就直接舍弃(不放到内存中,放到内存中的都是最终要展示给用户看的).
3. where本身不能进行判断, 而是通过运算符进行结果比较来判断数据.
#### group by子句
语法:
~~~
group by 字段名
~~~
1. group by 表示分组的含义,根据指定的字段,将数据进行分组,**分组的目的是为了统计**.
2. Group by是为了分组后进行数据统计的,如果只是想看数据显示,那么group by没什么含义:group by将数据按照指定的字段分组之后,只会保留每组的第一条记录.
3. 利用一些统计函数:(聚合函数)
* count():统计每组中的数量,如果统计目标是字段,那么不统计为空NULL字段,如果为*那么代表统计记录
* avg():求平均值.
* sum():求和.
* max():求最大值.
* min():求最小值.
* group_concat : 为了将分组中指定的字段进行合并(字符串拼接).
#### 多分组
将数据按照某个字段进行分组之后,对已经分组的数据进行再次分组.
语法:
~~~
group by 字段1,字段2,字段3
~~~
#### 分组排序
Mysql中,分组默认有排序的功能:按照分组字段进行排序,默认是升序.
语法:
~~~
group by 字段 [ asc | desc ]
~~~
#### having字句
Having的本质和where一样,是用来进行数据条件筛选.
1. Having是在group by子句之后:可以针对分组数据进行统计筛选,但是where不行.
2. Where不能使用聚合函数:聚合函数是用在group by分组的时候,where已经运行完毕.
3. Having在group by分组之后,可以使用聚合函数或者字段别名(where是从表中取出数据,别名是在数据进入到内存之后才有的).
4. 强调:having是在group by之后,group by是在where之后:where的时候表示将数据从磁盘拿到内存,where之后的所有操作都是内存操作.
#### order by 字句
order by排序:根据校对规则对数据进行排序
语法
~~~
order by 字段 [ asc | desc ]; //asc升序,默认的
~~~
1. Order by也可以像group by一样进行多字段排序:先按照第一个字段进行排序,然后再按照第二个字段进行排序。
~~~
order by 字段1 规则,字段2 规则;
~~~
#### limit 子句
纯粹的限制获取的数量:从第一条到指定的数量.
语法 :
~~~
limit offset length //offset:偏移量(从哪开始) , length :长度(获取多少条).
~~~
1. Limit通常在查询的时候如果限定为一条记录的时候,使用的比较多:有时候获取多条记录并不能解决业务问题,但是会增加服务器的压力.
2.
- 数据库介绍
- 数据库基本概念
- SQL介绍
- MySQL服务端架构
- 库操作
- 表操作
- 字段类型
- 整数类型
- 小数类型
- 字符串类型
- 日期/时间类型
- json类型
- 字段属性
- Null
- 默认值
- 列描述
- 主键
- 自动增长
- 唯一键
- 数据库基础操作
- 增
- 删
- 改
- 查
- 运算符
- 算术运算符
- 比较运算符
- 逻辑运算符
- in运算符
- is运算符
- like运算符
- 高级查询
- 联合查询
- 连接查询
- 交叉连接
- 内连接
- 外连接
- Using关键字
- 子查询
- 标量子查询
- 列子查询
- 行子查询
- 表子查询
- exists子查询
- 子查询特定关键字
- 用户权限管理
- 用户管理
- 权限管理
- 外键
- 外键操作
- 外键基本要求
- 约束
- 视图
- 事务安全
- 自动事务
- 手动事务
- 事务特点
- 变量
- 系统变量
- 会话变量
- 局部变量
- 流程结构
- if分支
- while循环
- 函数
- 内置函数
- 字符串函数
- 时间函数
- 数学函数
- 其他函数
- 存储过程
- 与函数的区别
- 存储过程操作
- 存储过程的形参类型
- 触发器
- 触发器概念
- 触发器操作