Oracle中select 1和select *的区别

2014-11-24 17:48:16 · 作者: · 浏览: 0

创建myt表并插入数据,如下:


create table myt(name varchar2,create_time date)


insert into myt values('john',to_date(sysdate,'DD-MON-YY'));


insert into myt values('tom',to_date(sysdate,'DD-MON-YY'));


insert into myt values('lili',to_date(sysdate,'DD-MON-YY'));


在sql*plus中显示如下:


SQL> select * from myt;

NAME CREATE_TIME
---------- -----------
john 2010-5-19
tom 2010-5-19
lili 2010-5-19

SQL> select 1 from myt;

1
----------
1
1
1


SQL> select 0 from myt;

0
----------
0
0
0
从以上结果 可以看到,select constant fromtable 对所有行返回对应的常量值(具体应用见下面),


而select * from table则返回所有行对应的所有列。


select 1常用在exists子句中,检测符合条件记录是否存在。


SQL> select 1/0 from dual;

select 1/0 from dual

ORA-01476: 除数为 0


SQL> select * from myt where exists(select 1/0 from dual);

NAME CREATE_TIME
---------- -----------
john 2010-5-19
tom 2010-5-19
lili 2010-5-19


没有返回错误,说明,并没有让select语句参与计算。


在exists子句中写select *并不返回表中所有的列,只是检测符合条件记录是否存在。