前言
在進行資料分析或是抓取營運相關數據時往往需要使用到 SQL 語法。一般情況下 SELECT
、 ORDER BY
等語法已經可以支援大部份的日常查詢使用,但若能熟悉更多 SQL 好用的工具、函式或是語法可以讓我們在查找資料時更為方便,甚至不用撰寫其他程式碼,只要單純使用 SQL 語法就可以達成我們想要的效果。以下範例主要使用 MySQL
、SQLite
當作範例語法環境,若是使用其他的關聯式資料庫(例如:MariaDB
、PostgreSQL
)可能要注意一下語法可能會有些差異。
初始化環境
首先我們先建立一個 stocks
table 資料表(屬性:id
、name
、price
),存放台股個股資訊,並插入範例資料 3 筆當作練習使用。
CREATE TABLE stocks (
id INT PRIMARY KEY NOT NULL UNIQUE,
name VARCHAR(12) NOT NULL,
price INT,
revenue INT
);
INSERT INTO stocks VALUES (
2330, '台雞店', 300, 2000
);
INSERT INTO stocks VALUES (
2317, '紅海', 70, -1000
);
INSERT INTO stocks VALUES (
2308, '台達店', 200, 1000
);
View 檢視表
創建 View 檢視表是一個可以將經常使用的 SELECT
敘述製作成檢視表方便重複使用的工具語法(例如跨資料表的彙整或是合併等)。事實上,View 檢視表和資料表(table)主要差異在於是否有實際儲存資料
。View 檢視表主要是儲存複雜或常用的 SQL 查詢敘述,透過查詢敘述取得的資料更進一步進行查詢和過濾,並沒有實際儲存資料,可以想成就是一個虛擬的資料表(virtual table)。
View 檢視表主要功能:
- 節省空間(由於檢視表只有儲存查詢敘述沒有實際存資料)
- 重複利用複雜的查詢語法節省時間
- 重新命名新的屬性欄位名稱
創建 View 檢視表
創建資料表的使用方式:
CREATE VIEW [IF NOT EXISTS] 檢視表名稱 ([檢視表欄位名稱])
AS
SELECT 查詢語法敘述;
範例語法:
/*
建立 high_price_stock View 檢視表儲存常用查詢敘述:
查詢敘述為大於等於 200 股價的個股
*/
CREATE VIEW high_price_stock
AS
SELECT
id,
name,
price
FROM
stocks
WHERE price >= 200;
/*
可以直接從 View 檢視表中查詢資料進行進一步過濾,就不用重複撰寫查詢語法
*/
SELECT * FROM high_price_stock;
以上為簡單範例,若為更複雜的查詢語句(例如多個 table JOIN、子查詢等),View 可以幫助我們簡省查詢功夫。
執行結果:
2330|台雞店|300
2308|台達店|200
刪除 View 檢視表
若要刪除資料表:
DROP VIEW 檢視表名稱
範例程式:
DROP VIEW high_price_stock;
SELECT * FROM high_price_stock;
執行結果:
Error: near line xx: no such table: high_price_stock
SQL 常用函式
在 SQL 語法中有許多好用的函式可以幫助我們在查詢資料時進行資料處理或是過濾使用。這些函式就像 SQL 的工具箱,若是妥善運用可以讓我們減少另外撰寫程式的時間。以下我們介紹幾個比較常用的 SQL 函式語法,不必一定要全部的記住,只要記得有相關的使用方法,詳細語法可以在使用時再查詢即可。
數學
- MOD:取餘數(
MOD(被除數, 除數)
)SELECT x, y, MOD(x, y) AS mod_xy FROM table_name;
- ABS:取絕對值(
ABS(數值)
)SELECT x, y, ABS(x, y) AS abs_xy FROM table_name;
- ROUND:取四捨五入值
ROUND(資料, 捨入小數位數)
SELECT x, y, ROUND(x, 2) AS round_xy FROM table_name;
字串
- LOWER:將字串轉為小寫(
LOWER(英文字串)
)SELECT x, y, LOWER(x) AS lower_x FROM table_name;
- UPPER:將字串轉為大寫(
UPPER(字串)
)SELECT x, y, UPPER(x) AS uppper_x FROM table_name;
- CONCAT:串接字串(
CONCAT(字串1, 字串2)
)SELECT x, y, CONCAT(x, y) AS concat_xy FROM table_name;
- LENGTH:計算字串長度(
LENGTH(字串)
)SELECT x, y, LENGTH(x) AS length FROM table_name;
轉換
- COALESCE:將
NULL
值轉換成特定值/* x 內的 NULL 資料會被轉換成 0 */ SELECT x, y, COALESCE(x, 0) AS abs_length FROM table_name;
- CASE:轉換型別(
CASE(值, '型別')
)/* x 從原本資料型別轉為整數 */ SELECT x, y, CASE(x, 'INTEGER') FROM table_name;
日期
- CURRENT_TIME:目前時間
SELECT CURRENT_TIME;
- CURRENT_DATE:目前日期
SELECT CURRENT_DATE;
- CURRENT_TIMESTAMP:目前日期和時間
SELECT CURRENT_TIMESTAMP;
SQL 集合運算
除了函式工具外,在 SQL 也有集合運算可以使用,若是有集合運算的需求也可以使用。
Union 聯集
若是希望取出的兩筆資料可以取聯集,可以使用 UNION
串連兩組查詢語言敘述。
範例語法:
SELECT 查詢語法 1
UNION
SELECT 查詢語法 2
Intersect 交集
若是希望取出的兩筆資料可以取交集,可以使用 INTERSET
串連兩組查詢語言敘述。
範例語法:
SELECT 查詢語法 1
INTERSET
SELECT 查詢語法 2
EXCEPT 減法運算
若是希望取出的兩筆資料可以取減法運算(查詢語法 1 取得資料扣掉 查詢語法 2 取得資料),可以使用 EXCEPT
串連兩組查詢語言敘述。
範例語法:
/* 查詢語法 1 減法去除 查詢語法 2 */
SELECT 查詢語法 1
EXCEPT
SELECT 查詢語法 2
總結
以上簡單列出常用的幾個好用 SQL 工具和語法,可以先把常用的函式記下,若是真正遇到需要使用時可以更進一步查找相關 SQL 語法(若忘記使用方式的話)。透過 SQL 函式語法可以讓我們省下多額外撰寫程式的功夫,更專注在如何使用 SQL 語法進行資料的分析和查找上。