遵循 SQL 查询的结果是什么?



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

相关内容