Oracle多表查询

4 篇文章 0 订阅
1 篇文章 0 订阅

Oracle数据库中如果想对多表查询有了解。那首先需要对SQL数据库中的笛卡尔积进行了解。

1. 什么是笛卡尔积

1.1 定义
笛卡尔积又叫笛卡尔乘积,是一个叫笛卡尔的人提出来的。
简单的说就是两个集合相乘的结果。
具体的定义去看看有关代数系的书的定义。
直观的说就是
集合A{a1,a2,a3} 集合B{b1,b2}
他们的 笛卡尔积 是 A*B ={(a1,b1),(a1,b2),(a2,b1),(a2,b2),(a3,b1),(a3,b2)}
任意两个元素结合在一起

笛卡尔(Descartes)乘积又叫直积。假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1), (b,2)}。可以扩展到多个集合的情况。类似的例子有,如果A表示某学校学生的集合,B表示该学校所有课程的集合,则A与B的笛卡尔积表示所有可能的选课情况。

1.2 SQLL笛卡尔积示例
SELECT * FROM table1 , table2

2. 什么场景会产生笛卡尔积

笛卡尔积产生,有两种情况:

表连接缺少关联条件,这个是必须要改的;
表连接有关联条件,但是oracle判断用笛卡尔积更快,也会出现笛卡尔积,这个时候要看实际执行速度;oracle这样判断,一般是表比较小,这个时候要特别检查表的数据量是不是真的很少,以免oracle因为统计信息错误而误判。

3. SQL笛卡尔积的危害

降低查询效率 如果数据量大查询效率很很低。

4. 如何避免SQL笛卡尔积

Left join , hint

5.多表查询

上面对笛卡尔坐标系做了清楚的解释,那么可以确定一点如果想进行多表查询,必须各个表之间必须具有关联的字段。
多表查询实例代码如下所示:

SELECT * FROM EMP,DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO;

注意:多表查询如果表名称过长会有bug,所以 Oracle中用别名代替表明

SELECT *,E.DEPTNO FROM EMP E,DEPT D WHERE E.DEPTNO = D.DEPTNO;
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值