Aliases 、In以及子查詢
在本節教程中,我們將要介紹Aliases、 In以及子查詢的用法。首先我們看一下一個查詢語句,它搜索所有已經定貨的顧客的LastName以及他們定什麼貨,語句如下:
SELECT OWN.OWNERLASTNAME Last Name, ORD.ITEMDESIRED Item Ordered
FROM ORDERS ORD, ANTIQUEOWNERS OWN
WHERE ORD.OWNERID = OWN.OWNERID
AND ORD.ITEMDESIRED IN
(SELECT ITEM
FROM ANTIQUES);
這條查詢語句的結果為:
Last Name Item Ordered
--------- ------------
Smith Table
Smith Desk
Akins Chair
Lawson Mirror
下面好好解釋一下上面的這條語句:
"Last Name" 和"Item Ordered"給出了報告的數據頭。
OWN & ORD是aliases(別名),它們使用在FROM子句中,可在它們的後面加一個點號再加列名就可以進行查詢了。這樣做就避免了模稜兩可的情況,特別是在equijoin WHERE子句中當兩個列都名為OwenerID的時候,而點號就通知SQL我們使用是兩個不同表的不同OwnerID。
這裡要注意,在FROM子句中Orders表被首先列出,並且確保AntiqueOwners表只用於詳細的信息(Last Name)。更為重要的,在WHERE子句中的AND強迫In子查詢被調用("= ANY" or "= SOME" 都等價於使用IN)。但這到底做了些什麼呢?當這個子查詢完成了,它就返回Antiques表的所有Items因為這裡沒有WHERE子句。然後,對於從Orders表列出的行,ItemDesired必須在從Antiques表中返回的Items列表中,然後在定貨可以有另外的擁有者填寫的情況下列出一個item。你可以想想這個方法:子查詢從Orders 表中的每一個ItemDesired被比較中返回一系列的Items;如果ItemDesired是在從Antiques表中返回的,那麼條件才為真。