热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

Oracle中select1和select*的区别

创建myt表并插入数据,如下:createtablemyt(namevarchar2,create_timedate)insertintomytvalues(

创建myt表并插入数据,如下:create table myt(name varchar2,create_time date) insert into myt values(

创建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-19SQL> 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子句中,检测符合条件记录是否存在。

如select * from T1 where exists(select 1 from T2 where T1.a=T2.a) ;
T1数据量小而T2数据量非常大时,T1<“select 1”这里的 “1”其实是无关紧要的,换成“*”也没问题,它只在乎括号里的数据能不能查找出来,是否存在这样的记录,如果存在where 条件成立。
如下示例:

SQL> select 1/0 from dual;select 1/0 from dualORA-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 *并不返回表中所有的列,只是检测符合条件记录是否存在。

linux

推荐阅读
author-avatar
baby小明君
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有