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
- SQL的基礎查詢案例SQL
- Sql介紹 與 Sql基礎查詢SQL
- SQL語言基礎(資料控制語言)SQL
- SQL語言基礎(SELECT語句)SQL
- SQL語言基礎(函式)SQL函式
- MySQL資料庫基礎——多表查詢:子查詢MySql資料庫
- Django:查詢基礎語法Django
- SQL查詢的:子查詢和多表查詢SQL
- 什麼是SQL 語句中相關子查詢與非相關子查詢SQL
- SQL語言基礎(多表連線)SQL
- SQL-基礎語法 - 條件查詢 - 邏輯運算SQL
- MySQL學習(三) SQL基礎查詢MySql
- ElasticSearch基礎及查詢語法Elasticsearch
- SQL(Structured Query Language,結構化查詢語言)SQLStruct
- 關係型資料庫查詢語言 SQL 和圖資料庫查詢語言 nGQL 對比資料庫SQL
- sql查詢語句流程SQL
- SQL mother查詢語句SQL
- SQL查詢語句 (Oracle)SQLOracle
- Mysql常用sql語句(20)- 子查詢重點知識MySql
- Mysql基礎+select5種子句 + 子查詢MySql
- 01 | 基礎架構:一條SQL查詢語句是如何執行的?架構SQL
- prometheus之查詢語言Prometheus
- Kibana查詢語言(KQL)
- sql-server不相關子查詢SQLServer
- sql-server相關子查詢SQLServer
- 【學習】SQL基礎-006-多表連線查詢SQL
- Laravel 子查詢語句用法Laravel
- MySQL — 資料查詢語言MySql
- PostgreSQL 原始碼解讀(17)- 查詢語句#2(查詢優化基礎)SQL原始碼優化
- ORACLE_OCP之SQL_子查詢OracleSQL
- SQL語言_多表查詢和TOP限制結果集_PAGE3SQL