您的位置:首页 > 数据库

数据库表连接后获取记录条数之COUNT函数

2012-03-06 19:58 363 查看
问题背景:

今天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中记录进行比较,满足条件则形成一条记录
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: