上一節簡單的總結了單表查詢和多表查詢,以下給大家總結了查詢語句的結構,如下:
SELECT...FROM...WHERE...GROUP BY...HAVING...ORDER BY...LIMIT...
本節主要總結下常用的條件字段的匹配問題,最常見的是“=”,如select * from student where id=1501001等,除此之外平時也會遇到一些不是"=的情況。
1.掌握in的用法
使用場景:做條件查詢的時候,條件字段的取值有多個情況,in(范圍),not in(范圍)
實例:查詢學號id為1501001或1501002或1502001的學生信息。
分析過程:
1.查詢涉及到的表:student
2.查詢字段信息:沒有特定的即用*表示
3.關聯條件:只有一個表,不用關聯
4.過濾條件:id in(1501001,1501002,1502001)
所以最終得到的sql如下:
SELECT
*
FROM
student
WHERE
id IN(1501001,1501002,1502001)
拓展:除了in,對應的有not in的用法,指條件字段不在某個數據內的情況。
2.掌握模糊查詢like的用法
2.1使用%來模糊匹配
使用場景:條件字段不完整時,且沒有字符長度限制時,可以用%做模糊匹配。
實例:查詢所有姓“胡”的學生信息。
分析過程:
1.查詢涉及到的表:student
2.查詢字段信息:沒有特定的即用*表示
3.關聯條件:只有一個表,不用關聯
4.過濾條件:name like '胡%'
所以最終得到的sql如下:
SELECT
*
FROM
student
WHERE
name LIKE '胡%'
拓展:以胡開頭是 '胡%',以胡結尾是 '%胡',包含胡是 '%胡%'
2.3使用_來模糊匹配
_和%區別是,_起到的是一個占位符的作用,一個_只能匹配一個任意的字符,而%可以匹配任意長度的字符。
使用場景:條件字段不完整時,且有字符長度限制時,可以用_做模糊匹配。
實例:查詢所有姓“胡”且名字為兩個字的學生信息。
分析過程:
1.查詢涉及到的表:student
2.查詢字段信息:沒有特定的即用*表示
3.關聯條件:只有一個表,不用關聯
4.過濾條件:name like '胡_'
所以最終得到的sql如下:
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分的學號,學號不能重復
分析過程:
1.查詢涉及到的表:score
2.查詢字段信息:distinct id
3.關聯條件:只有一個表,不用關聯
4.過濾條件:score between 85 and 90
所以最終得到的sql如下:
SELECT
DISTINCT id
FROM
score
WHERE
score BETWEEN 85 AND 90
實例:
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;
實例:
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 表名 0,10; -- 表示從第一條數據開始,取前10條數據
SELECT * FROM 表名 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;
實例: