Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MySQL查询进阶相关sql语句

MySQL查询进阶相关sql语句

作者头像
菜菜cc
发布于 2022-11-15 13:08:06
发布于 2022-11-15 13:08:06
4.1K00
代码可运行
举报
运行总次数:0
代码可运行

条件查询

使用where子句对表中的数据筛选,结果为true的记录会出现在结果集中

比较运算符

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select * from students where age = 18;     -- =
select * from students where age > 18;     -- >
select * from students where age < 18;     -- <
select * from students where age >= 18;    -- >=
select * from students where age <= 18;    -- <=
-- 不等于有两种写法: !=<>
select * from students where age != 18;    -- !=
select * from students where age <> 18;    -- <>

逻辑运算符

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- and
-- 18岁到28岁之间
select * from students where age > 18 and age < 28;  
-- 18岁以上的女性
select * from students where age > 18 and gender = "女"; 

-- or
-- 18岁以上或者身高超过180(包含)
select * from students where age > 18 or height >= 180;    

-- not
-- 不在 18岁以上的女性 这个范围内的信息
select * from students where not (age > 18 and gender = "女");   
-- 不是小于或者等于18岁的女性
select * from students where (not age <= 18) and gender = "女";

模糊查询

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- like 
-- % 替换1个或者多个
-- _ 替换1-- 查询姓名中以"小"开始的名字
select name from students where name like "小%";

-- 查询姓名中有"小"的名字
select name from students where name like "%小%";

-- 查询有2个字的名字
select name from students where name like "__";

-- 查询有3个字的名字
select name from students where name like "___";

-- 查询至少有2个字的名字
select name from students where name like "__%";	


-- rlike 正则
-- 查询以"周"开始的名字
select name from students where name rlike "^周.*";

-- 查询以"周"开始, "伦"结尾的名字
select name from students where name rlike "^周.*伦$";

范围查询

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- in (12, 18, 34)  表示在一个集合内
-- 查询年龄为12, 18, 34的信息
select name, age from students where age = 18 or age = 34 or age = 12;
select name, age from students where age in (12, 18, 34);

-- not in  表示不在一个集合内
-- 查询年龄不是12, 18, 34的信息
select name,age from students where age not in (12, 18, 34);

-- between ... and .. .表示在一个连续的范围内
-- 查询年龄在1834之间的的信息
select name, age from students where age between 18 and 34;

-- not between ... and ...表示不在一个连续的范围内
-- 查询年龄不在在1834之间的的信息
select * from students where age not between 18 and 34;

空判断

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- is null  判空
-- 查询身高为空的信息
select * from students where height is null;

-- is not null  判非空
-- 查询身高不为空的信息
select * from students where height is not null;

排序

为了便于数据的显示,可以使用order by对数据进行排序

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- order by asc 或 order by desc
-- asc: 升序
-- desc: 降序


-- 查询年龄在1834岁之间的男性,按照年龄从小到到排序    
select * from students where (age between 18 and 34) and gender = "男" order by age asc;
-- asc可省略, 默认下升序
select * from students where (age between 18 and 34) and gender = "男" order by age;

-- 查询年龄在1834岁之间的女性,身高从高到矮排序
select * from students where (age between 18 and 34) and gender = "女" order by height desc;


-- order by 多个字段
-- 按照字段1进行排序,如果某些行字段1的值相同时,则按照字段2排序,以此类推...
-- select * from 表名 order by 字段1 asc | desc [, 字段2 asc | desc, ...]
-- 查询年龄在1834岁之间的女性,身高从高到矮排序, 如果身高相同的情况下按照年龄从小到大排序
select * from students where (age between 18 and 34) and gender = "女" order by height desc, id desc;

-- 查询年龄在1834岁之间的女性,身高从高到矮排序, 如果身高相同的情况下按照年龄从小到大排序, 
-- 如果年龄也相同那么按照id从大到小排序
select * from students where (age between 18 and 34) and gender = "女" order by height desc, age asc, id desc;
 
