资源描述:
《sql-高级子查询.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、高级子查询目标通过本章学习,您将可以:书写多列子查询子查询对空值的处理在FROM子句中使用子查询在SQL中使用单列子查询关联子查询书写关联子查询使用子查询更新和删除数据使用EXISTS和NOTEXISTS操作符使用WITH子句子查询子查询是嵌套在SQL语句中的另一个SELECT语句SELECT...FROM...WHERE...(SELECT...FROM...WHERE...)主查询子查询子查询子查询(内查询)在主查询执行之前执行主查询使用子查询的结果(外查询)SELECTselect_listFROMtableWHEREexproperator(
2、SELECTselect_listFROMtable);SELECTlast_nameFROMemployeesWHEREsalary>(SELECTsalaryFROMemployeesWHEREemployee_id=149);子查询应用举例10500多列子查询主查询WHERE(MANAGER_ID,DEPARTMENT_ID)INSubquery100901026012450主查询与子查询返回的多行、多列进行比较列比较多列子查询中的比较分为两种:成对比较不成对比较成对比较举例SELECTemployee_id,manager_id,depa
3、rtment_idFROMemployeesWHERE(manager_id,department_id)IN(SELECTmanager_id,department_idFROMemployeesWHEREemployee_idIN(178,174))ANDemployee_idNOTIN(178,174);不成对比较举例SELECTemployee_id,manager_id,department_idFROMemployeesWHEREmanager_idIN(SELECTmanager_idFROMemployeesWHEREemploye
4、e_idIN(174,141))ANDdepartment_idIN(SELECTdepartment_idFROMemployeesWHEREemployee_idIN(174,141))ANDemployee_idNOTIN(174,141);SELECTa.last_name,a.salary,a.department_id,b.salavgFROMemployeesa,(SELECTdepartment_id,AVG(salary)salavgFROMemployeesGROUPBYdepartment_id)bWHEREa.departm
5、ent_id=b.department_idANDa.salary>b.salavg;在FROM子句中使用子查询单列子查询表达式单列子查询表达式是在一行中只返回一列的子查询Oracle8i只在下列情况下可以使用,例如:SELECT语句(FROM和WHERE子句)INSERT语句中的VALUES列表中Oracle9i中单列子查询表达式可在下列情况下使用:DECODE和CASESELECT中除GROUPBY子句以外的所有子句中单列子查询应用举例在CASE表达式中使用单列子查询SELECTemployee_id,last_name,(CASEWHENdep
6、artment_id=THEN'Canada'ELSE'USA'END)locationFROMemployees;(SELECTdepartment_idFROMdepartmentsWHERElocation_id=1800)在ORDERBY子句中使用单列子查询SELECTemployee_id,last_nameFROMemployeeseORDERBY20(SELECTdepartment_nameFROMdepartmentsdWHEREe.department_id=d.department_id);关联子查询关联子查询按照一行接一行的顺
7、序循环执行,主查询的每一行都执行一次子查询GET从主查询中获取候选列EXECUTE子查询使用主查询的数据USE如果满足子查询的条件则返回该行关联子查询SELECTcolumn1,column2,...FROMtable1WHEREcolumn1operator(SELECTcolum1,column2FROMtable2WHEREexpr1=.expr2);子查询中使用主查询中的列outerouterSELECTlast_name,salary,department_idFROMemployeesouterWHEREsalary>关联子查询举例(SE
8、LECTAVG(salary)FROMemployeesWHEREdepartment_id=outer.d