Oracle中select 1和select *的區別


轉:

轉自:https://www.linuxidc.com/Linux/2010-05/26202.htm

創建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子句中,檢測符合條件記錄是否存在。

如select * from T1 where exists(select 1 from T2 where T1.a=T2.a) ;
T1數據量小而T2數據量非常大時,T1<<T2 時,1) 的查詢效率高。
“select 1”這里的 “1”其實是無關緊要的,換成“*”也沒問題,www.linuxidc.com它只在乎括號里的數據能不能查找出來,是否存在這樣的記錄,如果存在where 條件成立。
如下示例:

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 *並不返回表中所有的列,只是檢測符合條件記錄是否存在。

 

分類: Oracle


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM