MySQL数据库—DQL查询语句(一篇教会你快速找到想要的数据)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: MySQL数据库—DQL查询语句(一篇教会你快速找到想要的数据)

▐ 前言:

•  DQL全称 Data Query Language 数据查询语言

•  可以从一个表中查询数据,也可以从多个表中查询数据。

•  基本语法:select 查询的列  from 表名  where 条件   排序   数量限制   分组......

📖 首先让我们先创建一个表,本篇文章的查询都以此表为例

-- 创建一个学生表
CREATE TABLE student(
 
num INT PRIMARY KEY AUTO_INCREMENT,-- 学号 -主键
 
NAME VARCHAR(10) NOT NULL,         -- 名字    
gender CHAR(1) NOT NULL,           -- 性别    
score INT NOT NULL,                -- 分数
birthday DATE,                     -- 出生日期
height DECIMAL(3,2)                -- 身高
 
) 
 
-- 插入数据
INSERT INTO student(NAME,gender,score,birthday,height)
VALUE
('一鸣','男',84,'2005-4-5','1.75'),
('张三','男',76,'2005-7-4','1.81'),
('小李','女',68,'2005-1-12','1.71'),
('小张','女',54,'2004-8-23','1.64'),
('李四','男',90,'2004-9-6','1.68'),
('张三','男',80,'2006-12-9','1.77')

      就此我们的表就创建完成了,接下来会讲解对表的各种查询操作,上船~启航!

▐ 特定列查询

select  查询列表  from  表名

-- 查找name,score列
SELECT NAME,score FROM student
-- 查找所有列 *
SELECT * FROM student

▐ 逻辑处理

•  case  when  条件  then 结果1 else 结果2  end   可以有多个when

-- case  when  条件  then 结果1 else 结果2  end    可以有多个when
SELECT NAME ,(CASE WHEN score>=90 THEN '优秀'
                  WHEN score>80 AND score<90 THEN'良好'
                  ELSE '一般' END)AS '等级'FROM student
-- 使用as为列重命名

▐ 字符函数操作

 单行字符函数--会对查询的每条记录进行操作

 -- length():获取参数值的字节个数
 SELECT NAME,LENGTH(NAME) FROM student
 
 -- char_length()获取参数值的字符个数
  SELECT NAME,CHAR_LENGTH(NAME)AS NAME,gender FROM student
 
 -- concat(str1,str2,.....):拼接字符串  as 别名
 SELECT num,CONCAT(NAME,':',gender)AS NAME FROM student
 
-- upper()/lower():将字符串变成大写/小写
SELECT UPPER(NAME),LOWER(NAME) FROM student
 
-- substring(str,pos,length):截取字符串 位置从1开始
SELECT SUBSTRING(NAME,2,3) FROM student
 
-- instr(str,指定字符):返回子串第一次出现的索引(indexof()),如果找不到返回0
SELECT INSTR(NAME,'三') FROM student
 
-- trim(str):去掉字符串前后的空格或子串,trim(指定子串 from 字符串)
SELECT CHAR_LENGTH(TRIM(NAME)) FROM student
SELECT  TRIM('张' FROM NAME)  FROM student
 
 
-- lpad(str,length,填充字符):用指定的字符实现左填充将str填充为指定长度
SELECT LPAD(NAME,5,'a') , RPAD(NAME,5,'b')FROM student
-- rpad(str,length,填充字符):用指定的字符实现右填充将str填充为指定长度
 
-- replace(str,old,new):替换,替换所有的子串
SELECT REPLACE(NAME,'一','I') FROM student                  

分组函数统计

 • sum 求和、avg 平均值、max 最大值、min 最小值、count 计数

-- sum 求和、avg 平均值、max 最大值、min 最小值、count 计数
 -- sum(),avg()只能用于数值类型
 -- max(),min()可以适用于所有类型
 -- count统计行数
 -- count(*) count(1) count(列名) 列的值为空不统计
 
SELECT SUM(height),AVG(height),MAX(height),MIN(height),COUNT(*) FROM student
 -- 查询身高最高的
SELECT * FROM student WHERE height =(SELECT MAX(height)FROM student)

数学函数

 

 round( , 保留位数 )四舍五入

 

 ceil向上取整

 

 floor向下取整  

 

 truncate 截断,不会进行四舍五入

 mod(被除数,除数)

 

 rand()获取随机数 0~1之间的小数

-- round(数值):四舍五入
SELECT NAME,ROUND(height) FROM student
-- 指定保留小数位数
SELECT NAME,ROUND(height,1) FROM student
 
