zoukankan      html  css  js  c++  java
  • 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 *并不返回表中所有的列,只是检测符合条件记录是否存在。

  • 相关阅读:
    word2vec
    视频推荐系统
    python基础
    go-elasticsearch
    Docker 部署 go项目
    gohbase
    禅道部署linux
    jmeter 报错 Error occurred during initialization of VM Could not reserve enough space for object heap
    jarvis OJ-DSA
    算法-我的第一本算法书(一)
  • 原文地址:https://www.cnblogs.com/sharpest/p/11106504.html
Copyright © 2011-2022 走看看