ITPub博客

首页 > 数据库 > Oracle > sql中的*的使用注意点

sql中的*的使用注意点

原创 Oracle 作者:eBusinessMan 时间:2014-10-15 18:53:47 0 删除 编辑
材料:test_source,test_target,他们的结构和数据是              
SQL> select * from test_source;


NAME               ID
---------- ----------
lolulz          74834
P4              74835
luo                 8
P1              74832
P2              74833
zhi                 8

SQL> select * from test_target;


NAME               ID
---------- ----------
lulugan            12
lulugan            12
updatef            10
lolulz          74834
luo                 8
P1              74832
P2              74833
zhi                 8


--------------------------开始试验---------------------------            
例子1    
SQL> create or replace view v_target_source as
  2  select test_target.*,test_source.* from test_target left outer join test_source
  3     on(
  4             test_target.id = test_source.id
  5     )
  6  with read only;
select test_target.*,test_source.* from test_target left outer join test_source
                                 *
第 2 行出现错误:
ORA-00957: 重复的列名
----------
由于test_target和test_source中有相同的列名,而在一个view或table中不能有相同的列名                                                
因此报错。                 
----------


例子2    
SQL> select test_target.*,test_source.* from test_target left outer join test_source
  2     on(
  3             test_target.id = test_source.id
  4     );


NAME               ID NAME               ID
---------- ---------- ---------- ----------
lolulz          74834 lolulz          74834
zhi                 8 luo                 8
luo                 8 luo                 8
P1              74832 P1              74832
P2              74833 P2              74833
zhi                 8 zhi                 8
luo                 8 zhi                 8


已选择7行。
----------
1.即使test_target和test_source中有相同的列名,但是只是普通的select出数据显示而已,对数据库没有任何影响!因此没必要报错。    
2.这里的  *  是指:指定两个表各自的所有字段                                                                                                   

----------


例子3    
SQL> select * from test_target left outer join test_source
  2     on(
  3             test_target.id = test_source.id
  4     );


NAME               ID NAME               ID
---------- ---------- ---------- ----------
lolulz          74834 lolulz          74834
zhi                 8 luo                 8
luo                 8 luo                 8
P1              74832 P1              74832
P2              74833 P2              74833
zhi                 8 zhi                 8
luo                 8 zhi                 8


已选择7行。
----------
这里的  *  是指:两表形成的笛卡尔积集合的所有字段                                                                                                                         
----------

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29900383/viewspace-1299874/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-09-21

  • 博文量
    46
  • 访问量
    134913