使用 IS NULL 和 IS NOT NULL 条件
如果指定的 column 包含 NULL 值,或如果指定的 expression 求值为 NULL,则 IS NULL 条件是满足的。
如果您使用 IS NOT NULL 谓词,则当 column 包含非 NULL 的值时,或当 expression 求值不为 NULL 时,该条件是满足的。下列示例选择尚未支付的订单的订单编号和客户编号:
SELECT order_num, customer_num FROM orders
WHERE paid_date IS NULL;
要获取 IS NULL 和 IS NOT NULL 运算符的完整描述,请参阅 IS NULL 和 IS NOT NULL 条件。
LIKE 或 MATCHES 条件
如果下列任一为真,即符合 LIKE 或 MATCHES 条件:
LIKE 或 MATCHES 关键字前面的列的值与加引号的字符串指定的模式相匹配。您可在字符串中使用通配符。
LIKE 或 MATCHES 关键字前面的列的值与由跟在 LIKE 或 MATCHES 关键字之后的列指定的模式相匹配。在条件中,右边的列值作为匹配模式。
在 LIKE 或 MATCHES 条件中指定的列可以为简单的字符数据类型(如 CHAR、LVARCHAR、NCHAR、NVARCHAR 或 VARCHAR)或数值型数据类型(如 INTEGER、SMALLINT、DECIMAL 或 NUMERIC(p,s)、FLOAT、SMALLFLOAT、BIGINT、INT8、BIGSERIAL、SERIAL、SERIAL8、MONEY )。
下列 SELECT 语句返回 customer 表中 VARCHAR 类型的 lname 列以文字字符串 ‘Baxter’ 开头的所有行。由于该字符串为文字字符串,因此该条件区分大小写。
SELECT * FROM customer WHERE lname LIKE ‘Baxter%’ ;
下列 SELECT 语句返回 SG_DEV_ACLINE 表中的 length 列包含数字 ‘261’ 的所有行。length 列是该表的一数值型字段
SELECT * FROM SG_DEV_ACLINE WHERE length LIKE ‘%261%’ ;
以下 SELECT 语句返回 customer 表中 lname 列的值与 fname 列的值相匹配的所有行:
SELECT * FROM customer WHERE lname LIKE fname;
下列示例使用反斜线(\)作为缺省的转义字符。通过 DEFAULTESCCHAR 配置参数或 DEFAULTESCCHAR 会话环境选项设置缺省的转义字符。
以下示例使用带有通配符的 LIKE 条件。第一条 SELECT 语句查找所有球类的库存商品。第二条 SELECT 语句查找所有包含百分号(%)的公司名称。反斜杠(\)用作百分号(%)通配符的缺省转义字符。第三条 SELECT 语句使用 ESCAPE 选项和 LIKE 条件从 customer 表中检索 company 列包含百分号(%)的行。z 用作百分号(%)的转义字符:
SELECT stock_num, manu_code FROM stock
WHERE description LIKE ‘%ball’;
SELECT * FROM customer WHERE company LIKE ‘%%%’;
SELECT * FROM customer WHERE company LIKE ‘%z%%’ ESCAPE ‘z’;
下列示例在 SELECT 语句中使用带有通配符的 MATCHES。第一条 SELECT 语句查找所有球类的库存商品。第二条 SELECT 语句查找所有包含星号()的公司名称。反斜杠(\)用作文字星号( )字符的缺省转义字符。第三条语句使用 ESCAPE 选项和 MACHES 条件从 customer 表中检索 company 列包含星号()的行。指定 z 字符作为星号()字符的转义字符。:
SELECT stock_num, manu_code FROM stock
WHERE description MATCHES ‘ball’;
SELECT * FROM customer WHERE company MATCHES '**’;
SELECT * FROM customer WHERE company MATCHES ‘z*’ ESCAPE ‘z’;
要获取关于 LIKE 或 MATCHES 表达式中支持的运算对象的数据类型的信息,请参阅主题 LIKE 和 MATCHES 条件。
IN 子查询
随同 IN 子查询,可返回多个满足 IN 或 NOT IN 条件的行,但仅可返回一列。
此示例展示在 SELECT 语句中 NOT IN 子查询的使用:
SELECT DISTINCT customer_num FROM orders
WHERE order_num NOT IN
(SELECT order_num FROM items
WHERE stock_num = 1);
要获取附加的信息,请参阅 IN 条件。
EXISTS 子查询
从 EXISTS 子查询,可返回那些在一个或多个列中的满足 EXISTS 条件的行。(类似地,NOT EXISTS 子查询可返回在一列或多列中满足 NOT EXISTS 条件的那些行。)
下列带有 NOT EXISTS 子查询的 SELECT 语句返回那些从未被订购的每项的库存编号和生产商代码(因而未罗列在 items 表中)。
在此 SELECT 语句中使用 NOT EXISTS 子查询是恰当的,因为您需要相关联的子查询来同时测试 items 表中的 stock_num 和 manu_code。
SELECT stock_num, manu_code FROM stock
WHERE NOT EXISTS
(SELECT stock_num, manu_code FROM items
WHERE stock.stock_num = items.stock_num AND
stock.manu_code = items.manu_code);
如果您在列名称的位置在子查询中使用 SELECT *,则前一示例同样奏效,因为您正在测试一行或多行是否存在。
要获取附加的信息,请参阅 EXISTS 子查询条件。
南大通用GBase8s 常用SQL语句(215)
最新推荐文章于 2022-09-19 14:12:55 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)