MySQL 語法

懶人包。

基礎

讀取

口訣:從哪個「table」選到哪個「欄位」:

主結構:SELECTFROMWHERE

1
SELECT * FROM users;

代表 users 這個 table 中的所有欄位。

1
2
SELECT id FROM users;
SELECT users.id FROM users;

代表 users 這個 table 中的 id 欄位。

1
2
SELECT id, content FROM users;
SELECT users.id, users.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 INTOVALUES

1
INSERT INTO users (username, content) VALUES ('PPB', 'Hi');

username='PPB'content='HI' 新增到 users 這個 table。

修改

口訣:把 tablue 中的 「xxx」修改成「ooo」。

主結構:UPDATESETWHERE

1
UPDATE users SET username='ABC', content='GOGOGO' WHERE id=3;

記得這邊的 WHERE 很重要,如果沒有指定條件會把所有欄位都改掉。

1
UPDATE users SET username='PeaNu' WHERE 1;

這樣所有的 username 欄位都會變成 PeaNu

刪除

從哪個「table」刪除某個「欄位」。

主結構:DELETE FROMWHERE

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);

字串搜尋

直接用範例來解釋:

  1. 找出有包含 i 這個字的欄位
1
SELECT * FROM `categories` WHERE name LIKE '%i%';
  1. 找出以 i 開頭的欄位:
1
SELECT * FROM `categories` WHERE name LIKE 'i%';
  1. 找出以 i 結尾的欄位:
1
SELECT * FROM `categories` WHERE name LIKE '%i';
  1. 找出三個字,且裡面有包含 i 的欄位:
1
2
SELECT * FROM `categories` WHERE name LIKE '_i%';
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

customers

orders

orders

查詢結果:

result

PHP 中常用的內建函式與變數 讓手機連到 VS-Code 上的 Live Server
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×