




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第4 4节节多多 表表 查查 询询讲师:宋红康讲师:宋红康 新浪微博:尚硅谷新浪微博:尚硅谷- -宋红康宋红康目目 标标通过本章学习,您将可以: 使用等值和不等值连接在select 语句中查询多个表中的数据。 使用自连接。 使用外连接查询不满足连接条件的数据。从多个表中获取数据从多个表中获取数据employees departments select last_name, department_namefrom employees, departmentsselect count(employee_id) from employees;假设输出107行select count(departm
2、ent_id)from departments;假设输出27行select 107*27 from dual;演示笛卡尔集的错误情况:演示笛卡尔集的错误情况:笛卡尔集笛卡尔集 笛卡尔集会在下面条件下产生笛卡尔集会在下面条件下产生: 省略连接条件 连接条件无效 所有表中的所有行互相连接 为了避免笛卡尔集, 可以在 where 加入有效的连接条件。笛卡尔集笛卡尔集笛卡尔集笛卡尔集: 20 x8=160行行employees (20行行)departments (8行行) oracle 连接连接使用连接在多个表中查询数据。 在在 where where 子句中写入连接条件。子句中写入连接条件。 在表
3、中有相同列时,在列名之前加上表名前缀在表中有相同列时,在列名之前加上表名前缀selecttable1.column, table2.columnfromtable1, table2wheretable1.column1 = table2.column2;等值连接等值连接employees departments 外键外键主键主键:唯一、非空:唯一、非空 select employees.employee_id, employees.last_name, employees.department_id, departments.department_id, departments.locatio
4、n_idfrom employees, departmentswhere employees.department_id = departments.department_id;等值连接等值连接多个连接条件与多个连接条件与 and 操作符操作符 employees departments 区分重复的列名区分重复的列名 使用表名前缀在多个表中区分相同的列使用表名前缀在多个表中区分相同的列。 在不同表中具有相同列名的列可以用表的别名表的别名加以区分。select e.employee_id, e.last_name, e.department_id, d.department_id, d.loca
5、tion_idfrom employees e , departments dwhere e.department_id = d.department_id;表的别名表的别名 使用别名可以简化查询。 使用表名前缀可以提高执行效率。连接多个表连接多个表employees employees locations locations departments departments 连接连接 n n个表个表, ,至少至少需要需要 n-1n-1个连接条件个连接条件。 例如:连接三个表,至少需要两个连接条件。练习:查询出公司员工的 last_name, department_name, city非等值连接
6、非等值连接employeesjob_gradesemployees表中的列工资表中的列工资应在应在job_grades表中的最高表中的最高工资与最低工资之间工资与最低工资之间非等值连接非等值连接select e.last_name, e.salary, j.grade_levelfrom employees e, job_grades jwhere e.salary between j.lowest_sal and j.highest_sal;外连接外连接employeesdepartments190号部门没有员工号部门没有员工 内连接和外连接内连接和外连接(1)(1) 内连接: 合并具有同一
7、列的两个以上的表的行, 结结果集中不包含一个表与另一个表不匹配的行果集中不包含一个表与另一个表不匹配的行 外连接: 两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不满足条件还返回左(或右)表中不满足条件的行的行 ,这种连接称为左(或右),这种连接称为左(或右) 外连接外连接。没有匹配的行时, 结果表中相应的列为空(null). 外连接的 where 子句条件类似于内部连接, 但连接条件连接条件中没有匹配行的表的列后面中没有匹配行的表的列后面要加外连接运算符外连接运算符, , 即即用圆括号括起来的加号用圆括号括起来的加号(+)(+). . 外连接语法外连接语法 使用外连接可以
8、查询不满足连接条件的数据。使用外连接可以查询不满足连接条件的数据。 外连接的符号是外连接的符号是 (+)(+)。select table1.column, table2.columnfromtable1, table2wheretable1.column(+) = table2.column;select table1.column, table2.columnfromtable1, table2wheretable1.column = table2.column(+);右外连接右外连接左外连接左外连接select e.last_name, e.department_id, d.departm
9、ent_namefrom employees e, departments dwhere e.department_id(+) = d.department_id ; 外连接外连接自连接自连接employees (worker)employees (manager)worker 表中的表中的manager_id 和和 manager 表中的表中的employee_id相等相等练习:查询出 last_name 为 chen 的员工的 manager 的信息自连接自连接select worker.last_name | works for | manager.last_namefrom emplo
10、yees worker, employees managerwhere worker.manager_id = manager.employee_id ;题目:查询题目:查询employees表,返回表,返回“xxx works for xxx”使用使用sql: 1999 sql: 1999 语法连接语法连接使用连接从多个表中查询数据:selecttable1.column, table2.columnfromtable1cross join table2 |natural join table2 |join table2 using (column_name) |join table2 on
11、(table1.column_name = table2.column_name) |left|right|full outer join table2 on (table1.column_name = table2.column_name);叉叉 集集(了解)(了解) 使用cross join 子句使连接的表产生叉集。 叉集和笛卡尔集是相同的。 select last_name, department_namefrom employeescross join departments ;自然连接自然连接 natural join 子句,会以两个表中具有相同会以两个表中具有相同名字的列为条件创建
12、等值连接名字的列为条件创建等值连接。 在表中查询满足等值条件的数据。 如果只是列名相同而数据类型不同数据类型不同,则会产生错误。返回的是,两个表中具有相同名字的列的“且、交集”,而非“或,并集”。即:比如employee类和department类都有department_id和manager_id,返回二者都相同的结果。 select department_id, department_name, location_id, cityfrom departmentsnatural join locations ;自然连接自然连接使用使用 using 子句创建连接子句创建连接在natural jo
13、in 子句创建等值连接时,可以使用使用 using using 子句指定等值连接中需要用到的列子句指定等值连接中需要用到的列。使用 using 可以在有多个列满足条件时进行选择。不要给选中的列中加上表名前缀或别名不要给选中的列中加上表名前缀或别名。join join 和和 using using 子句经常同时使用子句经常同时使用。select last_name,department_name from employeesnatural join departments ; select last_name,department_name from employees join departm
14、ents using (department_id);会自动匹配表中相同的列,可多列匹配; select e.employee_id, e.last_name, d.location_idfrom employees e join departments dusing (department_id) ;using 子句子句使用使用on on 子句创建连接子句创建连接(常用)(常用) 自然连接中是以具有相同名字的列为连接条件的。 可以使用可以使用 on on 子句指定额外的连接条件子句指定额外的连接条件。 这个连接条件是与其它条件分开的。 on on 子句使语句具有更高的易读性子句使语句具有更高
15、的易读性。 select e.employee_id, e.last_name, e.department_id, d.department_id, d.location_idfrom employees e join departments don (e.department_id = d.department_id);on on 子句子句 使用使用 on on 子句创建多表连接子句创建多表连接select employee_id, city, department_namefrom employees e join departments don d.department_id = e.d
16、epartment_id join locations lon d.location_id = l.location_id;内连接和外连接内连接和外连接(2)(2) 在sql: 1999中,内连接只返回满足连接条件的数据 两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不满足条件的行,这种连接称为左(或右) 外连接。 两个表在连接过程中除了返回满足连接条件的行以外还返回两个表中不满足条件的行 ,这种连接称为满满 外连接外连接。 select e.last_name, e.department_id, d.department_namefrom employees eleft outer join departments don (e.department_id = d.department_id) ;左外连接左外连接 select e.last_name, e.department_id, d
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 辽宁师附中2026届高三化学第一学期期末学业质量监测试题含解析
- 国家空军考试题库及答案
- 2024鹰潭市贵溪市周坊镇社区工作者招聘考试试题
- 2024阳江市江城区闸坡镇社区工作者招聘考试试题
- 2024重庆市黔江区黄溪镇社区工作者招聘考试试题
- 云南省曲靖市宣威九中2026届化学高三上期末预测试题含解析
- 农业生物技术在种业创新中的生物反应器技术应用研究报告
- 车间环境基础知识培训课件
- 2025年河北机关事业单位工人技能等级考试(殡葬服务员)测试题及答案
- 2025义务教育历史课程标准考试测试题库及答案
- 办公楼维修改造施工方案
- 集团海外业务管理手册(专业完整格式模板)
- 高危儿培训计划和方案
- ISO9001 质量管理体系全套(质量手册+程序文件+表格记录全套)
- 路灯CJJ检验批范表
- 肛肠科年度汇报总结
- 鸡蛋合作合同范本
- 外研版英语九年级上册-Module1-12作文范文
- 民用无人机操控员执照(CAAC)考试复习重点题库500题(含答案)
- 学校生活指导老师面试问题
- 安防项目视频周界报警系统招投标书范本
评论
0/150
提交评论