谓词和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

相关文章

王立平--switch case

@Override public void onClick(View v) {   switch (v.getId()) { 1. case R.id.btn_addPic: break; 2. case R.id.btn_reflectPic: break; default: break; } } 如果黑色字体的break你忘记了写。。。 那么程序就会从进入swit

Python中 Switch/Case 实现

学习Python过程中,发现没有switch-case,过去写C习惯用Switch/Case语句,官方文档说通过if-elif实现。所以不妨自己来实现Switch/Case功能。 方法一 通过字典实现 def foo(var):return {'a': 1,'b': 2,'c': 3,}.get(var,'error') #'error'为默认返回值,可自设置 方法二 通过匿名函数

case when 与 decode 用法

case when 在不同条件需要有不同返回值的情况下使用非常方便,可以在给变量赋值时使用,也可以在select查询语句中使用。 case搜索语句格式: case  when 条件1 then 返回值1  when 条件2 then 返回值2  ...  else 返回值N  end; case when使用示例代码: select empno,ename,job,cas

scala并发编程原生线程Actor、Case Class下的消息传递和偏函数实战

参考代码: import scala.actors._case class Person(name:String,age:Int)class HelloActor extends Actor{def act(){while(true){receive{case Person(name,age)=>{ //偏函数println("Name: "+ name + ":" +"Age:"

谓词的使用(predicate)

原文:http://blog.csdn.net/quanzheng92/article/details/46532021 /** 一 运算符*/ // 1   "> < >= <= === != <> between" 比较运算符     NSPredicate *predicate =[NSPredicatepredicateWithFormat:@"age > 3"];

golang select介绍和使用,select中的case只会执行一个吗?

在 Go 语言中,select 语句用于处理多个通道(channel)操作。它的行为和 switch 语句有些相似,但专门用于通道通信。select 语句可以让一个 Goroutine 同时等待多个通道操作,并在其中一个通道准备好时进行处理。 select 的基本用法 一个 select 语句的结构如下: select {case <-ch1:// 当 ch1 有数据可读时执行case

mysql统计字段不同值数量之sum(case...when)

话不多说,直接举例咋用。 先知道一下常用语法: sum(case 属性名 when 属性值1 then 1 else 0 end),意思就是某个属性下为属性值1就加1个数量,否则就作0统计。 看我的表players的长相: 1、统计男生和女生的数量 SELECT sum(CASE gender WHEN 'man' THEN 1 ELSE 0 END) as man_numbers, su

Auto-Unit-Test-Case-Generator -- java项目自动测试生成

0.Pre-预备知识: 0.1.Maven是什么? [by Maven是什么?有什么作用?Maven的核心内容简述_maven是干什么用-CSDN博客 ] 是Java 领域中最流行的自动化构建工具之一,Maven 作为 Java 项目管理工具,具有: 包管理;许多插件--支持整个项目的开发、打包、测试及部署等; 0.2.传统项目 vs maven项目: 0.2.1传统工程: jar包

case语句不要忘记break!

陷阱啊陷阱! 一般必须在case语句结尾添加break语句。因为一旦通过switch语句确定了入口点,所有进一步的case都会被忽略,并且除非遇到关键字break,否则会执行满足这个case之后的其他case的语句,直到switch结束或者遇到break为止。如果在switch中省略了break语句,那么匹配的case值后的所有情况(包括default情况)都会被执行。

C/C++中的switch/case陷阱

出处:http://www.cnblogs.com/dolphin0520/ 浅析C/C++中的switch/case陷阱   先看下面一段代码:   文件main.cpp #include<iostream>using namespace std;int main(int argc, char *argv[]){int a =0;switch(a){case 0: int b