表的自身查询问题

查看下列两个语句查询结果有啥区别:

select * from t a,t b where a.age=b.age;

select * from t a where a.age =b.age;

==================================

下面进行测试

 create table COMPUTE_BASE
(
  COMPUTE_ID NUMBER not null,
  SEQ        NUMBER(3) not null,
  FORMULA    VARCHAR2(1),
  ARGUMENT   NUMBER
);

 

SQL> insert into compute_base values(1,1,'+',10);
 
1 row inserted

SQL> insert into compute_base values(1,2,'*',5);
 
1 row inserted

SQL> insert into compute_base values(1,3,'-',2);
 
1 row inserted

SQL> insert into compute_base values(2,1,'+',11);
 
1 row inserted

SQL> select * from COMPUTE_BASE;
 
COMPUTE_ID  SEQ FORMULA   ARGUMENT
---------- ---- ------- ----------
         1    1 +               10
         1    2 *                5
         1    3 -                2
         2    1 +               11

SQL> select * from COMPUTE_BASE a where a.compute_id=a.compute_id;
 
COMPUTE_ID  SEQ FORMULA   ARGUMENT
---------- ---- ------- ----------
         1    1 +               10
         1    2 *                5
         1    3 -                2
         2    1 +               11

SQL> select * from COMPUTE_BASE a ,compute_base b where a.compute_id=b.compute_id;
 
COMPUTE_ID  SEQ FORMULA   ARGUMENT COMPUTE_ID  SEQ FORMULA   ARGUMENT
---------- ---- ------- ---------- ---------- ---- ------- ----------
         1    1 +               10          1    1 +               10
         1    1 +               10          1    2 *                5
         1    1 +               10          1    3 -                2
         1    2 *                5          1    1 +               10
         1    2 *                5          1    2 *                5
         1    2 *                5          1    3 -                2
         1    3 -                2          1    1 +               10
         1    3 -                2          1    2 *                5
         1    3 -                2          1    3 -                2
         2    1 +               11          2    1 +               11
 
10 rows selected

比较可发现,当查询栏位有相同值时,会产生迪卡尔积;

SQL> update compute_base set compute_id=3 where formula='-';
 
1 row updated
 
SQL> update compute_base set compute_id=4 where formula='*';
 
1 row updated
 
SQL> commit;
 
Commit complete
 
SQL> select * from COMPUTE_BASE a where a.compute_id=a.compute_id;
 
COMPUTE_ID  SEQ FORMULA   ARGUMENT
---------- ---- ------- ----------
         1    1 +               10
         4    2 *                5
         3    3 -                2
         2    1 +               11
 
SQL> select * from COMPUTE_BASE a ,compute_base b where a.compute_id=b.compute_id;
 
COMPUTE_ID  SEQ FORMULA   ARGUMENT COMPUTE_ID  SEQ FORMULA   ARGUMENT
---------- ---- ------- ---------- ---------- ---- ------- ----------
         1    1 +               10          1    1 +               10
         4    2 *                5          4    2 *                5
         3    3 -                2          3    3 -                2
         2    1 +               11          2    1 +               11

 

若栏位无相同记录,刚两者的结果集没有区别,仅是显示的栏位

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值