国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Sql Server - SQL Server中NULL的正確使用與空間占用

SQL Server中NULL的正確使用與空間占用

2020-05-01 16:14MSSQL教程網 Sql Server

這篇文章主要介紹了SQL Server中NULL的正確使用與空間占用的相關資料,需要的朋友可以參考下

我們常在SQL Server的使用或維護中遇上NULL,那么什么是NULL?如下是MSDN給出的一段簡短描述(見“Null Values”):

  • A value of NULL indicates that the value is unknown. A value of NULL is different from an empty or zero value. No two null values are equal. Comparisons between two null values, or between a NULL and any other value, return unknown because the value of each NULL is unknown.

通俗的講,NULL就是一個值,而且這個值是未知的(unknown);NULL不能等價任何值,甚至都不等價它自己,即NULL不等于NULL。

為了清晰的理解上述的內容,我們創建一個測試表Test_NULL,然后對表插入2條含有NULL值的記錄,并進行相關驗證操作:

?
1
2
3
4
5
6
7
8
9
10
11
12
--創建一張允許NULL值的表
CREATE TABLE Test_NULL (
  num INT NOT NULL PRIMARY KEY
  ,fname NVARCHAR(50) NULL
  ,lname NVARCHAR(50) NULL
)
 
--對表插入4條數據:最后2條記錄含有NULL值
INSERT INTO Test_NULL (num,fname,lname) VALUES(1, 'Tom','Jane')
INSERT INTO Test_NULL (num,fname,lname) VALUES(2, 'Dave','')
INSERT INTO Test_NULL (num,fname) VALUES(3, 'Aaron')
INSERT INTO Test_NULL (num,fname) VALUES(4, 'Betty')

為了驗證NULL值是未知的,我們通過如下SQL查詢表Test_NULL的記錄,對lname字段進行=操作:

--若兩個NULL是可以相等的,那么將輸出4條記錄。實際只輸出2條記錄

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT
  *
FROM Test_NULL tn
LEFT JOIN Test_NULL g
  ON tn.num = g.num
WHERE tn.lname = g.lname
------------------------------------------
1  Tom Jane  1  Tom Jane
2  Dave    2  Dave 
 
--查詢lname為''的記錄,即驗證NULL不等于''
SELECT
  *
FROM Test_NULL tn
WHERE tn.lname = ''
------------------------------------------
2  Dave 

正確查詢/使用SQL Server中的NULL

由于NULL是未知的,因此在SQL Server默認情況下我們不能使用=或<>去判斷或查詢一條NULL的記錄(見上述),正確的方式是:使用IS NULL或IS NOT NULL去查詢或過濾一條含有NULL的記錄。

另外有函數ISNULL(),可判斷并轉換NULL為其他值。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
--通過IS NULL查詢含有NULL的記錄
SELECT
  *
FROM Test_NULL tn
WHERE tn.lname IS NULL
------------------------------------------
3  Aaron  NULL
4  Betty  NULL
 
--NULL不等于任何值,甚至NULL不等于NULL
--默認不能使用<>或=匹配NULL
SELECT
  *
FROM Test_NULL tn
WHERE tn.lname <> NULL OR tn.lname = NULL
------------------------------------------

但需注意:SQL Server僅是在默認情況下不能使用=或<>,當設置ANSI_NULLS為OFF后,即可使用=或<>查詢NULL值

換言之,SQL Server默認是開啟ANSI_NULLS選項的。

?
1
2
3
4
5
6
7
8
9
--設置ANSI_NULLS為OFF,并使用=NULL查詢記錄
SET ANSI_NULLS OFF
SELECT
  *
FROM Test_NULL tn
WHERE tn.lname = NULL
------------------------------------------
3  Aaron  NULL
4  Betty  NULL

插入或更新NULL值:

?
1
2
3
4
5
6
--插入1條含有NULL的新記錄
INSERT INTO Test_NULL (num,fname,lname) VALUES(5, 'Serena', NULL)
 
--更新某條記錄的字段值為NULL
UPDATE Test_NULL SET fname = NULL
WHERE num = 2

NULL的空間占用

通常的認識是:NULL在可變長類型(如nvarchar(50),varchar(8))中是不占用空間的,在固定長度的類型(如int)中會占用存儲空間。

實際上,上述的認識不夠嚴謹。真實情況是,NULL在可變長與固定長度的類型中均會占用空間

在SQL Server非Sparse Columns中,存儲NULL的值需1個bit的NULL bitmap mask。

以上就是本文的全部內容,希望對大家的學習有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 成人动慢 | 国产美女网站 | 综合激情网 | 日韩精品一区二区三区在线观看 | 久久久久久久久综合 | av在线网址观看 | 99黄色片 | 国产亚洲精品久久久久久无几年桃 | 精品国产一区二区三区四 | 久久久久久久一区 | 精品久久久av | 国产一区二区三区久久久久久久久 | 国产精品成人一区二区三区 | 久久亚洲一区二区三区四区 | 做a视频免费观看 | 久久久久久国产精品 | 成人午夜 | 欧洲精品久久久 | 一级做a爰片久久高潮 | 欧美日韩精品一区二区三区四区 | 欧美中文字幕一区二区三区亚洲 | 一区日韩 | 亚洲欧美在线观看 | 欧美日韩第一页 | 国产成人精品综合 | 黄色电影在线免费观看 | 国产精品黄色 | 91免费看网站 | www.中文字幕.com| 情一色一乱一欲一区二区 | 精品在线一区二区三区 | 一区二区三区高清在线 | 亚洲人成免费网站 | 欧美精品在线播放 | 国产999精品久久久影片官网 | 婷婷成人基地 | 免费国产wwwwwww网站 | 日本在线免费 | 亚洲免费人成在线视频观看 | 亚洲三级在线观看 | 一区二区国产精品 |