1. 程式人生 > 其它 >sqlserver in 語句效率_oracle與sqlserver的空值、NULL值對比

sqlserver in 語句效率_oracle與sqlserver的空值、NULL值對比

技術標籤:sqlserver in 語句效率

6441e0c1e7f23e661db8b39de647c132.png

oracle:

插入三行記錄,ColName的值分別為字串、空值、NULL

--如果是sqlserver資料庫,VARCHAR2改為VARCHARcreatetabletblNullData(IdVARCHAR2(50)notnull,ColCodeVARCHAR2(50),ColNameVARCHAR2(100));--如果是sqlserver資料庫,sys_guid改為NewID()insertintotblNullData(Id,ColCode,ColName)    values(sys_guid(),'Col001','這是有值的');insertintotblNullData(Id,ColCode,ColName)    values(sys_guid(),'Col002','');insert into tblNullData(Id, ColCode, ColName)       values(sys_guid(), 'Col003', NULL);
  • 查詢表資訊

select * from tblNullData;

oracle 結果如下:

6d7f7e132102a727b6c104fc0fb03806.png

*Oracle把空值轉變成了 null。

sql server 結果如下:

6915fe3399d0c225f83eaeb62c396f0b.png

  • 查詢值為null

--都是空值select*fromtblNullDatawhereColName=null;--見下圖select * from tblNullData where ColName is null;

oracle 結果如下:

b375fbb00674b6df143e6663f905adc1.png

sql server結果如下:

f6938fa429f6fb10ba1608e8e2d97c50.png

  • 想要查詢非null的值

select * from tblNullData where ColName is not null;

oracle結果如下:

997de7f55475b45ac209498febae1ff6.png

sql server結果如下:

3555e4a3b9a5d5603d3c52d52c07ff95.png

  • 查詢空值

select * from tblNullData where ColName='';

oracle結果如下:

05661a27335e34669a808445d56e2003.png

sql server結果如下:

2d9a9fab0268cd3a7aed1570f0e83ef9.png


字數不夠,小常識來湊

lag與lead函式是跟偏移量相關的兩個分析函式,通過這兩個函式可以在一次查詢中取出同一欄位的前N行的資料(lag)和後N行的資料(lead)作為獨立的列,從而更方便地進行進行資料過濾。這種操作可以代替表的自聯接,並且LAG和LEAD有更高的效率。

over()表示 lag()與lead()操作的資料都在over()的範圍內,他裡面可以使用partition by 語句(用於分組) order by 語句(用於排序)。partition by a order by b表示以a欄位進行分組,再 以b欄位進行排序,對資料進行查詢。

例如:lead(field, num, defaultvalue) field需要查詢的欄位,num往後查詢的num行的資料,defaultvalue沒有符合條件的預設值。

select t.id id ,lead(t.id,1,null)over(orderbyt.id)next_id,from tb_test t       orderbyt.idasc

5dbb2079d03fe152615e3efd038cc051.png

END 951c6aed696b2a7bf9d670c748665d03.png

17cbe771272e6a14515e713415423ff4.gif