常用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圖像模塊——從一張女神圖開始

TAG:資料庫 | 自學編程 | 計算機技術 |