七、玩转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值无效
建议创建表的时候,尽量设置表的字段不能为空,给字段设置一个默认值
<=>(安全等于)玩玩可以,建议少使用
七、玩转select条件查询的更多相关文章
- Mysql高手系列 - 第7篇:玩转select条件查询,避免踩坑
这是Mysql系列第7篇. 环境:mysql5.7.25,cmd命令中进行演示. 电商中:我们想查看某个用户所有的订单,或者想查看某个用户在某个时间段内所有的订单,此时我们需要对订单表数据进行筛选,按 ...
- MySql(四)Select条件查询
select条件查询的格式如下: SELECT 查询列表FROM 表名WHERE 筛选条件:123456根据筛选条件可以分为以下几类: 按照条件按表达式进行筛选 常用条件运算符如下:> .< ...
- 03_MyBatis基本查询,mapper文件的定义,测试代码的编写,resultMap配置返回值,sql片段配置,select标签标签中的内容介绍,配置使用二级缓存,使用别名的数据类型,条件查询ma
1 PersonTestMapper.xml中的内容如下: <?xmlversion="1.0"encoding="UTF-8"?> < ...
- 将一个多表关联的条件查询中的多表通过 create select 转化成一张单表的sql、改为会话级别临时表 【我】
将一个多表关联的条件查询中的多表通过 create select 转化成一张单表的sql 将结果改为创建一个会话级别的临时表: -- 根据下面这两个sql CREATE TABLE revenu ...
- 动态多条件查询分页以及排序(一)--MVC与Entity Framework版url分页版
一.前言 多条件查询分页以及排序 每个系统里都会有这个的代码 做好这块 可以大大提高开发效率 所以博主分享下自己的6个版本的 多条件查询分页以及排序 二.目前状况 不论是ado.net 还是EF ...
- Oracle SQL:select各类查询语句总结
SQL查询语句总结 数据查询语言:即DML(Data Mannipulation Language)数据操纵语言,用于查询.操纵数据表资料行 本手册所有示例引用表均以TIPTOP GP ERP数据库 ...
- 基于 SSH 框架的 Criteria 和 DetachedCriteria 多条件查询
Hibernate 定义了 CriteriaSpecification 接口规范用来完成面向对象的条件查询,Criteria 和 DetachedCriteria 就是 CriteriaSpecifi ...
- Django---Django的ORM的一对多操作(外键操作),ORM的多对多操作(关系管理对象),ORM的分组聚合,ORM的F字段查询和Q字段条件查询,Django的事务操作,额外(Django的终端打印SQL语句,脚本调试)
Django---Django的ORM的一对多操作(外键操作),ORM的多对多操作(关系管理对象),ORM的分组聚合,ORM的F字段查询和Q字段条件查询,Django的事务操作,额外(Django的终 ...
- Rafy 中的 Linq 查询支持(根据聚合子条件查询聚合父)
为了提高开发者的易用性,Rafy 领域实体框架在很早开始就已经支持使用 Linq 语法来查询实体了.但是只支持了一些简单的.常用的条件查询,支持的力度很有限.特别是遇到对聚合对象的查询时,就不能再使用 ...
随机推荐
- 算法习题---4-9数据挖掘(Uva1591)
一:题目 这是最懵逼的一道题,什么鬼......... [刷题]算法竞赛入门经典(第2版) 4-9/UVa1591 - Data Mining(详细题目看这个吧,不想多说) 二:代码实现 #defin ...
- git clone 使用用户名和密码
git clone http://邮箱(或用户名):密码@仓库 示例: 邮箱 xw@qq.com 密码: xw 仓库: http://git.test.com/abc/demo 注意: 邮箱中的 @ ...
- Django之密码加密
通过django自带的类库,来加密解密很方便,下面来简单介绍下: 导入包: from django.contrib.auth.hashers import make_password, check_p ...
- Redis的特性及运用
Redis特性 一个产品的使用场景肯定是需要根据产品的特性,先列举一下Redis的特点: 读写性能优异 持久化 数据类型丰富 单线程 数据自动过期 发布订阅 分布式 这里我们通过几个场景,不同维度说下 ...
- Java 终于在 Java 8 中引入了 Lambda 表达式。也称之为闭包或者匿名函数。
本文首发于 blog.zhaochunqi.com 转载请注明 blog.zhaochunqi.com 根据JSR 335, Java 终于在 Java 8 中引入了 Lambda 表达式.也称之为闭 ...
- Java连接MongoDB报错“java.lang.IllegalArgumentException: clusterListener can not be null”的解决办法
我使用的MongoDB版本是3.6.9. 下面是一个很基础的示例代码,功能就是连接MongoDB: package com.zifeiy.snowflake.handle.etl.mongodb; i ...
- C# .NET UDP 形式调用 graylog,gelf
-- 发送: GelfLogModel m = new GelfLogModel(); m.version = "1.1"; m.host = "128.0.14.39& ...
- 记联想SR850 Raid配置的一个bug
管理raid阵列时,如果要删除某个指定的阵列,则需要选中阵列名而不能选中虚拟磁盘.如果选中的是虚拟磁盘,点击删除后,会删除整个阵列列表里的第一个阵列,而非虚拟磁盘所在的阵列. 过程如下 联想SR850 ...
- springboot 通过docker 打包编译镜像
添加plugin <?xml version="1.0" encoding="UTF-8"?> <project xmlns="ht ...
- Linux查看库依赖方法
1.查看依赖的库:objdump -x xxx.so | grep NEEDED 2.查看可执行程序依赖的库:objdump -x 可执行程序名 | grep NEEDED 3.查看缺少的库: ldd ...