0%

[資料庫] Lesson 3 SQL 語法

SQL全名為Structured Query Language-結構化查詢語言,是一種基於特定目的而發展的程式語言,主要用於管理關聯式資料庫管理系統。

SQL的作用包括資料新增、查詢、更新和刪除,資料庫模式建立和修改,以及資料存取控制。

雖然一般都認為SQL只能用於資料庫系統上,但部份資料庫系統其實也有發展一些自定義的程式語法,可以讓SQL發揮更靈活的作用。

要注意的是,不同的資料庫系統中的SQL語法並不完全相同,本課程是以MySQL及MariaDB系統的SQL語法來進行教學。

SQL 基本語法操作

SQL語法算是一種特化過的程式語言,主要是針對資料庫而設計,而每種資料庫又可能在SQL的基礎上,再發展適合自己資料庫特色的語法,因此如果有機會接觸不同的資料庫系統,要先搞清楚其語法間的差異。

符號的使用
在MySQL和MariaDB的語法使用上,要注意上引號和單引號使用的場合,以免語句無法執行:

  • 上引號: ` ` (鍵盤上方數字鍵最左邊的按鍵) -用來包住資料表及欄位名稱時使用
  • 單引號: ' ' (鍵盤中間一排最右邊在enter鍵左邊的按鍵) -用來包住字串及值時使用
  • 分 號: ;代表一個SQL句子的結束,如果要同時執行多個SQL句子,要使用分號隔開

INSERT 新增 / 插入

1
2
3

INSERT INTO `table`(`col1`,`col2`,`col3`,`col4`,`col5`) VALUES('value1','value1','value1','value1','value1','value1');

SELECT 查詢

1
SELECT `col1`,`col2`,... FROM `table1`,`table2`,... WHERE ...
  • as

    在select句子中,有時欄位的名稱不一定是呈現結果時要出現的,此時可以使用 as 來對欄位重新命名,例:

    select score as ‘成績’, avg(score) as ‘平均’ from students ……

UPDATE 更新

1
UPDATE `table` SET `col1`='value1',`col2`='value2',... WHERE ...

DELETE 刪除

1
DELETE FROM `table` WHERE ...

SQL 條件句操作

WHERE 條件

1
2
3
4
SELECT * FROM `table` WHERE `id`='23';

SELECT * FROM `table` WHERE `id`='23' AND `name`='mack';

IN 特殊指定

1
SELECT * FROM `table` WHERE `id` IN('23','36','42','78','98');

BETWEEN 兩者之間

使用BETWEEN時要注意值的先後順序,小的在前,大的在後。

1
2
3
4
5
6
SELECT * FROM `table` WHERE `id` BETWEEN '23' AND '98';

相當於

SELECT * FROM `table` WHERE `id` >= '23' AND `id` <= '98';

LIKE 模糊查詢

LIKE用來查詢模糊條件,搭配%符號來查詢部份條件符合的資料。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//查詢任何姓陳的資料
SELECT * FROM `table` WHERE `name` LIKE "陳%";

相當於

SELECT * FROM `table` WHERE SUBSTRING(`name`,1,1) ='陳';

//查詢任何名字中有'中'的資料
SELECT * FROM `table` WHERE `name` LIKE "%中%";

//查詢任何名字最後一個字是'明'的資料
SELECT * FROM `table` WHERE `name` LIKE "%明";

//查詢任何名字前後是'陳''明'的資料
SELECT * FROM `table` WHERE `name` LIKE "陳%明";

SQL 限制句操作

ORDER BY 排序

排序的參數有兩種

  • ASC 預設的排序,可以不用寫,為遞增排序
  • DESC 遞減排序
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT * FROM `table` ORDER BY `birthday` ASC;

    SELECT * FROM `table` ORDER BY `birthday` DESC;

    可以多個欄位進行同值時的第二排序、第三排序等

    SELECT * FROM `table` ORDER BY `birthday` DESC,`area` ASC;

    上一句的意思是先以生日來做遞減排序,如果遇到多筆資料都是同一天生日的,再以縣市欄位來做遞增排序

GROUP BY 群組

1
2
3
4
5
SELECT * FROM `table` GROUP BY `area`;

SELECT * FROM `table` GROUP BY `area`,`divsion`;

上一句的意思是先把資料依照縣市做分群,再把每群資料依照縣市中的地區做第二層分群

LIMIT 限制筆數

1
2
3
4
5
6
7
SELECT * FROM `table` LIMIT 20;
只取資料表的前20筆資料

SELECT * FROM `table` LIMIT 10,20;
從資料表第11筆開始,取出20筆資料
使用LIMIT語法時,資料表的開始是由第0筆開始計算