---
# System prepended metadata

title: 'SQL Syntax ![](https://i.imgur.com/N39sW9t.png)'

---

# SQL Syntax ![](https://i.imgur.com/N39sW9t.png)

## 📌What is SQL?

SQL的全名是結構化查詢語言。簡單來說，它就是一門**查詢資料庫的程式語言**。

## 📌SQL Operators
### ==算術運算子(Arithmetic Operator)==

| 運算子 | 語意 | 用法 |
|:------:|:----:|:----:|
|   +    |  加  | 1+2  |
|   -    |  減  | 1-2  |
|   *    |  乘  | 1*2  |
|   /    |  除  | 1/2  |
|   %    |  餘  | 1%2  |

### ==比較運算子(Comparison Operator)==



| 運算子  |        語意        |  用法  |
|:-------:|:----------------:|:------:|
|    <    |       小於       | 1 < 2  |
|    >    |       大於       | 2 > 1  |
|   <=    |     小於等於     | 1 <= 2 |
|   >=    |     大於等於     | 2 >= 1 |
|    =    |       等於       | 1 = 1  |
|   <>    |      不等於      | 1 <> 2 |
| BETWEEN |   在某個範圍內   |        |
|  LIKE   |   符合模式條件   |        |
|   IN    | 值存在於IN集合中 |        |




### ==邏輯運算子(Logical Operator)==

| 運算子 | 語意 |
|:------:|:----:|
|  AND   |  且  |
|   OR   |  或  |
|  NOT   |  非  |

### ==其他符號==


| 符號  | 語意                               |
|:-----:| ---------------------------------- |
|   *   | ALL                                |
|  ' '  | 中間輸入特定值，主要是用於加入字串 |
|  - -  | 後面可輸入註解，不會被程式語言讀入 |
| /* */ | 中間可輸入註解，不會被程式語言讀入 |
|  ASC  | 升冪排列                           |
| DESC  | 降冪排列                           |
|   %   | 代表零個、一個或數個字母 (Wildcard)[^first]           |
|   _    |   代表剛好一個字母 (Wildcard)                                 |

[^first]: Wildcard就是萬用字元的意思。


## 📌SQL Basic Syntax
### ==SELECT==
``` SQL= 
SELECT 欄位名稱
FROM 表名
```

### ==SELECT DISTINCT==
``` SQL= 
SELECT DISTINCT 欄位名稱
FROM 表名
```

### ==WHERE==
``` SQL= 
SELECT 欄位名稱
FROM 表名
WHERE 條件
```

### ==AND/OR==[^second]
```SQL= 
SELECT 欄位名稱
FROM 表名
WHERE 簡單條件
{[AND|OR]簡單條件}+;
```
[^second]:{}+代表{}之內的情況會發生一或多次。

### ==IN==
``` SQL= 
SELECT 欄位名稱
FROM 表名
WHERE 欄位名稱 IN ('值1', '值2', ...);
```

### ==BETWEEN==
``` SQL= 
SELECT 欄位名稱
FROM 表名
WHERE 欄位名稱 BETWEEN '值1' AND '值2';
```
### ==LIKE==
``` SQL= 
SELECT 欄位名稱
FROM 表名
WHERE 欄位名稱 LIKE {模式}; 
```

### ==ORDER BY==

```sql= 
/*預設為ASC*/
SELECT 欄位名稱1, 欄位名稱2...
FROM 表名
ORDER BY 欄位名稱1 ASC|DESC, 欄位名稱2 ASC|DESC...
```



### ==AS==

```sql= 
/*表名取別名*/
SELECT 欄位名稱1, 欄位名稱2, 欄位名稱3...
FROM 表名 AS 別稱;
```
**or**
```sql= 
/*欄位名稱取別名*/
SELECT 欄位名稱 AS 別稱
FROM 表名;
```

## 📌SQL "JOIN"
JOIN是結合多個表並組成一個暫時性資料表以供資料查詢，在原各資料表中之紀錄及結構皆不會因此查詢而改變。

### ==INNER JOIN==
```sql= 
SELECT 欄位名稱1, 欄位名稱2...
FROM 表名1
INNER JOIN 表名2 
ON 表名1.欄位名稱=表名2.欄位名稱;
```

**or**

