MySQL——单表查询
select 列的列表/* from 表名
[where 条件] --条件 对整张表的筛选
[group by 列名] --分组
[having 条件] --分组条件
[order by 列名…] --排序
[limit m,n] —分页可以没有,但是顺序不能改变
SQL编写顺序:select---->from---->where---->group by---->having---->order by---->limit
SQL执行顺序:from---->where---->group by---->having---->select---->order by---->limit
查询列
- 无条件查询
SELECT * FROM 表名; //查询全部列
SELECT 列名1,列名2,列名3 FROM 表名; //查询指定列
- 条件查询
利用where语句,实现条件的筛选
常见的运算符和关键字:
- =、!=、<>(不等于)、<、<=、>、>=
- BETWEEN…AND
- IN(set)
- IS NULL
- AND
- OR
- NOT
在有多个条件时,也会使用逻辑运算符:AND(&&) OR(||) NOT(!)
//书写格式
SELECT * FROM 表名
WHERE 条件;
模糊查询
在部分情况下,我们无法得知具体的查询条件,此时需要我们进行模糊查询
例如:我们在查询某个学生的信息时,不记得学生的全名,但记得他名字中的某个字,通过该字进行查询
模糊查询的关键字:LIKE
//查询名字中有z的学生
SELECT * FROM stu WHERE sname LIKE '%z%';
//其中“%”匹配0~n个任何字母。
//查询名字长度为3的学生
SELECT * FROM stu WHERE sname LIKE '___';
//其中`"_"`匹配任意一个字母,3个`"_"`表示3个任意字母。
去重查询
去除重复记录(两行或两行以上记录中系列的上的数据都相同)
关键字:DISTINCT
SELECT DISTINCT 列名 FROM 表名;
添加别名
SELECT 字段1 AS 别名1, 字段2 AS 别名2 ... FROM 表名;
或者
SELECT 字段1 别名1, 字段2 别名2 ... FROM 表名;
在最后的数据显示时,列名会变为别名,但实际的表的列名是不会发生改变的
排序
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1 , 字段2 排序方式2 ,...;
一般默认是升序
ASC:升序
DESC: 降序
- 升序排列可以不用声明
- 多字段排列时,先按照字段1进行排列,只有字段1 排列时遇到相同值才会根据字段排列
聚合函数
聚合函数是用来做纵向运算的函数:
将一列数据作为一个整体,进行纵向计算
函数 | 描述 |
---|---|
COUNT() | 统计指定列不为NULL的记录行数 |
MAX() | 计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算 |
MIN() | 计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算 |
SUM() | 计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0 |
AVG() | 计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0 |
语法
SELECT 聚合函数(字段列表) FROM 表名 ;
注意 : NULL值是不参与所有聚合函数运算的。
分组查询
关键字:GROUP BY 和 HAVING
SELECT 字段列表 FROM 表名 [ WHERE 条件 ] GROUP BY 分组字段名 [ HAVING 分组 后过滤条件 ];
注意事项:
- 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。
- 执行顺序: where > 聚合函数 > having 。
- 支持多字段分组, 具体语法为 : group by columnA,columnB
分页查询
关键字:LIMIT
SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数 ;
注意事项:
• 起始索引从0开始,起始索引 = (查询页码 - 1)* 每页显示记录数。
• 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT。
• 如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 10。
区别where和group by
where与having区别
- 执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组
之后对结果进行过滤。
- 判断条件不同:where不能对聚合函数进行判断,而having可以。