谓词和CASE

2024-06-19 22:36
文章标签 谓词 case

本文主要是介绍谓词和CASE,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

谓词(LIKE、BETWEEN、IS NULL、IS NOT NULL、IN、EXISTS)及 CASE

假如我们有一张表,表名为 predicate_table,如下所示:

+---------------+---------------+-------------+-------------+
| number_column | string_column | date_column | bool_column |
+---------------+---------------+-------------+-------------+
|            10 | Apple         | 2024-06-10  |           1 |
|            20 | Banana        | 2024-06-11  |           0 |
|            15 | Orange        | 2024-06-12  |           1 |
+---------------+---------------+-------------+-------------+

谓词

在SQL中,谓词是返回值为真值(TRUE、FALSE或UNKNOWN)的表达式。谓词通常由比较运算符、逻辑运算符和特殊的值(如NULL)组成,它们可以用于筛选、限制或者连接数据表中的数据SQL中的常见谓词主要有LIKE、BETWEEN、IS NULL、IS NOT NULL、IN、EXISTS等

  • LIKE:使用通配符检查字符串是否匹配模式。

    SELECT * 
    FROM predicate_table 
    WHERE string_column LIKE 'Ap%';+---------------+---------------+-------------+-------------+
    | number_column | string_column | date_column | bool_column |
    +---------------+---------------+-------------+-------------+
    |            10 | Apple         | 2024-06-10  |           1 |
    +---------------+---------------+-------------+-------------+
    1 row in set (0.00 sec)
    
  • BETWEEN:检查值是否在指定范围内。

    SELECT * 
    FROM predicate_table 
    WHERE date_column BETWEEN '2024-06-10' AND '2024-06-11';+---------------+---------------+-------------+-------------+
    | number_column | string_column | date_column | bool_column |
    +---------------+---------------+-------------+-------------+
    |            10 | Apple         | 2024-06-10  |           1 |
    |            20 | Banana        | 2024-06-11  |           0 |
    +---------------+---------------+-------------+-------------+
    2 rows in set (0.00 sec)
    
  • IS NULL / IS NOT NULL:检查值是否为空或非空。

    SELECT * 
    FROM predicate_table 
    WHERE string_column IS NULL;Empty set (0.00 sec) --这是因为我们的数据表中不存在空值,所以查询的结果为空
    
    SELECT * 
    FROM predicate_table 
    WHERE string_column IS NOT NULL;+---------------+---------------+-------------+-------------+
    | number_column | string_column | date_column | bool_column |
    +---------------+---------------+-------------+-------------+
    |            10 | Apple         | 2024-06-10  |           1 |
    |            20 | Banana        | 2024-06-11  |           0 |
    |            15 | Orange        | 2024-06-12  |           1 |
    +---------------+---------------+-------------+-------------+
    3 rows in set (0.00 sec)
    

    "上面"和"下面"的查询结果之间的差异,主要是由WHERE子句中的NOT关键字引起的。换句话说,NOT关键字的存在或不存在,导致了查询结果的不同。

  • IN:检查值是否在给定的列表中。

    SELECT * 
    FROM predicate_table 
    WHERE number_column IN (10, 15);+---------------+---------------+-------------+-------------+
    | number_column | string_column | date_column | bool_column |
    +---------------+---------------+-------------+-------------+
    |            10 | Apple         | 2024-06-10  |           1 |
    |            15 | Orange        | 2024-06-12  |           1 |
    +---------------+---------------+-------------+-------------+
    2 rows in set (0.00 sec)
    
  • EXISTS 子查询

    SELECT *
    FROM predicate_table p
    WHERE EXISTS (SELECT *FROM predicate_tableWHERE  number_column < 11
    );+---------------+---------------+-------------+-------------+
    | number_column | string_column | date_column | bool_column |
    +---------------+---------------+-------------+-------------+
    |            10 | Apple         | 2024-06-10  |           1 |
    |            20 | Banana        | 2024-06-11  |           0 |
    |            15 | Orange        | 2024-06-12  |           1 |
    +---------------+---------------+-------------+-------------+
    3 rows in set (0.00 sec)
    

    子查询会检查是否存在满足条件 date_column < '2024-06-11' 的行。如果存在,EXISTS 返回 TRUE,子查询会返回相应的行;否则,返回空结果集。

    很难明白?不用着急。实际上即使不使用 EXISTS ,基本上也都可以用 IN 或者 NOT IN 代替。

CASE 表达式(很常用且简单)

当涉及到 SQL 查询时,“CASE”是一种非常有用的表达式,允许在查询中执行条件逻辑。它允许根据条件的真假来返回不同的值。CASE 表达式通常与 SELECT 语句一起使用,但也可以在 WHERE、ORDER BY 和 GROUP BY 子句中使用。其语法为:

CASEWHEN 求值表达式1 THEN 表达式1WHEN 求值表达式2 THEN 表达式2...ELSE 表达式
END

举个例子:

