本学期我正在网上学习数据库设计课程,这是我第一次使用SQL。我毕业于通信学位,但我正在参加某些计算机科学课程来帮助自己。我们正在使用Microsoft SQL Server 2008,而且我对我们练习的最后一个问题感到困惑。前6个是轻而易举的(基本选择函数,排序结果,使用别名重命名表等),但最后一个处理空值。
它声明:
编写一个确定PaymentDate的SELECT语句 Invoices表的列具有任何无效值。为了有效, 如果有到期余额,则PaymentDate必须为空值 如果没有到期余额,则为非空值。编码复合条件 测试这些条件的WHERE子句。
甚至不知道从哪里开始。哈哈。我通常在课堂上学得更好,但我的课程安排不允许这个课程,所以任何解释都会有所帮助!任何帮助表示赞赏!
Dave D。
哪一个是正确的?当有两个不同的答案时,很难将其分解:)在我休息的日子,我将前往教授的办公室,以便她可以亲自向我解释任何大声笑
答案 0 :(得分:1)
以下代码将选择PaymentDate无效的记录
SELECT * FROM Invoices WHERE (PaymentDate is not null and BalanceDue is not null) or (PaymentDate is null and BalanceDue is null)
答案 1 :(得分:1)
因为已经发布了错误答案,我将逐步介绍。
这是一个逻辑问题,表示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
与NULL值(=,<>,<,< =,>,> =或in)的任何其他比较都会返回NULL布尔值,这些值被解释为FALSE。
祝你好运学习SQL。