MySQL 中 WITH 用法详解

这篇具有很好参考价值的文章主要介绍了MySQL 中 WITH 用法详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、什么是 WITH 子句
1. 定义
WITH 子句是 MySQL 中的一种 SQL 结构,又称为 Common Table Expression (CTE)。它在不影响原有 SQL 语句的情况下,允许开发人员临时创建一个内存中的结果集,然后对其进行操作。

2.用途
WITH 子句的主要用途是创建一个暂时的结果集,这个结果集在后续的查询中可以多次使用。WITH 子句主要用于解决查询复杂度高的问题,因为它可以将多次需要的计算结果集存储下来,以便后续的查询可以直接使用。它还可以帮助我们更好地组织复杂的 SQL 查询,使得代码更加清晰易读。

二、WITH 子句的语法和用法
1.语法
WITH 子句的语法形式如下:

WITH cte_name (column_name1, column_name2, ...) AS ( SELECT column1, column2, ... FROM table WHERE condition )
1
其中,cte_name 是 WITH 子句的名称;column_name1、column_name2 等是结果集的列名;SELECT 子句定义了该结果集的内容;condition 是查询的过滤条件。

2.使用示例
首先,假设我们有一个名为“employees”的表,其中包含以下内容:

CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    salary INT
);

接下来,我们填充数据:

INSERT INTO employees (employee_id, first_name, last_name, salary)
VALUES 
    (1, 'John', 'Doe', 50000),
    (2, 'Jane', 'Doe', 55000),
    (3, 'Jim', 'Smith', 60000),
    (4, 'Sarah', 'Johnson', 65000),
    (5, 'Tom', 'Brown', 70000);

现在,我们可以使用 WITH 子句创建一个临时结果集,以计算每个员工的月薪:

WITH monthly_salary AS (
    SELECT employee_id, first_name, last_name, salary/12 AS monthly_salary
    FROM employees
)
SELECT *
FROM monthly_salary;

执行上述 SQL 代码后,将生成以下结果:

mysql with,mysql

 

在这个示例中,我们使用 WITH 子句创建了一个名为“monthly_salary”的临时结果集,其中包含员工 ID、名字、姓氏和月薪。然后,我们选择了所有内容,并从该结果集生成了最终结果。

3.优点
WITH 子句的主要优点是允许开发人员将复杂的查询进行分解和抽象,以提高代码的可读性和可维护性。例如,如果需要对同一表的不同字段进行多次查询,可以使用 WITH 子句将这些查询的结果集抽象为一个独立的部分,从而避免代码的重复。

三、总结
WITH 子句是 MySQL 中的语句,可以为查询提供临时表。这样可以避免在多个查询中重复定义数据,提高代码可读性,提高查询效率。
 文章来源地址https://www.toymoban.com/news/detail-669683.html

到了这里,关于MySQL 中 WITH 用法详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • sql中with as用法/with-as 性能调优/with用法

    with as 语句是SQL中的一种常用语法, 它可以为一个查询结果或子查询结果创建一个临时表 ,并且可以在后续的查询中使用这个临时表,在查询结束后该临时表就被清除了。这种语法的使用可以使得复杂的查询变得简单,同时也可以提高查询效率。 WITH AS短语,也叫做子查询部

    2024年02月16日
    浏览(39)
  • pip install mysql出现error: subprocess - exited-with-error的解决方案

      大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作

    2024年02月09日
    浏览(55)
  • with recursive用法

    with recursive 则是一个递归的查询子句,他会把查询出来的结果再次代入到查询子句中继续查询。 递归过程如下: n=1 fact=2 n=1,n5: n=1+1=2,fact=(1+1)*2=4 n=2,n5:n=2+1=3,fact=(2+1)*4=12 n=3,n5:n=3+1=4,fact=(3+1)*12=48 n=4,n5:n=4+1=5,fact=(4+1)*48=240 n=5 n=5==stop 递归过程如下: n=1 fact=2 n=1,n5: n=1+2=3,fact=(1+1)

    2023年04月24日
    浏览(30)
  • 【数据库】mysql-修改密码-error-1290 (HY000): The MySQL server is running with the --skip-grant-tables option

    该报错同样适用于MariaDB ERROR 1290 (HY000): The MariaDB server is running with the --skip-grant-tables option so it cannot execute this statement 修改mysql密码出现的报错。 先使用 flush privileges; 刷新命令,再修改数据库密码 set password for root@localhost=password(\\\'你的密码\\\');

    2024年02月05日
    浏览(40)
  • SQL语句 with as 用法

    WITH  AS短语,也叫做子查询部分(subquery factoring),是用来定义一个SQL片断,该SQL片断会被整个SQL语句所用到。这个语句算是公用表表达式(CTE)。  比如  with A as (select * from class)     select *from A   这个语句的意思就是,先执行select * from class   得到一个结果,将这个结果记

    2024年02月14日
    浏览(42)
  • MySQL:报错this is incompatible with sql_mode=only_full_group_by

    在mysql 工具 搜索或者插入数据时报下面错误: ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column \\\'database_tl.emp.id\\\' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by 原因: 首先,我们看一下group by的语法

    2024年01月20日
    浏览(51)
  • Python基础__with open()用法

    1、open与with open区别 open()完成后必须调用close()方法关闭文件,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的,由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用。with open()则可以避免这样的情况。 2、代码

    2024年02月10日
    浏览(26)
  • 【mysql 错误】Job for mysqld.service failed because the control process exited with error code

    mysql 报错信息如下:Job for mysqld.service failed because the control process exited with error code. See “systemctl status mysqld.service” and “journalctl -xe” for details.是什么原因,如何解决 这个错误提示比较笼统,需要查看具体的日志才能确定问题所在。你可以通过以下步骤来获取更详细的错误信

    2024年01月17日
    浏览(57)
  • 【SQL中with的用法及代码经验分享】

    提示:这里可以添加本文要记录的大概内容: 注:WITH AS短语,也叫做子查询部分,可以称为独立查询模块,即定义一个SQL的独立模块后,该SQL模块可以被整个SQL语句所用到。有的时候,with as是为了提高SQL语句的可读性,减少关联太多表产生的冗余。 提示:以下是本篇文章正

    2024年02月05日
    浏览(42)
  • mysql 错误:Host is blocked because of many connection errors; unblock with ‘mysqladmin flush-hosts‘

    记录一次解决异常的总结。 最近服务器上的程序基本过1天就会报  在网上找了好多总结完就两类解决方式 1:设置最大的错误数量  set global max_connect_errors = 1000; 2:清除缓解记录 flush hosts; 但是两个都是治标不治本,过一段时间会继续出现,网上有的人报这个错是因为配置了

    2024年02月11日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包