本文在上篇博客 SQL 知識點回顧總結(一)的基礎上,再結合《SQL 必知必會》一書對 SQL 相關知識點進行了補充整理,供大家參考,也方便自己查閱備忘。
- 在指定一條 order by 子句時,應該保證它是 select 語句中最後一條子句。如果它不是最後的子句,將會出現錯誤信息。
- 通常,order by 子句中使用的列將是爲顯示而選擇的列。但是實際上並不一定要這樣,用非檢索的列排序數據是完全合法的。
- 如果想在多個列上進行降序排序,必須對每一列指定 DESC 關鍵字。
- 通配符只能用於文本字段(字符串),非文本數據類型字段不能使用通配符搜索。
4.1 通配符 % :like ‘%’ 不會匹配爲 NULL 的行
4.2 通配符 _ :只匹配單個字符
4.3 通配符 []:指定一個字符集,匹配指定位置(通配符的位置)的一個字符 - TRIM 函數
RTRIM():去掉字符串右邊的空格;
LTRIM():去掉字符串左邊的空格;
TRIM() :去掉字符串左右兩邊的空格。 - 測試計算:省略了 from 子句的 select 語句就是簡單地訪問和處理表達式,例如 select 3*2 將返回6,select trim(’ abc ') 將返回 abc
- soundex() 函數:soundex()考慮了類似的發音字符和音節,使得能對字符串進行發音比較而不是字母比較。
例如:select name from … where soundex(name) = soundex(‘Michael Green’) - 聚集函數
8.1 AVG() 函數忽略列值爲NULL的行
8.2 如果指定列名,則 count() 函數會忽略指定列的值爲空的行,但如果 count() 函數中用的是星號(*),則不忽略。
8.3 avg(distinct xxx) 只考慮各個不同的xxx所對應的平均值 - group by 子句必須出現在 where 子句之後,order by 子句之前
- having 與 where 區別:使用having時應該結合group by子句(having爲組級過濾),而where子句用於標準的行級過濾。
- insert 與 insert select:insert 通常只插入一行,要插入多行,必須執行多個 insert 語句。insert select 可以用一條 insert 插入多行,不管select語句返回多少行,都將被 insert 插入。
- 表的複製:create table copyTable as
select * from testTable - delete、truncate table 與 drop:delete 語句可以從表中刪除指定行;如果要刪除所有行,可以使用 truncate table 語句,也可以使用 drop table。
不同之處在於 drop table 不但會刪除表中所有數據,還會將整個表結構從數據庫中移除,如果想重新向表中存儲數據的話必須重建該數據表。 - 使用事務處理,通過確保成批的SQL操作要麼完全執行,要麼完全不執行,用來維護數據庫的完整性。
- 事務處理用來管理 insert、update和delete語句。不能回退select語句(回退select語句也沒有必要),也不能回退create後drop操作。
- 事務處理中的幾個語句:
rollbck:回退;
commit:提交;
savepoint:保留點;越多越好,保留點越多,就能越靈活地進行回退。 - 使用遊標操作數據
下面的示例用@@FETCH_STATUS控制在一個WHILE循環中的遊標活動
DECLARE E1cursor cursor /* 聲明遊標,默認爲FORWARD_ONLY遊標 */
FOR SELECT * FROM c_example
OPEN E1cursor /* 打開遊標 */
FETCH NEXT from E1cursor /* 讀取第1行數據 */
WHILE @@FETCH_STATUS = 0 /* 用WHILE循環控制遊標活動 */
BEGIN
FETCH NEXT from E1cursor /* 在循環體內將讀取其餘行數據 */
END
CLOSE E1cursor /* 關閉遊標 */
DEALLOCATE E1cursor /* 刪除遊標 */ - 主鍵與唯一約束:
相同點:Unique key與primarykey 約束都強調唯一性;
不同點:
(1)一個表只能有一個PRIMARY KEY,但可以有多個UNIQUE KEY ;
(2)unique key 約束只針對非主鍵列,允許有空值。Primary key 約束針對主鍵列,不允許有空值。
UNIQUE KEY的用途:主要是用來防止數據插入的時候重複的。表的主鍵就是一個唯一性約束,不過主鍵只能有一個,所以如果其他列的數據不允許重複的話,就可以建立唯一性約束。