SQL note

資料表欄位的定義:
NN (Not Null):非空,代表這個欄位不能是空白的。當你勾選了這個選項,任何新增或更新資料時,這個欄位都必須有值。

PK (Primary Key):主鍵,這是資料表裡,唯一能識別每一筆資料的「身分證號碼」。它的值必須是唯一的(不能重複),而且不能是空的。

U (Unique):唯一,這個欄位的值必須是唯一的,不能重複。它和主鍵很像,但不同的是一個表格可以有很多個唯一欄位(例如手機號碼、電子信箱),但主鍵只能有一個,而且唯一欄位可以允許 NULL 值。
AI (Auto-Increment):自動遞增,當新增資料後,這個欄位系統會自動產生一個流水號(1、2、3、……),所以不用去自己輸入他。

資料表欄位的類型:

INTEGER (整數):專門用來存放沒有小數點的數字。

REAL (實數):專門用來存放帶有小數點的數字,但它的精確度有限(就像float)

NUMERIC (數值):用來存放帶有小數點的數字,但它可以更精準地控制小數點的位數(就像Double)。在需要高精確度的計算時,通常會用 NUMERIC 或 DECIMAL。

BLOB (Binary Large Object):它用來存放非文字的大型資料,例如圖片、影片、音訊檔等等。

固定長度 (Fixed-Length):

CHAR(n)NCHAR(n)
它們就像一個預先設定好大小的「盒子」,不管你實際放多少東西,這個盒子的大小永遠都是固定的 n。

優點:存取速度快,因為資料庫知道每筆資料都佔用一樣的空間,可以快速定位。
缺點:如果實際資料比 n 小,剩下的空間會被空白字元填滿,造成空間浪費。

 

可變長度 (Variable-Length):

VARCHAR(n)NVARCHAR(n)
它們就像一個可以伸縮的「袋子」,你放多少東西,它就佔用多少空間,最多不超過 n。

優點:節省儲存空間,特別適合長度不一的資料,例如人名、地址。
缺點:存取速度比固定長度稍慢,因為資料庫需要額外記錄每個資料的實際長度。

 

單一位元組 (Non-Unicode):

CHAR、VARCHAR、TEXT
這些類型通常用來儲存英文字母、數字和常見符號。一個英文字元通常佔用一個位元組。
限制:它們無法完整支援多國語言,例如中文、日文、韓文等,這些字元通常需要兩個以上的位元組來儲存。如果你用它們來存中文,可能會出現亂碼。

 

雙位元組 (Unicode):

NCHAR、NVARCHAR、NTEXT
開頭的 N 代表 National language character set (國家語言字元集)。它們支援 Unicode 編碼,能正確儲存全世界幾乎所有的語言。
優點:可以避免多國語言的亂碼問題。一個字元無論是英文還是中文,通常都佔用兩個位元組。
缺點:儲存空間會比單一位元組類型大一倍。

VARCHAR(MAX)NVARCHAR(MAX)
這兩個類型可以儲存高達 2GB 的文字資料,幾乎是無限大。它們是現在最推薦用來處理大容量文字資料的類型。

 

簡單的選擇建議
儲存英文、數字,且長度固定:用 CHAR。例如:郵遞區號 CHAR(5)。
儲存英文、數字,但長度不固定:用 VARCHAR。例如:人名、地址。
儲存中文或其他多國語言,且長度固定:用 NCHAR
儲存中文或其他多國語言,但長度不固定:用 NVARCHAR
儲存超大文章或說明:用 NVARCHAR(MAX)

單引號 (‘ ‘):用來表示「字串」
(最常用),在 SQL 語句中,想要表示一段文字、日期或任何字串的時候,就要用單引號把它們包起來。

使用時機:
字串:SELECT ‘Hello, World!’
欄位的值:SELECT * FROM users WHERE name = ‘John’;
日期或時間:SELECT * FROM orders WHERE order_date = ‘2023-01-01’;

 

