---
tags: SQL
---
# SQL快速入門
## 簡介
* SQL (Structured Query Language,結構化查詢語言): 與資料庫溝通的語言。用於存取數據以及查詢、更新和管理關係資料庫系統。
> 參考資料:
> * [零基礎快速自學SQL](http://www.finereport.com/tw/knowledge/acquire/sql-3.html)
> * [SQL語法教學](https://www.1keydata.com/tw/sql/sql.html)
> * [什麼是SQL?](https://blog.xuite.net/petercomflow/twblog/181031431-%E4%BB%80%E9%BA%BC%E6%98%AFSQL+%3F)
## SELECT 查詢記錄(建立資料集)
:::info
SELECT 欄位 FROM \`資料表\`
[WHERE 條件]
[LIMIT [起始記錄列數,] 記錄筆數]
[ORDER BY \`欄位\` ASC/DESC]
:::
### SELECT 欄位 FROM \`資料表\
* 欄位 >> 資料表(table) >> 資料庫(database)
* \* :所有欄位
### WHERE 條件
![](https://i.imgur.com/Sb2ueIA.png)
* 萬用字元:
* %:任意長度
* \_:一個字元(UTF-8)的長度
:::warning
使用萬用字元判斷字串的部分必須用LIKE
:::
### LIMIT 限制筆數
* 起始記錄列數:從0開始
### ORDER BY 排序
* ASC:遞增;DESC:遞減
### 多個條件
* AND、OR...
### JOIN ON 結合
* INNER JOIN:一對一
>> * 只有在兩資料表指定欄位的紀錄都符合結合條件時才會被結合成一筆記錄
* LEFT JOIN:一對多
>> * 若結合後該欄位沒有相對應的值則欄位值為NULL
>> * FROM為主資料表
範例一:
```sql=
SELECT profiles.Name, class.Hour
FROM `profiles`
INNER JOIN `class` ON profiles.ID = class.Name_ID
```
![](https://i.imgur.com/kx5WCJ6.png)
範例二:
```sql=
SELECT profiles.Name, class.Hour
FROM `class`
INNER JOIN `profiles` ON profiles.ID = class.Name_ID
```
![](https://i.imgur.com/EWKz0l3.png)
範例三:
```sql=
SELECT profiles.Name, class.Hour
FROM `profiles`
LEFT JOIN `class` ON profiles.ID = class.Name_ID
```
![](https://i.imgur.com/7Wx4oSu.png)
範例四:
```sql=
SELECT profiles.Name, class.Hour
FROM `class`
LEFT JOIN `profiles` ON profiles.ID = class.Name_ID
```
![](https://i.imgur.com/XcmY8Jk.png)
範例五:
找出居住在桃園縣市,缺課時數介於3到6小時(包含)的學生。資料表欄位呈現ID、Name、Addr、Hour
```sql=
SELECT profiles.ID, profiles.Name, profiles.Addr, class.Hour
FROM `profiles`
INNER JOIN `class` ON profiles.ID = class.Name_ID
WHERE class.Hour BETWEEN 3 AND 6
AND profiles.Addr LIKE '桃園%'
```
:::warning
先JOIN合併
:::
![](https://i.imgur.com/W9XLhWt.png)
## INSERT INTO 插入資料
:::info
INSERT INTO 資料表 ( 欄位1[ , 欄位2 , 欄位3…] )
VALUES ( 值1 [ , 值2 , 值3…] )
:::
* 欄位與值必須相對應
* 主鍵:唯一值
* AUTO_INCREMENT:自動產生流水編號。
:::warning
只能附加在主鍵上
:::
> 若曾刪除資料,再新增,其編號會自動往後
![](https://i.imgur.com/qchFejB.png)
![](https://i.imgur.com/RgxQPJE.png)
範例:
```sql=
INSERT INTO profiles (ID, Name, Old, Addr)
VALUES('', '黃禦寒', '26', '台中市')
```
![](https://i.imgur.com/yoAGkZq.png)
## UPDATE SET 更新資料
:::info
UPDATE 資料表 SET 欄位1 = 新值 [ , 欄位2 = 新值 … ]
WHERE 條件
:::
* 有時會加上 LIMIT 1 ,為保險起見,避免指令下錯,影響所有資料
範例:
更新地址原台北縣為新北市;原台中縣為台中市;原桃園縣為桃園市
```sql=
UPDATE `profiles` SET `Addr` = '新北市'
WHERE `Addr` = '台北縣';
UPDATE `profiles` SET `Addr` = '台中市'
WHERE `Addr` = '台中縣';
UPDATE `profiles` SET `Addr` = '桃園市'
WHERE `Addr` = '桃園縣'
```
![](https://i.imgur.com/0vDiIKe.png)
![](https://i.imgur.com/sWABu2o.png)
![](https://i.imgur.com/etjWalT.png)
## DELETE FROM 刪除資料
範例:
```sql=
DELETE FROM `profiles`
WHERE `ID` > 50
LIMIT 1
```
![](https://i.imgur.com/aChoVkq.png)