【MySQL数据库】SQL查询语句总结

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 【MySQL数据库】SQL查询语句总结


一、查询数据

1.1 基本查询语句

MySQL中SELECT的基本语法形式如下:

SELECT 属性列表
FROM 表名
[WHERE 条件表达式1]
[GROUP BY 字段名1]
[ORDER BY 属性名2 [ASC|DESC]]
  • SELECT 关键字用于指定要查询的属性列表,可以是单个属性或多个属性,用逗号分隔。
  • FROM 关键字用于指定要查询的表名。
  • WHERE 子句用于筛选满足特定条件的记录。条件表达式可以是比较运算符(如 =, <, >)和逻辑运算符(如 AND, OR)的组合。
  • GROUP BY 子句用于按照指定字段对结果进行分组。通常与聚合函数(如 COUNT, SUM)一起使用。
  • ORDER BY 子句用于按照指定属性对结果进行排序。默认按照升序排序,可以使用 ASC 表示升序,DESC 表示降序。

从students表中查询出id,name,age 3个字段的索引记录:

select id,name,age from students;

从students表中查询age大于16的记录,按照age字段降序进行排序:

select id,name,age from students where age>16 order by age desc;

1.2 表单查询

使用“*”查询所有字段(*可以表示所有字段,但不能改变字段的排列顺序 ):

select * from students;

查看数据库中的表结构:

desc 表名;

查询指定字段

select 字段名1,字段名2 from 表名;

