Mysql查询
Mysql 查询
基本查询
- 查询所有字段
1 | select * from 表名; |
- 查询指定路段
1 | select 列1,列2,... from 表名; |
- 起别名
1 | -- 如果是单表查询 可以省略表明 |
- 消除重复行(去重)
1 | select distinct 列1,... from 表名; |
运算优先级
条件
使用 where 子句对表中的数据筛选,并将筛选结果为符合的输出。
where 支持多种运算符进行条件处理,如:
比较运算符 逻辑运算符 模糊查询 范围查询 空判断
优先级由高到低的顺序为:小括号,not,比较运算符,逻辑运算符
比较运算符
等于: =
|| 大于: >
|| 大于等于: >=
|| 小于: <
|| 小于等于: <=
|| 不等于: != 或 <>
– 基本语法 –
SELECT 字段 FROM 表 WHERE 某字段 比较运算符 条件
- 查询大于
1 | select * from student where id > 3; |
- 查询不等于
1 | select * from student where id != 3; |
- 查询姓名
1 | select * from student where name = '罗小黑'; |
- 查询未被删除
1 | # is_delete=1未被删除 =0则为已删除 |
逻辑运算符
and
|| or
|| not
– 基本语法 –
SELECT 字段 FROM 表 WHERE 条件 逻辑运算符 条件
- 查询版本是 AFC8 类型为华为的电脑
1 | select * from conputers where acg = 'AFC8' and types = '华为'; |
- 查询版本是 AFC8 的电脑 或 类型为华为的电脑
1 | select * from conputers where acg = 'AFC8' or types = '华为'; |
- 查询类型不为苹果的电脑
1 | select * from conputers where not types = '苹果'; |
模糊查询
使用 like 搭配通配符
'_' :
表示匹配任意一个字符,常用与充当占位符.
'%':
表示匹配 0 个或多个任意字符.
[ ] :
表示括号内所列字符中的一个(类似正则表达式).
[^ ] :
表示不在括号所列之内的单个字符。
escape:
取消%或_字符的通配符特性
– 基本语法 –SELECT 字段 FROM 表 WHERE 某字段 Like 条件
- 使用’_‘
1 | # 查询姓名为朱开头两个字的数据 |
- 使用’%’
1 | # 查询姓名为尘结尾的数据 |
- 使用 escape
1 | # 查询姓名中含有'%'的数据 |
范围查询
in
:表示查询在一个非连续的范围内
between...and...
:表示查询在一个连续的范围内
– 基本语法 –
in: SELECT 字段 FROM 表 WHERE 某字段 in(value1,value2...)
between…and…:SELECT 字段 FROM 表 WHERE 某字段 between value1 and value2
- 查询编号是 1 或 3 或 8 的学生
1 | select * from students where id in(1,3,8); |
查询编号为 3 至 8 的学生
between 可以连接多个 and,即可以添加多个判断条件
1 | select * from students where id between 3 and 8; |
- 搭配操作
1 | select * from WST where (AID between 1 and 20) and areas not in ('USA', 'CNA'); |
小技巧
and 比 or 的优先级高,如果同时出现并希望先运算 or,可以运用()小括号使用。
1 | select * from WST where (AID between 1 and 20) or areas = 'CNA'; |
空判断
null 为空
-> is null判空
|| is not null 判非空
– 基本语法 –
SELECT 字段 FROM 表 WHERE 某字段 is null
- 查询上午没有签到的学生
1 | select * from conputers where openpick is null; |
- 查询上午签到的学生
1 | select * from conputers where openpick is not null; |
排序
使用 ORDER BY
子句来设定你想按哪个字段哪种方式来进行排序 ,再返回搜索结果
在指定 ORDER BY
子句时,要把它放在最后(即最后一条子句)
使用 ASC
或 DESC
关键字来设置查询结果是按升序或降序排列 ,默认升序[DESC]
DESC
是DESCENDING
的缩写,这两个关键字都可以使用
– 基本语法 –
原:SELECT 字段 FROM 表 ORDER BY 某字段;
搭配关键字:SELECT 字段 FROM 表 ORDER BY 某字段 [ASC [DESC][默认 ASC]];
- 排序查询学生 id 与姓名
1 | select sid,sname from students order by sid,sname |
- 按指定列进行排序
1 | # 这里指的是先按3即sage排序 |
- 降序查询分数及格的学生
1 | select * from students where fration > 60 order by id desc; |
- 查询所有学生,先按年龄排序,后按身高排序
1 | select * from students order by age desc,height desc; |
聚合函数
聚合函数在数据库数据的查询分析中,应用十分广泛
- AVG() - 平均函数
1 | 语法: AVG([DISTINCT] expr) |
- MAX() / MIN() - 最大/ 最小函数
1 | 语法:select max(age)/min(age) from; |
- SUM() - 求和函数
1 | 语法:select sum(age) from student; |
- COUNT() - 总数函数
1 | 语法:select count(*) from student; |
- CONCAT() - 合并函数
1 | 语法:CONCAT(sal * 12 + 200); |
分组
Group By
将查询结果按照1个或多个字段进行分组,字段值相同的为一组
1 | SELECT column_name, function(column_name) |
group by + group_concat()
表示分组之后,根据分组结果,使用 group_concat(字段)来放置每一组的某字段的值的集合
1 | select gender,group_concat(id) from students group by gender; |
group by + 集合函数
可以通过集合函数来对这个分组完值的集合
做一些操作
1 | select gender,count(*) from students group by gender; |
group by + with rollup
在最后新增一行,来记录当前列里所有记录的总和
1 | select gender,count(*) from students group by gender with rollup; |
group by + having**
- having 条件表达式:用来分组查询后指定一些条件来输出查询结果
- having 作用和 where 一样,但
having只能用于group by
1 | select gender,count(*) from students group by gender having count(*)<7; |
having使用规范
1.having 只能用在 group by 之后,对分组后的结果进行筛选(即使用 having 的前提条件是分组)。
2.where 肯定在 group by 之前。
3.where 后的条件表达式里不允许使用聚合函数,而 having 可以。