-- 按照年龄从小到大, 身高从高到矮的排序
select * from students order by age asc, height desc;

聚合函数

利用聚合函数可以统计数据. 一般情况下, 与分组结合使用, 单独使用没有意义

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- 总数 count(*)  括号中写信号或者字段名, 最终计算结果相同, 都是统计的查询后结果的行数
-- 查询学生总数
select count(*) from students;

-- 最大值 max(字段名)  求此字段的最大值
-- 查询女生的编号最大值
select max(id) from students where gender = "女";

-- 最小值 min(字段名)  求此字段的最小值
-- 查询未删除的学生最小编号
select min(id) from students where is_delete = 0;

-- 求和 sum(字段名)  求此字段值的总和
-- 查询男生的总年龄
select sum(age) from students where gender = "男";

-- 平均值 avg(字段名)  求此字段值的平均值
-- 查询未删除女生的编号平均值
select avg(id) from students where is_delete = 0 and gender = "女";
select sum(id) / count(*) from students where is_delete = 0 and gender = "女";

-- 四舍五入保留小数点n位 round(123.23, 1)   保留1位小数
-- 计算所有学生的平均年龄,保留2位小数
select round(sum(age) / count(*), 2) from students;

分组

使用group by将数据按照某个字段进行分组

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- 按照性别分组, 查询所有的性别
select gender from students group by gender;

-- 计算每种性别中的人数
select gender, count(*) from students group by gender;

-- 计算男性的人数
select gender, count(*) from students where gender = "男" group by gender;


-- group by + group_concat()
-- group_concat(字段名)会作为一个字段输出, 用来显示每一组的某字段的值的集合
-- 查询同种性别中的名字
select gender, group_concat(name, " ", age, " ", id) from students group by gender; 

-- group by + having
-- having 条件表达式: 在分组查询后用特定的条件筛选出符合条件的分组
-- having作用和where一样, 但having只能用于group by, 且放在group by之后
-- 查询平均年龄超过30岁的分组, 显示其性别和该性别中所有名字
select gender, group_concat(name), avg(age) from students group by gender having avg(age) > 30;

-- 查询每种性别中的人数多于2个的信息
select gender, group_concat(name) from students group by gender having count(*) > 2;

分页

但数据量过大时, 用limit对显示结果进行分组

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- limit start, count
-- 限制查询出来的数据个数   limit 2 显示查询后的前两条, 等价于 limit 0, 2
select * from students where gender = "男" limit 2;

-- 查询前5个数据
select * from students limit 0, 5;

-- 查询第6 - 10的数据
select * from students limit 5, 5;

-- 每页显示2个,显示第6页的信息, 按照年龄从小到大排序
-- limit (第n页 - 1) * 每页的个数, 每页的个数
-- 但注意limit不支持表达式, 即这样的 limit 2 * (6-1), 2 是错误的表达式
select * from students order by age asc limit 10, 2;

连接查询

当查询结果的字段来源于多张表时,可以将多张表连接成一个大的数据集,再选择合适的字段返回

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- 内连接查询  inner join ... on
-- 使用内连接查询班级表与学生表  
select * from students inner join classes on students.cls_id = classes.id;

-- 左连接查询  left join ... on
-- 使用左连接查询班级表与学生表
select * from students as s left join classes as c on s.cls_id = c.id;

-- 右连接查询  right join ... on
-- 使用右连接查询班级表与学生password表
select * from students as s right join classes as c on s.cls_id = c.id;

  • 内连接查询:查询的结果为两个表匹配到的数据
  • 左连接查询:查询的结果为两个表匹配到的数据,左表特有的数据,对于右表中不存在的数据使用null填充
  • 右连接查询:查询的结果为两个表匹配到的数据,右表特有的数据,对于左表中不存在的数据使用null填充

自关联

当前有中国省市区镇的数据库表areas, 表结构如下

title为当前地名, pid为它的上一级的地名的id

