文档详情

Les04-多表JOIN.ppt

发布:2018-02-28约4.17千字共28页下载文档
文本预览下载声明
从多表中选取数据 目标 完成本课后,你应该能够: 使用等值和非等值连接从多表中选取数据 使用外连接选取不符合连接条件的数据 使用自连接 从多表选取数据 笛卡尔乘积 笛卡尔乘积会出现于以下情况下: --- 忽略了连接条件 --- 连接条件无效 --- 第一个表中的所有行会连接到第二个表 的所有行 为了避免出现笛卡尔乘积,需要在WHERE子句中使用连接条件 连接的类型 Oracle专用连接 (8i及以前版本): 等值连接 非等值连接 外连接 自连接 连接的语法 在WHERE子句中使用连接条件 当多表中出现了同名列的时候,在列的前面使用表名作为前缀 如果要将n表进行连接,那么需要至少n-1个连接条件。如:要连接三个表,则需要至少两个连接条件 使用等值连接 employees表和departments表可以进行等值连接,因为这两个表的department_id列值是完全相等的 通过相等的列值,可以将多个表进行关联 等值连接使用=符号 使用表别名 使用表别名可以简化查询 使用表别名可以提高性能 使用非等值连接 employees表和job_grades表可以进行非等值连接,因为employees表的工资列值处于job_grades表的工资范围内 非等值连接可以使用、、=、=等符号,但BETWEEN是最简单的 外连接语法 使用外连接,可以查看到不符合连接条件的行 外连接操作符是加号(+) 使用外连接 自连接 使用自连接 使用SQL:1999语法连接 从多表中连接查询数据 创建Cross连接 Cross连接的结果等同于笛卡尔乘积 创建Natural连接 Natural连接子句基于两个表的所有列有相同的名字 它从两个表中选取所有匹配列的相同值 如果同名列的数据类型不匹配,就会返回错误 使用Natural连接取值 使用USING子句创建连接 如果多列有相同的名字,但是数据类型不匹配,那么就不能使用NATURAL子句,而可以使用USING子句指定需要作为等值连接的列 当有多列匹配时,使用USING子句只能匹配一列 在列中不要使用表名或别名 NATURAL连接和USING子句是严格互斥的 使用USING子句取值 使用ON子句创建连接 NATURAL连接的条件基本上是同名列的等值连接 为了指定任一条件,或指定列用于连接,可以使用ON子句 连接条件是与其他的查询条件分开的 ON子句使代码更加容易理解 使用ON子句取值 使用ON子句创建三表连接 INNER 连接和 OUTER 连接 在SQL: 1999, 只返回两个表中匹配条件的行的连接,是内连接 两个表的内连接,返回的行包含左表(或右表)中不匹配的行,就是左(或右)外连接 两个表的内连接,返回的行包含左表和右表中不匹配的行,就是完全外连接 左外连接 右外连接 全外连 附加条件 小结 通过本课的学习,应当掌握: 如何使用不同类型的连接,从多表中选取数据 8i及以前版本中,Oracle自有的连接语法 9i版本中的SQL: 1999 语法 4-* 4 … … EMPLOYEES DEPARTMENTS SQL:1999 适用连接 Cross连接 Natural连接 Using子句 两侧外连接 任意连接条件的外连接 SELECT table1.column, table2.column FROM table1, table2 WHERE table1.column1 = table2.column2; SELECT employees.employee_id,employees.last_name, employees.department_id,departments.department_id, departments.location_id FROM employees,departments WHERE employees.department_id=departments.department_id; SELECT e.employee_id , e.last_name, e.department_id , d.department_id, d.location_id FROM employees e , departments d WHERE e.department_id = d.department_id; SELECT e.last_name,e.salary,j.grade_level FROM employees e,job_grades j WHERE e.salary BETWEEN j.lowest_sal AND j.highest_sal; SELECT
显示全部
相似文档