多表查询■oracle的多表查询说明多表查询是指基于两个和两个以上的表或是视图的查询.在实际应用中,查询单个表可能不能满足你的需求,连接 n个表,至少需要n-1个连接条件。例如:连接三个表,至少需要两个连接条件。使用别名可以简化查询使用表名前缀在多个表中区分相同的 列在WHERE子句中写入连接条件在表中有相同列时,在列名之前加上表名前缀(以employees表、departments表、l ocations表、job_grades表,jobs表举例)内连接:合并具有同一列的两个以上的表的行,结果集中不包含一个表与另 一个表不匹配的行内连接分为等值连接和非等值连接。一.使用等值连接查询多表数据查询员工ID(employees),部门Id(empl oyees和departments),部门名称(departments)?Selecte(可省略).employee_id,e (不能省略).department_id,d(可省略).department_name,fromemployeese,de partmentsdWheree.department_id=d.department_id;连接多个表(使用AND操 作符)Selecte.employee_id,e.department_id,d.department_name,l.cit yfromemployeese,departmentsd,locationslWheree.department_id =d.department_idandd.location_id=l.location_id使用不等值连接查询多表数据查询 每个员工工资等级(employees和job_grades表),selecte.last_name,e.salary,j.g rade_levelFromemployeese,job_gradesjWheree.salarybetweenj. lowest_salandj.highest_sal;三.使用外连接查询不满足连接条件的数据外连接:两个表在连接过程中除了返 回满足连接条件的行以外还返回左(或右)表中不满足条件的行,这种连接称为左(或右)外连接。没有匹配的行时,结果表中相应的列为空 (NULL).外连接的WHERE子句条件类似于内部连接,但连接条件中没有匹配行的表的列后面要加外连接运算符,即用圆括号括 起来的加号(+).外链接又分为左外连接和右外连接左外连接(如需显示左表不满足条件的数据,则需要在右表中加(+))selectta ble1.column,table2.columnFromtable1,table2Wheretable1.column =table2.column(+)例:Selecte.employee_id,e.department_id,d.depa rtment_name,fromemployeese,departmentsd,Wheree.department_id =d.department_id(+)右外连接(如需显示右表不满足条件的数据,则需要在左表中加(+))selecttable1 .column,table2.columnFromtable1,table2Wheretable1.column(+)= table2.column1999语法连接NATURALJOIN子句,会以两个表中具有相同名字的列(一个或多个列相同)为条 件创建等值连接。在表中查询满足等值条件的数据。如果只是列名相同而数据类型不同,则会产生错误。Selectemployee_id, department_id,department_nameFromemployeesnaturaljoin(自然连接)de partments(在employees表和departments表中,department_id和manager_id列是相同等 的,所以只返回同时具备这两个列相同的数据)如只想连接department_id一个条件时,可加上限制条件Selectemploy ee_id,department_id,department_nameFromemployeesjoindepartment susing(department_id)如两个表中的列名不相同(数据相同)为条件创建等值连接该怎么写?两个表:Selecte mployee_id,e.department_id(d.id),department_nameFromemployeese joindepartmentsdone.department_id=d.id三个表:Selectemployee_id,e .department_id,department_name,cityFromemployeesejoindepartme ntsdone.department_id=d.idJoinlocationslOnd.location_id=l.lo cation_id1999语法的左外连接Selectemployee_id,e.department_id,departmen t_nameFromemployeeseleftouterjoindepartmentsdone.departme nt_id=d.department_id1999语法的右外连接Selectemployee_id,e.department_ id,department_nameFromemployeeserightouterjoindepartmentsd one.department_id=d.department_id1999语法的左右(满外)外连接Selectemploye e_id,e.department_id,department_nameFromemployeesefullouterj oindepartmentsdone.department_id=d.department_id使用自然连接查询数据查询公司 中员工’chen’的manager的信息Selectemp.last_name,manager.last_name,manager.salary,manager.emailFromemployeesemp,employeesmanagerWhereemp.manger_id=manger.employee_idandlower(emp.last_name=’chen’) |
|