谓词:就是返回值是真值的函数。

前面接触到的“>” “<” “=”等称为比较运算符,它们的正式名称就是比较谓词。因为它们比较之后返回的结果是真值。

由于谓词 返回的结果是一个真值 ,即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表达式的更多相关文章

  1. 6.1课堂笔记—DML(数据操作语言),DQL查询语句

    一.DML(数据操作语言) InnoDB MyISAM 支持事务 不支持事务 不支持全文索引 支持全文索引 支持外键约束 不支持 命令查看默认存储引擎 show variables like '%st ...

  2. DML数据操作语言

    DML数据操作语言 用来对数据库中表的数据记录进行更新.(增删改) 插入insert -- insert into 表(列名1,列名2,列名3...) values (值1,值2,值3...):向表中 ...

  3. DML数据操作语言之增加,删除,更新

    1.数据的增加 数据的增加要用到insert语句  ,基本格式是: insert into <表名> (列名1,列名2,列名3,......) values (值1,值2,值3,..... ...

  4. DML数据操作语言之查询(二)

    当我们查询出了N条记录之后 ,我们知道一共是几条记录,或者这些记录某一字段(列值)的最大值,最小值,平均值等,就可以使用聚合函数. 1.聚合函数 聚合函数会将null 排除在外.但是count(*)例 ...

  5. DML数据操作语言之复杂查询

    1.视图(View) 我们知道,在关系型数据库中,用来保存实际数据记录的是数据表.和表同等概念也是用来保存东西是:视图. 但是数据表是用来保存实际数据记录的,而视图是用来保存常用select语句的. ...

  6. DML数据操作语言之查询(一)

    1.select语句基础 基本语句格式:  select <列名>,.... from <表名>; select子句中列举出希望从表中查询出的列的名称,from子句则指定了选取 ...

  7. MySQL SQL DML (数据操作语言)

    包括 SELECT, UPDATE, DELETE, INSERT SELECT 从数据库表中获取数据 用法 SELECT name FROM students; SELECT name,age FR ...

  8. DML数据操作语言之常用函数

    所谓函数,就是输入某一值,得到相应的输出结果的功能.相当于一个加工厂,给了原料,最终产出成品. 其中原料 就是参数(parameter). 产品 就是返回值. 函数大致可以分为以下五个种类: 算术函数 ...

  9. DML数据操作语言练习

    --创建表T_HQ_BM2 --create table t_hq_bm2 as select * from t_hq_bm; commit; --添加行内容 --insert into t_hq_b ...

随机推荐

  1. up61博客模版版本v1.0.0

    经过两天的努力 终于把博客模板框架写出来了. 表示写模板累死了,很久没有写样式了,还是那么难搞.没有PHP写函数爽. 不管怎么样 第一版出来了.以下是部分截图.预览 当然在示例部署到项目上的时候 ,部 ...

  2. 12.C++-构造函数与析构函数调用顺序,const成员函数,const对象

    单个对象创建时,构造函数的调用顺序 1.首先判断该对象的类是否拥有父类,若有则先调用父类的构造函数 2.判断该对象的成员是否是其它类的成员,若是则调用成员变量的构造函数(调用顺序和声明顺序相同) 3. ...

  3. Y2K问题

    关于第五章 团队和流程 2.6 特工团队中所提到的Y2K问题,第一次接触到这个名词去百度了,它的意思是这样的:year 2K problem,又称千年虫问题.主要原因是早期的软件大多以两位数字来记录年 ...

  4. git使用.gitignore设置不生效或不起作用的问题

    偶然遇到的问题,记录如下: 通常我们在push项目时,会有些配置文件或本地文件不想上传到服务器上 这时候我们会通过设置.gitignore  文件 一般设置成这样: # 20170418 by 51a ...

  5. 使用nodegrass简单封装http请求例子

    1.项目中经常性的使用http发送请求处理数据.而大部分请求方式为get和post,于是对http请求进行封装,提供代码的利用率. 2.nodegress是nodejs的一个请求工具. 具体步骤及代码 ...

  6. eventProxyAPI(转)

    EventProxy 仅仅是一个很轻量的工具,但是能够带来一种事件式编程的思维变化.有几个特点: 利用事件机制解耦复杂业务逻辑 移除被广为诟病的深度callback嵌套问题 将串行等待变成并行等待,提 ...

  7. 用session做权限控制

    一个需要用户进行登录的网站,基本上都会设置用户权限,对不同的用户进行权限控制.例如:一个网站肯定会有一个管理员管理着普通的用户,普通的用户不可能对其他用户有着类似于增删改查等操作,这样网站都乱了--, ...

  8. Bitmap的加载与缓存

    Android系统中图片一般用Bitmap对象表示,它支持png,jpg等常见格式.通常情况下图片的体积都比较大,单个应用允许使用的内存又是有限的,所以我们需要采取一些手段减少内存占用并提高加载速度. ...

  9. pl/sql的介绍

    为什么需要pl/sql编程? 因为使用纯的sql语句来操作数据库,有先天性的技术缺陷: 1.不能模块编程: 2.执行速度慢: 3.安全性有问题: 4.浪费带宽. pl/sql是什么? pl/sql(p ...

  10. swift 相关小随笔

    关键词 typealias 对已经存在的类重命名 let  修饰不可变值 var  修饰可变的值 lazy  懒加载修饰符,用到的时候才会加载 convenience 原方法的备用方法,方法一致,但是 ...