一、模糊查询–LIKE
当需要进行字符串 的部分一致 查询时,需要使用该谓词,部分一致大体可以分为前方一致、中间一致和后方一致三种类型。
预备知识:
-
%
是代表“0个字符及其以上的任意字符串”的特殊符号 -
_
(下划线)代表了“任意1个字符”,可以几个下划线一起用
# 首先准备一系列测试用的字符串,模糊查询的字符串为'ddd'
strcol:abcddd、dddabc、abdddc、abcdd、ddabc、abddc
- 前方一致:查找开头为ddd的字符串
SELECT * FROM SampleLike WHERE strcol LIKE 'ddd%';
结果:dddabc
- 中间一致:查找字符串中带有ddd的字符串
SELECT * FROM SampleLike WHERE strcol LIKE '%ddd%';
结果:abcddd、dddabc、abdddc
- 后方一致:查找结尾为ddd的字符串
SELECT * FROM SampleLike WHERE strcol LIKE '%ddd';
结果:abcddd
- 查询固定字符个数
# 选取出strcol列的值为“abc+任意2个字符”需要使用_
SELECT * FROM SampleLike WHERE strcol LIKE 'abc__';
结果:abcdd
二、范围查询–BETWEEN
使用BETWEEN可以进行范围查询
SELECT product_name, sale_price FROM Product
WHERE sale_price BETWEEN 100 AND 1000;
查询结果:
BETWEEN 的特点就是结果中会包含 100 和 1000 这两个临界值。
三、IS NULL、IS NOT NULL——判断是否为NULL
SELECT product_name, sale_price FROM Product
WHERE purchase_price IS NULL;
SELECT product_name, sale_price FROM Product
WHERE purchase_price IS NOT NULL;
四、OR的简便用法——IN
如何选取出进货单价(purchase_price)为320元、500元、5000元的商品
# 第一种做法是使用or
SELECT product_name,purchase_price FROM Product
WHERE purchase_price = 320 OR purchase_price = 500
OR purchase_price = 5000;
# 使用IN替代or 简化代码
SELECT product_name,purchase_price FROM Product
WHERE purchase_price IN (320, 500, 5000);
反之,希望选取出“进货单价不是320元、500元、5000元”的商品时,可以使用否定形式NOT IN来实现。
SELECT product_name,purchase_price FROM Product
WHERE purchase_price NOT IN (320, 500, 5000);
注意: IN和NOT IN时是无法选取出NULL数据的。
五、使用子查询作为IN谓词的参数
IN谓词(NOTIN谓词)具有其他谓词所没有的用法,那就是可以使用其他表(子查询,视图等)作为其参数。
SELECT product_name, sale_price FROM Product
WHERE product_id IN (SELECT product_id FROM ShopProduct
WHERE shop_id = '000C');
注: 此时子查询或视图只能有单列