zoukankan      html  css  js  c++  java
  • 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;
    实例:

     

  • 相关阅读:
    将一个 LIB 中的所有 OBJ 名称和类型输出到一个物理文件
    用一条命令 转换 Iseries tables t到 CSV
    用CL提取系统值
    程式中檢查是否潤年的新方法
    Ubuntu 忘记root密码 和修改密码
    excel 数组公式入门
    BAT批处理
    row_number() over(partition byCOL1 order by COL2)
    row_number( )、rank( )、dense_rank( )、ntile( )函数的用法 (SQL2005以上)
    Sql 常用日期计算
  • 原文地址:https://www.cnblogs.com/123blog/p/10238298.html
Copyright © 2011-2022 走看看