MySQL 中的常用表表达式
Preet Sanghavi
2023年1月30日
本教程旨在了解如何在 MySQL 中使用公用表表达式。
大多数数据分析师需要存储不同查询的结果,以便将它们与单独的查询合并。在公用表的帮助下,表达式可以成为可能。这些有时也被称为 WITH
子句。
让我们尝试更深入地理解这一点。
但是,在开始之前,我们创建两个虚拟表来工作。在这里,我们创建了一个表 student_dates
以及几行。
-- create the table student_dates
CREATE TABLE student_dates(
stu_id int,
stu_firstName varchar(255) DEFAULT NULL,
stu_date date,
primary key(stu_id)
);
同样,我们可以使用以下查询创建表 student_details
和一些已定义的行。
-- create the table student_details
CREATE TABLE student_details(
stu_id int,
stu_firstName varchar(255) DEFAULT NULL,
stu_lastName varchar(255) DEFAULT NULL,
primary key(stu_id)
);
使用 INSERT
语句在 student_dates
和 student_details
表中插入条目
student_dates
创建一个具有该名称的表以创建一个具有该名称的表。
现在在 INSERT
语句的帮助下,让我们尝试为一些学生添加数据。此操作可按如下方式进行:
-- insert rows to the table student_dates
INSERT INTO student_dates(stu_firstName,stu_date)
VALUES("Preet",STR_TO_DATE('24-May-2005', '%d-%M-%Y')),
("Dhruv",STR_TO_DATE('14-June-2001', '%d-%M-%Y')),
("Mathew",STR_TO_DATE('13-December-2020', '%d-%M-%Y')),
("Jeet",STR_TO_DATE('14-May-2003', '%d-%M-%Y')),
("Steyn",STR_TO_DATE('19-July-2002', '%d-%M-%Y'));
上面的代码可以在 student_dates
中输入学生数据。以下命令可以使用以下命令可视化此表:
SELECT * from student_dates;
上述代码块将生成以下输出:
stu_id stu_firstName stu_date
1 Preet 2005-05-24
2 Dhruv 2001-06-14
3 Mathew 2020-12-13
4 Jeet 2003-05-14
5 Steyn 2002-07-19
同样,让我们在 student_details
表中插入值可以在以下查询的帮助下完成。
-- insert rows to the table student_details
INSERT INTO student_details(stu_id,stu_firstName,stu_lastName)
VALUES(1,"Preet","Sanghavi"),
(2,"Rich","John"),
(3,"Veron","Brow"),
(4,"Geo","Jos"),
(5,"Hash","Shah"),
(6,"Sachin","Parker"),
(7,"David","Miller");
student_details
表可以在以下查询的帮助下可视化。
SELECT * from student_details;
输出:
stu_id stu_firstName stu_lastName
1 Preet Sanghavi
2 Rich John
3 Veron Brow
4 Geo Jos
5 Hash Shah
6 Sachin Parker
7 David Miller
MySQL 中的常用表表达式
现在让我们试着理解 WITH
子句。
我们可以使用这个子句来合并两个表并获取学生的名字和日期。这两个表可以在充当主键的 stu_id
的帮助下进行匹配。
可以使用以下查询执行此操作。
WITH
cte1 AS (SELECT stu_id, stu_firstName FROM student_details),
cte2 AS (SELECT stu_id, stu_date FROM student_dates)
SELECT stu_firstName, stu_date FROM cte1 JOIN cte2
WHERE cte1.stu_id = cte2.stu_id;
上一个查询将为我们提供以下输出。
stu_firstName stu_date
Preet 2005-05-24
Rich 2001-06-14
Veron 2020-12-13
Geo 2003-05-14
Hash 2002-07-19
从上面的代码块中,stu_firstName
列在 stu_id
列的帮助下与相关的 stu_date
匹配。
因此,在 WITH
子句的帮助下,我们可以有效地编写公共表表达式来将查询存储在特定变量中,以便以后在 MySQL 中使用。
作者: Preet Sanghavi