一. 单表查询
-
查询所有字段
在select语句中用*通配符查询所有字段:select * from 表名;
在select语句中指定所有字段:select 字段1,字段2,...,字段n from 表名
-
查询指定字段
查询单个字段:select 字段 from 表名
查询多个字段:select 字段1,字段2,...,字段n from 表名
-
查询指定记录
select 字段1,字段2,...,字段n from 表名 where 查询条件
-
带in关键字的查询
举例:select id,name,price from 表名 where id in(10,20)order by name
-
带between and的范围查询
举例:select id,name,price from 表名 where id between 1 and 5
-
带like的字符匹配查询
(1)% 通配符,可匹配任意长度的字符
查询以a开头的name:select id,name from 表名 where name like 'a%'
查询以a开头结尾的name:select id,name from 表名 where name like 'a%b'
(2)_ 通配符,一次只能匹配任意一个字符
查询以a结尾,且a前只有两个字母的name:select id,name from 表名 where name like '--b'
-
查询空值
举例:select id,name,price from 表名 where id is null
-
带and的多条件查询
举例:select id,name,price from 表名 where id = ‘1’ and price > 2
-
带or的多条件查询
举例:select id,name,price from 表名 where id = ‘1’ or id = '3'
-
查询结果不重复
select distinct 字段 from 表明
-
对查询结果排序
(1)单列排序
select 字段1 from 表名 order by 字段1
(2)多列排序
select 字段1,字段2 from 表名 order by 字段1,字段2
(3)指定方向排序
默认是升序,可通过desc实现降序:select 字段1 , 字段2 from 表名 order by 字段1 desc
-
分组查询
[group by 字段] [having <条件表达式>]
(1)创建分组
举例1:select name, count(*) as total from zoo group by name
【拓展】count()返回某列的行数
count(*):计算表的总行数,不忽略空值;
count(字段名):计算指定列下总的行数,忽略空值;举例2:可使用group_by 将每个分组中各个字段的值显示出来
select name, group_by (id) as names from zoo group by name
(2)使用having过滤分组
group by 和having共同限定显示记录所需满足的条件,且只显示满足条件的分组。
select name, group_by (id) as names from zoo group by name having count(id) > 2
【拓展】where和having的区别?
二者均用来过滤数据。having在数据分组之后进行过滤来选择分组,而where是在分组之前用来选择记录,且where排除的记录不包括在分组中。(3)使用with rollup来统计记录数量
select name ,count (*)as total from zoo group by name with rollup
(4)多字段分组
select * from 表名 group by 字段1,字段2,... ,字段n
(5)与order by组合使用
⚠️rollup和order by互斥 -
使用limit限制查询结果的数量
limit [位置偏移量,] 行数
举例:从第三个记录开始,显示之后的四条记录
select * from 表名 limit 3, 4
二. 使用聚合函数查询
函数 | 作用 |
---|---|
avg() | 返回某列的平均值 |
count() | 返回某列的行数 |
max() | 返回某列的最大值 |
min() | 返回某列的最小值 |
sum() | 返回某列值的和 |
三. 连接查询
-
内连接查询
只有满足条件的记录才显示 -
外连接查询
左连接:返回包括左表中的所有记录和右表中连接字段相等的记录;
右连接:返回包括右表中的所有记录和左表中连接字段相等的记录; -
复合条件连接查询
四. 子查询
- 略
五. 合并查询结果
-
利用union关键字,可给出多条select语句,并将查询结果组合成结果集。
-
合并时,两个表对应的列数和数据格式必须相同;
-
union不使用关键字all,执行时候删除重复的记录,返回的行都是唯一的;
-
使用all关键字,不删除重复行也不会结果进行自动排序。
select column,...from table1 union [all] select column,...from table2
【拓展】
-
distinct可应用于所有列吗?
应用于所有列。 -
order by和limit能混合使用吗?
使用order by时,需保证在from之后,使用limit时,需保证在order by 之后。 -
什么时候使用引号?
单引号是用来限定字符串,将值于字符串比较需要单引号,于数值比较则不需要。 -
使用通配符格式正确,却没有查找出符合条件的记录?
可能是不小心把两端带有空格的记录保存到记录中。如like‘%a’匹配时,e前多了一个空格。