资源描述:
《Oracle公司内部数据库培训资料04_多表查询》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、多表查询目标通过本章学习,您将可以:使用等值和不等值连接在SELECT语句中查询多个表中的数据。使用外连接查询不满足连接条件的数据。使用自连接。从多个表中获取数据EMPLOYEESDEPARTMENTS……笛卡尔集笛卡尔集会在下面条件下产生:省略连接条件连接条件无效所有表中的所有行互相连接为了避免笛卡尔集,可以在WHERE加入有效的连接条件。笛卡尔集笛卡尔集:20x8=160行EMPLOYEES(20行)DEPARTMENTS(8行)……EquijoinNon-equijoinOuterjoin
2、Selfjoin连接的类型CrossjoinsNaturaljoinsUsingclauseFullortwosidedouterjoinsArbitraryjoinconditionsforouterjoins适用于SQL:1999的连接:Oracle提供的连接(8i或更早):Oracle连接使用连接在多个表中查询数据。在WHERE字句中写入连接条件。在表中有相同列时,在列名之前加上表名前缀。SELECTtable1.column,table2.columnFROMtable1,table2WH
3、EREtable1.column1=table2.column2;等值连接EMPLOYEESDEPARTMENTS外键主键……SELECTemployees.employee_id,employees.last_name,employees.department_id,departments.department_id,departments.location_idFROMemployees,departmentsWHEREemployees.department_id=departments.d
4、epartment_id;等值连接…多个连接条件与AND操作符EMPLOYEESDEPARTMENTS……区分重复的列名使用表名前缀在多个表中区分相同的列。使用表名可以提高效率。在不同表中具有相同列名的列可以用别名加以区分。SELECTe.employee_id,e.last_name,e.department_id,d.department_id,d.location_idFROMemployeese,departmentsdWHEREe.department_id=d.department_i
5、d;表的别名使用别名可以简化查询。使用表名前缀可以提高执行效率。连接多个表EMPLOYEESLOCATIONSDEPARTMENTS连接n个表,至少需要n-1个连接条件。例如:连接三个表,至少需要两个连接条件。…非等值连接EMPLOYEESJOB_GRADESEMPLOYEES表中的列工资应在JOB_GRADES表中的最高工资与最低工资之间…非等值连接SELECTe.last_name,e.salary,j.grade_levelFROMemployeese,job_gradesjWHEREe.s
6、alaryBETWEENj.lowest_salANDj.highest_sal;…外连接EMPLOYEESDEPARTMENTS190号部门没有员工…外连接语法使用外连接可以查询不满足连接条件的数据。外连接的符号是(+)。SELECTtable1.column,table2.columnFROMtable1,table2WHEREtable1.column(+)=table2.column;SELECTtable1.column,table2.columnFROMtable1,table2WHE
7、REtable1.column=table2.column(+);SELECTe.last_name,e.department_id,d.department_nameFROMemployeese,departmentsdWHEREe.department_id(+)=d.department_id;外连接…自连接EMPLOYEES(WORKER)EMPLOYEES(MANAGER)WORKER表中的MANAGER_ID和MANAGER表中的MANAGER_ID相等……自连接SELECTworke
8、r.last_name
9、
10、'worksfor'
11、
12、manager.last_nameFROMemployeesworker,employeesmanagerWHEREworker.manager_id=manager.employee_id;…使用SQL:1999语法连接使用连接从多个表中查询数据:SELECTtable1.column,table2.columnFROMtable1[CROSSJOINtable2]
13、[NATURALJOINtable2]
14、[JOINtable2U