解释这些选择陈述!

时间:2010-04-30 16:22:32

标签: sql mysql database

我无法区分这些陈述吗?你能不能帮助我,我已经阅读了一些精选陈述的样本,但我没有得到这些陈述。

SELECT 'B' FROM T WHERE A = (SELECT NULL);
SELECT 'C' FROM T WHERE A = ANY (SELECT NULL);    
SELECT 'D' FROM T WHERE A = A;

我使用MySQL

已编辑:它还有一个条件部分:SET ANSI_NULLS为OFF

1 个答案:

答案 0 :(得分:3)

ANSI_NULL ON

SELECT 'B' FROM T WHERE A = (SELECT NULL);

与:

相同
SELECT 'B' FROM T WHERE A = NULL;

总是返回一个空集,因为与NULL比较的任何东西都返回NULL,而不是TRUE。你可以试试这个:

SELECT 'B' FROM T WHERE A IS NULL;

第二个查询基本相同,将返回一个空集:

SELECT 'C' FROM T WHERE A = ANY (SELECT NULL);

如果A有值,则以下将返回所有行:

SELECT 'D' FROM T WHERE A = A;

除非,如果A IS为NULL,它将返回一个空集。

ANSI_NULL OFF

SELECT 'B' FROM T WHERE A = (SELECT NULL);

与:

相同
SELECT 'B' FROM T WHERE A = NULL;

返回A IS为NULL的所有行。

第二个查询基本相同,并返回A IS为NULL的行:

SELECT 'C' FROM T WHERE A = ANY (SELECT NULL);

以下将始终返回所有行,无论A IS是否为空:

SELECT 'D' FROM T WHERE A = A;