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