天天看点

sql中的*的使用注意点

材料: 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/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29900383/viewspace-1299874/