雙引號 (” “):用來表示「識別字」
引號是用來包住資料庫、表格、欄位等名稱的。如果你取的這些名稱剛好是 SQL 的保留字(像是 SELECT、FROM、WHERE 等),或者包含了特殊符號(像是空格),這時候就需要用雙引號來告訴 SQL:「嘿,我這個不是關鍵字,是字串!」

使用時機:
SELECT “user” (如果欄位叫 user,而 user 剛好是某個 SQL 的保留字,就會需要用雙引號)
SELECT “First Name” (因為有空格,所以必須用雙引號)

 

反引號 (“):MySQL 的專屬「識別字」
它的功能跟雙引號很像,都是用來包住資料庫、表格、欄位等名稱,來避免和關鍵字衝突。

使用時機:
在 MySQL 中,當你需要引用一個欄位、表格或資料庫名稱時,用反引號會是個好習慣。

 

口訣:

只要是你想當成「文字」來處理的東西,就用單引號。
你是要表示一段文字或一個值嗎? → 用單引號。
你是在 MySQL 裡,要引用表格或欄位名稱嗎? → 用反引號!
你在其他資料庫,要引用有特殊字元的名稱嗎? → 用雙引號!

SQL 語句末尾有一個分號。分號是語句終止符,是美國國家標準協會 (ANSI) SQL-92 標準的一部分,該標準是建議所有 SQL 資料庫採用的通用語法。

註釋是放置在特定字元(例如 /* 和 */ ) 之間或兩個短劃線 (– ) 之後的文本,如下所示。

SELECT 語法

挑選欄位:SELECT
SELECT 欄位名稱 FROM 表格名稱

這個是最基本的語法,就像你在點菜一樣,告訴資料庫你要看哪些「菜色」(欄位),從哪張「菜單」(表格)上選。
舉例: SELECT store_name FROM Store_Information
解釋: 「從 Store_Information 這張表裡,把所有店名(store_name)都給看。」

* (星號):如果你想看這張表的所有欄位,就用 *。

篩選不重複的結果:DISTINCT

SELECT DISTINCT 欄位名稱 FROM 表格名稱

當你的資料裡有很多重複的內容時,DISTINCT 就像是個「去重複」的神奇濾網。它會把重複的結果只留一個給你。

舉例: SELECT DISTINCT store_name FROM Store_Information
解釋: 「把 Store_Information 表裡,所有不重複的店名都列出來。」

設定條件篩選資料:WHERE

SELECT 欄位名稱 FROM 表格名稱 WHERE 條件

WHERE 讓你可以在這裡設定各種條件,告訴資料庫「我要的資料必須符合這些要求」。
舉例: SELECT store_name FROM Store_Information WHERE Sales > 1000
解釋: 「給我那些銷售額(Sales)超過 1000 的店家名稱。」

多重條件的組合:
AND:而且。兩個條件都必須同時成立。
OR:或者。兩個條件中,只要有一個成立就好。
():優先順序。用來控制條件的判斷順序,括號內的會先處理。

舉例: SELECT * FROM Store_Information WHERE Sales > 1000 AND store_name = ‘Los Angeles’
解釋: 「給我所有銷售額超過 1000,而且店名是『Los Angeles』的資料。」

BETWEEN範圍查詢:

SELECT 欄位 FROM 表格 WHERE 欄位 BETWEEN 值一 AND 值二

BETWEEN 讓你輕鬆地抓取在某個範圍內的資料,這在處理數字或日期時特別方便。
舉例: SELECT * FROM Store_Information WHERE Date BETWEEN ‘2018-01-06’ AND ‘2018-01-10’
解釋: 「把 2018 年 1 月 6 日到 1 月 10 日之間的所有資料都給我。」

提醒: 日期格式通常建議用 ‘YYYY-MM-DD’ 這種標準格式,資料庫比較不會出錯。

清單查詢:IN

