2010-04-30 89 views
0

我已閱讀,之後選擇我們使用列的名字,但我發現,像這樣的語句:MySQL的列名和別名

SELECT 'A' FROM T WHERE A = NULL; 

你會租用幫助我嗎?謝謝(A是這裏的欄柱的名字嗎?)我 DBMS是MySQL的

編輯:確切的問題是這樣的認爲: 將上面的語句產生行(選擇所有 適用)?注意ANSI_NULLS是關閉的。

我想知道上述說明會起作用嗎?因爲有些人說我們應該寫IS NULL代替= NULL

+1

的數據庫(MySQL和MSSQL,甲骨文..)?問題到底是什麼? – Blorgbeard 2010-04-30 16:00:06

+0

如果您可以發佈您的數據庫模式以及您試圖通過查詢得到的結果將會很有幫助。 – 2010-04-30 16:00:57

+0

你想用這個聲明做什麼?目前看起來並不是很有用...... – Blorgbeard 2010-04-30 16:04:40

回答

8

此基礎上查詢,你會得到包含字符「A」的每一行,其中一個結果集名爲A的列等於空。

如果你真的想看到的A列,而不是字符「A」的價值,你必須刪除單引號:

SELECT A FROM T WHERE A IS NULL 

無論哪種方式,你不應該使用= NULL。某些RDMS不會按照您的想法處理。標準是使用IS NULL代替。

+0

感謝您的回答。 – user329820 2010-04-30 18:39:52

4

您應該使用

SELECT 'A' FROM T WHERE A IS NULL; 
+1

這是因爲SQL在使用'= null'時出現問題,並且在使用這種方式時會產生意想不到的結果。 'IS NULL'將正常工作。 – 2010-04-30 16:02:14

+9

@ rb.usa,它不是「臭名昭着的,因爲有= null的問題」,它是臭名昭着的開發人員不明白NULL不是一個價值,你不能使用它像一個。 – 2010-04-30 16:04:44

1

你的SELECT語句具有以下含義:

「對於稱爲T表的每一行,返回字符串‘A’,如果表T的列A爲NULL」

所以,如果你有3條記錄,其中A爲NULL,輸出將是:

A 
A 
A 
3 row(s) selected 

正確的語法是其中A爲NULL,而不是其中A = NULL。

1

您是否嘗試過在測試數據庫上運行它以查看它的作用?或者這只是在閱讀?

打破這種說法,是什麼說的是:

在表中T(FROM T),找到行,其中A的值爲null(其中A = NULL)。

對於每一行,返回'A'。

結果我希望是

+--+ 
|T | 
+--+ 
|A | 
|A | 
... 
|A | 
+--+ 

如果語句是不是:

SELECT A FROM T WHERE A = NULL; 

凡單引號去掉,它會返回一堆空值,列的值A.

1

A是一個列名,但是你可能不想在它周圍使用單引號。我試試...

SELECT A FROM T WHERE A IS NULL; 
+1

這取決於原始作者是想要A的值還是字面字符'A'。 – justkt 2010-04-30 16:02:16

+0

鑑於where子句,A的值將始終爲空。這是一個非常奇怪的查詢,總而言之。 – Blorgbeard 2010-04-30 16:10:38

2

在SQL中有三種類型的引號。

  • 單引號'意味着什麼是字符串文字。 'A'這意味着它返回ANULL的所有行的字符A
  • 雙引號"意味着某物是標識符。如果標識符與保留字具有相同的名稱,如select,這很有用。示例:SELECT "select" FROM T從表T中選擇列select
  • 反引用報價`只適用於MySQL,與雙引號相同。雙引號有時可用於MySQL中的字符串文字,儘管這與標準非常相似。 MySQL有一個選項來符合標準,使用SET SQL_MODE='ANSI';反引號變爲無效,而您需要使用單引號和雙引號。

不帶引號的標識符與帶雙引號的標識符相同,除非它是保留字。

希望這有助於理解更多。

2

在回答你的問題:

A = NULL永遠是假的,所以你會得到沒有行返回。要與NULL進行比較,您必須改用A is NULL

NULL在SQL中是特殊的,因爲它不等於任何東西,甚至本身。是的,(NULL = NULL)評估爲false。

如果將其更改爲IS NULL,那麼您將得到一列有一列的行,每行包含字符'A'。對於A列爲空的表T中的每一行,您將得到一個'A'。

您將得到字母A而不是列的值,因爲您對「A」有引號。如果你刪除它們,你會在每一行中得到A的值(這將是空的,因爲那些是你用where子句選擇的行)。

如果你想了解哪些T中有行對於A空值,那麼你應該將其更改爲select * from T where A is null