Sql 是否编写SELECT语句以确定无效值?

Sql 是否编写SELECT语句以确定无效值?,sql,sql-server-2008,Sql,Sql Server 2008,这学期我在网上学习数据库设计课程,这是我第一次使用SQL。我毕业于通信专业,但我参加了一些计算机科学课程来帮助自己。我们使用的是MicrosoftSQLServer2008,我在练习的最后一个问题上被难住了。前6个简单(基本的选择函数、结果排序、使用别名重命名表等),但最后一个处理空值 它说: 编写一条SELECT语句,确定PaymentDate 发票表的列有任何无效值。为了有效, 如果存在到期余额和 如果没有到期余额,则为非空值。在中对复合条件进行编码 测试这些条件的WHERE子句 甚至不知道

这学期我在网上学习数据库设计课程,这是我第一次使用SQL。我毕业于通信专业,但我参加了一些计算机科学课程来帮助自己。我们使用的是MicrosoftSQLServer2008,我在练习的最后一个问题上被难住了。前6个简单(基本的选择函数、结果排序、使用别名重命名表等),但最后一个处理空值

它说:

编写一条SELECT语句,确定PaymentDate 发票表的列有任何无效值。为了有效, 如果存在到期余额和 如果没有到期余额,则为非空值。在中对复合条件进行编码 测试这些条件的WHERE子句

甚至不知道从哪里开始。哈哈。我通常在课堂环境中学习得更好,但我的课程安排不允许这样,所以任何解释都会有帮助!感谢您的帮助

戴夫D



那么哪一个是正确的呢?当有两个不同的答案时,很难将其分解:)在我休息的那天,我要去教授的办公室,这样她就可以亲自向我解释。任何人都可以笑,下面的代码将选择PaymentDate无效的记录

SELECT * FROM Invoices WHERE (PaymentDate is not null and BalanceDue is not null) or (PaymentDate is null and BalanceDue is null)

因为有一个不正确的答案已经张贴,我要走这一步

这是一个逻辑问题,即
PaymentDate
BalanceDue
中的一个为空。在SQL中,使用表达式
IS NULL
测试NULL

因此,用于此的
where
子句如下所示:

where (PaymentDate is null and BalanceDue is not null) or -- this is the first clause
      (PaymentDate is not null and BalanceDue is null)    -- this is the second clause
与空值(=、=、或in)的任何其他比较都返回空布尔值,这些值被解释为FALSE


祝您学习SQL好运。

首先让我们看看表的样子,然后试一试。请更新您的答案。我可能会让这变得非常困难,但我不确定您的意思:(我们正在使用SQL Server Management Studio,所有数据库/表都已附加。列包括InvoiceID、VendorID、InvoiceNumber、InvoiceDate、InvoiceTotal、PaymentTotal、CreditTotal、TermsID、InvoiceDueDate和PaymentDueDate。InvoiceID是主键,根据设计,PaymentDate是唯一允许空值。“如果有余额到期”是否表示“不为空”或“>0”?如果是这样的话,我想得太多了哈哈。当你还不熟悉这一点的时候,一切看起来都很复杂。只需要退一步,看看它的要求。表达式
null
在SQL中的计算结果总是为false。这个答案是不正确的。你不能与null进行比较,也不能期望得到有意义的结果。你需要使用is null or不是空的。如果仍然存在不正确的答案,请确保投反对票。@NickVaccaro…我非常不愿意投反对票。但是,我会评论。这个“where”语句选择PaymentDate有效的结果,因此它的作用正好相反。由于不清楚BalanceDue是否应为NULL或正值,因此使用COALESCE或NVL函数会更安全。我自己已经阅读了COALESCE和NVL函数,但我们没有在文中讨论它们。这是第三周。第一周我们基本凯莉介绍了我们自己。第二周问题为我们提供了查询,我们只需执行并保存查询。本周我们必须使用编写我们自己的查询。第一个示例是基本的选择和顺序,第二个示例我们必须使用别名更改名称,并使用一些加减法创建余额,等等。我们必须创建一个新的列using VendorFName和VendorLName。最后一个问题是这个问题使用了我不理解的空值:)