id

title

pid

1

浙江省

NULL

2

台州市

1

3

临海市

2

这就是自关联,表中的某一字段,关联了这个表中的另外一字段,但是它们的业务逻辑含义是不一样的,城市信息的pid引用的是省信息的id

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- 查询省的名称为“浙江省”的所有城市
select c.* from areas as c inner join areas as p on c.pid = p.id where p.title = '浙江省';

-- 查询市的名称为“台州市”的所有区县
select dis.* from areas as dis inner join areas as c on c.id = dis.pid where c.title = '台州市';

子查询

在一个select语句中嵌入另一个select语句, 那么被嵌入的select语句称之为子查询语句, 而最外层的select语句称之为主查询语句

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- 标量子查询: 子查询返回的结果是一个数据(一行一列)
-- 查询大于平均年龄的学生              (先查询平均年龄)
select * from students where age > (select avg(age) from students);

-- 列级子查询: 子查询返回的结果是一列(一列多行)
-- 查询还有学生在班的所有班级名字         (先在学生表中查找所有班级, 返回的是一列多行的班级id)
select name from classes where id in (select cls_id from students);

-- 行级子查询: 子查询返回的结果是一行(一行多列)
-- 查找班级年龄最大,身高最高的学生               (先查询最大的年龄和最高的身高, 返回的是一行两列: 身高, 年龄)
select * from students where (height, age) = (select max(height), max(age) from students);

本文作者: Ifan Tsai  (菜菜)

本文链接: https://cloud.tencent.com/developer/article/2164564

