(SQL)SQL语言中的查询语句整理

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS PostgreSQL Serverless,0.5-4RCU 50GB 3个月
推荐场景:
对影评进行热评分析
简介: 查询语句在sql中占了挺大一部分篇幅,因为在数据库中使用查询语句的次数远多于更新与删除命令。而查询语句比起其他语句要更加的复杂,可因为sql是数据库不可或缺的一部分,所以即使不懂,也必须得弄懂,以上。

1、 查询语句的介绍:

本篇主要介绍sql语句里的查询语句,这其中包括了查询语句中的子内容,也就是拓展的内容,这些内容代入到查询语句中将会有更多的反应。

2、 查询语句:

FROM命令:

    SELECT 字段1,字段2,字段3 FROM 表文件名
  1. 执行顺序:mysql共有7个查询命令,FROM命令永远是第一个执行的查询命令
  2. 执行作用:FROM命令相当于一个读取流,分则将硬盘上表文件加载到内存中生成一个【临时表】供后续查询命令使用

由于查询命令对临时表数据进行操作,因此查询命令执行时,不会修改表文件原有的数据

WHERE命令:

  1. 示例:

    SELECT 字段1,字段2 FROM 表文件名 WHERE 字段2=
  2. 执行顺序:

     FROM-->WHERE-->SELECT
    
  3. WHERE作用:
    • 遍历临时表所有的数据和,每次得到一个数据和,根据数据和信息判断数据和是否需要被定位。
    • 在循环完毕后,WHERE命令将所有定位的数据行读取出来再内存中生成一个临时表进行保存

Group by 命令:

select * from 表文件名 group by 依据
  1. 执行顺序
    FROM-->WHERE-->GROUP BY-->SELECT

  2. 书写顺序:
    SELECT 字段名,函数名,子查询
    ↓↓ FROM 表名称
    ↓↓ WHERE 定位数据行条件
    GROUP BY 分组字段

    如果同时出现WHERE与GROUP BY,那么GROUP BY应该在WHERE之后

  3. 执行原理:
    GROUP BY 执行时

    首先根据分组字段种类,将临时表中的数据行进行分类

     然后将具有相同特征的数据行读取出来保存到一个全新的临时表中
    
  4. 七各查询命令中,只有GROUP BY有机会再执行完毕后,一次生成多个临时表

    group by命令其主要目的是对字段数据进行分组,分组可以是单个字段,也可以是多个字段。

    1.多字段分组时,分组字段出现顺序对于最终查询结果是没有任何影响的。

             GROUP BY 字段1,字段2 于 GROUP BY 字段2,字段1
    

    2.多字段分组时,GROUP BY一次只能葛奴一个分组字段进行分组

             GROUP BY 字段1,字段2  ——  该语句需要执行两次,一次分字段1,一次分字段2
    

    3.多字段分组时,从第二个分组字段开始,操作的是上一个分组字段生成的临时表

         GROUP BY 字段1,字段2 —— 当执行GROUP BY 字段2时,操作的临时表由GROUP BY 字段1生成的
    

order by 命令:

- sql命令的查询,默认是升序排序
  select 字段名1,字段名2,字段名3 from 表文件名 order by 排序依据 desc(降序)

一般在查询语句的末尾使用

having 命令:

  • having的要求:通过统计临时表决定是否删除临时表
      select 字段名1,cunt(*) from 表文件名 group by 字段名1 having 依据
    
  1. 执行顺序:
    FROM-->WHERE-->GROUP BY-->【HAVING】-->SELECT

  2. 书写顺序:
    HAVING命令不能独立出现在查询语句,只能出现在GROUP BY后面

  3. 执行原理:
    HAVING命令在GROUP BY之后执行的。它负责将GROUP BY生成临时表中不满足条件的临时表从内存中删除掉

  4. 七个查询命令中,只有HAVING命令不会生成临时表,不但不生成,若条件不满足还会删除临时表

