懶人包。
基礎
讀取
口訣:從哪個「table」選到哪個「欄位」:
主結構:SELECT
… FROM
… WHERE
…
1 | SELECT * FROM users; |
代表 users 這個 table 中的所有欄位。
1 | SELECT id FROM users; |
代表 users 這個 table 中的 id 欄位。
1 | SELECT id, content FROM users; |
代表 users 這個 table 中的 id 跟 content 欄位。
1 | SELECT content as text FROM users; |
代表 users 這個 table 中的 content
欄位,但我要把這個欄位名稱改成 text
1 | SELECT * FROM users WHERE username='PeaNu' |
代表 users 這個 table 中 username 是 PeaNu
的所有欄位。
1 | SELECT * FROM users WHERE username='PeaNu' AND id=1; |
代表 users 這個 table 中 username 是 PeaNu
且 id 是 1
的 所有欄位。
1 | SELECT * FROM users WHERE username='aaa' OR id=1; |
代表 users 這個 table 中 username 是 aaa
或 id 是 1
的 所有欄位。
1 | SELECT * FROM users ORDER BY id ASC |
代表從 users 這個 table 拿出所有欄位,並按照「id」來升冪排序。
備註:降冪的話把 ASC
改成 DESC
新增
口訣:把 「xxx」 新增到某個 「table」 裡面。
主結構:INSERT INTO
… VALUES
…
1 | INSERT INTO users (username, content) VALUES ('PPB', 'Hi'); |
把 username='PPB'
和 content='HI'
新增到 users 這個 table。
修改
口訣:把 tablue 中的 「xxx」修改成「ooo」。
主結構:UPDATE
… SET
… WHERE
…
1 | UPDATE users SET username='ABC', content='GOGOGO' WHERE id=3; |
記得這邊的 WHERE
很重要,如果沒有指定條件會把所有欄位都改掉。
1 | UPDATE users SET username='PeaNu' WHERE 1; |
這樣所有的 username 欄位都會變成 PeaNu
。
刪除
從哪個「table」刪除某個「欄位」。
主結構:DELETE FROM
… WHERE
…
1 | DELETE FROM users WHERE name='PeaNu'; |
一樣要注意 WHERE
,如果寫成 WHERE 1
代表把所有欄位刪除。
顯示幾筆資料
通常用來做分頁效果:
1 | SELECT * FROM users LIMIT 5 |
意思是顯示五筆資料。
跳過幾筆資料
通常用來做分頁效果:
1 | SELECT * FROM users OFFSET 5; |
意思是跳過前五筆資料。
設定範圍
例如想找出 id 在 15 到 20 之間的欄位,我可以:
1 | SELECT * FROM `categories` WHERE id BETWEEN 15 AND 20; |
這樣就會把 id 是 15 16 17 18 19 20
的欄位撈出來(注意有包含 15 和 20)
指定多個值
原本要找 id 為 1 2 3
的資料會這樣寫:
1 | SELECT * FROM `categories` WHERE id=1 OR id=2 OR id=3; |
但其實有更簡潔的寫法:
1 | SELECT * FROM `categories` WHERE id IN(1, 2, 3); |
字串搜尋
直接用範例來解釋:
- 找出有包含
i
這個字的欄位
1 | SELECT * FROM `categories` WHERE name LIKE '%i%'; |
- 找出以
i
開頭的欄位:
1 | SELECT * FROM `categories` WHERE name LIKE 'i%'; |
- 找出以
i
結尾的欄位:
1 | SELECT * FROM `categories` WHERE name LIKE '%i'; |
- 找出三個字,且裡面有包含
i
的欄位:
1 | SELECT * FROM `categories` WHERE name LIKE '_i%'; |
寫這麼多範例最主要是要你了解 %
跟 _
在幹嘛用的。
%
代表任意字元,所以%i%
代表開頭和結尾可以是任意字元。但i%
就不一樣了,意思是i + 任意字元
的組合才正確(有點類似正則表達裡的 pattern),這兩個要分清楚才不會搞錯。_
也是代表任意字元,差別是可以「限制總字數」,所以%i_
算起來是三個字,就代表欄位值也只能有三個字。
進階指令
合併兩個資料表
備註:LEFT JOIN
是留下左邊 table 的所有資料,RIGHT JOIN
是反過來。
懶人包:SELECT
要撈出來的欄位 FROM
第一個 table LEFT JOIN
第二個 table ON
兩個 table 關聯的欄位(可以把 ON
想成是 WHERE
在設定條件的感覺)。
1 | SELECT customers.name, orders.order_number FROM customers LEFT JOIN orders ON customers.client_id = orders.client_id; |
備註:如果插入的 table(在這邊是 orders)中沒有資料,就會顯示 null
從 customers 跟 orders 把「顧客名稱」、「訂單編號」撈出來,兩個 table 關聯的欄位是 client_id
。(講白話一點就是把兩個 client_id
一樣的資料撈出來)
參考我練習的圖片:
customers
:
orders
:
查詢結果: