如sum. avg, count, max, min等
1、LOCATE(substr , str ):返回子串 substr 在字符串 str 中第一次出現的位置,如果字符substr在字符串str中不存在,則返回0;
2、POSITION(substr IN str ):返回子串 substr 在字符串 str 中第一次出現的位置,如果字符substr在字符串str中不存在,與LOCATE函數作用相同;
3、LEFT(str, length):從左邊開始截取str,length是截取的長度;
4、RIGHT(str, length):從右邊開始截取str,length是截取的長度;
5、SUBSTRING_INDEX(str ,substr ,n):返回字符substr在str中第n次出現位置之前的字符串;
6、SUBSTRING(str ,n ,m):返回字符串str從第n個字符截取到第m個字符;
7、REPLACE(str, n, m):將字符串str中的n字符替換成m字符;
8、LENGTH(str):計算字符串str的長度。
1)從含義上講,count(1) 與 count(*) 都表示對全部數據行的查詢。count(*) 包括了所有的列,相當于行數,在統計結果的時候,不會忽略列值為NULL ;count(1) 用1代表代碼行,在統計結果的時候不會忽略列值為NULL 。
2)執行效率上:
count(*)對行的數目進行計算,包含NULL,count(1)這個用法和count(*)的結果是一樣的。如果表沒有主鍵,那么count(1)比count(*)快。表有主鍵,count(*)會自動優化到主鍵列上。如果表只有一個字段,count(*)最快。
count(1)跟count(主鍵)一樣,只掃描主鍵。count(*)跟count(非主鍵)一樣,掃描整個表。明顯前者更快一些。
count(1)和count(*)基本沒有差別,但在優化的時候盡量使用count(1)。
1) DATE_FORMAT(time, ‘%Y-%m-%d’) 或者 “%H:%i:%S”
2) extract(year from “2019-12-25 22:47:37”) 從時間提前年/月/日
3) datediff(end_date,start_date) 時間做差,得到日期day
4) timestampdiff( day, end_date,start_date) 時間做差,可選擇返回的時間類型
1、 int(20) 表示字段是int類型,顯示長度是 20
2、 char(20)表示字段是固定長度字符串,長度為 20
3、 varchar(20) 表示字段是可變長度字符串,長度為 20
SQL的執行順序:from---where--group by---having---select---order by
第一步:客戶端請求
第二步:連接器(負責跟客戶端建立連接、獲取權限、維持和管理連接)
第三步:查詢緩存(存在緩存則直接返回,不存在則執行后續操作)
第四步:分析器(對SQL進行詞法分析和語法分析操作)
第五步:優化器(主要對執行的sql優化選擇最優的執行方案方法)
第六步:執行器(執行時會先看用戶是否有執行權限,有才去使用這個引擎提供的接口)
第七步:去引擎層獲取數據返回(如果開啟查詢緩存則會緩存查詢結果)
delete和truncate只刪除表的數據不刪除表的結構
速度,一般來說: drop> truncate >delete
delete語句是dml,這個操作會放到rollback segement中,事務提交之后才生效,如果有相應的trigger,執行的時候將被觸發.
truncate,drop是ddl, 操作立即生效,原數據不放到rollback segment中,不能回滾. 操作不觸發trigger.
● Union:對兩個結果集進行并集操作,不包括重復行,同時進行默認規則的排序;
● Union All:對兩個結果集進行并集操作,包括重復行,不進行排序;
● UNION ALL的效率高于 UNION