SQL進階語法


查詢集合排序

特別注意兩個集合查詢的欄位數量和資料型別需要一樣,若有排序需要放在最後。舉例來說以下將兩個資料表取聯集,查詢語法的欄位 name, category, price 在兩個資料表皆為一致。最後查詢的結果則以指定欄位由高至低進行排序 DESC(descending),若 ASC(ascending)則為由低至高:

SUBSTRING:取得子字串(注意 SQL 索引位置由左從 1 開始和程式語言從 0 開始 index 不同)

 /* position index 從 1 開始(這部份和程式語言從 0 開始 index 不同),取長度為 3 */
 SELECT SUBSTR(name, 1, 3)
 FROM products;

SQL 轉換函式

 /* NULL 替換成 未分類 */
 SELECT COALESCE(category, '未分類')
 FROM products;

LIKE 字串搜尋比較

/* 開頭相同 */
SELECT name
FROM products
WHERE name LIKE 'py%';
/* 中間相同 */
SELECT name
FROM products
WHERE name LIKE '%thon%';
/* 結尾相同 */
SELECT name
FROM products
WHERE name LIKE '%分析';

IS NULL / IS NOT NULL

SELECT name, category
FROM products
WHERE category IS NULL;
SELECT name, category
FROM products
WHERE category IS NOT NULL;

BETWEEN

判斷是否在區間語法(含頭尾):

SELECT name, category
FROM products
WHERE price BETWEEN 100 AND 1000;

IN、NOT IN

判斷是否為其中一值的語法(類似 OR 使用方式):

IN、NOT IN
判斷是否為其中一值的語法(類似 OR 使用方式):

SQL CASE運算式

/* category 轉換成中文字 */
SELECT
    name,
    CASE
        WHEN category = 'NB' THEN '筆電類'
        WHEN category = '3C' THEN '3C類'
        WHEN category = 'Book' THEN '圖書類'
        ELSE '未分類'
    END
FROM products;

UNION 聯集 INTERSECT 交集 EXCEPT 差集

查詢的結果則以指定欄位由高至低進行排序 DESC(descending),若 ASC(ascending)則為由低至高

SELECT 欄位_1, 欄位_2
FROM 資料表_1

UNION 聯集  INTERSECT 交集 EXCEPT 差集

SELECT 欄位_1, 欄位_2
FROM 資料表_2
ORDER BY price DESC;

INNER JOIN

INNER JOIN 為透過有相同的連結欄位合併不同資料表(可以多個)

語法:
資料表_1 INNER JOIN 資料表_2 ON 資料表_1.屬性 = 資料表_2.屬性
範例語法:
SELECT *
FROM users INNER JOIN orders ON users.id = orders.customer_id;

OUTER JOIN

OUTER JOIN 為不管有沒有相同的連結欄位都合併在一起,需要指定以哪一個資料表為主(目前 SQLite 主要支援 LEFT 以寫在左邊的資料表為主)。

資料表_1 LEFT OUTER JOIN 資料表_2 ON 資料表_1.屬性 = 資料表_2.屬性
範例語法:
SELECT *
FROM users LEFT OUTER JOIN orders ON users.id = orders.customer_id;






你可能感興趣的文章

[Release Notes] 20200924_v1 - Fix blog post serie checkbox bug & add publish type modal

[Release Notes] 20200924_v1 - Fix blog post serie checkbox bug & add publish type modal

Day 127

Day 127

國際電匯疑難雜症 || 國泰世華網銀

國際電匯疑難雜症 || 國泰世華網銀






留言討論