-- ceil(数值):向上取整,返回>=该参数的最小整数
 SELECT NAME,CEIL(height),FLOOR(height) FROM student
 
-- floor(数值):向下取整,返回<=该参数的最大整数
-- truncate(数值,保留小数的位数):截断,小数点后截断到几位, 不会四舍五入
SELECT NAME,TRUNCATE(height,1) FROM student
 
-- mod(被除数,除数):取余,被除数为正,则为正;被除数为负,则为负
SELECT NAME, MOD(num,3) FROM student
 
-- rand():获取随机数,返回0-1之间的小数
SELECT NAME, RAND() FROM student

▐ 日期函数

 str_to_date(字符串格式日期,格式):将日期格式的字符转换成指定格式的日期

 date_format(日期列,格式):将日期转换成字符串

 datediff(big,small):返回两个日期相差的天数

-- 日期格式化
SELECT NAME, YEAR(birthday),MONTH(birthday),DAY(birthday) FROM student
 
-- 将字符串格式化为日期类型
SELECT STR_TO_DATE('2001-2-2','%Y-%m-%d') FROM student 
 
 -- 将日期格式化为指定的字符串
SELECT DATE_FORMAT(birthday,'%Y-%m') FROM student
 
-- 计算两个日期之间相差的天数
SELECT DATEDIFF(CURDATE(),birthday) FROM student

日期格式:

条件查询

•  使用WHERE 子句,将不满足条件的行过滤掉,WHERE 子句紧随 FROM 子句


•  语法:select <结果列>  from <表名>  where <条件>


•  比较符号:   =  ,   != 或<>  ,   >  ,   <  ,   >=  ,   <=

-- select 结果列 from 表名 where 条件
 SELECT * FROM student WHERE num =2

•  逻辑运算:  and (与)     or (或)     not (非)

 -- and 所有条件都满足 or满足其一即可
 SELECT * FROM student WHERE gender ='男'AND height>=1.75

between ... and ...  两者之间  ( 包含临界值 )

 -- 包含临界值
 SELECT * FROM student WHERE height BETWEEN 1.70 AND 1.85

•  in   判断某字段的值是否属于in列表中的某一项

 -- in (等价or) 否定在in前加not
 SELECT * FROM student WHERE height IN(1.71,1.81)

 IS NULL(为空的)或 IS NOT NULL(不为空的)

 -- is (not) null
 SELECT * FROM student WHERE address IS NULL

模糊查询:like  (效率低很少用)

 -- 模糊查询(效率低很少用)   %通配符
 -- like
 SELECT * FROM student WHERE NAME LIKE '张%'

排序

•  查询结果排序使用 ORDER BY          order by 排序列 ASC/DESC

•  ASC 升序 (默认)       DESC 降序

•  可以给多个排序条件 (什么排序都没有,默认按主键升序排序)

-- ASC 升序(默认)    DESC降序
 SELECT * FROM student ORDER BY height DESC
 
 SELECT * FROM student ORDER BY height ASC
 -- 可以给多个排序条件

数量限制

•  对查询的显示结果限制数目。limit 开始位置 , 查询的数量  (sql语句最末尾位置)

•  实际应用场景:数据分页显示

-- limit 开始位置,查询的数量
 SELECT * FROM student LIMIT 0,2
 SELECT * FROM student LIMIT 2,2

📖 若设n为分页的页数,m为查询的数量,则总数为 (n-1)*2

合并

•  union        合并多个查询结果,可以去除重复数据.

•  union all   只合并不去重 (效率更高)

📖     [SQL 语句 1]                     [SQL 语句 1]


         UNION                              UNION ALL


         [SQL 语句 2]                     [SQL 语句 2]


 注意:合并时要求结果列相同.

分组查询

 •  语法:select  列  from  表  where 筛选条件 group by 分组的列表  having  分组后的筛选