limit命令:

  • MySQL服务器中,表文件字段位置从1开始计算,表文件数据行位置从0开始计算
  1. 执行顺序:

     FROM --> WHERE --> GROUP BY --> HAVING --> SELECT --> ORDER BY --> LIMIT
    
  2. 书写顺序:
    SELECT 字段,函数,子查询
    FROM 表
    WHERE 定位数据行条件【逻辑运算/特殊运算符】
    GROUP BY 分组字段,多个分组字段以 ‘,’ 号隔开
    HAVING 对临时表进行删除判断条件
    ORDER BY 排序字段
    LIMIT 起始行位置,从起始行开始向下截取的行数

  3. 执行原理:
    从临时表中指定位置的数据行开始,向下截取指定数量的数据行。
    将截取出来的数据行保存到一个全新的临时表

SELECT命令:

  • 将经过了其他查询语句的结果临时表返回

3、 聚合函数:

用于对临时表指定字符按下【所有内容】进行统计的函数

  • 包含方法为: max(字段)、min(字段)、sum(字段)、avg(字段)、count(字段)

    1、max(字段): 返回指定字段下最大值

      select max(字段名) from 表文件名 where 字段名 = 值
    

    2、max(字段): 返回指定字段下最小值

      select min(字段名) from 表文件名 where 字段名 = 值
    

    3、sum(字段): 返回指定字段下所有数据相加之和

      select sum(字段名) from 表文件名 where 字段名 = 值
    

    4、avg(字段): 返回指定字段下所有的数据平均值

      select avg(字段名) from 表文件名 where 字段名 = 值
    

    5、count(字段): 返回指定字段下内容不等于null的数据个数

      select avg(字段名) from 表文件名
    

    count(*) //统计临时表下所有数据行个数,不考虑数据是否存在null

注:聚合函数,需要通过Group by进行分组后才可以使用,但count不需要,这点需知。

4、 子查询:

子查询的意思,就是在一个查询中嵌套一个或多个查询而已,至于查询出来的值其实得看外层查询中所需要的值。

子查询出现的地点可以是from命令中,也可以是having、where命令,这是不限定的,因为这些命令需要的始终是一个或某个值,而子查询通过筛选可以放出多个或一个值,这样就可以通过子查询来连接外层查询语句进行筛选。

举个例子:

SELECT
    *
FROMWHERE
    筛选字段IN (
        SELECT
            子查询筛选字段
        FROM
            子查询表
    )

该例子中使用where命令将筛选字段与子查询查询出来字段进行比对,或是筛选字段中包含了子查询查询出来的字段,那么则通过where命令进行筛选。

5、 连接查询:

1.需要被帮助表:
2.不要被帮助表:

执行原理:

  • 如果【需要被帮助表】中某行数据与【不需要被帮助表】所有的数据行都无法拼接为合法数据
  • 此时依然将这个数据作为一个独立的数据行存入到新的临时表

命令格式:

  1. 左外连接过滤方案/左外连接查询
    FROM 需要被帮助的表 LEFT JOIN 不需要被帮助的表
    ON 合法数据行定位条件

  2. 右外连接过滤方案/右外连接查询
    FROM 不需要被帮助的表 RIGHT JOIN 需要被帮助的表

         ON 合法数据行定位条件
    
  3. 内连接过滤方案/右外连接查询
         FROM 不需要被帮助的表 INNER JOIN 需要被帮助的表
         ON 合法数据行定位条件
    

在某些情况下连接查询是可以替代子查询的,因为子查询多了后会让sql命令变成难以阅读,所以能够使用连接查询尽力选择连接查询。至少我是这么认为的。

总结:

查询语句在sql中占了挺大一部分篇幅,因为在数据库中使用查询语句的次数远多于更新与删除命令。而查询语句比起其他语句要更加的复杂,可因为sql是数据库不可或缺的一部分,所以即使不懂,也必须得弄懂,以上。

