oracle表记录数函数,数据库表连接后获取记录条数之COUNT函数-Oracle

问题背景:

今天 Java开发工程师咨询,如下SQL语句COUNT函数值怎么会比表T_1行数、表T_2行数都大? 并说是不是ORACLE 数据库的BUG?

SQL:

select count(*) from t_1, t_2 where t_1.id=t_2.id and t_1.id=1;

其中T_1、T_2表结构如下:

create table t_1

(

id number,

c1_1 varchar2(63),

c2_1 varchar2(63)

);

create table t_2

(

id number,

c1_2 varchar2(63),

c2_2 varchar2(63)

);

问题解决:

1. 应用开发工程师之所以会对这个简单的SQL语句有疑问,我想是因为以下几点:

a). 开发工程师面对的应用 系统数据库表之间基本上都会存在着One-To-One、One-To-Many关系,进而形成思维定势。如果T_1、T_2之间通过id字段形成One-To-One、One-To-Many关联关系,则上面COUNT值确实不会比Many一方表行数大。

b). 开发工程师未从根本上了解SQL,如:SELECT语句的程序逻辑

2. 问题分析:

SQL> select * from t_1;

ID  C1_1       C2_1

———- ———- ———-

1  c1_1_r1    c2_1_r1

1  c1_1_r2    c2_1_r2

3  c1_1_r3    c2_1_r3

4  c1_1_r4    c2_1_r4

1  c1_1_r5    c2_1_r5

SQL> select * from t_2;

ID  C1_2       C2_2

———- ———- ———-

1  c1_2_r1    c2_2_r1

2  c1_2_r2    c2_2_r2

3  c1_2_r3    c2_2_r3

1  c1_2_r4    c2_2_r4

SQL> select count(*) from t_1, t_2 where t_1.id=t_2.id and t_1.id

COUNT(*)

———-

6

SQL> select * from t_1, t_2 where t_1.id=t_2.id and t_1.id=1;

ID  C1_1         C2_1               ID   C1_2       C2_2

———- ———-   ———-    ———-   ———-     ———-

1  c1_1_r1    c2_1_r1             1  c1_2_r4    c2_2_r4

1  c1_1_r1    c2_1_r1             1  c1_2_r1    c2_2_r1

1  c1_1_r2    c2_1_r2             1  c1_2_r4    c2_2_r4

1  c1_1_r2    c2_1_r2             1  c1_2_r1    c2_2_r1

1  c1_1_r5    c2_1_r5             1  c1_2_r4    c2_2_r4

1  c1_1_r5    c2_1_r5             1  c1_2_r1    c2_2_r1

注:从最后一个SQL可以这么认为,是将满足条件id=1的T_1表中所有记录逐条与T_2中记录进行比较,满足条件则形成一条记录

作者 chhuma专栏

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值