亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

SQL語句中的1

標簽:
Oracle

select 1 from table; 与 select anycol(目的表集合中的任意一行)from table; 与 select * from table;

从作用上来说是没有差别的,都是查看是否有记录,一般是作条件查询用的。select 1 from table中的1是一常量(可以为任意数值),查到的所有行的值都是它,但从效率上来说,1>anycol>*,因为不用查字典表。

注意:
当只关心数据表有多少记录行而不需要知道具体的字段值时,类似“select 1 from table”是一个很不错的SQL语句写法,它通常用于子查询。
这样可以减少系统开销,提高运行效率。因为这样写的SQL语句,数据库引擎就不会去检索数据表里每条具体的记录和每条记录里每个具体的字段值并将它们放到内存里,而是根据查询到有多少记录行存在就输出多少个“1”,每个“1”代表有1行记录,同时选用数字1还因为它所占用的内存空间最小,当然用数字0的效果也一样。

测试:

  1. select 1 from table 增加临时列,每行的列值是写在select后的数。这条sql语句中是1
  2. select count(1) from table 不管count(a) 的 a值如何变化,得出的值总是table表的行数
  3. select sum(1) from table 计算临时列的和

在Oracle中用 1 测试了一下,发现结果如下:

  1. 测试结果,得出一个行数和table表行数一样的临时列,每行的列值是1;
  2. 得出一个数,该数是table表的行数;
  3. 得出一个数,该数是table表的行数;

然后又用“2”测试,结果如下:

  1. 得出一个行数和table表行数一样的临时列,每行的列值是2;
  2. 得出一个数,该数是table表的行数;
  3. 得出一个数,该数是table表的行数×2的数

再用不同的数测试

  1. 得出一个行数和table表行数一样的临时列,每行的列值是写在select后的数;
  2. 还是得出一个数,该数是table表的行数;
  3. 得出一个数,该数是table表的行数×写在select后的数

综上所述:第一种的写法是增加临时列,每行的列值是写在select后的数;第二种是不管count(a)的a值如何变化,得出的值总是table表的行数;第三种是计算临时列的和。

count( 列名 ) 、count( 常量 ) 、count( * )

【强制】不要使用 count( 列名 ) 或 count( 常量 ) 来替代 count( * ) , count(\ * ) 是 SQL 92 定义的标准统计行数的语法,跟数据库无关,跟 NULL 和非 NULL 无关。
说明: count( * ) 会统计值为 NULL 的行,而 count( 列名 ) 不会统计此列为 NULL 值的行。
【强制】 count(distinct col) 计算该列除 NULL 之外的不重复行数,注意 count(distinct
col 1, col 2 ) 如果其中一列全为 NULL ,那么即使另一列有不同的值,也返回为 0。
【强制】当某一列的值全是 NULL 时, count(col) 的返回结果为 0,但 sum(col) 的返回结果为NULL ,因此使用 sum() 时需注意 NPE 问题。
正例:可以使用如下方式来避免 sum 的 NPE(NullPointerException) 问题:
select if ( isNull ( sum(g) ) ,0, sum(g) ) from table;

點擊查看更多內容
1人點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
JAVA開發工程師
手記
粉絲
37
獲贊與收藏
353

關注作者,訂閱最新文章

閱讀免費教程

感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消