SELECT *,CASEWHEN number_column < 15 THEN 'Small'WHEN number_column >= 15 AND number_column < 25 THEN 'Medium'ELSE 'Large'END AS number_category
FROMpredicate_table;+---------------+---------------+-------------+-------------+-----------------+
| number_column | string_column | date_column | bool_column | number_category |
+---------------+---------------+-------------+-------------+-----------------+
|            10 | Apple         | 2024-06-10  |           1 | Small           |
|            20 | Banana        | 2024-06-11  |           0 | Medium          |
|            15 | Orange        | 2024-06-12  |           1 | Medium          |
+---------------+---------------+-------------+-------------+-----------------+
3 rows in set (0.00 sec)

ELSE 可以省略,但是不建议。

END 一定不能省略!!!

这个查询的结果虽然比原表多了一列,但是不影响原表,而且这一列只在这个查询语句中存在。

这篇关于谓词和CASE的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1076344

相关文章

SQL中的CASE WHEN用法:

转载地址:http://www.2cto.com/database/201203/124327.html Java代码   SQL中Case的使用方法       Case具有两种格式。简单Case函数和Case搜索函数。      --简单Case函数      CASE sex       WHEN '1' THEN '男'

C/C++打假:条件分支语句switch..case效率比if..else高?

很久很久以前,有人教导我说条件分支大于4条时,switch..case效率会比if..else高,条件分支为10条时,switch..case效率会比if..else快一倍不止。随着条件分支越多,效率差异越大。今日得闲,我做了个测试来验证这条经验的真假。以下分3个case对比这两种条件选择分支的性能,每个case重复两遍以上确保测试数据稳定。测试所用系统为Ubuntu 22.04

使用NetSuite提交Case

使用NetSuite提交Case 使用NetSuite提交Case问题case创建过程 使用NetSuite提交Case 问题 首先是想要在sandbox中安装FAM的bundle,发现怎么也找不到,无论使用bundle id还是名称都无果,所以决定提个case问问是不是跟环境有关系。 case创建过程 在suiteanswers里创建case,点击contact sup

C#的Switch语句2(case后的值与模式匹配)

文章目录 switch语法结构case具体的值枚举值字符串const关键字 如果没有匹配的值default语句不一定要在最后 模式匹配与C++的差异-case穿透(Fall-through)下一篇文章 switch语法结构 基础的语法结构,在上一篇文章已经写了,具体请看: 点击链接跳转 case 具体的值 在上一篇文章提到过,Switch语句是一种选择结构,用于基于某个表达

if/case条件测试语句

一      条件测试 1.1返回码 $? $? 返回码 用来哦按段命令或者脚本是否执行成功 0 true为真就是成功成立 非0 false 失败或者异常 1.2 test 命令 可以进行条件测试 然后根据返回值来判断条件是否成立 -e :exist 测试目录或者目录是否存在 -d :   directory 测试目录是否存在 -f  :   file 测试普通文件是否存在 -

c#中switch case语句的用法

前言 在c#中如果对于两种不同情况的处理,一般使用If else结构,但是对于3种及以上情况的处理最好使用switch case语句来增强代码的可读性,本文就是详细介绍switch case语句在c#中的常见应用 1、常规使用 下面的代码中c是一个Int类型的变量,对于c这个变量的值,可分为3中情况来处理,分别是等于1、2、3的时候。 int c = 10;switch (c){case

嵌套查询(二)-谓词EXISTS实现嵌套查询

一、EXISTS谓词 1、作用:用于判断一个子查询的结果是否为空 2、使用语法: 【NOT】EXISTS(子查询) 语义:如果子查询的查询结果不为空,则EXISTS为真,否则为假 二、举例 1、举例1:查询选修“003”课程的学生姓名 select sNfrom swhere exists(select *from sCwhere sC.sNo=s.sNo and cNo=

嵌套查询(一)-谓词IN、量词ANY、量词ALL

一、在多个表之间进行数据查询,除了可以使用连接查询之外,也可以使用嵌套查询,那么什么是嵌套查询呢?如何使用嵌套查询呢? 1、将一个SELECT-FROM查询,嵌套在另一个SELECT查询语句中,那么这个SELECT-FROM查询就叫嵌套查询或者子查询,被嵌套的上层查询被称为父查询,在子查询中还可以继续嵌入子查询,构成多层嵌套查询,一个查询的结果可能是一个关系,即元组的集合,也可能是一个值,即聚集

条件判断if语句与case语句

一、条件测试 test命令进行条件测试,然后根据返回值来判断条件是否成立。 常用操作符: -e :既可以测试文件又可以测试目录是否存在 -d :测试目录是否存在 -f :测试文件是否存在 -r :测试当前用户是否对文件/目录有读权限 -w:测试当前用户是否对文件/目录有写权限 -x :测试当前用户是否对文件/目录有执行权限 $?: 返回码,判断命令或者脚本是否执行成功(最近的一条

mysql行转列利用case when

CREATE TABLE bill ( id CHAR(36) NOT NULL, customer INT(255) NULL DEFAULT NULL COMMENT ‘顾客’, shop INT(255) NULL DEFAULT NULL COMMENT ‘消费店铺’, money DECIMAL(10,2) NULL DEFAULT NULL COMMENT ‘花费’, typ