SELECT 欄位 FROM 表格 WHERE 欄位 IN (‘值一’, ‘值二’, …)

IN 就像一個「白名單」,你可以列出一個清單,告訴資料庫「只要欄位值在這個清單裡面的,都給我」。

舉例: SELECT * FROM Store_Information WHERE store_name IN (‘Los Angeles’, ‘San Diego’)
解釋: 「把店名是『Los Angeles』或『San Diego』的資料都給我。」

補充: IN 語法就等同於多次的 OR 組合,但寫起來更簡潔。

模糊比對:LIKE

SELECT 欄位 FROM 表格 WHERE 欄位 LIKE ‘模式’

LIKE 搭配一些特殊符號,可以讓你進行「模糊查詢」。當你不知道完整的字串,只想找符合某個模式的資料時,它就非常好用。

% (百分比符號): 代表「零個或多個字元」。
‘ABC%’:找出所有以 ‘ABC’ 開頭的字串。
‘%XYZ’:找出所有以 ‘XYZ’ 結尾的字串。
‘%AN%’:找出所有包含 ‘AN’ 的字串。
_ (底線): 代表「單一字元」。
‘A_Z’:找出所有開頭是 ‘A’、結尾是 ‘Z’,中間只有一個字元的字串。

舉例: SELECT * FROM Store_Information WHERE store_name LIKE ‘%AN%’

解釋: 「找出所有店名中包含『AN』這個字串的資料。」

排序結果:ORDER BY

ORDER BY 欄位名稱 [ASC | DESC]
ORDER BY 讓你控制查詢結果的排序方式。你可以選擇由小到大(ASC,可省略)或由大到小(DESC)排列。

單欄位排序:
SELECT * FROM Store_Information ORDER BY Sales DESC
解釋: 「把所有商店資料找出來,然後按照銷售額由高到低排好。」

多欄位排序:
ORDER BY 欄位1, 欄位2
SQL 會先依據第一個欄位排序,如果遇到值相同的資料,再用第二個欄位來排序。
SELECT * FROM Store_Information ORDER BY store_name ASC, Sales DESC

解釋: 「先按照店名由小到大排,如果店名一樣,再按銷售額由高到低排。」

AVG():求平均值。
COUNT():計數。
MAX():找最大值。
MIN():找最小值。
SUM():求總和。

使用方式: SELECT COUNT(store_name) FROM Store_Information
解釋: 「數 Store_Information 這張表裡,store_name 這個欄位總共有多少筆資料。」

與 DISTINCT 搭配:
SELECT COUNT(DISTINCT store_name) FROM Store_Information
解釋: 「數這張表裡,有多少個不重複的店名。」

補充: SQL 也能做簡單的數學運算,例如加(+)、減(-),或處理文字(如串接)。
SELECT sales * 1.1 FROM Store_Information
解釋: 「把所有銷售額都增加 10% 後顯示出來。」

SUMIF 函數根據單一條件將特定範圍內的值相加。

其基本語法為 = SUMIF(範圍, 條件, 進行總合範圍) 。

SUMIFS 可以包含多個條件

基本語法為: = SUMIFS(總和範圍1, 範圍1, 條件,總和範圍2, 範圍2, 條件2………)

COUNTIF 的定義是一個函數,用於統計某個區域中滿足單一條件的儲存格數量。

基本語法為: = COUNTIF(範圍,條件)

COUNTIFS 可以包含多個條件

基本語法為: = COUNTIFS(總和範圍1, 範圍1, 條件,總和範圍2, 範圍2, 條件2………)

AVERAGEIF 函數會根據特定條件對數組中的值進行平均

基本語法為: = AVERAGEIF(range, criteria, [sum_range])

MAXIFS 函數會根據一個或多個條件傳回某個範圍內的最大值。

基本語法為: = MAXIFS(max_range, range1, criteria1, [range2], [criteria2], …)。

分組彙總:GROUP BY

