如何用MySQL实现WITH AS语句

作为一名从事数据的爱好者来说,从一家公司入职到另一家公司,给我带来的的一个很大的问题就是以前公司使用SQL SERVER作为数据生产库的,现在公司使用MYSQL作为底层库,原来在微软的数据库上很多方便的函数现在都不能用了,既然不能用了,如何利用MYSQL现有的语句去构建相同的功能呢,这是我接下来需要做的事

如何用MySQL实现WITH AS语句

当工作在非常大的表上时,你可能偶尔需要运行很多查询获得一个大量数据的小的子集,不是对整个表运行这些查询,而是让MySQL每次找出所需的少数记录,将记录选择到一个临时表可能更快些,然后在这些表运行查询。
创建临时表很容易,给正常的CREATE TABLE语句加上TEMPORARY关键字:

CREATE TEMPORARY TABLE tmp_table (
	name VARCHAR(10) NOT NULL,
	value INTEGER NOT NULL
)

临时表将在你连接MySQL期间存在。当你断开时,MySQL将自动删除表并释放所用的空间。当然你可以在仍然连接的时候删除表并释放空间。

DROP TABLE tmp_table

如果你声明临时表是一个HEAP表,MySQL也允许你指定在内存中创建它:

CREATE TEMPORARY TABLE tmp_table (
	name VARCHAR(10) NOT NULL,
	value INTEGER NOT NULL
) TYPE = HEAP

因为HEAP表存储在内存中,你对它运行的查询可能比磁盘上的临时表快些。然而,HEAP表与一般的表有些不同,且有自身的限制
正如前面的建议,你应该测试临时表看看它们是否真的比对大量数据库运行查询快。如果数据很好地索引,临时表可能一点不快。

  1. 临时表再断开于mysql的连接后系统会自动删除临时表中的数据,但是这只限于用下面语句建立的表:
    定义字段:
CREATE TEMPORARY TABLE tmp_table (
	name VARCHAR(10) NOT NULL,
	value INTEGER NOT NULL
)

直接将查询结果导入临时表

CREATE TEMPORARY TABLE tmp_table SELECT * FROM table_name
  1. 另外mysql也允许你在内存中直接创建临时表,因为是在内存中所有速度会很快,语法如下:
CREATE TEMPORARY TABLE tmp_table (
	name VARCHAR(10) NOT NULL,
	value INTEGER NOT NULL
) TYPE = HEAP
  1. 从上面的分析可以看出临时表的数据是会被清空的,你断开了连接就会被自动清空,但是你程序中不可能每发行一次sql就连接一次数据库吧(如果是这样的话,那就会出现你担心的问题,如果不是就没有问题),因为只有断开数据库连接才会被清空数据,在一个数据库连接里面发行多次sql的话系统是不会自动清空临时表数据的。

MYSQL中如何实现开窗函数.

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
引用\[1\]中提到了使用WITH AS语句的示例,该语句可以在主查询语句中重复使用子查询,并通过别名的方式引用。WITH AS语句的作用是定义一个公用的表达式,可以在SELECT、UPDATE、DELETE和INSERT语句中使用。引用\[2\]中解释了使用WITH AS语句的含义和用法。通常情况下,当一个查询语句在SELECT查询块中被多次使用时,可以将该查询语句放在WITH AS中,作为公用的表达式,然后在主查询语句中通过别名重复使用。 在具体的使用场景中,引用\[3\]给出了一个示例,有两张表cust_info_detail和order_info_detail,需要统计某天中每个用户下单的数量以及客户的相关信息。可以使用WITH AS语句来定义两个子查询,分别查询客户信息和订单信息,并通过别名引用它们。然后在主查询语句中使用LEFT JOIN将两个子查询结果连接起来,最终得到每个客户的姓名、性别和下单数量。 总结起来,WITH AS语句可以让子查询重用相同的查询块,并在主查询语句中直接引用。它的作用是定义一个公用的表达式,可以在主查询语句中多次使用。在MySQL中,WITH AS语句的语法如下: WITH (SELECT语句) AS 别名1, (SELECT语句) AS 别名2, ... SELECT * FROM 别名1, 别名2 WHERE 别名1.id = 别名2.id; 其中,SELECT语句是子查询的具体查询语句,别名是为子查询定义的名称,可以在主查询语句中通过别名引用子查询的结果。 #### 引用[.reference_title] - *1* *2* *3* [Mysql中的通用表达式WITH AS语句的使用](https://blog.csdn.net/dfff74/article/details/123036726)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值