sql with as用法详解

下面是SQL WITH AS用法的详解攻略,内容包括WITH AS的含义、语法、用法、示例等方面。

含义

WITH AS是一种用于创建临时表格的SQL 语句。它可以改善可读性,包含在它中的代码块可以使查询更加优雅清晰。

语法

WITH AS语句由两个部分组成:

  • 第一部分是WITH关键字。后面紧跟着一个或多个定义代表临时表格名称(也叫作查询块)的逗号分隔子句。
  • 第二部分是SELECT语句,从这个语句中派生出临时表格。

语法如下:

WITH temp_table (column_1, column_2, ...) AS  
(SELECT column_1, column_2, ...  
FROM table_name)  
SELECT *  
FROM temp_table;

其中,temp_table是临时表格名称,(column_1, column_2, ...)是临时表格的列名,table_name是原始表格的名称,*表示选取表格中所有的列。需要注意的是,SELECT语句中的列名和临时表格中的列名需要对应。

用法

WITH AS可用于以下场景:

  • 重新利用同一个子查询
  • 将复杂的操作分解为多个可读的模块

使用临时表格通常可以减少代码的重复编写,提高查询的可读性、可维护性和效率。

示例

下面是两个使用WITH AS语句的示例,分别说明对于某些复杂查询,该语句可以使查询更加直观、简洁和可读。

示例一

下面的查询将压缩各个州的销售值,并针对甲地、乙地进行比较,查看其销售额的增长情况。这个查询用到了两个WITH AS段,分别是销售

WITH 
州 AS (
  SELECT DISTINCT state, name
  FROM locations
),
销售 AS (
  SELECT 
    客户名称, 
    州, 
    订单日期, 
    SUM(销售额) AS 销售额
  FROM orders
  JOIN 州 ON orders.州名称 = 州.名称
  GROUP BY 客户名称, 州, 订单日期
)
SELECT 
  t1.销售人员姓名, 
  t1.客户名称, 
  t1.州名称 AS '甲地', 
  t2.州名称 AS '乙地', 
  t1.销售额 AS '2021年销售额', 
  t2.销售额 AS '2022年销售额'
FROM 
  销售 t1 
  JOIN 销售 t2 ON t1.客户名称 = t2.客户名称 
    AND t1.订单日期 < t2.订单日期 
  JOIN 州 AS s1 ON t1.州 = s1.州 
  JOIN 州 AS s2 ON t2.州 = s2.州 
WHERE s1.state = '甲州' 
  AND s2.state = '乙州';

示例二

下面的查询从score_list表格中获取每个班级每个学生的平均分值,并针对所有班级进行排序,查询出平均分数最高的前三个班级。

WITH 
  classes AS (SELECT DISTINCT class_id FROM score_list), 
  class_scores AS (
    SELECT 
      class_id, 
      AVG(score) AS avg_score
    FROM score_list 
    GROUP BY class_id
  )
SELECT 
  class_scores.class_id, 
  ROUND(class_scores.avg_score, 2) AS avg_score
FROM 
  class_scores 
  JOIN classes ON classes.class_id = class_scores.class_id 
ORDER BY class_scores.avg_score DESC 
LIMIT 3;

以上就是WITH AS用法的详细攻略。希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:sql with as用法详解 - Python技术站

(0)
上一篇 2023年5月21日
下一篇 2023年5月21日

相关文章

  • MySQL删除被其他表关联的数据库表

    MySQL中如果想要删除一个被其他表关联的表,需要先将关联该表的其他表中的数据删除,然后才能删除该表。具体步骤如下: 查找关联该表的其他表 可以通过以下SQL语句查询关联该表的其他表: SELECT TABLE_NAME, CONSTRAINT_NAME, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME FROM …

    MySQL 2023年3月9日
    00
  • 深入学习SQL Server聚合函数算法优化技巧

    深入学习SQL Server聚合函数算法优化技巧 背景介绍 在SQL Server数据库中,聚合函数是非常常用的一种功能,如SUM、COUNT、AVG、MAX、MIN等。然而,在数据量较大的情况下,聚合函数的查询效率会变得非常低下,影响整个系统的性能。所以,在这种情况下,优化聚合函数的算法是非常必要的。 SQL Server聚合函数优化技巧 下面介绍一些SQ…

    database 2023年5月21日
    00
  • DB2新手使用的一些小笔记:新建实例、数据库路径不存在、客户端连接 .

    DB2新手使用的一些小笔记:新建实例、数据库路径不存在、客户端连接 本文将详细讲解DB2新手使用的一些小笔记,包括新建实例、数据库路径不存在、客户端连接等内容。 新建实例 在使用DB2时,我们需要先创建实例。具体操作如下: 1.使用管理员权限启动命令控制台。 2.运行下面的命令创建一个新的实例: db2icrt <实例名> 其中<实例名&g…

    database 2023年5月22日
    00
  • 详解MySQL中的数据类型和schema优化

    让我为你详细讲解一下“详解MySQL中的数据类型和schema优化”的完整攻略。 步骤一:了解MySQL中的常见数据类型 首先我们需要了解MySQL中的常见数据类型,以便在创建表时选择适当的数据类型。以下是常见的MySQL数据类型及其对应的存储大小: TINYINT: 1字节 SMALLINT: 2字节 MEDIUMINT: 3字节 INT: 4字节 BIG…

    database 2023年5月19日
    00
  • redis集群结构图

    在JAVA编程时,使用哨兵池获取jedis来进行数据的操作,哨兵对对集群进行监视,当主节点宕掉时,会自动将子一个子节点升级为主节点,原来的主节点上线时会自动变为从节点,主节点的变化,对于使用哨兵池方式操作redis时,没有任何影响。 redis使用方式: 1、管道技术:类似与MySQL进行批量插入时,拼接长SQL一样,一批请求,一次响应,减少处理时间; 2、…

    Redis 2023年4月13日
    00
  • MySQL流程控制语句详解

    MySQL流程控制语句是一种在MySQL中用来控制程序执行流的结构。它们允许您在程序中使用条件和循环语句来控制程序的执行路径。 下面是MySQL中的几种流程控制语句: IF语句 IF语句在MySQL中使用非常普遍,它允许您在程序中使用条件判断语句来决定程序的执行流程。IF语句的格式如下: IF(condition,statement1,statement2)…

    MySQL 2023年3月10日
    00
  • 如何使用Python在MySQL中修改表名?

    要使用Python在MySQL中修改表名,可以使用Python的内置模块sqlite3或第三方库mysql-connector-python。以下是使用mysql-connector-python在MySQL中修改表名的完整攻略: 连接 要连接到MySQL,需要提供MySQL的主机、用户名、和密码。可以使用以下代码连接: mysql.connector my…

    python 2023年5月12日
    00
  • MySQL ClickHouse常用表引擎超详细讲解

    下面是MySQL ClickHouse常用表引擎超详细讲解的完整攻略。 简介 MySQL和ClickHouse都是常用的数据库,但是它们使用的表引擎不同。MySQL支持多种表引擎,常用的有InnoDB、MyISAM等;而ClickHouse则使用列式存储引擎,它特别适合处理大规模数据。 本文将介绍MySQL和ClickHouse的常用表引擎,并分别给出示例说…

    database 2023年5月21日
    00
合作推广
合作推广
分享本页
返回顶部