SELECT 欄位1, SUM(欄位2) FROM 表格 GROUP BY 欄位1
當你想對同一個類別的資料進行彙總計算(例如:分店計算總銷售額),就需要用到 GROUP BY。

核心原則:
SELECT 語句中,所有沒有使用函數的欄位,都必須放在 GROUP BY 的後面。

舉例:
SELECT store_name, SUM(Sales) FROM Store_Information GROUP BY store_name

解釋: 「我要看每個店家的總銷售額,所以把 store_name 和 Sales 兩個欄位拿出來,並且按照店名分組,計算每一組的銷售總和。」

篩選彙總結果:HAVING

SELECT … FROM … GROUP BY … HAVING 條件
WHERE 只能對原始資料設定條件,但如果你想對函數計算後的結果(例如:總銷售額)設定條件,就要用 HAVING。

舉例:
SELECT store_name, SUM(Sales) FROM Store_Information GROUP BY store_name HAVING SUM(Sales) > 1500
解釋: 「先算出每個店家的總銷售額,然後只挑出那些總銷售額超過 1500 的店家。」

補充:
HAVING 通常會跟在 GROUP BY 後面,但如果你的 SELECT 語句只有函數欄位,沒有 GROUP BY,HAVING 也可以單獨使用。

欄位與表格的綽號:AS (別名)

SELECT 欄位 AS 別名 FROM 表格 AS 別名

AS 語法可以幫你的欄位或表格取一個更短、更好懂的「綽號」,讓你的 SQL 語法看起來更簡潔。通常 AS 可以省略,直接用空格代替。

欄位別名:SELECT SUM(Sales) AS TotalSales
解釋: 「把銷售總和(SUM(Sales))這個結果欄位取名叫 TotalSales。」
補充: 如果別名中有空格或特殊符號,要用引號包起來,例如 AS ‘Total Sales’。

表格別名:FROM Store_Information AS A1

解釋: 「把 Store_Information 這張表取個簡短的綽號叫 A1。」
用途: 當你在處理多個表格時,用別名可以大幅減少打字量,並讓語法更清晰。

表格連接 (JOIN):把不同表格的資料串起來

JOIN 的核心精神是:根據兩個表格之間的共同欄位,把它們的資料串聯在一起。這比單純用 WHERE 條件來連接更有效率,也更能表達你想要連接表格的意圖。

內部連接 (INNER JOIN)
FROM table1 INNER JOIN table2 ON table1.欄位 = table2.欄位
解釋: 這是一種『你有的我也有』的連接方式。它只會回傳兩個表格中,共同欄位都有對應值的資料。
補充: 這是最常用也最安全的連接方式。

左外部連接 (LEFT JOIN)
FROM table1 LEFT JOIN table2 ON table1.欄位 = table2.欄位
解釋: 「這是一種『以左邊表格為主』的連接方式。它會回傳左邊表格(一定要有內容)的所有資料,即使右邊沒有對應的內容,也會回傳 NULL。」
用途: 常用於找出「左邊表格有,但右邊表格沒有」的資料。

右外部連接 (RIGHT JOIN)
FROM table1 RIGHT JOIN table2 ON table1.欄位 = table2.欄位
解釋: 「這跟 LEFT JOIN 相反,是『以右邊表格為主』的連接方式。它會回傳右邊表格(一定要有內容)的所有資料,即使左邊沒有對應的內容,也會回傳 NULL。」

交叉連接 (CROSS JOIN) 又稱笛卡兒乘積 (Cartesian product)
FROM table1 CROSS JOIN table2
解釋: 「這是一種『無差別混搭』的連接方式。它會把兩個表格的每一行資料,互相排列組合。如果 A 表有 4 筆、B 表有 4 筆,結果就會有 16 筆。」

JOIN 搭配 ON 語法
ON 語法就是你定義兩個表格如何對應的條件。當你使用 JOIN 語法時,ON 是不可或缺的。
例:ON A1.store_name = A2.store_name

