一、暫存資料表
微軟關於暫存資料表的教學連結
暫存資料表簡單地說就是一種資料表,關閉服務資料會消失,能用於暫時存放運算後的資料。
這邊介紹一下它的相關語法:
新增暫存資料表,暫存資料表要加上#,這裡用teacher資料表作為範例:
Create Table #teacher(
id int,
name varchar(20),
sex int,
class varchar(3),
subject varchar(20)
)
新增一筆資料:
刪除與修改基本上與上一章節提到的語法大致相同,就不一一說明
INSERT INTO #teacher (id, name, sex, class, subject)
VALUES (1, 'Ben', 1, 'B', 'English')
刪除暫存資料表
DROP TABLE #teacher
實際上可能會用到以下的例子:
本例要先建置student資料表
Object_id這行是判斷如果已有暫存表就刪掉
再用子查詢查出A班老師的學生有那些
IF Object_id('tempdb..#teacher') IS NOT NULL
BEGIN
DROP TABLE #teacher
END
Create Table #teacher(
id int,
name varchar(20),
sex int,
class varchar(3),
subject varchar(20)
)
INSERT INTO #teacher (id, name, sex, class, subject)
VALUES (1, 'Ben', 1, 'B', 'English')
INSERT INTO #teacher (id, name, sex, class, subject)
VALUES (2, 'Seren', 1, 'C', 'Math')
INSERT INTO #teacher (id, name, sex, class, subject)
VALUES (3, 'Alice', 2, 'A', 'Chinese')
--使用暫存table,查詢A班老師的學生有那些
select student.class, student.name from student
where student.class in (select class from #teacher where #teacher.name = 'Alice')
二、CTE (Common Table Expression) CTE 是一個「暫存」且「具名」的結果集合。可以用來取代子查詢,能讓程式碼變得容易閱讀。
測試語法如下,join查詢可以換成以下查詢:
with t1 as
(
select class from #teacher where #teacher.name = 'Alice'
)
select student.class, student.name from student
where student.class in (select * from t1)
以下是查詢結果,可以看到與一的查詢結果相同,程式碼也比較容易閱讀
這個CTE查詢後面也可以逗點加入其他的CTE,但只能使用一個with,例如以下的例子
with t1 as
(
select class from tabel1
),
(
select class from tabel2
)
select...同上
本文主要是簡單介紹暫存表與CTE,就先寫到這邊