zoukankan      html  css  js  c++  java
  • 七、玩转select条件查询

    前言:

      电商中:我们想查看某个用户所有的订单,或者想查看某个用户在某个时间段内所有的订单,此时我们需要对订单表数据进行筛选,按照用户、时间进行过滤,得到我们期望的结果。

      此时我们需要使用条件查询来对指定表进行操作,我们需要了解sql中的条件查询常见的玩法。

    本篇内容

    1、查询条件语法

    2、条件查询运算符详解(=、<、>、<=、>=、<>、!=)

    3、逻辑查询运算符详解(and、or)

    4、like模糊查询介绍

    5、between、and查询

    6、in、not in查询

    7、NULL值存在的坑

    8、is null、is not null(NULL值专用查询)

    9、<=>(安全等于)运算符

    10、经典面试题

    一、条件查询

      语法:select 列名 from 表名 where 列 运算符 值

      说明:注意关键字where,where后面跟上一个或者多个条件,条件是对前面数据的过滤,只有满足where后面条件的数据才会被返回。

    二、条件查询运算符

      1、等于(=)

         select 列名 from 表名 where 列 = 值;

        说明:

          查询出指定的列和对应的值相等的记录

          值如果是字符串类型,需要用单引号或者双引号引起来。

      2、不等于(<>、!=)

        select 列名 from 表名 where 列 <>值

        select 列名 from 表名 where 列 != 值;

        注意:

        <>这个是最早的用法。

        !=是后来才加上的。

        两者意义相同,在可移植性上前者优于后者

        故而sql语句中尽量使用<>来做不等判断

      3、大于(>)

        select 列名 from 表名 where 列>值;    

        说明:

           数值按照大小比较。

          字符按照ASCII码对应的值进行比较,比较时按照字符对应的位置一个字符一个字符的比较。

    三、逻辑查询运算符

      当我们需要使用多个条件进行查询的时候,需要使用逻辑查询运算符。

      AND:多个条件都成立

      OR:多个条件中满足一个

      1、and(并且)

        select 列名 from 表名 where 条件1 and 条件2;    

        表示返回满足条件1和条件2的记录。

      2、OR(或者)

        select 列名 from 表名 where 条件1 or 条件2;

        满足条件1或者满足条件2的记录都会被返回。

    四、like(模糊查询)

      select 列名 from 表名 where 列 like pattern;  

      pattern中可以包含通配符,有以下通配符:

        %:表示匹配任意一个或多个字符

         _:表示匹配任意一个字符

    五、BETWEEN AND(区间查询)

      操作符 BETWEEN … AND 会选取介于两个值之间的数据范围,这些值可以是数值、文本或者日期,属于一个闭区间查询。

      selec 列名 from 表名 where 列名 between 值1 and 值2;  

      返回对应的列的值在[值1,值2]区间中的记录

      使用between and可以提高语句的简洁度

       两个临界值不要调换位置,只能是大于等于左边的值,并且小于等于右边的值。

      下面两条sql效果一样

        select * from stu t where t.age between 25 and 32;
        select * from stu t where t.age >= 25 and t.age <= 32;

    六、IN查询

      select 列名 from 表名 where 字段 in (值1,值2,值3,值4);  

        in 后面括号中可以包含多个值,对应记录的字段满足in中任意一个都会被返回

        in列表的值类型必须一致或兼容

        in列表中不支持通配符。

      NOT IN查询

      not in和in刚好相反,in是列表中被匹配的都会被返回,NOT IN是和列表中都不匹配的会被返回。

      select 列名 from 表名 where 字段 not in (值1,值2,值3,值4);

    七、NULL存在的坑

      查询运算符、like、between and、in、not in对NULL值查询不起效。

    八、IS NULL/IS NOT NULL(NULL值专用查询)

      1、IS NULL(返回值为空的记录)

        select 列名 from 表名 where 列 is null;

        查询指定的列的值为NULL的记录。

      2、IS NULL(返回值不为空的记录)

        select 列名 from 表名 where 列 is not null;

        查询指定的列的值不为NULL的记录。

    九、<=>(安全等于)

      <=>:既可以判断NULL值,又可以判断普通的数值,可读性较低,用得较少

      select * from test8 t where t.a<=>null;  --<=>可以将NULL查询出来。

      select * from test8 t where t.a<=>1;

    十、经典面试题

      下面的2个sql查询结果一样么?  

      select * from students;

      select * from students where name like '%';

      

    结果分2种情况:

    当name没有NULL值时,返回的结果一样。

    当name有NULL值时,第2个sql查询不出name为NULL的记录。

    总结

    • like中的%可以匹配一个到多个任意的字符,_可以匹配任意一个字符

    • 空值查询需要使用IS NULL或者IS NOT NULL,其他查询运算符对NULL值无效

    • 建议创建表的时候,尽量设置表的字段不能为空,给字段设置一个默认值

    • <=>(安全等于)玩玩可以,建议少使用

  • 相关阅读:
    changing a pointer rather than erasing memory cells
    验证码识别 edge enhancement 轮廓增强 region finding 区域查找
    Manipulating Data Structures
    passing parameters by value is inefficient when the parameters represent large blocks of data
    Aliasing 走样
    Artificial Intelligence Research Methodologies 人工智能研究方法
    Thread safety
    include pointers as a primitive data type
    flat file
    functional cohesion
  • 原文地址:https://www.cnblogs.com/biao/p/11757096.html
Copyright © 2011-2022 走看看