天天看點

Transact-SQL學習筆記14——獨立子查詢

作者:包家三少

獨立子查詢

每個子查詢都有它所屬于的外部查詢。

獨立子查詢是獨立于其外部查詢的子查詢,可以選中子查詢部分的代碼獨立運作。

在邏輯處理過程中,子查詢的位置決定了他被執行的順序

SELECT a.employee_name, b.salary_type ,

(b.salary-(SELECT AVG(salary) FROM salary where salary_type ='崗位工資')) AS '差距'

FROM employee a

INNER JOIN salary b

ON a.employee_id = b.employee_id

WHERE b.salary_type ='崗位工資'

Transact-SQL學習筆記14——獨立子查詢
SELECT AVG(salary) FROM salary where salary_type ='崗位工資'

上述語句是獨立子查詢,可以獨立運作且不依賴外部查詢的傳回的結果

獨立标量子查詢

标量子查詢是傳回單個值的子查詢

SELECT a.employee_name, SUM(b.salary)

FROM employee a

INNER JOIN salary b

ON a.employee_id = b.employee_id

WHERE b.salary_type ='崗位工資' and

b.salary <(SELECT AVG(salary) FROM salary where salary_type ='崗位工資')

group by a.employee_name

Transact-SQL學習筆記14——獨立子查詢

獨立多值子查詢

執行下列語句,更新試驗環境

ALTER TABLE employee

ADD age int

GO

UPDATE employee SET AGE = 26 WHERE employee_id =1

UPDATE employee SET AGE = 33 WHERE employee_id =2

UPDATE employee SET AGE = 45 WHERE employee_id =3

UPDATE employee SET AGE = 67 WHERE employee_id =4

UPDATE employee SET AGE = 54 WHERE employee_id =5

UPDATE employee SET AGE = 18 WHERE employee_id =6

SELECT * FROM employee

where age > (SELECT age FROM employee where age>30)

如果使用單值比較運算符和子查詢進行比較,子查詢如果傳回多個值或多個列會報錯

Transact-SQL學習筆記14——獨立子查詢

可以使用IN、EXISTS、 ALL、ANY或SOME關鍵字,其中SOME是和ANY等效的ISO标準。

  • ALL要求比較時要滿足子查詢得到的每個值
  • ANY要求比較時至少要滿足子查詢得到的任一值
Transact-SQL學習筆記14——獨立子查詢
SELECT age FROM employee where age>30

執行上述語句結果

Transact-SQL學習筆記14——獨立子查詢

SELECT * FROM employee

where age > ANY(SELECT age FROM employee where age>30)

上述語句ANY 隻要大于 子查詢中任一一個年齡的員工資訊都會顯示(大于33歲)

Transact-SQL學習筆記14——獨立子查詢

SELECT * FROM employee

where age >= ALL(SELECT age FROM employee where age>30)

上述語句ALL 隻要大于或等于 子查詢中所有年齡的員工資訊都會顯示(大于67歲)

Transact-SQL學習筆記14——獨立子查詢

當子查詢中包含 NULL 時,使用ALL、ANY 時不傳回任何值,因為ALL和ANY 實際上等價于使用了 AND 或者OR連接配接了條件,與NULL 進行比較的本質并沒有改變。

學習參考資料:《跟韓老師學 SQL Server 資料庫設計與開發》

繼續閱讀