2017-09-13 369 views
2

我不太確定如何描述我所問的問題,因爲我不確定它是什麼。在SQL中查詢並在查詢時使用字母'a'

我是一名SQL初學者,只是在空閒時間學習。我一直在看w3schools和codeacademy課程,我第一次遇到這個問題。我不明白爲什麼我們在這兩種情況下都使用了字母a。我已經看過一些其他線索的建議,但他們使用類似的符號,但不同的字母。下面的代碼的照片。

w3 schools self join

code academy union all

可有人請解釋什麼是用字母A的得分也時/你會使用什麼情況下這一點。

乾杯

編輯:所以第一PIC是一個別名和第二個是一個子查詢。我對第二張圖片感興趣,因爲它不太瞭解子查詢。

編輯2:我一直在閱讀越來越多的提供鏈接的別名,但仍然沒有完全理解語法。這可能只是因爲它是一個自我加入,我迷惑自己。在第一張圖中,只有名爲「客戶」的表,那麼爲什麼會有「從客戶A,客戶B」? Database can be viewed here

+0

可能重複[何時使用SQL表別名](https://stackoverflow.com/questions/198196/when-to-use-sql-table-alias) – Phil

+0

這只是您的查詢成功運行時的別名結果推導爲「a」讀取下列文件[1。 W3學校](https://www.w3schools.com/sql/sql_alias.asp)[2。教程要點](https://www.tutorialspoint.com/sql/sql-alias-syntax.htm)[3。 Do factory](http://www.dofactory.com/sql/alias) – Jitendra

+0

謝謝你們,我找不到它,因爲我不知道它叫什麼。今天休息幾周後纔回到SQL,並且不記得別名課程。 – Han

回答

0

這些是表名的別名,並且提供了一種更簡潔地編寫SQL語句的方法,無需在查詢的其他部分再次輸入完整的表名。字母A在這些情況下是任意的。有時使用「t1」,「t2」等。其他時候,它是表名中的第一個字母或幾個字母。

但我不確定在第二個例子中使用「a」的原因。

+0

在情況2中,它只是強制性的。否則'錯誤1248(42000):每個派生表都必須有自己的別名。 –

+0

你能解釋爲什麼它是強制性的嗎?我真的不明白這個錯誤。爲什麼每個派生表都有自己的別名? – Han

1

在第一個例子,這就是所謂的表的別名,它的使用有幾個原因:

  1. 要在編寫查詢時節省時間。許多IDE(集成開發環境或代碼編輯器,如SSMS,SQL Developer)可讓您自動填充列名,並且在指定表別名時更容易,而不是整個表名(例如「a」而不是「顧客」)。即使沒有自動完成,鍵入a.CustomerName而不是Customers.CustomerName也更容易。
  2. 要多次查詢表時指定表所屬的列,這就是您的示例所使用的內容。這在執行自連接或檢查重複項時很常見。

在第二個示例中,這稱爲命名子查詢。這意味着括號內的部分被稱爲「a」,並且可以像查詢中的它自己的表或視圖那樣對待。

例如,而不是:

SELECT COUNT(*) FROM... 

你可以說:

SELECT COUNT(a.id) FROM ... 

這是因爲 「ID」,是從所謂的 「一個」 子查詢的列。

或者,如果你想獲得SALE_PRICE列的總和,而不是,你可以參考它,就好像它是一個所謂的「一」表中的列:

SELECT SUM(a.sale_price) FROM ... 
+0

因此,這兩個計數正確的行數?但是,爲什麼我們需要從第二個FROM中,當從已經在?我不確定我的問題是否有意義,但希望您可以進一步解釋。乾杯 – Han

+0

實際上,SELECT COUNT(*)的第一個例子計算子查詢中的行數。 SELECT SUM(a.sale_price)的第二個示例將查找所有sale_price值的SUM。因此,如果您有三個記錄,並且sale_price爲10,20和5,那麼COUNT將返回3,但SUM將返回35. 這是否回答您的問題? – bbrumm

+0

嗨bbrumm,是不是a.sale_price也計數在這種情況下? SELECT count(*)FROM(...)是否全是它?你能解釋一下嗎?謝謝,韓 – Han

0

這就是所謂的混疊在SQL中。我們使用別名,因爲我們不需要在將來編寫整個表名,我們可以只寫這個別名。例如,這裏的a表示用括號寫的查詢的輸出。每當我們想用這個結果,我們可以簡單的寫「一」,而不是在案件再次寫入整個查詢像我們需要加入這一結果與另一個表或在指定where子句等

0

在你第一個例子 ,這些字母用於別名表,以便您不必一次又一次地寫入表的全名。

在您的第二個示例中,爲子查詢提供了一個別名。將別名用於子查詢的唯一原因是這是語法在MySQL中的工作方式。如果將來,您需要將WHERE子句應用於該子查詢,則定義的別名將派上用場。

因此,在這種情況下,別名是多餘的,但需要添加以便遵循MySQL的語法。