```sql=
SELECT 欄位名稱1, 欄位名稱2...
FROM 表名1
INNER JOIN 表名2 
USING (欄位名稱);
```

### ==LEFT JOIN==

``` sql=
SELECT 欄位名稱1, 欄位名稱2...
FROM 表名1
LEFT JOIN 表名2 
ON 表名1.欄位名稱=表名2.欄位名稱;
```
### ==RIGHT JOIN==

```sql=
SELECT 欄位名稱1, 欄位名稱2···
FROM 表名1
RIGHT JOIN 表名2 
ON 表名1.欄位名稱=表名2.欄位名稱;
```


### ==FULL JOIN==

```sql=
/*LEFT JOIN 和 RIGHT JOIN的聯集*/
SELECT 欄位名稱1, 欄位名稱2...
FROM 表名1
FULL JOIN 表名2 
ON 表名1.欄位名稱=表名2.欄位名稱;
```


### ==CROSS JOIN==
當你在結合兩個資料表時，且不指定任何條件，將兩個資料表中所有的可能排列組合出來。另外，當有 WHERE、ON、USING 條件時不建議使用。

```sql=
SELECT 欄位名稱, 欄位名稱2...
FROM 表名1
CROSS JOIN 表名2;
```
**or**
```sql=
SELECT 欄位名稱1, 欄位名稱2...
FROM 表名1, 表名2;
```
**or**
```sql=
SELECT 欄位名稱1, 欄位名稱2...
FROM 表名1
JOIN 表名2;
```

### ==NATURAL JOIN==
兩資料表之間同名的欄位會被自動結合在一起。
```sql=
SELECT 欄位名稱1, 欄位名稱2...
FROM 表名1
NATURAL JOIN 表名2;
```



## 📌SQL Combining two tables
UNION 與 JOIN 不同的地方在於，JOIN 是作橫向結合(合併多個資料表的各欄位)；而 UNION則是作垂直結合(合併多個資料表中的紀錄)。
### ==Horizontal Combination==

``` SQL= 
SELECT *
FROM A, B
WHERE A.ID = B.ID /*Combine the same ID elements in Table A & B*/
```

![](https://i.imgur.com/B2bn8tT.png)

### ==Vertical Combination==

``` SQL= 
SELECT *
INTO B /*Store to the new table B*/
FROM A1
UNION ALL
SELECT *
FROM A2
```
![](https://i.imgur.com/sFv5XRo.png)



## 📌Other Syntax
### ==INTERSECT==

```sql=
SELECT 欄位名稱(s) FROM 表名1
INTERSECT
SELECT 欄位名稱(s) FROM 表名;
```


### ==MINUS==

```sql=
SELECT 欄位名稱(s) FROM 表名1
MINUS
SELECT 欄位名稱(s) FROM 表名2;
```

### ==Subquery==
```sql=
SELECT 欄位名稱1, 欄位名稱2, 欄位名稱3...
FROM 表名
WHERE 欄位名稱 比較運算子 (SELECT 子查詢);
```


### ==EXISTS==
若EXISTS為真，會繼續執行外查詢中的SQL；若EXISTS為假，則不會返回任何結果。

```sql=
SELECT * FROM 表A
WHERE EXISTS
(SELECT * FROM 表B WHERE 表B.id=表A.id);
```

### ==CASE==

```sql=
CASE
  WHEN 條件 THEN 結果
  [WHEN BLABLABLA]
  [ELSE 結果]
END;
```
**or**
```sql=
CASE 敘述
  WHEN 值 THEN 結果
  [WHEN BLABLABLA]
  [ELSE 結果]
END;
```

:::warning
:zap::zap::zap:注意 :zap::zap::zap:
:::
> 除了以上的語法，SQL仍有其他更細節的語法，想找尋更深入的內容都可以點選References的連結去看更詳細的SQL語法和函數，這裡只列出較為常用的XD













## 📌Comments
    Please feel free to correct my mistakes in the article😊. 
    If u have any further questions or cooperation opportunities, please contact me via 
    Email📬: willie880201044@gmail.com

## 📌References
1. SQL教學講義: https://reurl.cc/EnNlLn
2. SQL語法教學: https://www.1keydata.com/tw/sql/sqlorderby.html
3. Fooish 程式技術: https://reurl.cc/Nrd4kx