子查詢(subquery)介紹

何謂子查詢
  • SELECT語句除了可以進行一般查詢外,還可以把查詢的結果再交給別的指令句,這樣稱為subquery,子查詢可以使SQL更進階的複雜查詢,雖然複雜但很方便,可以跨越多個表格進行查詢
子查詢可以用在哪些地方
  • WHERE子句
  • HAVING子句
  • INSERT句
  • FROM語句
  • CREATE TABLE句
  • CREATE VIEW句(CREATE MATERIALIZED VIEW句)
  • UPDATE句
  • DELETE句
子查詢所使用的操作符介紹
  • 單列子查詢
子查詢傳回的單一結果只能使用這些操作符(=,<,<=,>,>=,<>,!=),若子查詢的結果為多行,則會錯誤
  • 多列子查詢
子查詢回傳多列結果可使用這些操作符(IN,ALL,ANY),(IN,ALL,ANY)也可以搭配單列子查詢的操作符
使用在WHERE子句
查詢dept_id為50的員工姓名
select last_name from emp
where dept_id=(select deptid from dept where dept_id=50) 
 使用在HAVING子句
查詢哪個部門編號的總薪水大於部門編號10的總薪水
select dept_id,sum(salary) from emp
group by dept_id
having sum(salary)>(select sum(salary) from emp where dept_id=10);
使用在INSERT句
新增所有employees表格資料到emp表格裡
insert into emp select * from employees;
使用在FROM語句
查詢誰的薪水等於24000
select last_name from (select last_name from emp where salary=24000);
使用在CREATE TABLE語句
 創建emp表格,並新增employees所有資料到emp表格
 create table emp as select * from employees;
 使用在CREATE VIEW語句和CREATE MATERIALIZED VIEW語句
創建vw_emp檢視,並檢索emp表格所有資料
create view vw_emp as select * from emp;
創建vw_emp實體檢視,新增emp表格所有資料 
create materialized view vw_emp as select * from emp;
使用在UPDATE句
employee_id為100的薪水,修改為所有員工的總薪水
update emp set salary=(select sum(salary) from emp) where employee_id=100;
使用在DELETE句
刪除所有emp表格裡的資料
delete from (select * from emp);