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

 

 

 

posted @ 2019-01-08 12:19  吃个鱼丸  阅读(2106)  评论(0编辑  收藏  举报