SQL語言基礎(子查詢)
子查詢語法:
SELECT select_list FROM table WHERE expr operator (SELECT select_list FROM table);
子查詢又稱內部查詢,而包含子查詢的語句稱之外部查詢(又稱主查詢)。
所有的子查詢可以分為兩類,即相關子查詢和非相關子查詢
1> 非相關子查詢是獨立於外部查詢的子查詢,子查詢總共執行一次,執行完畢後
將值傳遞給外部查詢。值傳遞給外部查詢。
2> 相關子查詢的執行依賴於外部查詢的資料,外部查詢執行一行,子查詢就執
行一次。
1-1 單行子查詢
只返回一行。
使用單行比較運算子。
SELECT last_name, job_id, salary FROM employees WHERE job_id = (SELECT job_id FROM employees WHERE employee_id = 141) AND salary > (SELECT salary FROM employees WHERE employee_id = 143);
在子查詢中使用組函式
SELECT last_name, job_id, salary FROM employees WHERE salary = (SELECT MIN(salary) FROM employees);
1-2 多行子查詢
返回多行。
使用多行比較運算子
使用 ANY 運算子
SELECT employee_id, last_name, job_id, salary FROM employees WHERE salary < ANY (SELECT salary FROM employees WHERE job_id = 'IT_PROG') AND job_id <> 'IT_PROG';
使用 ALL 運算子
SELECT employee_id, last_name, job_id, salary FROM employees WHERE salary < ALL (SELECT salary FROM employees WHERE job_id = 'IT_PROG') AND job_id <> 'IT_PROG';
1-3 使用 EXISTS 運算子
EXISTS 運算子檢查在子查詢中是否存在滿足條件的行
如果在子查詢中存在滿足條件的行:
不在子查詢中繼續查詢
條件返回 TRUE
如果在子查詢中不存在滿足條件的行:
條件返回 FALSE
繼續在子查詢中查詢
SELECT employee_id, last_name, job_id, department_id FROM employees outer WHERE EXISTS ( SELECT 'X' FROM employees WHERE manager_id = outer.employee_id);
SELECT department_id, department_name FROM departments d WHERE NOT EXISTS (SELECT 'X' FROM employees WHERE department_id = d.department_id);
1-4 多列子查詢
成對比較:
SELECT employee_id, manager_id, department_id FROM employees WHERE (manager_id, department_id) IN (SELECT manager_id, department_id FROM employees WHERE employee_id IN (178,174)) AND employee_id NOT IN (178,174);
不成對比較:
SELECT employee_id, manager_id, department_id FROM employees WHERE manager_id IN (SELECT manager_id FROM employees WHERE employee_id IN (174,141)) AND department_id IN (SELECT department_id FROM employees WHERE employee_id IN (174,141)) AND employee_id NOT IN(174,141);
1-5 單列子查詢表示式
單列子查詢表示式是在一行中只返回一列的子查詢,可應用於以下子句
SELECT 語句 (FROM 和 WHERE 子句)
INSERT 語句中的VALUES 列表中
DECODE 和 CASE
SELECT 中除 GROUP BY 子句以外的所有子句中
------------------------------------------------------------------------------------------
在 CASE 表示式中使用單列子查詢:
SELECT employee_id, last_name, (CASE WHEN department_id = THEN 'Canada' ELSE 'USA' END) location FROM employees;
在 ORDER BY 子句中使用單列子查詢
SELECT employee_id, last_name FROM employees e ORDER BY (SELECT department_name FROM departments d WHERE e.department_id = d.department_id);
在 FROM 子句中使用子查詢
SELECT a.last_name, a.salary, a.department_id, b.salavg FROM employees a, (SELECT department_id, AVG(salary) salavg FROM employees GROUP BY department_id) b WHERE a.department_id = b.department_id AND a.salary > b.salavg;
1-6 WITH 子句
使用 WITH 子句, 可以避免在 SELECT 語句中重複書寫相同的語句塊
WITH 子句將該子句中的語句塊執行一次 並儲存到使用者的臨時表空間中
使用 WITH 子句可以提高查詢效率
WITH dept_costs AS ( SELECT d.department_name, SUM(e.salary) AS dept_total FROM employees e, departments d WHERE e.department_id = d.department_id GROUP BY d.department_name), avg_cost AS ( SELECT SUM(dept_total)/COUNT(*) AS dept_avg FROM dept_costs) SELECT * FROM dept_costs WHERE dept_total > (SELECT dept_avg FROM avg_cost) ORDER BY department_name;
使用WITH AS 語句可以為一個子查詢語句塊定義一個名稱,使用這個子查詢名稱可以在查詢語句的很多地方引用這個子查詢。Oracle 資料庫像對待內聯檢視或臨時表一樣對待被引用的子查詢名稱,從而起到一定的最佳化作用
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70021989/viewspace-2924168/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL語言基礎(高階查詢)SQL
- 【學習】SQL基礎-007-子查詢SQL
- SQL基礎的查詢語句烈鉍SQL
- SQL語言(結構化查詢語言)SQL
- sql語法相關子查詢與非相關子查詢SQL
- SQL語言基礎(資料控制語言)SQL
- SQL的基礎查詢案例SQL
- MySQL資料庫基礎——多表查詢:子查詢MySql資料庫
- Sql介紹 與 Sql基礎查詢SQL
- sql子查詢SQL
- MySQL基礎查詢語句MySql
- Django:查詢基礎語法Django
- SQL語言基礎(函式)SQL函式
- Oracle PL/SQL語言基礎OracleSQL
- MSSQL基礎教程:使用SQL子選擇來合併查詢SQL
- SQL查詢語言基本教程(2) (轉)SQL
- SQL查詢語言基本教程(3) (轉)SQL
- 15個初學者必看的基礎SQL查詢語句SQL
- SQL語言基礎(SELECT語句)SQL
- 【Microsoft SQL Server 2008 技術內幕:T-SQL語言基礎】二、查詢篇ROSSQLServer
- 什麼是SQL 語句中相關子查詢與非相關子查詢SQL
- T-SQL進階:超越基礎 Level 2:編寫子查詢SQL
- SQL Server調優系列基礎篇(子查詢運算總結)SQLServer
- SQL查詢的:子查詢和多表查詢SQL
- ElasticSearch基礎及查詢語法Elasticsearch
- SQL--子查詢SQL
- SQL語言基礎(多表連線)SQL
- Oracle PL/SQL語言基礎(轉)OracleSQL
- MySQL學習(三) SQL基礎查詢MySql
- Sql Server系列:子查詢SQLServer
- SQL(Structured Query Language,結構化查詢語言)SQLStruct
- 關係型資料庫查詢語言 SQL 和圖資料庫查詢語言 nGQL 對比資料庫SQL
- sql遞迴查詢子級SQL遞迴
- prometheus之查詢語言Prometheus
- C語言折半查詢C語言
- Mysql基礎+select5種子句 + 子查詢MySql
- Mysql常用sql語句(20)- 子查詢重點知識MySql
- 01 | 基礎架構:一條SQL查詢語句是如何執行的?架構SQL