SQL 知識點回顧總結(一)

很久沒有更新博客了,埋頭工作有時候都忘了思考,但學習積累的步伐不能停止,今兒個把 SQL 相關知識點重新撿起來,供大家參考,也方便自己查閱備忘。梳理的主線主要基於牛客網《數據庫SQL實戰》,以 SQLite 爲例進行總結梳理。

1. left join, right join 和 inner join

left join(左聯接):返回包括左表中的所有記錄和右表中聯結字段相等的記錄;
right join(右聯接):返回包括右表中的所有記錄和左表中聯結字段相等的記錄;
inner join(等值連接):只返回兩個表中聯結字段相等的行。

2. having

having 子句的作用是篩選滿足條件的組,即在分組之後過濾數據,條件中經常包含聚組函數,使用 having 條件顯示特定的組,也可以使用多個分組標準進行分組。與 where 和 select 的交互方式類似。where 搜索條件在進行分組操作之前應用;而 having 搜索條件在進行分組操作之後應用。

3. like

like 操作符用於在 where 子句中搜索列中的指定模式,"%" 可用於定義通配符(模式中缺少的字母)。

4. explain

explain 可以對 select 語句進行分析並且輸出 select 執行過程的詳細信息,讓開發者從這些信息中獲得優化的思路。具體輸出字段可參考:explain SQL語句

5. 字符串連接

不同數據庫連接字符串的方法不完全相同,MySQL、SQL Server、Oracle 等數據庫支持 concat 方法,而 SQLite 數據庫只支持用連接符號"||"來連接字符串。

6. insert ignore 與 insert into

insert ignore 與 insert into 的區別:insert ignore 會忽略數據庫中已經存在的數據,如果數據庫沒有數據,就插入新的數據,如果有數據的話就跳過這條數據。這樣就可以保留數據庫中已經存在數據,達到在間隙中插入數據的目的。

7. 唯一索引與普通索引

用 create unique index … on … 對某列創建唯一索引值,再用 create index … on … 對某列創建普通索引值。關於兩者區別,可參考:選擇唯一索引還是普通索引?

8. 視圖

視圖是一個虛擬的表,是一個表中的數據經過某種篩選後的顯示方式,視圖由一個預定義的查詢 select 語句組成。關於更詳細的視圖知識點,可參考:SQL視圖

9. 觸發器

SQLite 觸發器(Trigger)是數據庫的回調函數,它會在指定的數據庫事件發生時自動執行/調用。具體可參考:SQL觸發器

10. 外鍵(foreign key)

表的外鍵是另一個表的主鍵,可重複、可空值。更細緻的分析可參考:數據庫的主鍵和外鍵

11. 系統表 sqlite_master

SQLite 數據庫中一個特殊的名叫 sqlite_master 上執行一個 select 查詢以獲得所有表的索引。每一個 SQLite 數據庫都有一個叫 sqlite_master 的表, 它定義數據庫的模式。sqlite_master 表可參考:sqlite 的系統表 sqlite_master

12. 聚合函數 group_concat(X,Y)

SQLite的聚合函數 group_concat(X,Y),其中X是要連接的字段,Y是連接時用的符號,可省略,默認爲逗號。此函數必須與 group by 配合使用,指將分組中的數據聚合。

13. 分頁查找

分頁查找可結合 limit 關鍵字。

14. in 和 exists

in 和 exists的區別: 如果子查詢得出的結果集記錄較少,主查詢中的表較大且又有索引時應該用in, 反之如果外層的主查詢記錄較少,子查詢中的表大,又有索引時使用exists。如果是exists,那麼以外層表爲驅動表,先被訪問,如果是 in,那麼先執行子查詢,所以我們會以驅動表的快速返回爲目標,那麼就會考慮到索引及結果集的關係了 ,另外 in 時不對 NULL 進行處理。相關實例和詳細解析可參考:SQL 中 in 和 exists 區別

15. case 表達式

case 表達式爲SQL條件選擇語句,參考牛客網實例:case 表達式

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章