從這一篇開始要總結子查詢了,什么是子查詢呢?子查詢就是將內部查詢的結果供外部查詢使用,內部查詢可以取代基于常量或變量的表達式,并在運行時進行計算。通過使用子查詢,可以避免在查詢解決方案中把操作分成多個步驟,并在變量中保存中間查詢結果的需要。
子查詢可以分為獨立子查詢和相關子查詢,那么這一篇我們總結的就是獨立子查詢,我想分為以下幾個方面進行總結。
1,獨立標量子查詢
2,獨立多值子查詢
獨立標量子查詢獨立標量子查詢就是返回單個值的子查詢,標量子查詢可以出現在外部查詢中期望使用單個值的任何地方,包括WHERE,SELECT,等等。
下面是一個例子,假設現在要查詢Orders表,返回表中訂單ID最大的訂單信息。
SQL查詢代碼:
USE TSQLFundamentals2008;GO-- 獨立標題子查詢SELECT orderid,orderdate,empid,custid FROM Sales.OrdersWHERE orderid= (SELECT MAX(orderid) FROM Sales.Orders);
查詢結果:
這里,有一個需要注意的地方,就是對于有效的標量子查詢,它的返回值不能超過一個(也可以沒有)。如果標量子查詢返回了多個值,在運行時就會失敗。如下面的例子,嘗試用這條查詢語句來查找姓氏以字母D開頭的職員的訂單。
SQL查詢代碼:
SELECT orderid FROM Sales.OrdersWHERE empid=(SELECT employees.empid FROM HR.Employees AS employees WHERE employees.lastname LIKE N'D%');
查詢結果:
多值子查詢就是在一個列中返回多個值的子查詢。多值子查詢通常與謂詞IN一起使用,例如,就像上面的那個例子,使用多值子查詢來寫如下查詢代碼。
SQL查詢代碼:
-- 獨立多值子查詢SELECT orderid,empid FROM Sales.OrdersWHERE empid IN (SELECT employees.empid FROM HR.Employees AS employees WHERE employees.lastname LIKE N'D%');
查詢結果:
注意,使用子查詢完成的任務,很多時候也可以使用聯接來解決。比如,上面的例子使用聯接來實現的話。
SQL查詢代碼:
-- 使用聯接查詢實現SELECT orders.orderid,employees.empid FROM HR.Employees AS employeesLEFT JOIN Sales.Orders AS orders ON employees.empid = orders.empidWHERE employees.lastname LIKE N'D%';
查詢結果同使用子查詢。
所以,到底是使用子查詢還是聯接查詢,這個要看具體需求。
新聞熱點
疑難解答