一、相关子查询
相关子查询按照一行接一行的顺序执行,主查询的每一行都执行一次子查询。
例:若 employees 表中 employee_id 与 job_history 表中 employee_id 相同的数目不小于 2 ,输出这些相同 id 的员工的 employee_id , last_name 和其 job_id。
让表 employees 进入子查询,通过 employee_id 与 job_history 建立联系。
sql 语句与查询结果如下
二、EXISTS 关键字
·EXISTS 操作符检查在子查询中是否存在满足条件的行
·如果在子查询中存在满足条件的行:
-- 不在子查询中继续查找
-- 条件返回 TRUE
·如果在子查询中不存在满足条件的行:
-- 条件返回 FALSE
-- 继续在子查询中查找
例:
查询结果如下:
三、相关XX
1、相关更新
-- 使用相关子查询依据一个表中的数据更新另一个表的数据
1)建立一个新表
2)插入一列新的记录
3)为新列插入数据,数据必须一一对应
-- 此操作使得不同表的信息可以集中到一个表
2、相关删除
-- 使用相关子查询依据一个表中的数据删除另一个表的数据
例:删除表 employees ,与 emp_history 表都有的数据
1)创建表 emp022 ,将 employees 表中 department_id 为 80,90 的数据添加进去
2)创建表 emp033 ,将 employees 表中 department_id 为 90 的添加进去
3)将 emp022 表中与 emp033 表数据重复的部分进行删除
四、WITH 子句
1)使用 WITH 子句,可以避免在 SELECT 语句中重复书写相同的语句块;
2)WITH 子句将该子句中的语句块执行一次并存储到用户的临时表空间中;
3)使用 WITH 子句可以提高查询效率。
例:查询公司中工资比 Fay 高的员工的信息
不使用 with 子句:
使用 with 子句:
此例并不明显,但当数据量较大且查询相同部分时,使用 WITH 子句会大大提高查询效率。
例2:查询公司中各部门的总工资大于公司中各部门的平均总工资的部门信息
如果采取以前的查询方式,将会有很多的嵌套查询,使用 WITH 子句将大大简化查询,提高效率。