解釋: 「把 A1 表格的 store_name 欄位和 A2 表格的 store_name 欄位當作對應依據,把兩張表接起來。」

調整下次出現的流水號(id)順序
# 先找出目前表格中最大的 ID 是多少
SELECT MAX(ID) FROM ‘表格名稱’;
DBCC CHECKIDENT (‘表格名稱’, RESEED, 新的起始編號);

資料庫中建立臨時表(BigQuery 不支援)

# 他是一個實體的表單,當原始資料變化時不會跟著變動。

# 可以對這個臨時表進行任何後續的查詢、分析或修改,而不會影響到原始的 GlobalSales 表格,當資料庫連線結束時會自動消失。

SELECT INTO TempTable

FROM GlobalSales

WHERE

    Region = “Africa”

DROP TABLE TempTable  # 手動移除

CAST 函數用於將某個值從一種資料類型轉換為另一種資料類型。

語法: CAST(expression AS data_type)

範例: SELECT CAST(total_sales AS INTEGER) FROM my_data 這個指令會將 total_sales 欄位的值從其原始類型(例如浮點數或字串)轉換為整數。

COALESCE 函數會依序評估參數中的所有表達式,並返回第一個非空值 (NULL)。如果所有參數都是空值,它也會返回空值。

語法: COALESCE(expression1, expression2, expression3, …)

範例: SELECT COALESCE(phone_number, email_address, ‘N/A’) FROM customers 這個指令會先檢查 phone_number 是否為空。如果為空,則檢查 email_address。如果兩者都為空,則返回 ‘N/A’。

CONCAT 函數用於將兩個或多個字串連接起來。

語法: CONCAT(string1, string2, string3, …)

範例: SELECT CONCAT(first_name, ‘ ‘, last_name) AS full_name FROM employees

# 將 first_name 和 last_name 合併,中間用一個空格隔開,並將結果命名為 full_name。

SUBSTRING 函數用於從一個字串中提取特定部分。你可以指定要從哪個位置開始提取,以及要提取多少個字元。

語法: SUBSTRING(string, start_position, length)

範例: SELECT SUBSTRING(product_code, 1, 3) AS category FROM products

# product_code 欄位中,從第一個字元開始,提取三個字元,並將其命名為 category。

C:Create (建立資料)

INSERT INTO 表格名稱 (欄位1, 欄位2, …) VALUES (值1, 值2, …)
這個語法就像是在表格裡「新增一筆紀錄」

INSERT INTO 表格名稱:要新增到哪張表格。
(欄位1, 欄位2, …):要填入哪些欄位。
VALUES (值1, 值2, …):每個欄位要填什麼值。

欄位順序:VALUES 裡的值,順序必須和前面指定的欄位順序一致
一次新增多筆資料:你也可以一次新增好幾筆資料,例如:
INSERT INTO orders (order_id, customer_id) VALUES (1001, 25), (1002, 30);

從另一張表新增資料:把一張表的查詢結果,直接插入另一張表,這在備份或資料遷移時非常方便。
INSERT INTO new_table (col1, col2) SELECT col3, col4 FROM old_table WHERE {條件};

R:Read (讀取資料)

SELECT 欄位名稱 FROM 表格名稱 [WHERE 條件]

SELECT 語法就像是你的資料庫「點餐單」,你可以告訴資料庫你要「點」哪些資料,以及從哪張「菜單」上點。

SELECT 欄位名稱:這部分決定了你要看哪些欄位。

如果想看所有欄位,就用 SELECT *
如果只想看特定的幾個欄位,就把欄位名稱列出來,例如:SELECT FirstName, LastName

FROM 表格名稱:這部分決定了你要從哪張表格抓取資料
[WHERE 條件]:這部分是可選的,但非常重要。它讓你設定條件來篩選資料,只拿出你真正需要的,例如:WHERE Sales > 1000

完整的 SELECT 語句範例

