sqlserver in 語句效率_oracle與sqlserver的空值、NULL值對比
阿新 • • 發佈:2020-12-21
技術標籤:sqlserver in 語句效率
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 結果如下:
*Oracle把空值轉變成了 null。
sql server 結果如下:
查詢值為null
--都是空值select*fromtblNullDatawhereColName=null;--見下圖select * from tblNullData where ColName is null;
oracle 結果如下:
sql server結果如下:
想要查詢非null的值
select * from tblNullData where ColName is not null;
oracle結果如下:
sql server結果如下:
查詢空值
select * from tblNullData where ColName='';
oracle結果如下:
sql server結果如下:
字數不夠,小常識來湊:
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
END