MySQL 第四篇:SQL查询强化使用

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 我把MySQL的内容整理成9篇博客,学完这9篇博客虽不能说能成为大神,但是应付一般中小企业的开发已经足够了,有疑问或建议的欢迎留言讨论。一、操作符1、比较操作符相等 =select * from students where s_id='J160402...

我把MySQL的内容整理成9篇博客,学完这9篇博客虽不能说能成为大神,但是应付一般中小企业的开发已经足够了,有疑问或建议的欢迎留言讨论。

一、操作符

1、比较操作符

  • 相等 =
select * from students where s_id='J16040252'
  • 不相等 != or <>
select * from students where s_id!='J16040252'
  • 小于和大于 < or >
  • 比较操作符的组合 <= or >=
select * from students where age > 18
select * from students where age <=18

2、逻辑操作符

  • IS NULL:用于和NULL值进行比较。
select * from students where height is null
select * from students where height is not null
  • BETWEEN:定位最大值与最小值之间;语法: 列 BETWEEN 最小值 and 最大值。
select * from students  where age between 18 and 28
select * from students  where age NOT between 18 and 28
  • IN 用于把一个值与一个指定列表进行比较,当被比较的值至少与列表中的一个值相匹配时返回true。
select * from students where s_id IN ('J1609004','J1603025')
select * from students where s_id NOT IN ('J1609004','J1603025')
  • LIKE 用于通配符把一个值与类似的值进行比较;
SELECT * from students where s_name like '%法宝%'
  • 百分号:(%)没有字数限制 下划线(_) 一个下划线表示一个字符。
select * from students where s_name like '_带着%'
select * from students where s_name not like '_带着%'
  • EXISTS 用于搜索指定表里是否存在满足特定条件的记录。简单说如果查询的表里有n条记录,那么exists查询就是将这n条记录逐条取出,然后判断n遍exists条件
select  * from students where exists (select null)

ALL、SOME、和ANY操作符

3、链接操作符

  • AND 左右的条件都为真是返回真(与);
  • OR 一个为真就返回真(或);
select * from students where s_name like '%小和尚%' and s_name like '1%'
select * from students where s_name like '%小和尚%' or age >20

4、算数运算符 a+b a-b a*b a/b a%b

加法、减法、乘法、除法、算术操作操作符的组合

select * from students where age+160 > height

5、求反操作符

不相等
NOT BETWEEN
NOT IN
NOT LIKE
IS NOT NULL
NOT EXISTS

二、关键字

1、from where

语法:select 字段列表 from 表名 where 条件

  • from子句:指定查询数据的表
  • Where(条件查询):用于给查询添加条件,从而去除用户不需要的数据。
    Where后边跟的条件值只有true 或false,从而限制我们查询中获取的数据。

2、order by 排序

a、order by 排序,默认为升序(ASC) 降序(DESC)
b、语法: select * from 表名 [where 条件] order by 字段1 [asc | desc],字段2 [asc | desc];

select * from students s where 1=1 ORDER BY s.s_age;
select * from students s where s.s_age>18 ORDER BY s.s_age DESC;
select * from students order by age desc;
select * from students order by age asc,height desc;

注意: SQL排序是基于字符的ASCII排序,数字0-9会按其字符值进行排序,并且位于A-Z之前。

3、limit 限制结果条数

语法:select * from 表名 [where 条件] limit 起始值,要取的条数。
limit[offset,NUM] 在哪个位置开始取多少个结果

  • OFFSET 代表位移 如果被省略则代表0开始
  • NUM 代表可以取多少条

select * from students s limit 1,2; 从第一条开始取两条数据。
注意:如果limit 后面只有一个参数,则参数代表是num,表示取多少条数据。

4、group by 分组

a、与select语句配合使用,把相同的数据划分为组。在select语句里,group by子句在where条件之后,在order by 子句之前。
b、语法:Select 列名1,列名2 from 表名 where 条件 group by 列名1,列名2 order by 列名1 [asc | desc],列名2 [asc | desc]
应用:
1、统计某个字段在结果集中所占的数量。
注意: 被选中的字段(查询中select之后的字段列表)必须在group by子句里引用过,如果要出现其他值必须是结合聚合函数(avg,max,min,sum和count)使用 。