版权声明: 本文采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-03-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
<导图>Mysql常用查询语法
普通查询 查看整个表 格式: select * from 表名; 示例: select * from students; 查询指定字段 格式 select 字段名1,字段名2 from 表名; 示例 select id, name from students; 给字段起别名 格式 select 字段名1 as 新名字,字段名2 as 新名字 from 表名; 示例 select name as 姓名, age as 年龄 from students; 消除重复行 格式
zhaoolee
2018/04/19
8650
<导图>Mysql常用查询语法
【MySQL】DQL的总结和案例学习
Created with Raphaël 2.3.0 总结:要注意查询的内容是什么,是姓名和年龄还是员工信息,要分清楚。
ImAileen
2024/02/05
2290
【MySQL】DQL的总结和案例学习
MySQL数据库命令大全
--数据库操作前的准备 -- 创建数据库 -- create database python_test_1 charset=utf8;
用户1685462
2021/07/16
3.8K0
MySQL数据库基础学习(十七)
2). 查询性别为 男 ,并且年龄在 20-40 岁(含)以内的姓名为三个字的员工。
用户1289394
2023/01/05
4780
【MySQL】DQL-查询语句全解 [ 基础/条件/分组/排序/分页查询 ](附带代码演示&案例练习)
YY的秘密代码小屋
2024/04/02
3760
【MySQL】DQL-查询语句全解 [ 基础/条件/分组/排序/分页查询 ](附带代码演示&案例练习)
软件测试必备的数据库SQL查询语法
数据库技术从诞生到现在,在不到半个世纪的时间里,形成了坚实的理论基础、成熟的商业产品和广泛的应用领域。在现实工作中,我们的软件测试工作通常与数据库密切相关。所以作为一名合格的软件测试岗位工作者对于一些常用的SQL 查询语法必须要掌握:
小雯子打豆豆
2021/09/23
3K0
软件测试必备的数据库SQL查询语法
Mysql查询语句进阶知识集锦
上次咱们简单的学习了一下select的用法,一篇文章教会你进行Mysql数据库和数据表的基本操作,对数据库大概有了一些基本的了解。
前端皮皮
2021/03/25
1.8K0
mysql基础学习之DQL语句学习(三)
查询所有 年龄小于等于35岁员工 的 姓名 和 年龄 ,并对查询结果按 年龄升序 排序,如果 年龄相同按 入职时间 降序排序。
心安事随
2024/08/17
1470
mysql基础学习之DQL语句学习(三)
【MySQL】DQL-案例练习-DQL基本介绍&语法&执行顺序(代码演示)
YY的秘密代码小屋
2024/04/02
2310
【MySQL】DQL-案例练习-DQL基本介绍&语法&执行顺序(代码演示)
python技术面试题(七)--SQL语句
正文共: 6454 字 5 图 预计阅读时间: 17 分钟 我们后面查询用到的表: mysql> select * from t_score; +------+--------------+-----
小闫同学啊
2019/07/18
6730
python技术面试题(七)--SQL语句
MySQL
SQL是结构化查询语言,是一种用来操作RDBMS的数据库语言,当前关系型数据库都支持使用SQL语言进行操作,也就是说可以通过 SQL 操作 oracle,sql server,mysql,sqlite 等等所有的关系型的数据库
py3study
2020/01/16
1.6K0
MySQL
MySQL【二】---数据库查询详细教程{查询、排序、聚合函数、分组}
当数据量比较大的时候,千万别用 select * from student;会占用太多内存;因此采用条件查询;
汀丶人工智能
2022/12/21
2.2K0
MySQL【二】---数据库查询详细教程{查询、排序、聚合函数、分组}
SQL学习笔记四(补充-2)之MySQL多表查询
EXISTS关字键字表示存在。在使用EXISTS关键字时,内层查询语句不返回查询的记录。 而是返回一个真假值。True或False 当返回True时,外层查询语句将进行查询;当返回值为False时,外层查询语句不进行查询
Jetpropelledsnake21
2019/02/15
1.2K0
史上超强最常用SQL语句大全
关于查询语句有很多,这里基础的不再介绍。主要介绍排序查询、聚合函数、模糊查询、分组查询、分页查询、内连接、外连接、子查询
全栈程序员站长
2022/07/01
5550
MySQL基础:SQL分类DDL、DML、DQL、DCL;函数、约束、多表查询、事务、并发事务四大问题、事务隔离级别——脏写、脏读、不可重复读、幻读
mysqld负责监听客户端的连接请求,处理SQL查询,管理数据库文件,以及与数据库相关的其他任务。
寻求出路的程序媛
2024/05/16
1.5K0
MySQL基础:SQL分类DDL、DML、DQL、DCL;函数、约束、多表查询、事务、并发事务四大问题、事务隔离级别——脏写、脏读、不可重复读、幻读
MySQL基本命令-SQL语句
在数据库系统中,SQL语句不区分大小写(建议用大写) SQL语句可单行或多行书写,以“;”结尾 关键词不能跨多行或简写 用空格和缩进来提高语句的可读性 子句通常位于独立行,便于编辑,提高可读性 注释: SQL标准: /*注释内容*/ 多行注释 -- 注释内容 单行注释,注意有空格 MySQL注释: #
星哥玩云
2022/08/16
9000
收藏 | Mysql数据库基础-常用入门命令-干货
SQL,指结构化查询语言,全称是 Structured Query Language,是一种 ANSI(American National Standards Institute 美国国家标准化组织)标准的计算机语言,可以让我们可以处理数据库。
TCS-F
2019/04/17
1.8K0
收藏 | Mysql数据库基础-常用入门命令-干货
MySQL——DQL,DCL语言学习
DQL 英文全称是 Data Query Language( 数据查询语言 ) ,数据查询语言,用来查询数据库中表的记
网络豆
2023/10/17
2960
MySQL——DQL,DCL语言学习
Mysql基础操作(三)
count(card) 代表只统计card字段的个数,如果有null值不会被统计。
清菡
2020/12/02
5500
Mysql基础操作(三)
【MySQL】SQL语句查询、约束、备份与恢复
SELECT * FROM product ORDER BY price DESC;
陶然同学
2023/02/24
2.1K0
【MySQL】SQL语句查询、约束、备份与恢复
相关推荐
<导图>Mysql常用查询语法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验