前言:

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

  此时我们需要使用条件查询来对指定表进行操作,我们需要了解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值无效

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

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

七、玩转select条件查询的更多相关文章

  1. Mysql高手系列 - 第7篇:玩转select条件查询,避免踩坑

    这是Mysql系列第7篇. 环境:mysql5.7.25,cmd命令中进行演示. 电商中:我们想查看某个用户所有的订单,或者想查看某个用户在某个时间段内所有的订单,此时我们需要对订单表数据进行筛选,按 ...

  2. MySql(四)Select条件查询

    select条件查询的格式如下: SELECT 查询列表FROM 表名WHERE 筛选条件:123456根据筛选条件可以分为以下几类: 按照条件按表达式进行筛选 常用条件运算符如下:> .< ...

  3. 03_MyBatis基本查询,mapper文件的定义,测试代码的编写,resultMap配置返回值,sql片段配置,select标签标签中的内容介绍,配置使用二级缓存,使用别名的数据类型,条件查询ma

     1 PersonTestMapper.xml中的内容如下: <?xmlversion="1.0"encoding="UTF-8"?> < ...

  4. 将一个多表关联的条件查询中的多表通过 create select 转化成一张单表的sql、改为会话级别临时表 【我】

    将一个多表关联的条件查询中的多表通过 create   select  转化成一张单表的sql 将结果改为创建一个会话级别的临时表: -- 根据下面这两个sql CREATE TABLE revenu ...

  5. 动态多条件查询分页以及排序(一)--MVC与Entity Framework版url分页版

    一.前言 多条件查询分页以及排序  每个系统里都会有这个的代码 做好这块 可以大大提高开发效率  所以博主分享下自己的6个版本的 多条件查询分页以及排序 二.目前状况 不论是ado.net 还是EF ...

  6. Oracle SQL:select各类查询语句总结

    SQL查询语句总结 数据查询语言:即DML(Data Mannipulation Language)数据操纵语言,用于查询.操纵数据表资料行 本手册所有示例引用表均以TIPTOP GP  ERP数据库 ...

  7. 基于 SSH 框架的 Criteria 和 DetachedCriteria 多条件查询

    Hibernate 定义了 CriteriaSpecification 接口规范用来完成面向对象的条件查询,Criteria 和 DetachedCriteria 就是 CriteriaSpecifi ...

  8. Django---Django的ORM的一对多操作(外键操作),ORM的多对多操作(关系管理对象),ORM的分组聚合,ORM的F字段查询和Q字段条件查询,Django的事务操作,额外(Django的终端打印SQL语句,脚本调试)

    Django---Django的ORM的一对多操作(外键操作),ORM的多对多操作(关系管理对象),ORM的分组聚合,ORM的F字段查询和Q字段条件查询,Django的事务操作,额外(Django的终 ...

  9. Rafy 中的 Linq 查询支持(根据聚合子条件查询聚合父)

    为了提高开发者的易用性,Rafy 领域实体框架在很早开始就已经支持使用 Linq 语法来查询实体了.但是只支持了一些简单的.常用的条件查询,支持的力度很有限.特别是遇到对聚合对象的查询时,就不能再使用 ...

随机推荐

  1. 【FreeMarker】FreeMarker使用(三)

    搭建一个 1.FreeMarker取值 <!DOCTYPE html> <html> <head> <meta charset="UTF-8&quo ...

  2. Gson反序列json到实体类

    gson在基准测试过程中各项性能接近于Jackson(具体可以看Benchmark of Java JSON libraries)里面的测试, 本人亲测过,实测结果与他的数据一致,Jackson安全性 ...

  3. Python - Django - 静态文件相关

    静态文件的路径设置在 settings.py 中 如果该路径发生更改的话,html 中相关路径也要进行修改 CSS: <link href="/static/dashboard.css ...

  4. CentOS "libc.so.6: version 'GLIBC_2.14' not found"解决方法,同理'GLIBC_2.15' not found"

    出现"libc.so.6: version 'GLIBC_2.14' not found"问题,是由于glibc版本过低,升级glibc即可. 由于CentOS系统RPM源目前gl ...

  5. chrome devTool

    在console中访问节点 使用document.querySelectAll()访问元素 使用$0快速访问选中的元素,光标选中的元素,早console中输入$0获取选中元素的dom信息 拷贝 > ...

  6. cordon、drain、delete node区别

    cordon.drain.delete node区别 主要目的:导致node处于不可调度状态,新创建的pod容器不会调度在node上. cordon将node置为SchedulingDisabled不 ...

  7. 用pytorch1.0快速搭建简单的神经网络

    用pytorch1.0搭建简单的神经网络 import torch import torch.nn.functional as F # 包含激励函数 # 建立神经网络 # 先定义所有的层属性(__in ...

  8. 循环(数组循环、获取json数据循环)、each()循环详解

    return; // 退出循环(不满足,退出此次循环.下次满足条件,依然会走此循环)return false; //退出函数(退出所有) 一. 数组循环: html: <div class=&q ...

  9. [转帖]Hive基础(一)

    Hive基础(一) 2018-12-19 15:35:03 人间怪物 阅读数 234   版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接 ...

  10. centos 6.10 oracle 19c安装

    centos 7以下版本安装oracle 19c 问题较多,centos 以上版本没有任何问题.记录如下. hosts文件,否则图形界面无法启动 127.0.0.1 localhost localho ...