我已经读过,在select之后我们使用了列名,但我发现了一个类似这样的语句:
SELECT 'A' FROM T WHERE A = NULL;
你会租用帮帮我吗?谢谢(这是一个列名吗?)
我的DBMS是MySQL
已编辑:具体问题是: 上面的语句会产生一行(选择所有这些 应用)?请注意,ANSI_NULLS为OFF。
我想知道上述说法是否有效?因为有些人说我们应该写IS NULL而不是= null
答案 0 :(得分:8)
根据该查询,您将得到一个结果集,其中包含名为A的列等于null的每一行的字符“A”。
如果您确实想要查看列A的值而不是字符“A”,则必须删除单引号:
SELECT A FROM T WHERE A IS NULL
无论哪种方式,都不应使用= NULL
。某些RDMS不能按照您的想法处理。标准是改为使用IS NULL
。
答案 1 :(得分:4)
你应该使用
SELECT 'A' FROM T WHERE A IS NULL;
答案 2 :(得分:2)
SQL中有三种类型的引号。
'
表示某些内容是字符串文字。此实例中的'A'
表示它会为列 A
为A
的所有行返回字符NULL
。"
表示某物是标识符。如果标识符与保留字具有相同的名称(例如select
),则此选项非常有用。示例:SELECT "select" FROM T
从表select
中选择列T
。`
仅适用于MySQL,与双引号相同。双引号有时可用于MySQL中的字符串文字,尽管这与标准非常相反。 MySQL有一个符合标准的选项,使用SET SQL_MODE='ANSI';
,其中反引号变为无效,你需要使用单引号和双引号。没有引号的标识符与带双引号的标识符相同,除非它是保留字。
希望这有助于理解更多内容。
答案 3 :(得分:2)
回答你的问题:
A = NULL
始终为false,因此您不会返回任何行。要与NULL进行比较,您必须改为使用A is NULL
。
NULL
在SQL中很特殊,因为它不等于任何东西,甚至本身。是的,(NULL = NULL)
评估为假。
如果您将其更改为IS NULL
,那么您将获得一组包含一列的行,每行包含字符“A”。对于表中的每一行,您将获得一个'A',其中A列为空。
您将获得字母A而不是列的值,因为您在“A”周围有引号。如果删除它们,您将在每一行中获得A的值(它将为null,因为这些是您使用where子句选择的行)。
如果您想查看T中哪些行的A值为空值,则应将其更改为select * from T where A is null
答案 4 :(得分:1)
您的SELECT语句具有以下含义:
“对于名为T的表的每一行,如果表T的列A为NULL,则返回字符串'A'”
因此,如果您有3条记录,其中A为NULL,则输出为:
A
A
A
3 row(s) selected
正确的语法是WHERE A IS NULL,而不是WHERE A = NULL。
答案 5 :(得分:1)
您是否尝试在测试数据库上运行它以查看它的作用?或者这只是在阅读?
打破这种说法,说的是:
在表T(FROM T)中,找到A的值为空的行(WHERE A = NULL)。
对于每一行,返回“A”。
我期望的结果是
+--+
|T |
+--+
|A |
|A |
...
|A |
+--+
如果声明是:
SELECT A FROM T WHERE A = NULL;
如果删除了单引号,它将返回一堆空值,即A列的值。
答案 6 :(得分:1)
A是列名,但您可能不希望使用单引号。我试试......
SELECT A FROM T WHERE A IS NULL;