去除重复数值(字段名就是要去除重复数值的列

select distinct 字段名 from 表名;

1.3 WHERE子句

查询指定记录(Where 条件表达式):

select id,name,age from students where id=1;

1.3.1 IN关键字查询

IN关键字可以判断某个字段的值是否在指定的整合中。 如果字段的值在集合中,则满足查询条件,该记录将被查询出来;如果不在集合中,则不满足查询条件。其语法规则如下:

[NOT] IN (元素1,元素2....元素n)

集合中的元素为字符时必须加上引号

1.3.2 Between查询范围

判读字段的值是否在指定范围,语法规则如下:

[NOT] BETWEEN 取值1 AND 取值2

取值1:大于等于这个值

取值2:小于等于这个值

1.3.3 Like匹配查询

匹配字符串是否相等,语法规则如下:

[NOT] like ‘字符串’

此处LIKE与等于号(=)是等价的

使用like匹配带有通配符‘%’的字符串‘王%’,字符串中包含通配符时,‘=’不能代替like。

使用like匹配带有通配符‘_’匹配单个字符,下划线的用途与%一样,但下划线只匹配单个字符而不是多个字符。

1.3.4 AND多条件查询(等同于&&)

联合多个条件进行查询,语法规则如下:

条件表达式1 AND 条件表达式2

1.3.5 OR多条件查询(等同于||)

只要满足几个查询条件中的其中一个,记录就会被查询出来,语法规则如下:

条件表达式1 OR 条件表达式2

当AND与OR一起使用时,AND要比OR先运算。

1.3.6 LIMIT子句

LIMIT限制查询结果的数量。LIMIT不指定初始位置,从第一条记录开始显示。语法规则如下:

LIMIT 记录数
limit n,m 
n:开始位置
m:要检索的行数

limit检索出来的第一行为行0,而不是行1,因此,limit 1,1将检索出第二行而不是第一行。

1.3.7 对查询结果排序

ORDER BY 对记录进行排序。语法规则如下:

ORDER BY 属性名 [ASC | DESC]

ASC:升序(默认升序)

DESC:降序

可以给多个列排序,只需要指定列名,列名之间用逗号分开即可。

ORDER BY 和 LIMIT组合:能够找出一个列中最高或最低的值。

select 字段名 from 表名
order by 字段名 DESC|ASC
LIMIT 1;

1.3.8 分组查询

GROUP BY 将查询结果按某个字段或多个字段进行分组。字段中的值相等的为一组。

语法规则如下:

GROUP BY 属性名 [having 条件表达式]

二、集合函数

包括COUNT()、SUM()、AVG()、MAX()和MIN()。

当需要对表中的记录求和、求平均值、查询最大值和查询最小值等操作时,可以使用集合函数。GROUP BY关键字通常需要与集合函数起使用。

COUNT()用来统计记录的条数;

SUM()用来计算字段的值的总和;

AVG()用来计算字段的值的平均值;

MAX() 用来查询字段的最大值;

MIN()用来查询字段的最小值。

三、正则表达式查询

正则表达式是用某种模式去匹配一类字符串的一一个方式。例如,使用正则表达式可以查询出包含A、B和C其中任一字母的字符串。正则表达式的查询能力比通配字符的查询能力更强大,而且更加的灵活。正则表达式可以应用于非常复杂查询。 使用REGEXP关键字来匹配查询正则表达式。其基本形式如下:

属性名 REGEXP '匹配方式'

“属性名”参数表示需要查询的字段的名称;

“匹配方式” 参数表示以哪种方式来进行匹配查询。

"^"查询以特定字符或者字符串开头的记录。

"$"查询以特定字符或者字符串结尾的记录。

"."匹配字符串中的任意一个字符。

注:“.”和“_”的区别

两个都可以代替任意一个字符进行查询, 但“.”只能用于regexp关键字进行匹配。

"[字符集合]"匹配所包含的任意一个字符。

"[^字符集合]"匹配指定字符以外的字符。

匹配指定字符串

正则表达式可以匹配字符串。当表中的记录包含这个字符串时,就可以将该记录查询出来。如果指定多个字符串时,需要用符号“|”隔开。只要匹配这些字符串中的任意一个即可。

“*”和“+”

匹配多个字符,*和+都可以匹配多个该符号之前的字符。

“+”:至少表示一个字符

“*”:可以表示0个字符

‘{m}’或者’{m,n}’来指定字符串连续出现的次数

{m}:m是一个非负整数。匹配确定的 m 次。

{m,n}:m 和 n 均为非负整数,其中m <= n。

四、查询函数

4.1 联合查询 : UNION

并操作 union、交操作 intersect、差操作 except

UNION用于合并具有相同字段结构的两个表的内容,主要用在一个结果中集中显示不同表的内容,语法:

select * from venus1
union
select * from venus2

union查询默认不返回重复记录

union查询的表的字段必须一样

union查询的数据类型必须能兼容

#union查询结果只增加了行数而列数不变

4.2 组合查询

id = 1 order by 4 -- + 正常

id = 1 order by 5 -- + 异常

结论:当前语句查询了四列

4.3 嵌套查询

[NOT]IN、ANY、ALL、[NOT]EXISTS

1.子查询

2.子查询可以继续嵌套

3.子查询中不可以使用order by子句,只对最后结果排序

4.子查询要用括号括起来

子查询结果为集合时可用如下关键字判断:

[NOT]IN                               [不]包含其中

ANY//ALL                             任何一个//所有的

[NOT]EXISTS                      [不]存在

4.4 其它相关函数

left(s,n)

#返回字符串s最左边的字符( n是个数)。

right(s,n)

#返回字符串s最右边的字符。

substr(s,n,len) mid(s,n,len)

#截取字符串s的第n个字符,且截取长度为len。

lpad(string,length,’str2’) rpad(string,length,’str’)

#string:需要填充的字符串。length:填充之后的总长度 str:填充字符串,默认空格。

LOCATE(‘str’,’str1’) LOCATE(str,str1,pos) locate(‘a’,’locala’,5)

#返回str在str1中第一次出现的位置 pos--从pos位置开始检索。

insert(str1,pos,len,str2)

#str1:指定字符串 pos:开始被替换的位置 len:被替换字符串长度 str2:新字符串。

instr(field, str)

#返回field字符串中出现str字符串的位置。

position(str1 in str2)

#返回字符串中第一次出现的子字符串的位置,若没有返回0。

concat(str1, str2,...) select concat(“abc”,NULL,”fg”) NULL

#返回结果为连接参数产生的字符串。

concat_ws(separator, str1, str2, ...) select concat_ws(“+”,”123”,”345”) 123+345

#用第一个参数作为连接符号将字符串连接。

group_concat(str1)

#将group by产生的同一个分组中的值连接起来,返回一个字符串。

if(expr,v1,v2) select if(1<2,1,0);

#expr:条件 满足条件返回V1,不满足条件返回V2。

case when expr then v1 else v2 end

#满足expr,则返回V1,不满足则返回V2。

sleep(N)

#执行select sleep(N)可以让此语句运行N秒。

oct()

#转换为8进制。

ord()

#返回第一个字符串的第一个字符的ascii值。

hex()

#转换为16进制。

char()

#转换为字符串。

ascii()

#ASCII值。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
17天前
|
SQL 安全 Java
MyBatis-Plus条件构造器:构建安全、高效的数据库查询
MyBatis-Plus 提供了一套强大的条件构造器(Wrapper),用于构建复杂的数据库查询条件。Wrapper 类允许开发者以链式调用的方式构造查询条件,无需编写繁琐的 SQL 语句,从而提高开发效率并减少 SQL 注入的风险。
13 1
MyBatis-Plus条件构造器:构建安全、高效的数据库查询
|
9天前
|
SQL 前端开发 关系型数据库
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
39 9
|
11天前
|
缓存 监控 关系型数据库
如何优化MySQL查询速度?
如何优化MySQL查询速度?【10月更文挑战第31天】
36 3
|
13天前
|
存储 缓存 固态存储
怎么让数据库查询更快
【10月更文挑战第28天】
24 2
|
15天前
|
存储 缓存 关系型数据库
怎么让数据库查询更快
【10月更文挑战第25天】通过以上综合的方法,可以有效地提高数据库查询的速度,提升应用程序的性能和响应速度。但在优化过程中,需要根据具体的数据库系统、应用场景和数据特点进行合理的调整和测试,以找到最适合的优化方案。
|
16天前
|
SQL NoSQL 关系型数据库
2024Mysql And Redis基础与进阶操作系列(5)作者——LJS[含MySQL DQL基本查询:select;简单、排序、分组、聚合、分组、分页等详解步骤及常见报错问题所对应的解决方法]
MySQL DQL基本查询:select;简单、排序、分组、聚合、分组、分页、INSERT INTO SELECT / FROM查询结合精例等详解步骤及常见报错问题所对应的解决方法
|
15天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
76 1
|
17天前
|
SQL 数据采集 监控
局域网监控电脑屏幕软件:PL/SQL 实现的数据库关联监控
在当今网络环境中,基于PL/SQL的局域网监控系统对于企业和机构的信息安全至关重要。该系统包括屏幕数据采集、数据处理与分析、数据库关联与存储三个核心模块,能够提供全面而准确的监控信息,帮助管理者有效监督局域网内的电脑使用情况。
15 2
|
16天前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
191 2
|
17天前
|
SQL 关系型数据库 数据库
PostgreSQL性能飙升的秘密:这几个调优技巧让你的数据库查询速度翻倍!
【10月更文挑战第25天】本文介绍了几种有效提升 PostgreSQL 数据库查询效率的方法,包括索引优化、查询优化、配置优化和硬件优化。通过合理设计索引、编写高效 SQL 查询、调整配置参数和选择合适硬件,可以显著提高数据库性能。
108 1