SELECT 1. 欄位選擇,可以用函數或別名
    DISTINCT 欄位1, 欄位2, SUM(欄位3) AS TotalSales
    FROM2. 表格選擇,可以用 JOIN 連接多張表
        表格1 JOIN 表格2 ON 表格1.ID = 表格2.ID
    WHERE3. 原始資料篩選
        欄位1 > 100
    GROUP BY4. 分組彙總
        欄位1, 欄位2
    HAVING5. 彙總結果篩選
        SUM(欄位3) > 5000
    ORDER BY6. 排序
        TotalSales DESC
    LIMIT 7. 限制回傳筆數
        10;

SELECT:決定要顯示什麼。
DISTINCT:不顯示重複內容。
FROM & JOIN:決定從哪裡找。
WHERE:決定要篩選出哪些資料。
GROUP BY & HAVING:決定如何分組及篩選彙總結果。
ORDER BY:決定如何排序。
LIMIT (或 TOP):決定只要顯示幾筆。

U:Update (更新資料)

UPDATE 表格名稱 SET 欄位1 = [新值], 欄位2 = [新值] WHERE {條件}

這個語法用來「修改既有的資料」。

UPDATE 表格名稱:要修改哪張表格。
SET 欄位1 = [新值]:要修改哪個欄位,以及新值是什麼。你可以同時修改多個欄位。
WHERE {條件}:用來指定要修改哪一筆或哪幾筆資料。如果沒有 WHERE,那張表格裡的所有資料都會被修改

WHERE 條件非常重要,它決定了 UPDATE 的範圍。

舉例,UPDATE customers SET city = ‘Taipei’ WHERE customer_id = 10; 只會修改 customer_id 是 10 的那筆資料。

D:Delete (刪除資料)

DELETE FROM 表格名稱 WHERE {條件}

這個語法用來「刪除不再需要的紀錄」。

DELETE FROM 表格名稱:要從哪張表格刪除資料。
WHERE {條件}:用來指定要刪除哪一筆或哪幾筆資料。如果沒有 WHERE,整張表格的資料都會被清空!

TRUNCATE TABLE:它也可以清空整張表格。但 TRUNCATE 通常比 DELETE 更快,因為它不會一筆一筆刪除,而是直接把表格結構以外的所有資料都移除。不過,TRUNCATE 無法使用 WHERE 條件

變更表格架構:ALTER TABLE

PRIMARY KEY(新增主鍵):ALTER TABLE Customer ADD PRIMARY KEY (SID);這個欄位必須設定為NOT NULL。

ADD (新增欄位): ALTER TABLE customer ADD Gender char(1),加入一個 “gender” 的欄位。

DROP (刪除欄位): ALTER TABLE customer DROP Gender,刪除 “Gender” 欄位。

MODIFY (修改型態): ALTER table customer modify Addr char(30),把 “Addr” 欄位的資料種類改為 char(30)。
# MySQL 使用 CHANGE 來改名和改型態,SQL Server 則使用 ALTER COLUMN。

CHANGE (修改名稱):ALTER table customer change Address Addr char(50),把 “Address” 欄位改名為 “Addr”

從資料庫中清(刪)除一個表格跟他的所有資料,
語法:DROP TABLE “表格名稱”
如果要從資料庫中清(刪)除顧客表格,就輸入:
DROP TABLE customer

清除一個表格中的所有資料,保留表格
語法:TRUNCATE TABLE “表格名稱”
如果要清除在 SQL Create Table 那一頁建立的顧客表格之內的資料,就輸入:
TRUNCATE TABLE customer

虛擬表格:CREATE VIEW

CREATE VIEW 就像是給一個複雜的查詢取一個名字,它本身不儲存任何資料。

語法:CREATE VIEW V_Customer AS SELECT First_Name, Last_Name, Country FROM Customer

解釋:建立了一個虛擬表格,名字叫 V_Customer。當查詢這個 View 時,它會自動去 Customer 表格中,把 First_Name、Last_Name 和 Country 這三個欄位撈出來給你。

