MySQL学习之谓词

谓词就是的函数中的一种,是需要满足特定条件的函数,该条件就是 返回值是真值 。对通常的函数来说,返回值有可能是数字、字符串或者日期等,但是谓词的返回值全都是真值(TRUE/
FALSE/UNKNOWN )。这也是谓词和函数的最大区别。

常见的谓词有5中: 

  • LIKE
  • BETWEEN
  • IS NULLIS NOT NULL
  • IN
  • EXISTS

1、LIKE谓词——字符串的部分一致查询 

  LIKE 谓词更加模糊一些,当需要进行字符串的部分一致查询时需要使用该谓词。像这样不使用“=”来指定条件字符串,而以字符串中是否包含该条件的规则为基础的查询称为模式匹配。

查询条件中经常用通配符%,% 是代表” 0 字符以上的任意字符串”的特殊符号
  •  LIKE 'ddd%' 使用LIKE进行前方一致查询
  • LIKE '%ddd%' 使用LIKE进行中间一致查询
  • LIKE '%ddd' 使用LIKE进行后方一致查询
SELECT *
 FROM SampleLike
 WHERE strcol LIKE '%ddd%';

 _(下划线)它代表了“任意 1 个字符”。

LIKE 'abc_ _' 使用 LIKE 和_(下划线)进行后方一致查询

2、BETWEEN谓词——范围查询

      使用 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;

 3、IS NULLIS NOT NULL——判断是否为NULL

        为了选取出某些值为 NULL 的列的数据,不能使用 = 号, 而只能使用特 定的谓词 IS NULL。

 与此相反,想要选取 NULL 以外的数据时,需要使用 IS NOT NULL。

4、IN谓词——OR的简便用法

        通过OR指定多个进货单价进行查询

SELECT product_name, purchase_price
 FROM Product
 WHERE purchase_price = 320
 OR purchase_price = 500
 OR purchase_price = 5000;

随着希望选取的对象越来越多,SQL 语句也会越来越长,阅读起来也会越来越困难。

可以使用IN 谓词“IN( 值,……)”来替换上述 SQL 语句。

使用 NOT IN 进行查询时指定多个排除的进货单价进行查询。
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 时是无法选取出 NULL 数据的。 

 5、使用子查询作为IN谓词的参数

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'
                    );

 6、EXIST谓词

   谓词的作用就是“判断是否存在满足某种条件的记录”。如果存在这样的记录就返回真(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
);

 注意:

  1. EXIST 的左侧并没有任何参数。很奇妙吧?这是因为 EXIST 是只有 1 个参数的谓词。EXIST 只需要在右侧书写 1 个参数,该参数通常都会是一个子查询。
  2. 通常指定关联子查询作为EXIST的参数。
由于 EXIST 只关心记录是否存在,因此返回哪些列都没有关系。EXIST 只会判断是否存在满足子查询中 WHERE 子句指定的条件。
作为 EXIST 参数的子查询中经常会使用 SELECT *
就像 EXIST 可以用来替换 IN 一样, NOT IN 也可以用 NOT EXIST 来替换。 NOT EXIST EXIST 相反,当“不存在”满足子查询中指定条件 的记录时返回真( TRUE)

你可能感兴趣的:(数据库,mysql,sql)