程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL循序漸進(20)Aliases 、In以及子查詢

SQL循序漸進(20)Aliases 、In以及子查詢

編輯:關於SqlServer

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表中返回的,那麼條件才為真。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved