常用SQL語句和語法匯總
近幾年資料庫發揮了越來越重要的作用,這其中和大數據、數據科學的興起有不可分割的聯繫。學習資料庫,可以說是每個從事IT行業的必修課。你學或不學,它就在那裡;你想或不想,你都得學。
大一的時候,我選了一門名為《Android應用程序開發》的選修課。那個時候啥都不懂,就感覺這個名字比較高端,然後就去了。學習一學期,也就是在電腦上裝上了Android應用程序的開發環境。由於我的筆記本太撇,每次運行Android虛擬機就會卡的要死。好吧,我承認最後期末考試我掛了,很悲痛的經歷,選修課竟然也會掛(其實主要是我太菜,沒有認真學)。
那個老師其實挺好的,教得很認真,只是我沒有認真聽(悔恨中…)。我記得有次一個同學提問,問他如果報考計算機三級的話,建議報考哪一門?(當時計算機三級一共有5個種類)。那個老師就說建議報考三級資料庫技術,因為資料庫技術最有前景。我現在是相當的佩服那個老師,他自己從事的Android開發,讓學生學資料庫。那應該算是我第一次接觸資料庫這種東西,從此對它念念不忘(論一個老師對學生的影響力!)
扯遠了,飛回來~~~
創建資料庫
CREATE DATABASE <資料庫名>;
SQL常用規則0
- 資料庫的名稱只能使用小寫字母
- 關係資料庫以行為單位讀寫數據
- SQL根據功能不同可以分為三類,其中使用最多的是DML(數據操縱語言)
- SQL語句以分號(;)結尾
- SQL不區分關鍵字的大小寫,但是約定俗成的寫法是:關鍵字大寫、表名的首字母大寫、其餘(列名等)小寫
- 字元串和日期常數需要使用單引號(』)括起來
- 數字常數無需加註單引號
- SQL語句的單詞之間需要使用半形空格或換行符來進行分割
表的創建
CREATE TABLE <表名> ( <列名1> <數據類型> <約束條件>, <列名2> <數據類型> <約束條件>, <列名3> <數據類型> <約束條件>, <列名4> <數據類型> <約束條件>, .... <該表的的約束條件1> <該表的的約束條件2>...);
SQL常用規則1
- 資料庫名稱、表名和列名由字母、數字和下劃線組成
- 名稱必須以字母開頭
- 名稱不能重複
表的刪除
DROP TABLE <表名>;
表定義的更新(添加列)
ALTER TABLE <表名> ADD COLUMN <列的定義>;
表定義的更新(刪除列)
ALTER TABLE <表名> DROP TABLE <列名>;
列的查詢
SELECT <列名>,... FROM <表名>;
查詢出表中的所有列
SELECT * FROM <表名>;
根據WHERE語句來選擇記錄
SELECT <列名>,... FROM <表名> WHERE <條件表達式>;
SQL常用規則2
- SQL語句可以使用AS關鍵字為列設定別名,設定漢字別名時需要使用雙引號(』』)括起來
- 在SELECT語句中可以使用DISTINCT來刪除重複行
- WHERE子句要緊跟在FROM子句之後
- SQL語句的注釋分為單行注釋和多行注釋,單行注釋書寫在「—」之後,多行注釋書寫在「/」和「/」之間
- SELECT 子句中可以使用常數或者表達式
- 字元串類型的數據原則上按照字典順序進行排列,不能與數字的大小順序混淆
- 希望選取NULL的記錄時,需要在條件表達式中使用IS NULL運算符。希望選取不是NULL時,需要在條件表達式中使用IS NOT NULL運算符。
- NOT 運算符用來否定某一條件,但是不能濫用
- 多個查詢條件進行組合時,需要使用AND運算符或者OR運算符。AND運算符的優先順序高於OR運算符,想要優先執行OR運算符可以使用括弧。
- SQL中的邏輯運算被稱為三值邏輯(真、假、不確定)
使用GROUP BY 子句對錶進行分組
SELECT <列名1>, <列名2>,... FROM <表名> GROUP BY <列名1>, <列名2>,...;
使用WHERE子句和GROUP BY子句進行匯總處理
SELECT <列名1>, <列名2>, <列名3>,... FROM <表名> WHERE <條件表達式> GROUP BY <列名1>, <列名2>, <列名3>,...;
使用HAVING來指定分組的條件
SELECT <列名1>, <列名2>, <列名3>,... FROM <表名> GROUP BY <列名1>, <列名2>, <列名3>,...HAVING <分組結果對應的條件>;
ORDER BY子句
SELECT <列名1>, <列名2>, <列名3>,... FROM <表名> ORDER BY <排序基準列1>, <排序基準列2>, ...;
SQL常用規則3
- COUNT(*)會得到包含NULL的數據行數,而COUNT(<列名>)會得到NULL之外的數據行數
- 聚合函數會將NULL排除在外,但是COUNT(*)例外。
- MAX/MIN函數幾乎適用於所有數據類型的列,SUM/AVG只適用於數值類型的列
- 想要計算值得種類時,可以在COUNT函數前使用關鍵字DISTINCT
- 聚合鍵中包含NULL時,在結果中會以不確定(空行)的形式表現出來
- 使用GROUP BY 子句時,SELECT子句中不能出現聚合鍵之外的列名
- 在GROUP BY子句中不能使用SELECT子句中定義的別名
- 只有在SELECT子句、ORDER BY子句和HAVING 子句中能夠使用聚合函數,WHERE子句中不能使用聚合函數
- HAVING子句要寫在GROUP BY 子句後面
- 通常情況下,為了得到相同的結果,將條件寫在WHERE子句中要比寫在HAVING子句中的處理速度更快
- ORDER BY子句通常寫在SELECT語句的末尾
- 排序鍵包含NULL時,會在開頭或者末尾進行匯總
- 在ORDER BY子句中可以使用SELECT子句中定義的別名
- 在ORDER BY子句中可以使用SELECT子句未使用的列和聚合函數
SQL語句的書寫順序(重點!!!)
1.SELECT子句→2.FROM子句→3.WHERE子句→4.GROUP BY子句→5.HAVING子句→6.ORDER BY子句
INSERT 語句
INSERT INTO <表名> (列名1, 列名2,...) VALUES (值1, 值2,...);
保留數據表,僅刪除全部數據行的DELETE語句
DELETE FROM <表名>;
刪除部分數據行的搜索型DELETE語句
DELETE FROM <表名> WHERE <條件>;
改變表中數據的UPDATE語句
UPDATE <表名> SET <列名> = <表達式>;
更新部分數據行的搜索型UPDATE
UPDATE <表名> SET <列名> = <表達式> WHERE <條件>;
事務的語法
事務開始語句; DML語句1; DML語句2; DML語句3; ... 事務結束語句(COMMIT或者ROLLBACK);
SQL常用規則4
- 原則上,執行一次INSERT語句會插入一行數據
- 省略INSERT語句中的列名,就會自動設定為該列的默認值(沒有默認值會設定為NULL)
- DELETE語句到的刪除對象時記錄(行)
- 可以通過WHERE子句指定對象條件來刪除部分數據
- 事務是需要在同一處理單元中執行的一系列更新處理的集合
創建視圖
CREATE VIEW 視圖名稱 (<視圖列名1>, <視圖列名2>,...) AS<SELECT語句>
刪除視圖
DROP VIEW 視圖名稱(<視圖列名1>, <視圖列名2>,...)
SQL常用規則5
- 表中存儲的是實際數據,而視圖中保存的是從表中提取數據所使用的SELECT語句
- 應該將經常使用的SELECT語句做成視圖
- 定義視圖時不要使用ORDER BY子句
- 視圖和表需要同時進行更新,因此通過匯總得到的視圖無法進行更新
- 子查詢作為內層查詢會首先執行
- 標量字查詢就是返回單一值的子查詢
- 在細分的組內進行比較時,需要使用關聯子查詢
ABS函數(求絕對值)
ABS(數值)
MOD函數(求余)
MOD(被除數, 除數)
ROUND函數(四捨五入)
ROUND(對象數值, 保留小數的位數)
||函數(拼接)
字元串1 || 字元串2
LENGTH函數(求字元串長度)
LENGTH(字元串)
LOWER函數(小寫轉換)
LOWER(字元串)
REPLACE函數(字元串的替換)
REPLACE(對象字元串, 替換前的字元串, 替換後的字元串)
SUBSTRING函數(字元串的截取)
SUBSTRING (對象字元串 FRMO 截取的起始位置 FOR 截取的字元數)
UPPER函數(大寫轉換)
UPPER(字元串)
CURRENT_DATE函數(當前日期)
CURRENT_DATE
CURRENT_TIME函數(當前時間)
CURRENT_TIME
CURRENT_TIMESTAMP函數(當前日期和時間)
CURRENT_TIMESTAMP
EXTRACT函數(截取日期元素)
EXTRACT(日期元素 FROM 日期)
CAST函數(類型轉換)
CAST(轉換前的值 AS 想要轉換的數據類型)
COALESCE函數(將NULL轉換為其他值)
COALESCE(數據1, 數據2, 數據3....)
CASE 表達式
CASE WHEN <求值表達式> THEN <表達式> WHEN <求值表達式> THEN <表達式> WHEN <求值表達式> THEN <表達式> ..... ELSE <表達式> END
SQL常用規則6
- 謂詞就是返回值為真值的函數
- 通常指定關聯子查詢作為EXIST的參數
- 作為EXIST參數的子查詢中經常會使用SELECT *
- CASE表達式中的END不能省略
SQL常用規則7
- 集合運算會除去重複的記錄,但可以使用ALL選項,保留重複行
- 進行聯結時需要在FROM子句中使用多張表
- 進行內聯結時必須使用ON子句,並且要書寫在FROM 和WHERE之間
- 使用聯結時SELECT子句中的列需要按照「<表的別名>.<列名>」的格式進行書寫
- 外聯結使用LEFT、RIGHT來指定主表,使用兩者所得到的結果完全相同
窗口函數
<窗口函數> OVER ( [PARTITION BY <列清單>] ORDER BY <排序用列清單>)
SQL常用規則8
- 窗口函數兼具分組和排序兩種功能
- 通過PARTITION BY 分組後的記錄集合稱為「窗口」
- 專用窗口函數無需使用參數
- 原則上,窗口函數只能在SELECT子句中使用
- 超級分組記錄默認使用NULL作為聚合鍵
- ROLLUP可以同時得出合計和小計
- 使用GROUPING函數能夠簡單分辨出原始數據中的NULL和超級分組記錄中的NULL
- 可以把CUBE理解為將使用聚合鍵進行切割的模塊堆積成的一個立方體
每天學習一點點,每天進步一點點。
推薦閱讀:
※《R語言實踐學習筆記》第一、二章
※如何在2017年自學編程?
※學習計算機的一些資源分享
※python圖像模塊——從一張女神圖開始