常见的谓词有5中:
- LIKE
- BETWEEN
- IS NULL、IS NOT NULL
- IN
- EXISTS
LIKE 谓词更加模糊一些,当需要进行字符串的部分一致查询时需要使用该谓词。像这样不使用“=”来指定条件字符串,而以字符串中是否包含该条件的规则为基础的查询称为模式匹配。
- LIKE 'ddd%' 使用LIKE进行前方一致查询
- LIKE '%ddd%' 使用LIKE进行中间一致查询
- LIKE '%ddd' 使用LIKE进行后方一致查询
SELECT *
FROM SampleLike
WHERE strcol LIKE '%ddd%';
_(下划线)它代表了“任意 1 个字符”。
LIKE 'abc_ _' 使用 LIKE 和_(下划线)进行后方一致查询
使用 BETWEEN 可以进行范围查询。
-- 选取销售单价为100~1000日元的商品
SELECT product_name, sale_price
FROM Product
WHERE sale_price BETWEEN 100 AND 1000;
注意:BETWEEN 的特点就是结果中会包含 100 和 1000 这两个临界值。如果不想让结果中包含临界值,那就必须使用 < 和 >
SELECT product_name, sale_price
FROM Product
WHERE sale_price > 100
AND sale_price < 1000;
与此相反,想要选取 NULL 以外的数据时,需要使用 IS NOT NULL。
通过OR指定多个进货单价进行查询
SELECT product_name, purchase_price
FROM Product
WHERE purchase_price = 320
OR purchase_price = 500
OR purchase_price = 5000;
随着希望选取的对象越来越多,SQL 语句也会越来越长,阅读起来也会越来越困难。
可以使用IN 谓词“IN( 值,……)”来替换上述 SQL 语句。
SELECT product_name, purchase_price
FROM Product
WHERE purchase_price IN (320, 500, 5000);
SELECT product_name, purchase_price
FROM Product
WHERE purchase_price NOT IN (320, 500, 5000);
IN 谓词(NOT IN 谓词)具有其他谓词所没有的用法,那就是可以使用子查询作为其参数
子查询就是 SQL内部生成的表,因此也可以说“能够将表作为 IN 的参数”。子查询是从内层开始执
行的。因此,该SELECT 语句也是从内层的子查询开始执行
SELECT product_name, sale_price
FROM Product
WHERE product_id IN (SELECT product_id
FROM ShopProduct
WHERE shop_id = '000C'
);
谓词的作用就是“判断是否存在满足某种条件的记录”。如果存在这样的记录就返回真(TRUE),如果不存在就返回假(FALSE)。EXIST(存在)谓词的主语是“记录”。
SELECT product_name, sale_price
FROM Product AS P ①
WHERE EXISTS (SELECT *
FROM ShopProduct AS SP ②
WHERE SP.shop_id = '000C'
AND SP.product_id = P.product_id
);
注意: