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 存储过程和游标。 MySQL 存储过程是一组预定义好的 SQL 语句,它们按特定顺序执行并作为一个单独的任务执行。它可以减轻应用程序对数据库的访问负担,提高系统效率。 游标是一个指向结果集合中某一行的数据库指针,可以用于对结果集合进行遍历和处理。 接下来,我们来详细讲解 MySQL 存储过程和游标的使用实例。 创建…

    database 2023年5月22日
    00
  • MySql的事务使用与示例详解

    MySql的事务使用与示例详解 什么是事务? 事务是指由一系列数据库操作所组成的一个不可分割的工作单元。 事务是数据库操作的基本单位,是有关联的多个操作组成的一个整体。 事务中的操作要么全部成功,要么全部失败,不存在部分执行的情况。 事务必须有四个特征,通常用ACID缩写来描述,即原子性、一致性、隔离性和持久性。 事务操作示例 示例1:向两个表中插入数据 S…

    database 2023年5月22日
    00
  • Django QuerySet查询集原理及代码实例

    Django QuerySet查询集原理及代码实例 在Django中,QuerySet是用于执行数据库查询的核心概念。QuerySet可以让开发者轻松地编写复杂的数据库查询,并映射到模型类的对象集合上。 QuerySet是什么 QuerySet是一个懒惰的查询对象,只有当需要访问它的结果时,才会真正地执行查询。这意味着当你调用QuerySet的某个方法时,实…

    database 2023年5月19日
    00
  • Java8(291)之后禁用了TLS1.1使JDBC无法用SSL连接SqlServer2008的解决方法

    问题描述: 在 Java8(291) 之后,默认禁用了 TLS1.1,这会导致使用 JDBC 连接 SQL Server 2008 时无法使用 SSL 进行连接。那么如何解决这个问题呢? 解决方法: 升级 SQL Server 版本 首先,可以考虑升级 SQL Server 到支持更高安全协议的版本。例如,SQL Server 2012 及以上版本默认支持 …

    database 2023年5月22日
    00
  • pgsql 实现分页查询方式

    PgSQL是PostgreSQL的简称,是一种基于SQL的关系型数据库管理系统。在PgSQL中,分页查询非常常见,本文将详细讲解如何使用PgSQL实现分页查询方式。 分页查询的基本原理 分页查询主要是通过LIMIT和OFFSET这两个关键字实现的。LIMIT用于限制每次查询返回的记录数,OFFSET用于指定查询结果集的起始位置。 假设我们需要查询某张表的第6…

    database 2023年5月19日
    00
  • .htaccess重定向和url重写详细介绍

    介绍 .htaccess 重定向和 URL 重写之前,我们需要了解两个概念:服务器响应码和正则表达式。 服务器响应码 服务器响应码,也称为 HTTP 状态码,是指 Web 服务器响应客户端请求时所返回的状态码。 几个常见的状态码: 200 OK:用来表示客户端的请求在服务器端被正常处理。 301 Moved Permanently:用于永久性重定向,浏览器会…

    database 2023年5月22日
    00
  • 使用python操作redis(管道)

    一、redis连接 redis提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令,Redis是StrictRedis的子类,用于向后兼容旧版本的redis-py。 redis连接实例是线程安全的,可以直接将redis连接实例设置为一个全局变量,直接使用。如果需要另一个R…

    Redis 2023年4月12日
    00
  • SQLServer2005 中的几个统计技巧

    SQL Server 2005 中的几个统计技巧 SQL Server 提供了多种统计技巧,以帮助我们在运行查询时分析数据的性能,并有效地进行调优。以下是 SQL Server 2005 中几个重要的统计技巧。 1. 查询计划 查询计划是 SQL Server 中为了评估、优化和执行 SQL 语句而生成的一个详细报告。查询计划提供了有关 SQL 查询的执行方…

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