当前位置: 首页 > news >正文

MySQL - 单表查询

DQL (数据查询语言)是用来查询数据库表中的记录的操作。在实际的业务系统中,查询操作的频率远远高于增删改。常见的查询操作包括条件查询、排序、分组等。

1. DQL 语法

SELECT 字段列表 FROM 表名列表 [WHERE 条件列表] [GROUP BY 分组字段] 
[HAVING 分组后条件] [ORDER BY 排序字段] [LIMIT 分页参数];

根据不同的需求,可以组合使用这些子句。

2. 基本查询

基本查询指的是不带任何条件的查询操作:

SELECT 字段1, 字段2 FROM 表名;
SELECT * FROM 表名;  -- 查询所有字段,开发中尽量少用
select 字段1 [ as 别名1 ] , 字段2 [ as 别名2 ] from 表名; --设置别名
select distinct 字段列表 from 表名; -- 去除重复记录

3. 条件查询

条件查询通过 WHERE 子句进行筛选,常用运算符包括比较运算符(><=<>LIKE 等)和逻辑运算符(ANDORNOT)。例如:

SELECT * FROM tb_emp WHERE name = '张三';  -- 查询姓名为张三的员工
SELECT * FROM tb_emp WHERE entrydate BETWEEN '2000-01-01' AND '2010-01-01';  -- 查询入职时间在2000-2010年的员工

学习条件查询就是学习条件的构建方式,而在SQL语句当中构造条件的运算符分为两类:

(1)比较运算符

(2)逻辑运算符

4. 聚合函数

前面的查询都是横向查询,就是根据条件一行一行的进行判断,而使用聚合函数查询就是纵向查 询,它是对一列的值进行计算,然后返回一个结果值。(将一列数据作为一个整体,进行纵向计算)

聚合函数用于对一列数据进行统计操作,常用的函数有:

  • COUNT:统计行数

  • SUM:求和

  • AVG:计算平均值

  • MAX:求最大值

  • MIN:求最小值

select 聚合函数(字段列表) from 表名 ;SELECT COUNT(*) FROM tb_emp;

5. 分组查询

分组其实就是按列进行分类(指定列下相同的数据归为一类),然后可以对分类完的数据进行合并计算。

分组查询通常会使用聚合函数进行计算。

分组查询将数据按某个字段分类,可以结合聚合函数使用。例如,按性别统计员工数量:

SELECT gender, COUNT(*) FROM tb_emp GROUP BY gender;select 字段列表 from 表名 [where 条件] group by 分组字段名 [having
分组后过滤条件];

注意事项:

分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义

执行顺序:where > 聚合函数 > having

wherehaving区别

(1)执行时机不同

where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。

(2)判断条件不同

where不能对聚合函数进行判断,而having可以。

6. 排序查询

排序查询通过 ORDER BY 子句指定字段升序(ASC)或降序(DESC)排序。例如,按入职时间升序排列:

SELECT * FROM tb_emp ORDER BY entrydate ASC;select 字段列表
from 表名
[where 条件列表]
[group by 分组字段 ]
order by 字段1 排序方式1 , 字段2 排序方式2 … ;

排序方式: ASC :升序(默认值,可以不写)                 DESC:降序

注意事项:如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序

7. 分页查询

分页查询在业务系统中非常常见,MySQL 使用 LIMIT 进行分页:

SELECT * FROM tb_emp LIMIT 0, 5;  -- 查询第1页,每页5条记录
SELECT * FROM tb_emp LIMIT 5, 5;  -- 查询第2页,每页5条记录select 字段列表 from 表名 limit 起始索引, 查询记录数 ;

注意事项:

1. 起始索引从0开始。 计算公式 : 起始索引 = (查询页码 - 1* 每页显示记录数

2. 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT

3. 如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 条数


http://www.mrgr.cn/news/38207.html

相关文章:

  • QQ机器人搭建
  • docker build 有时候不展示命令的输出情况,怎么办?
  • 尚硅谷vue3+TypeScript笔记大全
  • 五.海量数据实时分析-FlinkCDC+DorisConnector实现数据的全量增量同步
  • 递归算法详解
  • 如果只能保留一个复制粘贴软件,那一定是它pastemate
  • LeetCode讲解篇之5. 最长回文子串
  • 笔试练习day6
  • Mysql优化(常见优化)
  • 基于Java的停车场管理微信小程序 停车场预约系统【源码+文档+讲解】
  • [大语言模型-论文精读] 大语言模型是单样本URL分类器和解释器
  • <<迷雾>> 第 2 章 用电来表示数 示例电路
  • 深度学习与数学归纳法
  • springboot+vue+java校园共享厨房菜谱系统
  • feign的全局拦截器和局部拦截器
  • 为啥我关不掉页面?Chrome扩展开发中的那些坑
  • LLM大模型学习:致AI新手掌握这些经验,助你少走三年弯路!
  • 纠删码参数自适应匹配问题ECP-AMP实验方案(一)
  • Java实现找色和找图功能
  • 股票实时行情接口,私募量化软件的交易核心是什么