前提
本次分享只局限於 sql server 和 mysql 這兩種數據庫,其他數據庫暫不總結
正文
1. 對查詢的字段進行去重(distinct)
用法注意:
1. distinct【查詢字段】,必須放在要查詢字段的開頭,即放在第一個參數;
2. 只能在SELECT 語句中使用,不能在 INSERT, DELETE, UPDATE 中使用;
3. DISTINCT 表示對后面的所有參數的拼接取 不重復的記錄,即查出的參數拼接每行記錄都是唯一的
1.1 只對一個字段查重
對一個字段查重,表示選取該字段一列不重復的數據
SELECT DISTINCT 字段名 FROM 表名
1.2 多個字段去重
SELECT DISTINCT 字段名1,字段名2 FROM 表名
只有 字段1和字段2都不同時,才會被去重掉
2. 控制返回記錄的條數(top/limit)
2.1 sql server 中的 top
用法:
- 輸出前三條紀錄
Select top 3 * from 表名
- 輸出前 20% 條記錄
Select top 20 percent * from 表名 --6 * 20% = 1.2 --輸出的是前2條記錄,不是1條
2.2 MySql 中的 limit
用法:
- 給定一個參數,它表示返回最大的記錄行數目:
輸出前 5 條記錄 SELECT * FROM table LIMIT 5
- 給定兩個參數,返回兩個參數之間的記錄
SELECT * FROM table LIMIT 5,10; // 檢索記錄行 6-15
- 檢索從某一個偏移量到記錄集的結束所有的記錄行,可以指定第二個參數為 -1
SELECT * FROM table LIMIT 95,-1; // 檢索記錄行 96-last
3. sql 一句話復制一條數據並修改其中的字段
insert into table select 字段1, 字段2, 字段3,<字段4> from table where .... --select 后跟隨的字段是表中的全部字段
4. 左連接,右連接,內連接
左連接(left join)
又稱左外連接,是外連接的一種,它是以左表為基礎,根據 On 后給出的兩表條件將兩表連接起來。結果會將左表所有的查詢信息列出,右表只顯示共同有的那部分,沒有對應的部分只能補空顯示
維恩圖如下:

SQL 語句:
SELECT A.PK, B.PK FROM table_a A LEFT JOIN table_b B ON A.PK = B.PK; WHERE 條件…
右連接(right join)
又稱右外連接,也是外連接的一種,它是以右表為基礎,根據On后給出的兩表條件將兩表連接起來。結果會將右表所有的查詢信息列出,左表只顯示共同有的那部分,沒有對應的部分只能補空顯示
維恩圖如下:

SQL 語句:
SELECT A.PK, B.PK FROM table_a A RIGHT JOIN table_b B ON A.PK = B.PK; WHERE 條件…..
內連接(inner join)
內連接是一種一一映射關系,也就是兩張表都有的記錄才能顯示出來
維恩圖:

SQL 語句:
SELECT A.PK , B.PK FROM table_a A INNER JOIN table_b B ON A.PK = B.PK;
5. Union 和 Union all
Union:union 在進行表連接后會篩選掉重復的記錄,所以在表連接后對所產生的結果集進行篩選運算,刪除重復的記錄再返回結果集
Union all:union 只是簡單的將兩個結果合並就返回。如果返回的結果集中有重復的數據,那么返回的結果集中就包含重復的數據。
從性能講 union all 要比 union 快很多,因為他沒有排序去重的耗時
ps: 使用 union 和 union all 時一定要保證查詢的列一致,即select 后的參數名一致
6. Varchar 和 char 的區別
(1)char 的長度是不可變的,而varchar的長度是可變的。
如:定義一個 char[10] 和 varchar[10],如果存進去的是“yang”,那么 char 所占的長度依然是10,除了字符“yang”外,后面跟6個空格,varchar 就立馬把長度變為4了,取數據的時候,char 類型的要用trim() 去掉多余的空格,而 varchar 是不需要的。
(2)char 的存取速度要比 varchar 快的多,因為其長度固定,方便的程序的存儲與查找。
Char 也為此付出的是空間的代價,因為其長度固定,所以難免會有多余的空格占位符占據空間,可謂是以空間換取時間效率,varchar 是以空間效率為首位
(3)char的存儲方式是:對英文字符(ASCII)占用1個字節,對一個漢字占用2個字節。
varchar的存儲方式是:對每個英文字符占用2個字節,漢字也占用2個字節
ps:不同的編碼形式對應的存儲方式不一樣
UTF-8編碼:
一個英文字符對應一個字節,一個中午(含繁體)占用3個字節
(4)兩者的存儲數據都非unicode的字符數據。
7. 索引
7.1 什么是索引?
數據庫索引,是數據庫管理系統中一個排序的數據結構,索引的實現通常使用 B 樹及其變種 B+ 樹。
在數據之外,數據庫系統還維護這滿足特定查找算法的數據結構,這些數據結構以某種方式引用(指向)數據,這樣就可以在這些數據結構上實現高級查找算法。這種數據結構,就被叫做索引。
7.2 索引的作用?
協助快速查詢,更新數據庫表中數據
7.3 索引的優缺點?
優點:
- 創建索引可以大大提高系統的性能
- 通過創建唯一性索引,可以保證數據庫表中每一行數據的唯一性
- 可以大大加快數據的檢索速度,這也是創建索引的最主要原因
- 可以加速表和表之間的連接,特別是在實現數據的參考完整性方面特別有意義
- 在使用分組和排序子句進行數據檢索時,同樣可以顯著減少查詢中分組和排序的時間
- 通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統性能。
缺點:
- 創建索引和維護索引要耗費時間,這種時間隨着數據量的增加而增加。
- 索引需要占物理空間,除了數據表占數據空間之外,每一個索引還要占一定的物理空間,如果要建立聚簇索引,那么需要的空間就會更大。
- 當對表中的數據進行增加,刪除和修改的時候,索引也要動態的維護,這樣就降低了數據的維護速度。