1.distanct()函式的使用需要注意
2.count() 在MYISAM引擎的前提下效率最高 在Innodb引擎下需要計算 不過不管什麼引擎 推薦使用count()
count(‘欄位名稱’)會過濾掉null 但是coutn() 不會的
count() 一般要和group by配合使用
3.group by的使用
和分組函式一起查詢的欄位要求是group by 後的欄位 比如這裡的job_id 是按照它分組的 那麼我們就可以讓job_id和分組函式一起被查詢出來;
select max(salary),job_id from employees group by job_id;
在MYSQL中使用GROUP BY對錶中的資料進行分組時,
GROUP BY X意思是將所有具有相同X欄位值的記錄放到一個分組裡,
GROUP BY X, Y意思是將所有具有相同X欄位值和Y欄位值的記錄放到一個分組裡。
4.having的使用 是在group by的結果上繼續查詢
能用分組前篩選的 就優先考慮使用分組前篩選;效能會提高很多這樣 也就是說盡量不要使用having 分組後篩選 效能較差
5.sql92標準 n個表連線 那麼至少需要n-1個條件 sql92標準的等值連線其實類似sql99標準的inner join
6.left join right join 互換一樣
7.子查詢的執行優先於主查詢 主查詢的條件用到了子查詢的結果
8.行子查詢也可以這麼玩:
SELECT * FROM employees WHERE (employee_id,salary) = (
SELECT MIN(employee_id),MAX(salary) FROM employees
);
9.union聯合查詢
多條查詢語句的查詢的列的型別幾乎相同 也就是說union前邊查詢的欄位是id name union後邊查詢的欄位可以是tid tname 但是儘量要保持id tid欄位型別一致 name和tname欄位型別一致才有意義 但是前後欄位的列數必須一致
10.insert 高階用法
insert into beauty(id,name,phone) select 26,’a’,’13222’; //從一張表裡面讀取某條記錄直接插入到另一張表當中去
11.truncate刪除不能回滾,delete刪除可以回滾
truncate不能加where條件,而delete可以加where條件
truncate的效率高一丟丟
12.decimal用於計算 精度高
float可用於儲存 效率比decimal和double更高
13.char型別固定長度 效率是最高
varchar型別可變程度 效率低
14.列舉型別 規定只能插入固定的字串
15.欄位型別設定要點:所選擇的型別越簡單越好 能儲存數值的型別越小越好
16.主鍵約束 外來鍵約束 唯一鍵約束會自動生成索引!
17.檢視錶裡面有哪些索引:
show INDEX from stuinfo;
18.show engines;//檢視資料庫支援的引擎 也會顯示當前資料庫預設的引擎是哪一個;
19.檢視:
定義:一種虛擬存在的表 行和列的資料來自定義檢視的查詢中使用的表,並且是在使用檢視是動態生成的 只儲存sql邏輯 不儲存查詢結果;
應用場景:
多個地方用到同樣的查詢結果
該查詢結果使用的sql語句較複雜
檢視能提高sql查詢的速度嗎?
不會,檢視就是建立虛擬表(不會真實落盤,查詢時實時構造),無法快取檢視查詢的資料,只是可以簡化呼叫時候的程式碼!
資料庫提供了檢視(view)功能,能提高程式碼效率
檢視的好處:
1、sql語句提高重用性,效率高
2、和表實現了分離,提高了安全性
20.儲存過程:
儲存過程一般地說,儲存過程不如直接使用sql語句快。
用儲存過程的主要目的,是簡單的幾句SQL無法解決時,使用一個程式塊做為儲存過程來解決
21.儲存過程和自定義函式的使用
22.事務的隔離機制 以及 隔離級別
本作品採用《CC 協議》,轉載必須註明作者和本文連結