程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> T-SQL查詢進階:深入理解子查詢

T-SQL查詢進階:深入理解子查詢

編輯:關於SqlServer

引言

SQL有著非常強大且靈活的查詢方式,而多表連接操作往往也可以用子查詢進行替代,本篇文章將會講述子查詢的方方面面。

簡介

子查詢本質上是嵌套進其他SELECT,UPDATE,INSERT,DELETE語句的一個被限制的SELECT語句,在子查詢中,只有下面幾個子句可以使用

SELECT子句(必須)

FROM子句(必選)

WHERE子句(可選)

GROUP BY(可選)

HAVING(可選)

ORDER BY(只有在TOP關鍵字被使用時才可用)

子查詢也可以嵌套在其他子查詢中,這個嵌套最多可達32層。子查詢也叫內部查詢(Inner query)或者內部選擇(Inner Select),而包含子查詢的查詢語句也叫做外部查詢(Outter)或者外部選擇(Outer Select),子查詢的概念可以簡單用下圖闡述:

上圖是作為數據源使用的一個子查詢.

通常來講,子查詢按照子查詢所返回數據的類型,可以分為三種,分別為:

返回一張數據表(Table)

返回一列值(Column)

返回單個值(Scalar)

下面,我們按照這三種方式來闡述子查詢

子查詢作為數據源使用

當子查詢在外部查詢的FROM子句之後使用時,子查詢被當作一個數據源使用,即使這時子查詢只返回一個單一值(Scalar)或是一列值(Column),在這裡依然可以看作一個特殊的數據源,即一個二維數據表(Table).作為數據源使用的子查詢很像一個View(視圖),只是這個子查詢只是臨時存在,並不包含在數據庫中。

比如這個語句:

SELECT     P.ProductID, P.Name, P.ProductNumber, M.Name AS ProductModelName
FROM         Production.Product AS P INNERJOIN
(SELECT     Name, ProductModelID
 FROM          Production.ProductModel) AS M 
ON P.ProductModelID = M.ProductModelID

上述子查詢語句將ProductModel表中的子集M,作為數據源(表)和Product表進行內連接。結果如下:

2

作為數據源使用也是子查詢最簡單的應用。當然,當子查詢作為數據源使用時,也分為相關子查詢和無關子查詢,這會在文章後面介紹到.

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