谓词的用法——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关键字是一样的功能。
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;