select sex,max(age) from students group by sex;
select sex,age,max(height) from students group by sex,age;

注意:
1、聚合函数会使查询结果的数据变少,例如

select class_id,max(age) from students

无论有多少学生查询结果只有一条,class_id的值为第一个学生的class_id(不一定是age最大的那个),max(age)查出所有学生中年龄最大的值,两个值可以来自不同学生。
2、加上group by就不同了

select class_id,max(age) from students group by class_id

这段语句的数量和班级的数量(class_id为班级表的主键)一致,并且class_id,max(age)一定来自同一个学生。
总结: 当group by和聚合函数结合使用时,可以理解为,group by先把数据分类,然后聚合函数在这么多类数据中聚合数据,有多少类数据结果就有多少条数据。

5、having 筛选

a、该子句在select 语句里与group by 子句联合使用时,用于告诉group by子句在输出里包含那几个分组。Having 对于group by 的作用相当于where对于select的作用。
b、语法:Select 列名1,列名2 from 表名 where 条件 group by 列名1,列名2 Having 条件 order by 列名1,列名2
注意: Having 子句必须跟在group by子句之后,在order by 子句之前。
例:

SELECT
    product_name,
    sum(sale) 销售额,
    count(1) 销售数量,
    avg(sale) 售价平均值
FROM
    saleDetails 
GROUP BY
    product_name having 销售额>4000  order by 销售额 desc

having效果等同于如下

select * from (SELECT
    product_name,
    sum(sale) 销售额,
    count(1) 销售数量,
    avg(sale) 售价平均值
FROM
    saleDetails 
GROUP BY
    product_name ) p where 销售额>4000
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
12天前
|
缓存 关系型数据库 MySQL
MySQL索引策略与查询性能调优实战
在实际应用中,需要根据具体的业务需求和查询模式,综合运用索引策略和查询性能调优方法,不断地测试和优化,以提高MySQL数据库的查询性能。
|
13天前
|
SQL 监控 关系型数据库
SQL语句当前及历史信息查询-performance schema的使用
本文介绍了如何使用MySQL的Performance Schema来获取SQL语句的当前和历史执行信息。Performance Schema默认在MySQL 8.0中启用,可以通过查询相关表来获取详细的SQL执行信息,包括当前执行的SQL、历史执行记录和统计汇总信息,从而快速定位和解决性能瓶颈。
|
20天前
|
SQL 前端开发 关系型数据库
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
48 9
|
24天前
|
SQL 存储 缓存
如何优化SQL查询性能?
【10月更文挑战第28天】如何优化SQL查询性能?
80 10
|
18天前
|
SQL 关系型数据库 MySQL
|
21天前
|
缓存 监控 关系型数据库
如何优化MySQL查询速度?
如何优化MySQL查询速度?【10月更文挑战第31天】
47 3
|
27天前
|
SQL NoSQL 关系型数据库
2024Mysql And Redis基础与进阶操作系列(5)作者——LJS[含MySQL DQL基本查询:select;简单、排序、分组、聚合、分组、分页等详解步骤及常见报错问题所对应的解决方法]
MySQL DQL基本查询:select;简单、排序、分组、聚合、分组、分页、INSERT INTO SELECT / FROM查询结合精例等详解步骤及常见报错问题所对应的解决方法
|
25天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
133 1
|
28天前
|
SQL 关系型数据库 MySQL
定时任务频繁插入数据导致锁表问题 -> 查询mysql进程
定时任务频繁插入数据导致锁表问题 -> 查询mysql进程
46 1
|
26天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第26天】数据库作为现代应用系统的核心组件,其性能优化至关重要。本文主要探讨MySQL的索引策略与查询性能调优。通过合理创建索引(如B-Tree、复合索引)和优化查询语句(如使用EXPLAIN、优化分页查询),可以显著提升数据库的响应速度和稳定性。实践中还需定期审查慢查询日志,持续优化性能。
56 0
下一篇
无影云桌面