DML数据操作语言之谓词,case表达式
谓词:就是返回值是真值的函数。
前面接触到的“>” “<” “=”等称为比较运算符,它们的正式名称就是比较谓词。因为它们比较之后返回的结果是真值。
由于谓词 返回的结果是一个真值 ,即true , false,unknown,所以常常用在用来筛选记录的where子句 或者 having子句中。
谓词 与 函数的最大区别 : 谓词返回值是真值 ,函数 返回值是数字,字符串,日期等值。
常用的谓词:
1.like ——字符串的部分一致查询
前方一致:
select * from tb_student t where t.name like 'james%'; -- %代表0个或者多个字符
将会选出 name以 james开头的记录。
中间一致:
select * from tb_student t where t.name like '%james%' ; -- %代表0个或者多个字符
将会选出 name中 包含 james的记录。 这个条件包含了前方一致和后方一致,最宽泛。
后方一致:
select * from tb_student t where t.name like '%james' ; --%代表0个或者多个字符
将会选出name以 james结尾的记录。
%代表0个或者多个字符 _代表1个字符
select * from tb_student t where t.name like '_ _james_ _'; --_代表1个字符
将会选出name前面有两个字符,中间是james,后面有两个字符的记录。
通过like谓词的查询 又叫模糊查询。通过制定模式匹配规则,来筛选记录。
2.betweent ——范围查询
筛选记录的某列的值在某一个范围内,可以使用betweent谓词 。
select * from tb_student t where t.score betweent 500 and 600 ;
将会筛选出 score在500到600之间的记录。 包含500和600.
上面这句相当于
select * from tb_student t where t.score <= 600 and t.score >= 500 ;
若要筛选score在 500和600之间 但是不包含500和600的记录,只能使用:
select * from tb_student t where t.score < 600 and t.score > 500 ;
3.is null , is not null ——判断是否是null
筛选记录的某列的值是不是null ,不能使用 = 或 != ,只能使用 is null 或 is not null 谓词。
select * from tb_student where t.birthday is null ;
将筛选出 birthday的值为null的记录 。
select * from tb_student where t.birthday is not null ;
将筛选出 birthday的值不为null的记录。
4.in , not in —— or逻辑运算符的简易用法
select * from tb_student t where t.age in (21,24,26);
将筛选出 age是 21 或 24 或 26 的记录 。
select * from tb_student t where t.age not in (21,24,26);
将筛选出age不是 21 或24 或26的记录。(不包括 age是null的记录)。
需要注意的一点是:in ,not in 是无法选出 指定列是 null的记录的,null终究还是 需要使用 is null 和 not is null
使用子查询的结果表作为in谓词的参数 :
要求子查询的结果表是 N行1列的表。这一列的每一个值 ,自动转化为 in谓词中的参数。
select * from tb_studen t where t.studentId in ( select c.stuId from tb_class c where c.className = '高一九班' ) ;
通过子查询 从tb_class表中得到是一个 N行一列 的结果表。这个表中的数据 转化成横向的参数列表,传给in谓词后面的参数列表。
同样 not in 谓词也可以使用 子查询的结果表作为 not in 谓词的参数。
5.exist
exist谓词是一个特殊的谓词:
exist的使用方法与之前的都不相同;exists的语法理解起来比较困难;实际上即使不使用exist,基本上也都可以使用in(或者not in) 来完成相同的任务。
case表达式 :
我们知道java语言中 用if语句来实行根据指定条件判断时候为true来产生分支执行。
而case表达式 就是 SQL语句中的类似于if语句的效果的表达式。
case表达式 可以分为 简单case表达式 和 搜索case表达式 :
搜索case表达式 的基本语法格式:
case
when <判断表达式1> then <执行表达式1>
when <判断表达式2> then <执行表达式2>
when <判断表达式3> then <执行表达式3>
...
else <执行表达式n>
end
从上向下执行 ,先根据 判断表达式1 的真值结果 ,如果是true 就返回后面的 执行表达式1的结果,case表达式到此结束,后面的不再执行;如果判断表达式1的真值结果是false,
就向下 进行判断表达式2的判断,看返回的真值结果判断后面的执行表达式2是否执行 。
如果没有 就返回 else 后面的执行表达式n的结果。
可见无论case表达式 中的条件分支写了有多少,最终 只会执行其中一条符合 判断表达式的的那一条 when ... then ... ,最终会返回一个数字,字符串,日期等简单的值。
else <执行表达式n> 这一条最好不要省略,虽然省略之后,会自动加上 else null ; 但为了阅读性 ,最好不要省略。
case表达式的书写位置 :
由于case表达式 ,最终总会返回一个数字,字符创,日期等值的地方 ,均可以使用 case表达式 。
简单case表达式 的基本语法格式:
case <表达式>
when <表达式1> then <执行表达式1>
when <表达式2> then <执行表达式2>
when <表达式3> then <执行表达式3> ...
else <执行表达式n>
end
DML数据操作语言之谓词,case表达式的更多相关文章
- 6.1课堂笔记—DML(数据操作语言),DQL查询语句
一.DML(数据操作语言) InnoDB MyISAM 支持事务 不支持事务 不支持全文索引 支持全文索引 支持外键约束 不支持 命令查看默认存储引擎 show variables like '%st ...
- DML数据操作语言
DML数据操作语言 用来对数据库中表的数据记录进行更新.(增删改) 插入insert -- insert into 表(列名1,列名2,列名3...) values (值1,值2,值3...):向表中 ...
- DML数据操作语言之增加,删除,更新
1.数据的增加 数据的增加要用到insert语句 ,基本格式是: insert into <表名> (列名1,列名2,列名3,......) values (值1,值2,值3,..... ...
- DML数据操作语言之查询(二)
当我们查询出了N条记录之后 ,我们知道一共是几条记录,或者这些记录某一字段(列值)的最大值,最小值,平均值等,就可以使用聚合函数. 1.聚合函数 聚合函数会将null 排除在外.但是count(*)例 ...
- DML数据操作语言之复杂查询
1.视图(View) 我们知道,在关系型数据库中,用来保存实际数据记录的是数据表.和表同等概念也是用来保存东西是:视图. 但是数据表是用来保存实际数据记录的,而视图是用来保存常用select语句的. ...
- DML数据操作语言之查询(一)
1.select语句基础 基本语句格式: select <列名>,.... from <表名>; select子句中列举出希望从表中查询出的列的名称,from子句则指定了选取 ...
- MySQL SQL DML (数据操作语言)
包括 SELECT, UPDATE, DELETE, INSERT SELECT 从数据库表中获取数据 用法 SELECT name FROM students; SELECT name,age FR ...
- DML数据操作语言之常用函数
所谓函数,就是输入某一值,得到相应的输出结果的功能.相当于一个加工厂,给了原料,最终产出成品. 其中原料 就是参数(parameter). 产品 就是返回值. 函数大致可以分为以下五个种类: 算术函数 ...
- DML数据操作语言练习
--创建表T_HQ_BM2 --create table t_hq_bm2 as select * from t_hq_bm; commit; --添加行内容 --insert into t_hq_b ...
随机推荐
- 【CJOJ2484】【Luogu2805】最小函数值(函数最小值)
题面 Description 有n个函数,分别为F1,F2,...,Fn.定义 Fi(x)=Aix2+Bix+Ci(x∈N∗)Fi(x)=Aix2+Bix+Ci(x∈N∗) .给定这些Ai.Bi和Ci ...
- Spring【DAO模块】就是这么简单
前言 上一篇Spring博文主要讲解了如何使用Spring来实现AOP编程,本博文主要讲解Spring的DAO模块对JDBC的支持,以及Spring对事务的控制... 对于JDBC而言,我们肯定不会陌 ...
- Java微服务对UTC时间格式的处理
一.背景 先说一下为什么要使用UTC时间.开发一个全球化的系统,服务端(Java微服务)集中部署在同一个地方,用户在全球通过浏览器.手机客户端访问.不同地区的时区是不一样的,同一个时间戳,不同的用户看 ...
- 用JavaScript写一个区块链
几乎每个人都听说过像比特币和以太币这样的加密货币,但是只有极少数人懂得隐藏在它们背后的技术.在这篇博客中,我将会用JavaScript来创建一个简单的区块链来演示它们的内部究竟是如何工作的.我将会称之 ...
- python多线程、多进程以及GIL
多线程 使用threading模块创建线程 传入一个函数 这种方式是最基本的,即调用threading中的Thread类的构造函数,然后指定参数target=func,再使用返回的Thread的实例调 ...
- guava cache使用和源码分析
guava cache的优点和使用场景,用来判断业务中是否适合使用此缓存 介绍常用的方法,并给出示例,作为使用的参考 深入解读源码. guava简介 guava cache是一个本地缓存.有以下优点: ...
- selenium 断言与验证
断言和验证都是判断结果是否跟预期效果是否一致,不一致的情况下,断言会导致测试用例直接失败,程序不会继续执行:验证的测试用例会继续执行. 断言的4种模式+5种手段: assert 断言失败时,该测试将终 ...
- Git分支(2/5) -- Fast Forward 合并
快捷操作: 切换并创建分支: git checkout -b 分支名. git checkout -b some-change 然后我打开某个文件(index.html)修改一下标题. Commit之 ...
- iOS 用户体验之音频
早期某知名公司的应用有这么一个问题,如果我在听音乐时打开该应用,播放一段小视频,视频播放完成之后,音乐没有继续播放.这个问题被很多用户吐槽,很久以后,该公司终于修复了这个问题. 无论声音是应用体验的重 ...
- C语言最后一次作业--总结报告
1.当初你是如何做出选择计算机专业的决定的? 经过一个学期,你的看法改变了么,为什么? 你觉得计算机是你喜欢的领域吗,它是你擅长的领域吗? 为什么? 当时选择计算机专业,是基于自己的高考分数和想出省的 ...