`
housen1987
  • 浏览: 344557 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

第七章 显示多个表中的数据

阅读更多

认证目标:


  • 使用同等连接和非同等连接编写select子句访问多个表的数据
  • 使用自连接将表连接到自身
  • 使用外连接查看不满足连接条件的数据
  • 生成两个或多个表的笛卡尔乘积


关系理论的3个支柱:选择、投影和连接。


7.1 使用同等连接和非同等连接编写select语句访问多个表的数据



  • 连接的类型

基本连接分为:同等连接和非同等连接


自然连接:当源表和目标表共享相同名称的列时,就可以执行自然连接,无需指定连接列。

 

select region_name
from regions natural join countries
where country_name='Canada'

 

 

select country_name
from countries natural join regions
where region_name='Americas';

 

当源表和目标表有多个相同列名时,您不需要它们作为连接列,可以使用join...using格式:

 

select region_name
from regions join countries using(region_id)
where country_name='Canada';

 

【注意】:如果Oracle没有强加任何规则表明两个离散表中具有相同名称的列必须彼此相关,如果regions表和countries表中有2列名称相同,那么等于这2列都作为连接条件。

 

join...on格式:不依赖于源表和目标表具有相同名称的列,允许显示表示连接列

 

 

select region_name
from regions a join countries b
on(a.region_id=b.region_id)
where country_name='Canada';

 

【注意】:除了join...on格式,一般不要使用其他格式的自然连接,因为数据库设计师在设计表结构的时候,并不一定保证都能做到不同表相关列的名称都相同。

 

2 外连接


假设employees和departments表由公共的department_id值连接,要想得到含空的department_id值以及departments表中没有department_id值的employess记录,就需要使用到外连接。


3 交叉连接


cross join 与笛卡尔积类似

 

 

select * from regions cross join 
countries where country_id='CA';

 

4 Oracle连接语法:


传统的 Oracle连接语法支持:自然连接、外连接和笛卡尔积连接

 

 

--自然连接
select region_name
from regions,countries
where regions.region_id=countries.region_id;

--外连接
select department_name,last_name
from employees,departments
where employees.department_id(+)=departments.department_id;

--笛卡尔积
select * from regions,countries;
 

【注意】:外连接加号放置位置:如果出现在源表侧,那么目标表全匹配,源表中没有出现的,填空也要全匹配目标表,反之亦然。最简单的记法:加号在我这边,我要看(匹配)到你的全部。

 

  • 使用SQL:1999语法连接表

Oracle9i之后,引入ANSI SQL:1999标准


语法:


 

select table1.column,table2.column
from table1
[natural join table2] |
[join table2 using (column_name)] |
[join table2 on (table1.column_name = table2.column_name)] |
[left |right|full outer join table2 on (table1.column_name=table2.column_name)] |
[cross join table2]
 

 

  • 限定模糊列名

当2个关联的表中含有相同名称的列,而显示结果也包含此列时,那么会出现列名重复定义错误,为了解决此问题,必须制定列的来源:

 

 

select regions.region_id from regions,countries
 
  • natural join语句

语法:

 

select table1.column,table2.column
from table1
natural join table2;

 纯自然连接确定在table1和table2中具有公共名称的列,并使用所有这些列隐式连接这些表。

自然连接很简单,但基础薄弱,且存在风险,即使名称相同的2列没有任何关系,甚至没有兼容的数据类型,也会关联。


【注意】:natural join连接中的需要展示的列不能有限定词,例如:

 

 

select employees.employee_id from job_history natural join employees
--会报错:ORA-25155: NATURAL 联接中使用的列不能有限定词
 
  • 自然join using语句

语法:

 

select table1.column,table2.column
from table1
join table2 using (join_column1,join_column2...);

 

纯自然连接有natural关键字,如果关键字natural和using出现在一个子句中,会报错。

using子句允许在using关键字中使用一个或者多个同等连接列。

using连接中展示列可以使用限定词,但是如果展示列包含using连接列时,不能出现限定词。

 

 

select e.last_name,e.first_name from job_history join employees e
using (job_id,employee_id)
 
  • 自然join on 语句

语法:

 

select table1.column,table2.column
from table1
join table2 on(table1.column_name = table2.column_name)

 

natural join和join using子句依赖具有相同列名的连接列。

join...on子句允许显式指定连接列,而不必担心它们的列名是否相同,但是连接列的数据类型必须相同或可以隐式转换。

join...on是最灵活、最常用的形式。

 

 

select e.last_name,j.job_id 
from employees e 
join job_history j 
on(e.employee_id=j.department_id)

 

问:要求从多个表中检索信息,分组结果,并运用聚集函数。可以依据来自多个表源的数据使用分组函数吗?

答:可以,连接多个表最终生成一组数据集,再使用聚集函数,就像这些数据来自于一个表源一样。


问:当连接2个表时,它们之间存在一种风险,即包含公共列名,如果这些列出现在select子句中,Oracle知道从哪个表中获得数据吗?

答:不知道,会报错,要使用限定词来避免模糊引用。


问:natural join子句依据共享相同值的公共名称的列连接2个表的行,可以依据某些而不是全部的共享列来连接2个表吗?

答:可以,使用join...using语句。

  • N路连接和其他连接条件

 

select e.last_name,e.salary,l.city from employees e
join departments d on (d.department_id=e.department_id and salary > 12000)
join locations l on (l.location_id=d.location_id)
 
  • 非同等连接

非同等连接根据不相等表达式匹配不同表中的列值。将源表中各行连接列的值与目标表中相应值进行比较,如果连接中使用的表达式计算为true,就会找到匹配。

使用join...in语句指定非同等连接,但连接条件包含<>,>,<,>=,<=等

语法:

 

select table1.column,table2.column
from table1
[join table2 on (table1.column_name < table2.column_name)]
 

 

7.2 使用自连接将表连接到自身

使用join...on将表连接到自身

 

 

select a1.catalog_name catalog_name,a2.catalog_name parent_catalog_name
from catalog a1
join catalog a2 on(a1.parent_catalog_id=a2.catalog_id)
--catalog表结构:catalog_id,catalog_name,parent_catalog_id
--其中parent_catalog_id为每一个catalog_id的父记录ID

 

7.3 使用外连接查看不满足连接条件的数据

 

  • 内连接

内连接也叫连接,是最早的一种连接,最早被称为普通连接或自然连接。内连接是从结果中删除其他被连接表中没有匹配行的所有行,所以内连接可能会丢失信息。


 

  • 外连接

外连接则扩充了内连接的功能,会把内连接中删除表源中的一些保留下来,由于保留下来的行不同,把外连接分为左外连接、右外连接和全外连接这3种连接。


 

  • 左外连接

 

select table1.column,table2.column
from table1
left outer join table2
on (table1.column=table2.column)

 

左外连接返回join关键字左边表因为不满足连接条件而被排除的行。

 

 

select e.last_name,d.department_name,d.department_id
from employees e
left outer join departments d
on (e.department_id=d.department_id)

 

最后返回的结果:LAST_NAME为Grant的department_id为空,亦然有结果返回,如果使用自然连接(内连接),是不会有这一行的返回的。

 

 

select e.last_name,d.department_name,d.department_id
from departments d
left outer join employees e
on (e.department_id=d.department_id)

这一个查询返回的结果包含了departments表中所出现的所有部门的记录,即使employees表中没有出现这个department_id。



  • 右外连接

和左外连接相反。

语法:

 

select table1.column,table2.column
from table1
right outer join table2
on (table1.column=table2.column)

 

 

select e.last_name,d.department_name,d.department_id
from departments d
right outer join employees e
on (e.department_id=d.department_id)

 

 

select e.last_name,d.department_name,d.department_id
from employees e
left outer join departments d
on (e.department_id=d.department_id)

 上面2个查询的功能相同。



  • 全外连接

语法:

 

select e.last_name,d.department_name,d.department_id
from departments d
full outer join employees e
on (e.department_id=d.department_id)

 

左右外连接只能返回join一边不满足条件的结果,而full join则返回所有结果。

 

select e.last_name,d.department_name,d.department_id
from departments d
full outer join employees e
on (e.department_id=d.department_id)

上面的查询,只要包含department_id,无论是空值还是不能匹配的,都能找出来。

 

分享到:
评论

相关推荐

    Python数据可视化实战 第7章 新零售智能销售数据可视化实战 教案.docx.pdf

    《Python数据可视化实战》第七章聚焦于新零售智能销售数据的可视化应用,旨在通过实例教授学生如何处理和展示这种数据。本章的教学目标是使学生掌握从数据获取到报告撰写的整体流程,包括理解新零售智能销售设备的...

    第7章 数据绑定控件

    第7章 数据绑定控件 300 7.1 数据绑定技术 301 实例188 格式化订货金额和订单日期并 进行绑定 301 实例189 使用绑定表达式高亮显示搜索关键字 302 实例190 Eval()绑定图书图片并实现单击图片 进行链接 304 实例191 ...

    Excel 2007数据透视表完全剖析 4/7

    第7章 借助数据透视表对不同的数据源进行分析 155 7.1 使用多重合并计算数据区域 156 7.2 多重合并计算数据区域的数据透视表的详细分析 161 7.2.1 “行”字段 162 7.2.2 “列”字段 162 7.2.3 “值”字段 ...

    Excel 2007数据透视表完全剖析 1/7

    第7章 借助数据透视表对不同的数据源进行分析 155 7.1 使用多重合并计算数据区域 156 7.2 多重合并计算数据区域的数据透视表的详细分析 161 7.2.1 “行”字段 162 7.2.2 “列”字段 162 7.2.3 “值”字段 ...

    Excel 2007数据透视表完全剖析 3/7

    第7章 借助数据透视表对不同的数据源进行分析 155 7.1 使用多重合并计算数据区域 156 7.2 多重合并计算数据区域的数据透视表的详细分析 161 7.2.1 “行”字段 162 7.2.2 “列”字段 162 7.2.3 “值”字段 ...

    JQuery第七章上机练习和课后作业

    **jQuery第七章上机练习与...总之,jQuery第七章的学习是一个进阶的过程,涉及到多个核心概念和技术。通过上机练习和课后作业,不仅可以巩固理论知识,还能提高实际操作能力,为成为一名熟练的前端开发者奠定坚实基础。

    第7章 查询数据PPT学习资料

    总的来说,“第7章 查询数据”的学习资料将为你提供关于如何有效地从MySQL数据库中获取和处理信息的基础知识,这不仅对数据库管理员,也对任何需要与数据库打交道的开发人员来说都是不可或缺的技能。通过深入学习并...

    疯狂android讲义第二版配套源代码 第七章

    在第七章的源代码中,可能会包含多个项目的示例,每个项目都对应一个或多个特定的Android API或概念。 例如,如果这一章涉及到用户界面(UI)设计,你可能会看到使用布局管理器(如LinearLayout, RelativeLayout, ...

    Excel数据分析课件 第4章 商务数据格式设置、显示与打印.pptx

    格式代码可以包括多个部分,例如`#`表示非零数字,`0`用于填充无效的零,`?`用于对齐,`"字符串"`用于显示原样字符串等。此外,还可以使用条件格式,如颜色或图标,来根据数值的大小或条件改变显示。 2. **表格的...

    android应用开发详解第七章

    在“Android应用开发详解第七章”的内容中,我们聚焦于Android开发的重要方面,这通常涵盖了更高级的主题,可能包括UI设计、数据存储、网络通信、多线程以及性能优化等关键知识点。以下是对这些主题的详细说明: 1....

    Excel 2007数据透视表完全剖析 5/7

    第7章 借助数据透视表对不同的数据源进行分析 155 7.1 使用多重合并计算数据区域 156 7.2 多重合并计算数据区域的数据透视表的详细分析 161 7.2.1 “行”字段 162 7.2.2 “列”字段 162 7.2.3 “值”字段 ...

    mysql第五章.pdf

    1. 基本查询语句:这是SQL语言从数据库中获取信息的一个基本语句,使用SELECT语句实现从一个或多个表中查询信息,并将结果显示为一个结果集。基本语法格式包括SELECT、FROM以及WHERE子句的使用。例如,使用SELECT ...

    快速数据挖掘数据分析实战RapidMiner工具应用第17章 宏、循环和数据集处理V4.1.pdf

    7. **Loop Labels**:对数据集中的多个Label字段进行迭代,适合多分类问题的处理。 8. **Loop Attributes Subsets**:组合数据集中的多个属性,用于创建新的特征集。 9. **Branch**:实现条件分支,根据条件选择...

    HTML第7章 课堂练习 PPT及答案 CSS.ACCP6.0

    在“HTML第7章 课堂练习 PPT及答案 CSS.ACCP6.0”这个资料包中,我们可以深入学习HTML的第七章内容,以及相关的CSS实践应用。 在HTML的第七章,通常会涵盖更高级的主题,可能包括表格、表单、框架、图像处理、...

    《计算机组成原理》第二章计算机中的数据显示.ppt

    这一章的内容涵盖了数据的定义、信息的概念、媒体的类型,以及进位计数制、数的表示方法、字符编码和数据校验码等多个重要知识点。 首先,数据是计算机处理的基础,包括数值型和非数值型数据。数值型数据用于表示...

    统计学第二章 统计数据的收集、整理与显示试题及答案.pdf

    在第二章“统计数据的收集、整理与显示”中,我们关注的核心知识点包括调查设计、抽样方法、统计分组以及数据整理技术。 1. 调查单位与填报单位:调查单位是调查的目标实体,例如在人口普查中,每个人的个人信息是...

    数据治理工程师CDGA真题(第五章)

    数据建模和设计治理管理内容涉及多个方面,例如: - **举办设计评审会**:由建模人员记录讨论要点,但不一定必须由他们解决所有问题。 - **问题处理**:如果建模人员无法解决评审小组提出的问题,可以将问题挂起。 ...

    第12章_MySQL数据类型精讲3

    - SET用于定义字段能取预设列表中零个或多个值的字段。 8. **二进制字符串类型**: - **BINARY**: 用于存储二进制数据,长度与VARCHAR相同。 - **VARBINARY**: 变长二进制字符串。 - **TINYBLOB**: 存储最多255...

    第7章 图形显示.doc

    【第7章 图形显示】 本章主要探讨的是在中望CAD 2010中如何管理和控制图形的显示,包括图形的重画、重新生成、缩放和平移等操作,以便于用户更加高效地进行绘图工作。 **7.1 图形的重画与重新生成** 7.1.1 图形的...

    Python数据可视化课后习题_答案.docx

    11. **层次化索引**:层次化索引允许在单个轴上有多个级别索引,可以更有效地表示和操作高维度数据。 12. **数据预处理**:数据预处理是数据分析的关键步骤,包括数据清洗(处理缺失值、异常值)、数据合并、数据...

Global site tag (gtag.js) - Google Analytics