SQL筆記二:個性化查詢之模糊查詢、分組、排序、限制等
1.掌握in的用法
使用場景:做條件查詢的時候,條件欄位的取值有多個情況,in(範圍),not in(範圍)
SELECT * FROM student WHERE id IN(1501001,1501002,1502001);
拓展:除了in,對應的有not in的用法,指條件欄位不在某個資料內的情況。
2.掌握模糊查詢like的用法
2.1使用%來模糊匹配
使用場景:條件欄位不完整時,且沒有字元長度限制時,可以用%做模糊匹配。
例項:查詢所有姓“李”的學生資訊。
SELECT * FROM student WHERE name LIKE '李%';
拓展:以李開頭是 '李%',以胡結尾是 '%李',包含李是 '%李%'
2.2 使用_來模糊匹配
_和%區別是,_起到的是一個佔位符的作用,一個_只能匹配一個任意的字元,而%可以匹配任意長度的字元。
使用場景:條件欄位不完整時,且有字元長度限制時,可以用_做模糊匹配。
例項:查詢所有姓“李”且名字為兩個字的學生資訊。
SELECT * FROM student WHERE name LIKE '李_';
3.between和not between
between使用場景:條件欄位的值處於(或不處於)兩個值之間
語法:SELECT 欄位 FROM 表名 WHERE column BETWEEN value1(mix) AND value2(max)
SELECT 欄位 FROM 表名 WHERE column NOT BETWEEN value1 AND value2
例項:根據學生的成績表,查出所有成績在85-90分的學號,學號不能重複
SELECT DISTINCT id FROM score WHERE score BETWEEN 85 AND 90; (DISTINCT去重)
4、DISTINCT去重
distinct使用場景:去除查詢結果中的重複資料
SELECT DISTINCT 欄位1,欄位2... FROM 表名;
5、GROUP BY分組語句
1、根據一列或多列對結果集進行分組
語法:GROUP BY 欄位1,欄位2
欄位1、欄位2相同的為一組,在分組的列上可以使用聚合函式COUNT、SUM、AVG、MAX、MIN
語法:SELECT AVG(欄位) FROM S GROUP BY 欄位;
例項:
SELECT MemberID 使用者id,
min(Amount) 最小投資額,
max(Amount) 最大投資額,
count(1) 投資次數,
avg(Amount) 平均投資額
FROM loan
GROUP BY MemberID;
6、HAVING 分組條件
一般和GROUP BY 聯合使用,篩選分組後的資料
與WHERE的區別:where字句在聚合前先篩選記錄,作用在GROUP BY和having字句前,而having字句在聚合後對組記錄進行篩選
如:SELECT sid,COUNT(1) FROM SC GROUP BY sid HAVING COUNT(1)>2;
select 主鍵,count(*) from 表名 where etl_date='20191212' group by 主鍵 having count(*)>1;
7、ORDER BY排序語句
ORDER BY對結果集排序
ORDER BY field [ASC | DESC]..
ASC表示升序,DESC表示降序
可以使用任意欄位作為排序條件
可以指定多個欄位進行排序
SELECT * FROM 表名 ORDER BY 欄位 ASC;
SELECT * FROM 表名 ORDER BY 欄位1(可以為聚合函式) ASC(可省略),欄位2(可以為聚合函式) DESC(不可省略);
--先以欄位1升序,欄位1相同,再以欄位2降序
8、LIMIT限制結果集語句
1、分頁---LIMIT
LIMIT M,N(M代表從M+1條記錄開始取,N代表要查詢多少記錄)分頁---索引從0開始的,偏移量
SELECT * FROM 表名 LIMIT 0,10; -- 表示從第一條資料開始,取前10條資料
SELECT * FROM 表名 LIMIT 10,10; -- 表示從第十一條資料開始,取前10條資料
2、OFFSET偏移量
SELECT * FROM 表名 LIMIT 10 OFFSET 0;
SELECT * FROM 表名 LIMIT 10 OFFSET 10;
3、TOP語法
SELECT * FROM 表名 LIMIT 5;
SELECT * FROM 表名 ORDER BY id DESC LIMIT 1;