加速查詢:CREATE INDEX

索引就像是書本的「目錄」,當你在書中找一個特定主題時,你會先查目錄,然後直接翻到對應的頁數,而不需要一頁一頁地找,通常會在名稱前加 “IDX_” 來避免混淆。

語法:CREATE INDEX IDX_CUSTOMER_LAST_NAME on CUSTOMER (Last_Name)

解釋:在 CUSTOMER 表格的 Last_Name 欄位上建立了一個索引。當使用 WHERE Last_Name = ‘…’ 的條件查詢時,資料庫會使用這個索引,快速找到對應的資料,而不需要掃描整個表格。

UNION (聯集,不包含重複值):將兩個或多個 SELECT 語句的結果合併成一個結果集,但會自動移除所有重複的行。
語法:SELECT 名單A UNION SELECT 名單B # 結果會是 A 和 B 的所有內容,且重複的會被刪除。

UNION ALL (聯集,包含重複值):和 UNION 一樣合併結果集,但不會移除重複的行。
語法:SELECT 名單A UNION ALL SELECT 名單B # 結果會是 A 和 B 的所有內容,即使有重複的也都會列出來。

INTERSECT(交集):只會返回兩個 SELECT 語句中都存在的行。這就像是找出兩份名單中共同的人。
語法:SELECT 名單A INTERSECT SELECT 名單B # 結果只會顯示 A 和 B 都有的內容。

MINUS (差集):從第一個 SELECT 語句的結果中,移除所有在第二個 SELECT 語句中存在的行。
語法:SELECT 名單A MINUS SELECT 名單B # 結果會是「名單A 有,但名單B 沒有」的內容。

# SQL Server 中,這個關鍵字通常被稱為 EXCEPT。

SubQuery (子查詢):一個套在在另一個查詢(通常是 SELECT、FROM 或 WHERE 子句)中的查詢,就像是「查詢中的查詢
語法:SELECT “欄位1” FROM “表格” WHERE “欄位2” [比較運算子] (SELECT “欄位1” FROM “表格”WHERE [條件])
[比較運算子] 可以使用符號運算式(如 =, >, <, >=, <=)跟文字運算式(“LIKE”)

EXISTS (存在式關聯查詢):用來檢查子查詢是否有返回結果,EXISTS 就會返回 TRUE,並執行後續語句,false的話就不會執行。
語法:SELECT “欄位1” FROM “表格1” WHERE EXISTS (SELECT * FROM “表格2” WHERE [條件])

CASE:類似於程式語言中的 if-else 或 switch

範例:「如果成績大於 90,顯示『優』;如果大於 60,顯示『良』;否則顯示『不及格』」,並將顯示結果的欄位以 grade 命名。

SELECT
    student_name,
    CASE
        WHEN score >= 90 THEN ‘優’
        WHEN score >= 60 THEN ‘良’
    ELSE ‘不及格’
    END AS grade
FROM scores;

VLOOKUP 的用處就從A表單跟B表單透過關鍵字來找出對應資料(合併報表)。

VLOOKUP(search_key, range, index, is_sorted)

search_key  搜尋鍵

這是函數要搜尋的值。它可以是數字、文字字串或儲存格引用。

range  範圍

這是函數將搜尋並傳回資訊的儲存格範圍。 搜尋範圍的第一列 。找到搜尋鍵後,將傳回該行的索引。

index  索引

這是包含要傳回的資料的列的位置。範圍中的第一列的列號為 1,每列依序向右編號。

is_sorted  匹配

這表示傳回近似匹配還是精確匹配。例如,如果您搜尋的是“Google”,那麼“google”將不被視為匹配。

# 若要傳回完全符合的結果,要將 is_sorted 設定為 FALSE 。

# 若要傳回近似匹配,將 is_sorted 設定為 TRUE ,系統會傳回最接近的符合項(小於或等於 search_key )。

發佈留言