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表中返回的,那么條件才為真。
新聞熱點
疑難解答