谓词的用法——SQL 学习五

谓词:返回值为真值(TRUE/FALSE/UNKNOWN)的函数。

 

Class_B            Class_A

      

 

 

根据上面两个表来说明下面的一些谓词的用法

 

 

LIKE - 字符串的部分一致查询

-- %:0 字符以上的任意字符串。
-- _:任意 1 个字符。
-- __:任意 2 个字符。
SELECT * FROM Class_B WHERE `name` LIKE '齐%'; -- 查询出 name = 齐藤
SELECT * FROM Class_B WHERE `name` LIKE '%齐'; -- 查询出为空
SELECT * FROM Class_B WHERE `name` LIKE '%齐%';-- 查询出 name = 齐藤
SELECT * FROM Class_B WHERE `name` LIKE '齐_'; -- 查询出 name = 齐藤 (1 个字符。)
SELECT * FROM Class_B WHERE `name` LIKE '齐__';-- 查询出为空         (2 个字符。)

 

BETWEEN - 范围查询

-- BETWEEN 会在结果中包含临界值(1 和 6)
SELECT * FROM Class_B WHERE id BETWEEN 1 and 6;

-- 不包含临界值(1 和 6)
SELECT * FROM Class_B WHERE id > 1 and 6 > id;

 

IS NULL、IS NOT NULL - 判断是否为 NULL

-- 为了选取部分值为 NULL 的列的数据,不能使用 =,只能使用 IS NULL。具体的可看 SQL 学习三
SELECT * FROM Class_B WHERE age is NULL;

--  取反(不为空的数据),请使用 IS NOT NULL。
SELECT * FROM Class_B WHERE age is NOT NULL;

 

IN - OR - NOT IN

-- IN 的使用
SELECT * FROM Class_B WHERE id IN (1,2,3,4); 

-- 等同于
SELECT * FROM Class_B WHERE id=1 or id=2 or id=3 or id=4;

-- 取反
SELECT * FROM Class_B WHERE id NOT IN (1,2,3,4); 

温馨提示

  • IN 和 NOT IN 是无法选取 NULL 数据的。
  • 使用子查询作为 IN 谓词的参数, IN 和 NOT IN 谓词具有其它谓词没有的用法,它的参数可以是子查询。 

 

 

NOT EXIST 与 EXIST 

  • 很多时候基本上可以使用 IN 或 NOT IN 来互相替换

 

-- 判断是否存在满足某种条件的记录。
SELECT * FROM Class_B WHERE EXISTS  (SELECT id FROM Class_A WHERE id =1 AND Class_B.id = Class_A.id); 
SELECT * FROM Class_B WHERE id IN  (SELECT id FROM Class_A WHERE id =1 AND Class_B.id = Class_A.id);

SELECT * FROM Class_B WHERE NOT EXISTS  (SELECT id FROM Class_A WHERE id =1 AND Class_B.id = Class_A.id); 
SELECT * FROM Class_B WHERE id NOT IN  (SELECT id FROM Class_A WHERE id =1 AND Class_B.id = Class_A.id); 

 

 

 

 

any 关键字

-- 模板
select ...from ... where a > any(...);

-- 实例
SELECT * FROM Class_B WHERE id > ANY(SELECT * FROM Class_A);

-- 如果子查询的结果有:‘1’,‘2’,‘3’ ,那么等同于
select * from Class_B where id > 1 or id > 2 or id > 3;

 

all 关键字

ALL关键字与ANY关键字类似,只不过上面的or改成and。即:
-- 模板
select ...from ... where a > ALL(...);

-- 实例
SELECT * FROM Class_B WHERE id > ALL(SELECT * FROM Class_A);

-- 如果子查询的结果有:‘1’,‘2’,‘3’ ,那么等同于
select * from Class_B where id > 1 and id > 2 and id > 3;

 

some 关键字
some关键字和any关键字是一样的功能。
-- 模板
select ...from ... where a > some(...);

-- 实例
SELECT * FROM Class_B WHERE id > some(SELECT * FROM Class_A);

-- 如果子查询的结果有:‘1’,‘2’,‘3’ ,那么等同于
select * from Class_B where id > 1 or id > 2 or id > 3;

 

参考来源:https://www.cnblogs.com/liqingwen/p/6572284.html

posted @ 2020-03-08 13:51  An-Optimistic-Person  阅读(196)  评论(0编辑  收藏  举报