目录
相关文章
|
2月前
|
SQL 数据管理 关系型数据库
SQL 语言入门:开启数据管理的大门
在数字化时代,数据已成为核心资产,而 SQL 作为操作关系型数据库的标准语言,是数据从业者、程序员及办公人员必备技能。本文从基础概念讲起,详解 SQL 的核心用法,包括数据查询、插入、修改、删除及表结构操作,并通过实例演示帮助读者快速上手。掌握 SQL,不仅能提升数据处理效率,更为深入理解数据管理打下坚实基础。
|
2月前
|
SQL 监控 关系型数据库
一键开启百倍加速!RDS DuckDB 黑科技让SQL查询速度最高提升200倍
RDS MySQL DuckDB分析实例结合事务处理与实时分析能力,显著提升SQL查询性能,最高可达200倍,兼容MySQL语法,无需额外学习成本。
|
2月前
|
SQL 存储 关系型数据库
MySQL体系结构详解:一条SQL查询的旅程
本文深入解析MySQL内部架构,从SQL查询的执行流程到性能优化技巧,涵盖连接建立、查询处理、执行阶段及存储引擎工作机制,帮助开发者理解MySQL运行原理并提升数据库性能。
|
2月前
|
SQL 监控 关系型数据库
SQL优化技巧:让MySQL查询快人一步
本文深入解析了MySQL查询优化的核心技巧,涵盖索引设计、查询重写、分页优化、批量操作、数据类型优化及性能监控等方面,帮助开发者显著提升数据库性能,解决慢查询问题,适用于高并发与大数据场景。
|
1月前
|
SQL Oracle 关系型数据库
SQL语言小结
针对数据库、表单和数据行的增删改,没有涉及到sql真正的用途也就是查询,sql提供的查询语句的关键字占 sql 语言的一半之多,查询语句还是得单拿出来讲,不然太多了。 因为没有涉及到查询,所以sql的新增和修改都是很笼统的做法,drop、alter drop、delete这些很容易,逻辑性也不强,再次说明sql的真正精髓在于查询,不然为啥叫做结构化查询语言
255 0
|
3月前
|
SQL XML Java
通过MyBatis的XML配置实现灵活的动态SQL查询
总结而言,通过MyBatis的XML配置实现灵活的动态SQL查询,可以让开发者以声明式的方式构建SQL语句,既保证了SQL操作的灵活性,又简化了代码的复杂度。这种方式可以显著提高数据库操作的效率和代码的可维护性。
263 18
|
3月前
|
SQL 人工智能 数据库
【三桥君】如何正确使用SQL查询语句:避免常见错误?
三桥君解析了SQL查询中的常见错误和正确用法。AI产品专家三桥君通过三个典型案例:1)属性重复比较错误,应使用IN而非AND;2)WHERE子句中非法使用聚合函数的错误,应改用HAVING;3)正确的分组查询示例。三桥君还介绍了学生、课程和选课三个关系模式,并分析了SQL查询中的属性比较、聚合函数使用和分组查询等关键概念。最后通过实战练习帮助读者巩固知识,强调掌握这些技巧对提升数据库查询效率的重要性。
136 0
|
6月前
|
SQL 关系型数据库 MySQL
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
|
4月前
|
SQL
SQL中如何删除指定查询出来的数据
SQL中如何删除指定查询出来的数据
|
5月前
|
SQL 存储 弹性计算
OSS Select 加速查询:10GB CSV 文件秒级过滤的 SQL 语法优化技巧
OSS Select 可直接在对象存储上执行 SQL 过滤,跳过文件下载,仅返回所需数据,性能比传统 ECS 方案提升 10~100 倍。通过减少返回列、使用等值查询、避免复杂函数、分区剪枝及压缩优化等技巧,可大幅降低扫描与传输量,显著提升查询效率并降低成本。
170 0