介紹如何使用 SELECT
指令配合各種篩選條件,查詢 MySQL/MariaDB 資料表中的資料。
SELECT
指令基本語法
SELECT
指令可用來查詢並列出符合條件的資料,其基本語法如下:
-- SELECT 基本用法 SELECT 欄位 FROM 資料表 WHERE 篩選條件 ORDER BY 排序欄位 LIMIT 顯示筆數;
完整的 SELECT
指令用法,可參考 MySQL 的文件。
假設我們已經建立好一張 person
資料表,並且插入了一些資料,若要查看 persons
資料表內所有的資料,可以執行:
-- 查看 persons 資料表內所有資料 SELECT * FROM persons;
+----+-------+------+---------+ | id | name | age | city | +----+-------+------+---------+ | 1 | Arden | 32 | Taipei | | 2 | Bond | 54 | Taipei | | 3 | Cole | 12 | Hsinchu | | 4 | Dana | 19 | Hsinchu | | 19 | Jack | 33 | Taipei | +----+-------+------+---------+
指定顯示欄位
若只要顯示某些欄位,可在 SELECT
之後指定欄位名稱:
-- 查看 persons 資料表內 name 與 age 欄位 SELECT name, age FROM persons;
+-------+------+ | name | age | +-------+------+ | Arden | 32 | | Bond | 54 | | Cole | 12 | | Dana | 19 | | Jack | 33 | +-------+------+
WHERE
篩選條件
若要根據各種條件篩選要顯示的資料,可以加上 WHERE
並指定篩選條件:
-- 篩選 age 大於 20 的資料 SELECT * FROM persons WHERE age > 20;
+----+-------+------+--------+ | id | name | age | city | +----+-------+------+--------+ | 1 | Arden | 32 | Taipei | | 2 | Bond | 54 | Taipei | | 19 | Jack | 33 | Taipei | +----+-------+------+--------+
以下是各種條件的範例:
-- 篩選 age 大於 20 的資料 SELECT * FROM persons WHERE city = "Hsinchu"; -- 篩選 name 是 A 開頭的資料 SELECT * FROM persons WHERE name LIKE "A%"; -- 篩選 name 不是 A 開頭的資料 SELECT * FROM persons WHERE name NOT LIKE "A%"; -- 多種條件 SELECT * FROM persons WHERE (name NOT LIKE "A%") AND (age < 50);
ORDER BY
排序資料
若要根據指定的欄位排序資料,可以使用 ORDER BY
指定排序的欄位:
-- 根據 age 排序 SELECT * FROM persons ORDER BY age;
+----+-------+------+---------+ | id | name | age | city | +----+-------+------+---------+ | 3 | Cole | 12 | Hsinchu | | 4 | Dana | 19 | Hsinchu | | 1 | Arden | 32 | Taipei | | 19 | Jack | 33 | Taipei | | 2 | Bond | 54 | Taipei | +----+-------+------+---------+
以下是各種排序方法的範例:
-- 遞增排序(預設) SELECT * FROM persons ORDER BY age ASC; -- 遞減排序 SELECT * FROM persons ORDER BY age DESC; -- 先依 city 遞減排序,再依 age 遞增排序 SELECT * FROM persons ORDER BY city DESC, age;
LIMIT
限制資料筆數
若資料比數太多,可用 LIMIT
限制資料顯示的上限:
-- 最多顯示 3 筆資料 SELECT * FROM persons LIMIT 3;
+----+-------+------+---------+ | id | name | age | city | +----+-------+------+---------+ | 1 | Arden | 32 | Taipei | | 2 | Bond | 54 | Taipei | | 3 | Cole | 12 | Hsinchu | +----+-------+------+---------+
LIMIT
預設會從第一筆資料開始顯示,若想要從指定位置開始顯示,可以指定要跳過的資料筆數:
-- 跳過 1 筆、最多顯示 3 筆資料 SELECT * FROM persons LIMIT 1, 3;
+----+------+------+---------+ | id | name | age | city | +----+------+------+---------+ | 2 | Bond | 54 | Taipei | | 3 | Cole | 12 | Hsinchu | | 4 | Dana | 19 | Hsinchu | +----+------+------+---------+