刚接触SQL不太会用EXISTS
这有道题怎样解:
某公司SQL Server 2000一数据库中的Employees表用于存放所有员工的信息,Orders表用于存放所有的订单信息,Orders表有一外部键引用Employees表的主键,两表的关系如下图所示:
 
现在公司想统计一下最近一个月内没有任何销售订单的员工,则下列SQL语句中符合要求的有( )。(选择一项)

a) SELECT LastName, FirstName 
FROM Employees AS e
WHERE EXISTS 
(SELECT * FROM Orders 
 WHERE Orders.EmployeeID=e.EmployeeID 
       AND Orders.OrderDate > GetDate()-30)
b) SELECT LastName, FirstName 
FROM Employees AS e
WHERE  (SELECT * FROM Orders 
 WHERE Orders.EmployeeID=e.EmployeeID 
       AND Orders.OrderDate < GetDate()-30) > 0
c) SELECT LastName, FirstName 
FROM Employees AS e
WHERE (SELECT * FROM Orders 
 WHERE Orders.EmployeeID=e.EmployeeID 
       AND Orders.OrderDate > GetDate()-30) < 0
d) SELECT LastName, FirstName 
FROM Employees AS e
WHERE EXISTS 
(SELECT * FROM Orders 
 WHERE Orders.EmployeeID=e.EmployeeID 
       AND Orders.OrderDate < GetDate()-30)是不是应该选D?

解决方案 »

  1.   

    SELECT LastName, FirstName 
    FROM Employees AS e
    WHERE NOT EXISTS 
    (SELECT * FROM Orders 
     WHERE Orders.EmployeeID=e.EmployeeID 
           AND Orders.OrderDate > GetDate()-30)
      

  2.   

    應該用NOT EXISTS ,怎麼會答案全是用EXISTS 的。
      

  3.   

    B,C语法错误码,A是查出过去一个月到现在有销售订单的人员,
    D是查出距今天一个月以前有销售订单的人员
    所在没有一个符合要求
      

  4.   

    服了  审题好么  人家要求找没有任何销售得员工  
    Orders.OrderDate > GetDate()-30 得出来得是有销售得员工吧
      

  5.   

    我也晕了,那么不看选项了,正确的写法应该怎么写?小马的答案可以麻烦解释一下吗?(题后答案是A)我不太明白为什么是Orders.OrderDate > GetDate()-30
    谢谢各位!
      

  6.   

    SELECT LastName, FirstName 
    FROM Employees AS e
    WHERE EXISTS 
    (SELECT * FROM Orders 
     WHERE Orders.EmployeeID=e.EmployeeID 
           AND Orders.OrderDate < GetDate()-30)----------------
    一个月前有销售订单 != 最近一个月内没有任何销售订单除非,一個EmployeeID對應到Orders中只有一條紀錄。
      

  7.   

    题后答案是A?!那麼答案應該是掉了一個NOT。
      

  8.   

    我做了个实验,这道题没有正确答案,一天到晚游泳的鱼 和 小马 说的对,应该有个NOT EXISTS,SELECT LastName, FirstName 
    FROM Employees AS e
    WHERE NOT EXISTS 
    (SELECT * FROM Orders 
     WHERE Orders.EmployeeID=e.EmployeeID 
           AND Orders.OrderDate > GetDate()-30)