Copyright©OracleCorporation,2001.Allrightsreserved.使用集合运算15-2Copyright©OracleCorporation,2001.Allrightsreserved.目标完成本课后,您应当能够执行下列运算:•描述集合运算•用集合运算组合多个查询到一个单个的查询中•控制行返回的顺序15-3Copyright©OracleCorporation,2001.Allrightsreserved.集合运算AB联合/完全联合ABAB相交AB相减15-4Copyright©OracleCorporation,2001.Allrightsreserved.本课所使用的表在下面课程中要用到的表:•EMPLOYEES:提供所有在职雇员当前的详细资料•JOB_HISTORY:当一个雇员改变工作时,记录他的以前的工作的开始日期和结束日期、departmentID和jobID的详细资料15-7Copyright©OracleCorporation,2001.Allrightsreserved.联合运算联合(UNION)运算从两个查询返回除去重复值后的结果AB15-8Copyright©OracleCorporation,2001.Allrightsreserved.使用联合集合运算显示当前和以前所有雇员的工作岗位。每个雇员仅显示一次SELECTemployee_id,job_idFROMemployeesUNIONSELECTemployee_id,job_idFROMjob_history;……15-10Copyright©OracleCorporation,2001.Allrightsreserved.全联合运算AB全联合(UNIONALL)运算从两个查询返回包括所有重复值的结果15-11Copyright©OracleCorporation,2001.Allrightsreserved.使用全联合运算显示当前和以前所有雇员所在的部门SELECTemployee_id,job_id,department_idFROMemployeesUNIONALLSELECTemployee_id,job_id,department_idFROMjob_historyORDERBYemployee_id;……15-12Copyright©OracleCorporation,2001.Allrightsreserved.相交运算AB相交(INTERSECT)运算返回多个查询中所有相同的行15-13Copyright©OracleCorporation,2001.Allrightsreserved.使用相交运算显示雇员表的employee_ID和job_ID,这些雇员当前所做的工作是以前他们做过一端时间,后来有变化,现在又在做的工作。SELECTemployee_id,job_idFROMemployeesINTERSECTSELECTemployee_id,job_idFROMjob_history;15-14Copyright©OracleCorporation,2001.Allrightsreserved.相减运算AB相减(MINUS)运算返回在第一个查询中而不在第二个查询中的行15-15Copyright©OracleCorporation,2001.Allrightsreserved.相减运算显示那些从来没有改变过他们的工作的雇员IDSELECTemployee_id,job_idFROMemployeesMINUSSELECTemployee_id,job_idFROMjob_history;…15-16Copyright©OracleCorporation,2001.Allrightsreserved.集合运算的原则•在两个SELECT列表中的表达式必须在数目上和数据类型上相匹配•可以用圆括号改变执行的顺序•ORDERBY子句:–只能出现在语句的最后–从第一个SELECT语句接收列名、别名,或者位置记号15-17Copyright©OracleCorporation,2001.Allrightsreserved.Oracle服务器和集合运算•除了UNIONALL,重复行自动被清除•在结果中的列名是第一个查询中出现的列名•除了UNIONALL,默认情况下按升序顺序输出15-18Copyright©OracleCorporation,2001.Allrightsreserved.匹配SELECT语句使用UNION运算,显示所有雇员的departmentID、location、和受雇日期SELECTdepartment_id,TO_NUMBER(null)location,hire_dateFROMemployeesUNIONSELECTdepartment_id,location_id,TO_DATE(null)FROMdepartments;…15-19Copyright©OracleCorporation,2001.Allrightsreserved.匹配SELECT语句•使用UNION运算,显示所有雇员的employeeID、jobID和salarySELECTemployee_id,job_id,salaryFROMemployeesUNIONSELECTemployee_id,job_id,0FROMjob_history;…15-20Copyright©OracleCorporation,2001.Allrightsreserved.控制行顺序用两个UNION运算产生一个英语句子COLUMNa_dummyNOPRINTSELECT'sing'ASMydream,3a_dummyFROMdualUNIONSELECT'I''dliketoteach',1FROMdualUNIONSELECT'theworldto',2FROMdualORDERBY2;15-21Copyright©OracleCorporation,2001.Allrightsreserved.小结在本课中,您应该已经学会如何:•用联合(UNION)返回所有不重复的行•用全联合(UNIONALL)返回所有行,包括重复行•用相交(INTERSECT)返回被两个查询共享的所有行•用相减(MINUS)返回由第一个查询选择但不被第二个查询选择的所有不重复的行•ORDERBY只能用在语句的最后15-22Copyright©OracleCorporation,2001.Allrightsreserved.练习15概览本章练习包括下面的主题:•用集合运算写查询•找可替换的连接方法