-- 只筛选出同名的人
SELECT COUNT(*),NAME FROM student GROUP BY NAME HAVING COUNT(*)>1 
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
27天前
|
人工智能 安全 机器人
无代码革命:10分钟打造企业专属数据库查询AI机器人
随着数字化转型加速,企业对高效智能交互解决方案的需求日益增长。阿里云AppFlow推出的AI助手产品,借助创新网页集成技术,助力企业打造专业数据库查询助手。本文详细介绍通过三步流程将AI助手转化为数据库交互工具的核心优势与操作指南,包括全场景适配、智能渲染引擎及零代码配置等三大技术突破。同时提供Web集成与企业微信集成方案,帮助企业实现便捷部署与安全管理,提升内外部用户体验。
无代码革命:10分钟打造企业专属数据库查询AI机器人
|
2月前
|
SQL 关系型数据库 MySQL
菜鸟之路Day30一一MySQL之DML&DQL
本文介绍了MySQL中DML(数据操作语言)和DQL(数据查询语言)的核心用法。DML主要包括插入(insert)、更新(update)和删除(delete)语句,通过具体示例演示了如何对表数据进行增删改操作。DQL则聚焦于数据查询,涵盖基本查询、条件查询、聚合函数、分组查询、排序查询和分页查询等内容。文章通过丰富的SQL语句实例,帮助读者掌握如何高效查询和操作数据库中的数据,适合初学者学习和实践。
84 12
|
3月前
|
存储 缓存 数据库
数据库数据删除策略:硬删除vs软删除的最佳实践指南
在项目开发中,“删除”操作常见但方式多样,主要分为硬删除与软删除。硬删除直接从数据库移除数据,操作简单、高效,但不可恢复;适用于临时或敏感数据。软删除通过标记字段保留数据,支持恢复和审计,但增加查询复杂度与数据量;适合需追踪历史或可恢复的场景。两者各有优劣,实际开发中常结合使用以满足不同需求。
202 4
|
3月前
|
并行计算 关系型数据库 MySQL
如何用 esProc 将数据库表转储提速查询
当数据库查询因数据量大或繁忙变慢时,可借助 esProc 将数据导出为文件进行计算,大幅提升性能。以 MySQL 的 3000 万行订单数据为例,两个典型查询分别耗时 17.69s 和 63.22s。使用 esProc 转储为二进制行存文件 (btx) 或列存文件 (ctx),结合游标过滤与并行计算,性能显著提升。例如,ctx 并行计算将原查询时间缩短至 0.566s,TopN 运算提速达 30 倍。esProc 的简洁语法和高效文件格式,特别适合历史数据的复杂分析场景。
|
19天前
|
关系型数据库 MySQL 数据库
MySQL报错:未知系统变量'tx_isolation'及隔离级别查询
记住,选择合适的隔离级别,就像是在风平浪静的湖面上找到适合的划船速度——既要快到能赶上午饭(性能),又不至于翻船(数据一致性问题)。
41 3
|
1月前
|
存储 SQL Java
数据存储使用文件还是数据库,哪个更合适?
数据库和文件系统各有优劣:数据库读写性能较低、结构 rigid,但具备计算能力和数据一致性保障;文件系统灵活易管理、读写高效,但缺乏计算能力且无法保证一致性。针对仅需高效存储与灵活管理的场景,文件系统更优,但其计算短板可通过开源工具 SPL(Structured Process Language)弥补。SPL 提供独立计算语法及高性能文件格式(如集文件、组表),支持复杂计算与多源混合查询,甚至可替代数据仓库。此外,SPL 易集成、支持热切换,大幅提升开发运维效率,是后数据库时代文件存储的理想补充方案。
|
2月前
|
缓存 JSON 关系型数据库
MySQL 查询优化分析 - 常用分析方法
本文介绍了MySQL查询优化分析的常用方法EXPLAIN、Optimizer Trace、Profiling和常用监控指标。
|
4月前
|
SQL 关系型数据库 MySQL
如何优化SQL查询以提高数据库性能?
这篇文章以生动的比喻介绍了优化SQL查询的重要性及方法。它首先将未优化的SQL查询比作在自助餐厅贪多嚼不烂的行为,强调了只获取必要数据的必要性。接着,文章详细讲解了四种优化策略:**精简选择**(避免使用`SELECT *`)、**专业筛选**(利用`WHERE`缩小范围)、**高效联接**(索引和限制数据量)以及**使用索引**(加速搜索)。此外,还探讨了如何避免N+1查询问题、使用分页限制结果、理解执行计划以及定期维护数据库健康。通过这些技巧,可以显著提升数据库性能,让查询更高效流畅。
|
4月前
|
数据库
【YashanDB知识库】数据库用户所拥有的权限查询
【YashanDB知识库】数据库用户所拥有的权限查询
|
3月前
|
人工智能 关系型数据库 分布式数据库
让数据与AI贴得更近,阿里云瑶池数据库系列产品焕新升级
4月9日阿里云AI势能大会上,阿里云瑶池数据库发布重磅新品及一系列产品能力升级。「推理加速服务」Tair KVCache全新上线,实现KVCache动态分层存储,显著提高内存资源利用率,为大模型推理降本提速。

推荐镜像

更多