2012-12-03 20 views
3

我是相當新的PHP/MySql和一般使用查詢。我只是想知道在查詢中使用「AS」還有什麼好處,而不是試圖讓它看起來更清潔?它會加快查詢嗎?我可能可以通過谷歌搜索找到這一點,但我想問我的第一個問題,看看它是如何工作的。從許多一對多的關係教程中,我發現作爲或不作爲,查詢

SELECT 
news.id 
news.name 
FROM news 

更復雜的例子:我會選擇一個答案(不像某些人......)

有:

SELECT 
news.id as id 
news.name as name 
FROM news 

無:

SELECT 
c.name, 
cf.title 
FROM celebrities AS c 
JOIN (
    SELECT 
    icf.c_id, 
    icf.f_id, 
    f.title 
    FROM int_cf AS icf 
    JOIN films AS f 
    ON icf.f_id = f.f_id 
) AS cf 
ON c.c_id = cf.c_id 
ORDER BY c.c_id ASC 
+0

多麼驚人的好這個作品!我馬上有了優秀的答案!這就像我生活在未來! – zeMinimalist

回答

4

沒有理由使用的可讀性如果你知道與其他欄目不會有衝突。性能沒有差異,但它確實改變了輸出列的名稱。這對於構建動態選擇時非常有用。因此,舉例來說,如果你有一個first_namelast_name場,你可以使用CONCAT函數來完成:

SELECT CONCAT(first_name, ' ', last_name) AS name FROM whatever 

此外,AS操作符定義子查詢表的時候,當你顯示在JOIN。如果沒有該AS,則無法在ON子句或SELECT字段中引用該表。

+0

我沒有想過用'CONCAT',這是一個很好的點... – zeMinimalist

+2

@zeMinimalis:這不是'CONCAT'具體而言,但任何表情 – zerkms

+1

對,我的意思是使用的時候我沒有想到的好處表現一般。 – zeMinimalist

3

1)不,這不會影響性能的一種方式或其他

2)至於SQL查詢的可讀性,它只是一個偏好的事

3),它會影響輸出(它改變了列標題)

2

僅限於歧義&保留字。它不會影響性能。歧義指的是來自不同表格的兩個具有相同名稱的列。其他關係型數據庫會爲你拍這個。保留字是指必須使用反引號或別名進行轉義的系統字。

使用子查詢時,別名列可能無法通過子級別派生。

+0

是什麼RDBMS的? – zeMinimalist

+1

** R ** ** elational ** d ** ATA **乙ASE ** M ** ** anagementš** ystems。 – Kermit

1

當您使用別名(「AS」關鍵字)和不使用它們時查詢執行的速度是相同的。使用它們的原因:

  • 它可以更容易地使用數據庫工作,如果你有很長的或複雜的表名或列名:
SELECT c.Construction_ID, c.Name, c.Price 
FROM Constructions c LEFT JOIN 
Constructions_Orders co ON c.Construction_ID = co.Construction_ID 
WHERE c.OrderID='1' AND c.Name='ConstructionName' 

然而,它改變輸出列名也考慮到它(使閱讀代碼的人更難)。

  • 別名是用於創建動態選擇有用:
mysql> SELECT CONCAT(id, name, work_date) as profile 
    -> FROM employee_tbl; 
+-----------------------------+ 
| profile      | 
+-----------------------------+ 
| 1John2007-01-24    | 
| 2Ram2007-05-27    | 
| 3Jack2007-05-06    | 
| 3Jack2007-04-06    | 
| 4Jill2007-04-06    | 
| 5Zara2007-06-06    | 
| 5Zara2007-02-06    | 
+-----------------------------+ 
7 rows in set (0.00 sec)