sql条件不等于0把null值也过滤掉了

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql条件不等于0把null值也过滤掉了相关的知识,希望对你有一定的参考价值。

正常sql条件不等于零的话,确实是把null指的也过滤掉了,当然你也可以加上null的条件,然后就可以把它包含进去。 参考技术A 再添加一个不等于null的条件。

SQL Server外键关系是强制约束,外键值也可以是空(NULL)

在SQL Server中,实际上外键值可不可以为空(NULL),和外键关系是不是强制约束无关。

 

我们先在SQL Server数据库中建立两张表People和Car,一个People可以有多个Car,所以这两张表是一对多关系。

 

People建表语句:

CREATE TABLE [dbo].[People](
    [ID] [int] NOT NULL,
    [Name] [nvarchar](50) NULL,
    [Age] [int] NULL,
    [Sex] [nvarchar](50) NULL,
 CONSTRAINT [PK_People] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

其中列ID是People表的主键

 

Car建表语句:

CREATE TABLE [dbo].[Car](
    [ID] [int] NOT NULL,
    [Brand] [nvarchar](50) NULL,
    [PeopleID] [int] NULL,
 CONSTRAINT [PK_Car] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[Car]  WITH CHECK ADD  CONSTRAINT [FK_Car_People] FOREIGN KEY([PeopleID])
REFERENCES [dbo].[People] ([ID])
GO

ALTER TABLE [dbo].[Car] CHECK CONSTRAINT [FK_Car_People]
GO

其中列ID是Car表的主键,此外列PeopleID是Car表的外键,其关联People表的主键ID。我们还为People表和Car表之间的外键关系[FK_Car_People]设置了强制约束(CHECK)。

 

下面我们为People表插入两条数据:

INSERT INTO [dbo].[People](ID,Name,Age,Sex)
VALUES
(1,N张三,25,N),
(2,N李四,26,N);

查询结果如下:

技术图片

 

然后我们为Car表插入五条数据:

INSERT INTO [dbo].[Car](ID,Brand,PeopleID)
VALUES
(1,N奔驰,1),
(2,N宝马,1),
(3,N大众,2),
(4,N别克,NULL),
(5,N丰田,NULL);

注意我们在最后两条数据"别克"和"丰田"中,插入了空值(NULL)到Car表的外键列PeopleID。但是语句并没有报错,五条数据都被成功插入了,查询结果如下:

技术图片

 

所以Car表的外键列PeopleID能不能为空(NULL),和其外键关系[FK_Car_People]是不是强制约束(CHECK)无关,它只和Car表允不允许外键列PeopleID为空(NULL)相关。

现在我们把Car表的外键列PeopleID改为不允许为空(NULL),然后再次插入前面的五条数据:

DELETE FROM [dbo].[Car]

ALTER TABLE [dbo].[Car]
ALTER COLUMN [PeopleID] INT NOT NULL

INSERT INTO [dbo].[Car](ID,Brand,PeopleID)
VALUES
(1,N奔驰,1),
(2,N宝马,1),
(3,N大众,2),
(4,N别克,NULL),
(5,N丰田,NULL);

这时插入语句就会报错了,因为此时Car表的外键列PeopleID不能为空(NULL):

技术图片

 

所以SQL Server中的外键关系强制约束,约束的实际上是外键的非空值,而外键的空值(NULL)并不受外键强制约束。

 

以上是关于sql条件不等于0把null值也过滤掉了的主要内容,如果未能解决你的问题,请参考以下文章

在ibatis中在sql语句判断的时候isEqual和isNull的区别是啥地方

SQL优化的方式

SQL语句如何写不等于?

oracle 不等于1怎么查?

mysql不等于判断时,空值过滤问题

SQl2008中主键不能等于NULL,可是可以等于null,这是为啥。