收藏 分享(赏)

第5章-连接查询.ppt

上传人:天天快乐 文档编号:588607 上传时间:2018-04-13 格式:PPT 页数:35 大小:1.12MB
下载 相关 举报
第5章-连接查询.ppt_第1页
第1页 / 共35页
第5章-连接查询.ppt_第2页
第2页 / 共35页
第5章-连接查询.ppt_第3页
第3页 / 共35页
第5章-连接查询.ppt_第4页
第4页 / 共35页
第5章-连接查询.ppt_第5页
第5页 / 共35页
点击查看更多>>
资源描述

1、Oracle数据库查询与管理,第5章:多表联接查询,本章内容,INNER JOIN Join的类型及用法自然连接非等值连接OUTER JOINLEFT OUTER JOINRIGHT OUTER JOINFULL OUTER JOIN笛卡尔积,本章目标,使用等值联接和非等值连接访问多个表中的数据使用自连接将表连接到自身使用外连接,使用连接显示多个表中的数据,知识点概览,问题1:获取多个表中的数据,SQL 99标准的连接,SQL 99标准的连接有自然连接外连接(OUTER连接)LEFT OUTERRIGHT OUTERFULL OUTER交叉连接,Oracle中的连接查询语法,编写查询中的建议,

2、使用表前缀限定来区分来自不同表中的名称相同的列使用表前缀可以提高性能可以使用表别名来代替完整表名前缀,使得SQL代码更简短,因而占用更少的内存也可以使用列别名区分,示例:,问题1 的实现,SELECT employee_id,department_id,department_nameFROM employees NATURAL JOIN departments;,这种连接叫做自然连接,自然连接,以两个表中具有相同名称的所有列为基础从两个表中在匹配列中有相同值的行如果名称相同但字段类型不同,则返回一个错误另外一个自然连接的例子,Where子句同样适用于自然连接查询中,使用JOIN和USING子句

3、创建连接,如果两个表有多个匹配的列,则可以用JOIN和USING子句指定等值连接的列USING子句指定连接使用的匹配列NATURAL JOIN与USING子句是互斥的!,不要对USING子句中使用的列进行表前缀限定,使用JOIN和ON子句创建连接,自然连接是对具有相同名称的所有列进行等值连接使用JOIN和ON子句可以指定任意条件或指定要连接的列,列名可以不同连接条件独立于其他搜索条件ON子句使代码易于理解,使用ON子句实现三个表的连接,对连接附加筛选条件,使用JOIN的AND子句或WHERE子句进行连接时的条件筛选示例:查询149号员工所管辖的员工信息和部门信息,自连接,观察EMPLOYEES

4、表中的数据,假设把EMPLOYEES表复制为两份,WORKER和MANAGER,自连接对同一个表进行的连接必须使用不同的表别名来标识在查询中每次对表的引用示例:使用一个自连接来显示每个雇员及其管理者的名字,SELECT w.first_name | | w.last_name | works for | m.first_name | | m.last_nameFROM employees wJOIN employees mON w.manager_id=m.employee_id,使用表别名,表别名使用表别名可以简化查询使用表前缀可以提高性能示例1:不使用表别名查询产品名称和产品类型示例2:使

5、用表别名查询产品名称和产品类型,SELECT products.NAME,product_types.NAMEFROM products,product_typesWHERE products.product_type_id=product_types.product_type_id;,SELECT p.NAME,pt.NAMEFROM products p,product_types ptWHERE p.product_type_id=pt.product_type_id;,非等值联接,select employee_id,e.last_name,e.salary,g.grade_level

6、from employees ejoin job_grades gon e.salary between g.lowest_salary and g.highest_salary,使用Oracle语法完成连接查询,可以在where子句中编写联接条件此时FROM子句中要跟多个表如果在多个表中出现了相同的列名,则在列名的前面加上表名进行限定,SELECT table1.column,table2.columnFROM table1JOIN table2 ON table1.column1=table2.column2,筛选条件用AND附加在where的联接条件后示例:查询雇员Matos的部门编号和

7、部门名称,连接两个以上的表时,多个联接条件之间用AND示例:要显示每位雇员的姓氏、部门名称和所在城市,则需要将EMPLOYEES、DEPARTMENTS和LOCATIONS表联合起来,外连接,问题:当针对部门表和员工表进行等值连接查询来返回右侧结果的时候,结果集不会包含下面的数据:部门ID190的部门,因为员工表中不存在部门编号为190的员工;last_name为grant的雇员,因为没有为该雇员分配部门ID。要返回没有任何雇员的部门记录,或者返回没有分配部门的雇员,就需要使用外连接(OUTER JOIN)。,内联接与外联接,在SQL 99标准中,如果两个表的联接只返回相匹配的行,则成为INN

8、ER联接。INNER联接结果中不会出现不符合联接条件的行。如果两个表的联接不仅返回INNER联接的结果,还返回左表(右表)中不匹配的行,则称该联接为左(右)OUTER联接。如果两个表的联接不仅返回INNER联接的结果,还返回左和右联接的结果,则称为完全OUTER联接。,LEFT OUTER JOIN,RIGHT OUTER JOIN,FULL OUTER JOIN,笛卡尔积,什么是笛卡尔积,笛卡尔积,出现以下情况时将形成笛卡尔积联接条件被忽略联接条件无效第一个表中的所有行被联接到第二个表中的所有行如果要避免生成笛卡尔积,请务必在WHERE子句中使用有效的联接条件,笛卡尔积,生成笛卡尔积联接条件被忽略交叉联接,如果要生成笛卡尔积,最好显式指定CROSS JOIN,以说明是需要生成笛卡尔积,而不是忽略了联接条件,内连接外连接交叉连接,总结,第6章练习,上机任务,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经济财会 > 贸易

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报