SQL筆記二:個性化查詢之模糊查詢、分組、排序、限制等


上一節簡單的總結了單表查詢和多表查詢,以下給大家總結了查詢語句的結構,如下:

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;
實例:

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM