Mysql-DQL查询
目录
1.DQL
数据查询语言,用来查询数据库中表的记录。
查询关键字:select
基本语法
SELECT
字段列表
FROM表名列表
WHERE条件列表
GROUP BY分组字段列表
HAVING分组后条件列表
ORDER BY排序字段列表
LIMIT分页参数
基本查询
1.查询多个字段
select 字段1, 字段2, 字段3 ... from 表名 ;
select * from 表名;
2.设置别名
select 字段1 [ AS 别名1 ] , 字段2 [ AS 别名2 ] ... from 表名;
select 字段1 [ 别名1 ] , 字段2 [ 别名2 ] ... from 表名;
3.去除重复记录
select distinct 字段列表 from 表名;
条件查询
关键字:where
- 用于检索数据表中符合条件的记录
- 搜索条件可由一个或多个逻辑表达式组成,结果一般为真或假
- 搜索条件的组成
- 逻辑操作符
- 比较操作符
语法:
select 字段列表 from 表名 where 条件列表 ;
条件:
比较运算符:
操作符名称 | 语法 | 描述 |
IS NULL | a IS NULL | 若操作符为NULL,则结果为真 |
IS NOT NULL | a IS NOT NULL | 若操作符不为NULL,则结果为真 |
BETWEEN | a BETWEEN b AND c | 若a范围在b与c之间则结果为真 |
LIKE | a LIKE b | SQL模式匹配,若a匹配b,则结果为真 |
IN | a IN (a1,a2,a3,….) | 若a等于a1,a2…中的某一个,则结果为真 |
逻辑运算符:
操作符名称 | 语法 | 描述 |
AND或&& | a AND b 或 a && b | 逻辑与,同时为真,结果才为真 |
OR或|| | a OR b 或 a||b | 逻辑或,只要一个为真,则结果为真 |
NOT或! | NOT a 或 !a | 逻辑非,若操作数为假,结果则为真 |
between and 范围查询
select 字段列1,字段2 ,…from 表名 where 字段x between 值1 and 值2
like 模糊查询
- 与 “ % ” 一起使用,表示匹配 0 或任意多个字符
- 与 “ _ ” 一起使用,表示匹配单个字符
eg:
select * from user where idcard like "%X";
in 范围查询
select 字段列1,字段2 ,… from 表名 where 字段x in ( 值1,值2,值3…)
NULL空值条件查询
- NULL代表”无值"
- 区别于零值0和空符串 ""
- 只能出现在定义允许为 NULL 的字段
- 需使用 is null 或 is not null 比较操作符去比较
聚合函数
将一列数据作为一个整体,进行纵向计算。
常见的聚合函数
函数 | 功能 |
count | 统计数量 |
max | 最大值 |
min | 最小值 |
avg | 平均值 |
sum | 求和 |
语法:
select 聚合函数(字段列表)from 表名;
注意:null值不参与计算
分组查询
关键字:group by
select 字段列表 from 表名 [where 条件 ] group by 分组字段名 [ having 分组后过滤条件 ];
where与having区别:
- 执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。
- 判断条件不同:where不能对聚合函数进行判断,而having可以。
注意:
- 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。
- 执行顺序:where > 聚合函数 > having
- 支持多字段分组, 具体语法为 : group by columnA,columnB
eg:
根据性别分组,统计男,女员工数量
select gender, count(*) from emp group by gender ;
根据性别分组 , 统计男性员工 和 女性员工的平均年龄
select gender, avg(age) from emp group by gender ;
查询年龄小于45的员工 , 并根据工作地址分组 , 获取员工数量大于等于3的工作地址
select workaddress, count(*) address_count from emp where age < 45 group by workaddress having address_count >= 3;
排序查询
关键字:order by
语法:
select 字段列表 from 表名 order by 字段1 排序方式1 , 字段2 排序方式2 ;
排序方式:
- ASC :升序(默认值)
- DESC :降序
如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序。
eg:根据年龄对公司的员工进行升序排序 , 年龄相同 , 再按照入职时间进行降序排序
select * from emp order by age asc , entrydate desc;
分页查询
关键字:limit (mysql)
语法:
select 字段列表 from 表名 limit 起始索引, 查询记录数 ;
注意事项
- 起始索引从0开始,起始索引 = (查询页码 - 1)* 每页显示记录数。
- 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT。
- 如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 10。
eg:
查询第1页员工数据, 每页展示10条记录
select * from emp limit 0,10;
select * from emp limit 10;
查询第2页员工数据, 每页展示10条记录 --------> (页码-1)*页展示记录数
select * from emp limit 10,10;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构