SQL 查询
SELECT columns
FROM TableA RIGHT OUTER JOIN
TableB
ON A.columnName = B.columnName
WHERE A.columnName IS NULL
返回以下内容:
(a( 表 B 中满足上述相等条件的所有行,表A中没有符合条件的行
(b( 表 A 中满足上述相等条件的所有行,表 B 中没有满足条件的行
(c( 表 B 中满足相等条件的所有行
(d( 表 A 中满足相等条件的所有行
答案应该是什么?
答案(b(和(d(是完全错误的。 查询不会从表 A 返回任何行。
如果在表 A 中找到任何匹配的行,则 WHERE 子句中的条件将排除这些行。(请注意,满足 ON 子句中相等比较的任何columnName
值都将是非 NULL,并且该值将不满足 WHERE 子句中的"IS NULL"条件。
答案(c(也是错误的。查询将返回表 B 中在表 A 中找不到匹配行的行。
最不错误的答案是(a(...但它仍然是错误的,因为单词的选择不能准确地传达集合的定义。
查询是一种反联接模式。
该查询定义在表 B 中找到的一组行,这些行在表 A 中没有匹配的行。
指定该集合的另一种方法是使用带有相关子查询的 NOT EXISTS 条件:
SELECT b.*
FROM tableB b
WHERE NOT EXISTS
( SELECT 1
FROM tableA a
WHERE a.columnName = b.columnName )
所有显示的选项都是错误的。答案是:
e( 表 B 中"列名称"值在表 A 中不存在的所有行。
例:
create table a (col int);
create table b (col int);
insert into a (col) values (null), (1), (2);
insert into b (col) values (null), (1), (3);
select a.col as a_col, b.col as b_col
from a
right outer join b on a.col = b.col
where a.col is null
结果:
a_col b_col
------ ------
<null> <null>
<null> 3