谓词:函数中的一种,就是返回值为真值(TRUE/ FALSE/UNKNOWN)的函数。
=、<、>、<> 等比较运算符,其正式的名称就是比较谓词。
● LIKE :字符串的部分一致查询
模式匹配:像这样不使用“=”来指定条件字符串,而以字符串中是否包含该条件(本例中是“包含 ddd”)的规则为基础的查询,其中的模式也就是前面提到的“规则”。
● BETWEEN:范围查询
特点:结果中会包含临界值
● IS NULL、IS NOT NULL :判断是否为NULL
● IN:OR的简便用法,“IN( 值,……)”
-- 通过IN来指定多个进货单价进行查询
SELECT product_name, purchase_price
FROM Product
WHERE purchase_price IN (320, 500, 5000);
注:
1、无法选取出 NULL 数据
2、可以使用子查询作为其参数,子查询是从内层开始执行的
● EXISTS,只有 1 个参数,该参数通常是一个关联子查询
谓词的作用就是“判断是否存在满足某种条件的记录”。 如果存在这样的记录就返回真(TRUE),如果不存在就返回假(FALSE)。 EXIST(存在)谓词的主语是“记录”。
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);
EXIST 只会判断是否存在满足子查询中 WHERE 子句指定的条件“商店编号(shop_id)为 '000C',商品(Product)表和商店商品(ShopProduct)表中商品编号(product_id)相同”的记录, 只有存在这样的记录时才返回真(TRUE)
通过条件“SP. product_id = P.product_id”将 Product 表和 ShopProduct 表进行了联接
- 子查询中的SELECT *
可以把在 EXIST 的子查询中书写 SELECT * 当作 SQL 的一 种习惯。
- IN
等价改写:将IN改写成EXISTS(性能优化)严格来说两者并不相同
但NOT IN 和 NOT EXISTS不等价(结合进阶教程)