查詢集合排序
特別注意兩個集合查詢的欄位數量和資料型別需要一樣,若有排序需要放在最後。舉例來說以下將兩個資料表取聯集,查詢語法的欄位 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;