前往小程序,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
运行
复制
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
运行
复制
-- 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
运行
复制
-- 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
运行
复制
-- 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
运行
复制
-- is null  判空
-- 查询身高为空的信息
select * from students where height is null;

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

排序

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

代码语言:javascript
代码运行次数:0
运行
复制
-- 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
运行
复制
-- 总数 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
运行
复制
-- 按照性别分组, 查询所有的性别
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
运行
复制
-- 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
运行
复制
-- 内连接查询  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
运行
复制
-- 查询省的名称为“浙江省”的所有城市
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
运行
复制
-- 标量子查询: 子查询返回的结果是一个数据(一行一列)
-- 查询大于平均年龄的学生              (先查询平均年龄)
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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
软件性能测试(连载5)
线程单元中的处理器队列的即时长度,如果大于CPU数量+1,说明处理器处于堵塞状态。
顾翔
2020/02/19
9530
性能测试中会遇到的瓶颈
性能测试这种测试方式在发生过程中,其中一个过渡性的工作,就是对执行过程中的问题,进行定位,对功能的定位,对负载的定位,最重要的,当然就是问题中说的“瓶颈”,接触性能测试不深,更非专家,自己的理解,瓶颈产生在以下几方面:
顾翔
2020/09/04
2K0
服务器的指标和瓶颈如何分析?
CPU使用率(%processor time),在80%±5%范围内波动为宜。过低,则服务器CPU利用率不高;过高,则CPU可能成为系统的处理瓶颈。
用户6367961
2022/01/12
2.5K0
运行结果分析相关
一般方式也是最基本的方法是按照一定的规则压并发,看日志。专业一点的说法可以说“分段排除法“,或者按照以下顺序查找瓶颈。
张树臣
2019/07/31
1K0
LR windows 计数器
object(对象) Counters(计数器名称) Description(描述) 参考值 Memory Available Mbytes 可用物理内存数。如果该值很小(4MB或更小),则说明该计算机上总的内存可能不足,或某程序没有释放内存。每个附加连接将在此基础上占用10KB左右 至少要有10%的物理内存值 Memory Page/sec 表示因为页面错误,从磁盘取出的页面数,或是由于页面错误,写入磁盘以释放工作空间的页面数 推荐值为0~20,一般如果该值持续高于几百,那么应该进一步研究页交换活动 M
张树臣
2018/05/15
1.3K0
windows服务器性能监控工具、方法及关键指标
监控方法 推荐使用windows自带的“性能监视器”(老版本的windows叫性能计数器)来监控服务器的性能。 打开控制面板内的管理工具,在管理工具内打开性能监视器,出现如下界面(各版本的window
liulun
2018/01/12
3.8K0
windows服务器性能监控工具、方法及关键指标
LoadRunner压力测试实例步骤
LoadRunner 是一种预测系统行为和性能的工业标准级负载测试工具。通过以模拟上
全栈程序员站长
2022/09/09
1.2K0
如何用LoadRunner分析资源占用率
当增大系统的压力(或增加并发用户数)时,吞吐率和TPS的变化曲线呈大体一致,则系统基本稳定。若压力增大时,吞吐率的曲线增加到一定程度后出现变化缓 慢,甚至平坦,很可能是网络出现带宽瓶颈,同理若点击率/TPS曲线出现变化缓慢或者平坦,很可能是服务器响应时间增加,观察服务器资源使用情况,确定是 否是服务器问题。
用户6367961
2022/01/12
7440
如何查看系统资源的实时占用情况?
任务管理器是Windows内置的工具,可以方便地查看CPU、内存、磁盘和网络的实时占用情况。
是山河呀
2025/02/22
9390
LR windows计数器
内存计数器 关于内存计数器主要有三个:Available Bytes、Memory pages/second 和Page Faults/sec Available Bytes表示计算机上可用于运行处理的有效物理内存的字节数量。这个计算器只显示上一次观察到的值;它不是一个平均值。一般不小于4MB,如果该值低于阈值且pages/second持续的处于峰值状态下,那么说明计算机的物理内存不够。 Memory pages/second 是指为解决硬页错误从磁盘读取或写入磁盘的速度。这个计数器是可以显示导致
张树臣
2018/05/15
1K0
Linux 常用监控指标总结
做运维,不怕出问题,怕的是出了问题,抓不到现场,两眼摸黑。所以,依靠强大的监控系统,收集尽可能多的指标,意义重大。但哪些指标才是有意义的呢,本着从实践中来的思想,各位工程师在长期摸爬滚打中总结出来的经验最有价值。
杰哥的IT之旅
2020/07/15
3.2K0
K3数据库优化方案
if not exists(select 1 from sysindexes where name='ix_group_fgroupid')
py3study
2020/01/07
1.1K0
iostat命令使用
天刚上线了一台server,观察了一下,发现io比较高,想到了iostat命令,观察了一下(每隔一秒打印一次),发现有一个守护进程每隔几秒就写一次IO,再top看下,很快就找到了问题根源。
王亚昌
2018/08/03
6960
Linux 命令(125)—— vmstat 命令
vmstat(Virtual Memory Statistics)命令用于报告虚拟内存状态的统计信息。
恋喵大鲤鱼
2020/02/29
7930
Linux - 磁盘I/O性能评估
正常情况下,svctm应该是小于await值的,而svctm的大小和磁盘性能有关,CPU、内存的负荷也会对svctm值造成影响,过多的请求也会间接导致svctm值的增加。
小小工匠
2023/03/07
3.1K0
Linux - 磁盘I/O性能评估
Windows性能监视器_windows性能分析工具
Windows 性能监视器是一个 Microsoft 管理控制台 (MMC) 管理单元,提供用于分析系统性能的工具。仅从一个单独的控制台,即可实时监视应用程序和硬件性能,自定义要在日志中收集的数据,定义警报和自动操作的阈值,生成报告以及以各种方式查看过去的性能数据。
全栈程序员站长
2022/11/16
2.1K0
Windows性能监视器_windows性能分析工具
老牌运维教你如何快速分析Linux服务器的性能问题
该命令可以显示关于系统各种资源之间相关性能的简要信息,这里我们主要用它来看CPU的一个负载情况。
lyb-geek
2019/10/16
1.4K0
linux系统性能分析对策
解决系统性能问题的一般思路 下面从影响操作系统性能的因素、性能优化工具、系统性能评价标准三个方面介绍优化Linux的一般思路和方法。 影响Linux性能的因素 1.CPU CPU是操作系统稳定运行的根本,CPU的速度与性能很大一部分决定了系统整体的性能,因此,cpu数量越多、主频越高,服务器性能也就相对越好。但事实也并非完全如此。 目前大部分CPU在同一时间内只能运行一个线程,超线程的处理器可以在同一时间运行多个线程,因而,可以利用处理器的超线程特性提高系统性能,在linux系统下,只有运行SMP内核
BGBiao
2018/02/26
1.5K0
关于Linux性能调优中IO调优的一些笔记
「 总感觉当下的生活不是想要的,总感觉一路走下去会是一个讨厌的未来,每天睁眼的一瞬间就是懊悔,昨天又浪费掉了...人生没有意义,但是要努力寻找活着的意义--------山河已无恙」
山河已无恙
2023/01/30
1.1K0
关于Linux性能调优中IO调优的一些笔记
Jmeter的性能测试
顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscript,
顾翔
2019/12/12
1.2K0
Jmeter的性能测试
相关推荐
软件性能测试(连载5)
更多 >
目录
  • 条件查询
    • 比较运算符
    • 逻辑运算符
    • 模糊查询
    • 范围查询
    • 空判断
  • 排序
  • 聚合函数
  • 分组
  • 分页
  • 连接查询
  • 自关联
  • 子查询
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验