国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

Transact-SQL三值邏輯

2024-07-21 02:51:07
字體:
來源:轉載
供稿:網友
Transact-SQL三值邏輯

/*===========================<一>==========================

在SQL中邏輯表達式的值有三種:   1.TRUE   2.FALSE  3.UNKNOWNUNKNOWN邏輯值通常出現在包含NULL的邏輯表達式中,例如:  1. NULL > 0  2. NULL = NULL  3. 1 + NULL = X

============================<二>==========================

1. 在所有的查詢篩選器中【ON、WHERE、HAVING】,都把UNKNOWN當 做FALSE處理;2. 在CHECK約束中UNKNOWN的值被當做TRUE處理;3. 在UNIQUE約束、排序操作、分組操作UNKNOWN的值被當做TRUE處理; ============================<三>==========================*/

首先,你的測試數據庫中創建測試表,腳本如下:

USE Study --/*我的測試數據庫是Study,這里需要修改成你的數據庫名。*/GOCREATE TABLE Salary(    SalaryID NVARCHAR(36) NOT NULL    ,EmployeeID NVARCHAR(36)     ,Salary INTCONSTRAINT [PK_Salary] PRIMARY KEY CLUSTERED (    [SalaryID] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]GOALTER TABLE [dbo].[Salary] WITH NOCHECK ADD CONSTRAINT [CK_Salary] CHECK (([Salary] > 0))GOALTER TABLE [dbo].[Salary] CHECK CONSTRAINT [CK_Salary]GOALTER TABLE Salary ADD CONSTRAINT AK_Employee UNIQUE (EmployeeID);GO
View Code

然后,向測試表中插入數據。

--插入正常數據INSERT INTO [Study].[dbo].[Salary]    ([SalaryID]    ,[EmployeeID]    ,[Salary])VALUES    (NEWID()    ,NEWID()    ,4800)GO--插入EmployeeID為NULL的值INSERT INTO [Study].[dbo].[Salary]    ([SalaryID]    ,[EmployeeID]    ,[Salary])VALUES    (NEWID()    ,null    ,5600)GO--插入兩條SALARY為NULL的值INSERT INTO [Study].[dbo].[Salary]    ([SalaryID]    ,[EmployeeID]    ,[Salary])VALUES    (NEWID()    ,NEWID()    ,null)GOINSERT INTO [Study].[dbo].[Salary]    ([SalaryID]    ,[EmployeeID]    ,[Salary])VALUES    (NEWID()    ,NEWID()    ,null)GO
View Code

查詢一下,插入數據以后的表中的數據情況:

SELECT * FROM [Salary]
View Code

表數據:

SalaryIDEmployeeIDSalary
2D5E8F91-8312-4FA4-BF0C-2643E688555DNULL5600
6A22894A-9D7B-4964-9E1B-EF1307D86AFA70AD8361-B392-41A3-B30F-6F1B04281808NULL
B6D65637-D65E-4E62-BD15-741BD1F8F8C0CAA18E7E-A792-45B8-82CE-80F719359F62NULL
F0FDEA1F-1814-406C-A91C-146751B6BD922BA81F41-B9BC-4F2A-ABAA-662D1B1ED0324800

1. 驗證Check約束,建表時我加了Salary的Check約束,Salary > 0;

INSERT INTO [Study].[dbo].[Salary]    ([SalaryID]    ,[EmployeeID]    ,[Salary])VALUES    (NEWID()    ,NEWID()    ,-1000)GO
View Code

分析

  我插入-1000時有如下消息提示(說明我的約束是起作用的):

  The INSERT statement conflicted with the CHECK constraint "CK_Salary".   The conflict occurred in database "Study", table "dbo.Salary", column 'Salary'.

  前面我已經插入了兩條Salary為NULL的記錄,說明在Check約束中NULL > 0的邏輯值(UNKNOWN)  是被視為TRURE值。

2. 在查詢篩選器中,UNKNOWN被視作FALSE;

SELECT * FROM SalaryWHERE Salary > 4000
View Code

分析

  查詢結果為兩條數據,Salary分別為5600和4800.而兩條Salary為NULL的沒有被查詢出來。  說明NULL > 4000的邏輯值(UNKNOWN)被視為FALSE.

3. GROUP BY/ORDER BY中UNKNOWN被視作TRURE;

SELECT Salary FROM SalaryGROUP BY SalarySELECT Salary FROM SalaryORDER BY Salary ASC
View Code

查詢結果分別為:

1.分組查詢

Salary
NULL
4800
5600

2.排序查詢

Salary
NULL
NULL
4800
5600

分析:  根據以下查詢結果我們可以分析出:NULL == NULL的邏輯值(UNKNOWN),被視作TURE處理。

4. UNIQUE約束中,UNKNOWN被視作FALSE;EmployeeID已經加了UNIQUE約束,前面我已經

 插入了一條EmployeeID為NULL的值,下面我再插入一條EmployeeID為NULL的值的記錄:

INSERT INTO [Study].[dbo].[Salary]    ([SalaryID]    ,[EmployeeID]    ,[Salary])VALUES    (NEWID()    ,null    ,5600)GO
View Code

執行結果,提示如下信息:

Violation of UNIQUE KEY constraint 'AK_Employee'. Cannot insert duplicate key in object 'dbo.Salary'.

分析:  則說明 NULL == NULL的邏輯值(UNKNOWN),被視作FALSE處理。===========================<End>============================


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 丹棱县| 贺州市| 安化县| 云林县| 莱西市| 永平县| 丹阳市| 乾安县| 伊川县| 云浮市| 温宿县| 江城| 达拉特旗| 石柱| 墨江| 滨州市| 沛县| 灵寿县| 安塞县| 嘉禾县| 澎湖县| 五莲县| 石景山区| 香格里拉县| 沾益县| 霍州市| 池州市| 义马市| 巍山| 白朗县| 个旧市| 华容县| 金溪县| 阿拉尔市| 内丘县| 汉川市| 南川市| 舞钢市| 梅州市| 黔江区| 临沧市|