Sql 是否编写SELECT语句以确定无效值?
这学期我在网上学习数据库设计课程,这是我第一次使用SQL。我毕业于通信专业,但我参加了一些计算机科学课程来帮助自己。我们使用的是MicrosoftSQLServer2008,我在练习的最后一个问题上被难住了。前6个简单(基本的选择函数、结果排序、使用别名重命名表等),但最后一个处理空值 它说: 编写一条SELECT语句,确定PaymentDate 发票表的列有任何无效值。为了有效, 如果存在到期余额和 如果没有到期余额,则为非空值。在中对复合条件进行编码 测试这些条件的WHERE子句 甚至不知道从哪里开始。哈哈。我通常在课堂环境中学习得更好,但我的课程安排不允许这样,所以任何解释都会有帮助!感谢您的帮助 戴夫DSql 是否编写SELECT语句以确定无效值?,sql,sql-server-2008,Sql,Sql Server 2008,这学期我在网上学习数据库设计课程,这是我第一次使用SQL。我毕业于通信专业,但我参加了一些计算机科学课程来帮助自己。我们使用的是MicrosoftSQLServer2008,我在练习的最后一个问题上被难住了。前6个简单(基本的选择函数、结果排序、使用别名重命名表等),但最后一个处理空值 它说: 编写一条SELECT语句,确定PaymentDate 发票表的列有任何无效值。为了有效, 如果存在到期余额和 如果没有到期余额,则为非空值。在中对复合条件进行编码 测试这些条件的WHERE子句 甚至不知道
那么哪一个是正确的呢?当有两个不同的答案时,很难将其分解:)在我休息的那天,我要去教授的办公室,这样她就可以亲自向我解释。任何人都可以笑,下面的代码将选择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。最后一个问题是这个问题使用了我不理解的空值:)