多表查询

本文详细介绍了多表查询的概念和分析,包括认识多表查询、多表查询的SQL语法定义,如交叉连接、自然连接、外连接以及数据集合操作。通过实例展示了如何使用内连接、左外连接、右外连接和全外连接消除笛卡尔积,同时讲解了SQL:1999标准的JOIN语法。此外,还讨论了多表查询的性能问题和消除笛卡尔积的策略。
摘要由CSDN通过智能技术生成

多表查询

1、认识多表查询

多表查询指的就是同时从多张数据表中取出数据并且显示的一种操作。

SQL语句的格式:

【③选出所需要的数据列】SELECT [DISTINCT] * | 列 [别名],列 [别名],列 [别名]…

【①确定数据来源】FROM 表名称 [别名] , 表名称 [别名]…

【②筛选数据行】WHERE 限定条件(s);

【④数据排序】ORDER BY 排序字段[ASC | DESC] ,排序字段 [ASC | DESC] …;

利用emp和dept两张表进行多表查询。

emp表中数据量

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GnUdTjPi-1577803388409)(C:\Users\016322605\Desktop\oracle\捕获76.PNG)]

dept表中的数据量

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4BBGyuho-1577803388410)(C:\Users\016322605\Desktop\oracle\捕获77.PNG)]

范例:实现emp和dept表的多表查询

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TaDoa532-1577803388411)(C:\Users\016322605\Desktop\oracle\捕获78.PNG)]

emp表和dept表的多表查询最后产生56条记录,之所以会出现这样的情况,主要与数据库的产生原理有关———数学的集合,这样的集合操作,会将两个集合(数据表)的统一查询,作为乘法的形式出现(笛卡尔积),在任何情况下进行多表查询都会出现笛卡尔积的问题。事实上有些笛卡尔积的产生对用户而言是没有任何实质上的用处的,所以需要想办法去消除,如果想要消除笛卡尔积,必须要有关联字段。

只要是多表查询,这多张表之间一定存在有关联关系,没有关联关系是不可以进行多表查询的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3p2s14t8-1577803388411)(C:\Users\016322605\Desktop\oracle\捕获79.PNG)]

实际上笛卡尔积的存在对整个程序的影响是相当巨大的,即便现在可以消除掉显示的笛卡尔积,但是从本质上讲,永远无法避免笛卡尔积。

效率性能问题

在Oracle的样本数据中有sh/sh的大数据用户

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MvpnVcs4-1577803388411)(C:\Users\016322605\Desktop\oracle\捕获81.PNG)]

范例:利用costs和sales表进行多表查询

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BmlnelOW-1577803388411)(C:\Users\016322605\Desktop\oracle\捕获83.PNG)]

上面的案例虽然显示的消除了笛卡尔积,但是,笛卡尔积却一直存在着,是永远无法消除的,表的数据量小的话还可以承受,如果数据量一大,那么多表查询会带来严重的性能问题(上面的查询操作,用时2分钟左右)。

如果要想判断程序慢有两个方式:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值