sql中的*的使用注意點

eBusinessMan發表於2014-10-15
材料: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部落格 ” ,連結:http://blog.itpub.net/29900383/viewspace-1299874/,如需轉載,請註明出處,否則將追究法律責任。

相關文章