# 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