【问题标题】:mySql Subquery Answers Check Final Exam QuestionsmySql 子查询答案检查期末考试问题
【发布时间】:2016-01-03 19:21:12
【问题描述】:

我对我的这些答案有些疑问,如果你们能澄清我的正确或错误,将不胜感激,

问题:

一名员工可能被分配到多个项目,而一个项目可能有许多员工。考虑以下关系模式并为以下查询编写SQL 语句。

Employees (empID, empName, empDOB, empAddress, salary, deptID, jobID)

Assignments (empID, projID, assignedDate, completionDate, status)

Projects (projID, projDescription, startDate, endDate, projType)

(a) 显示 1980 年 1 月 31 日之前出生并分配了“办公综合体”类型项目的员工姓名,按姓名升序排列结果。 (5分)

(b) 检索分配了至少两 (2) 个项目的 empID。 (5分)

答案:

(a) SELECT empName FROM Employees WHERE empDOB < '31-01-1980' AND projType = (SELECT projType FROM Projects WHERE projType = 'Office Complex') ORDER BY empName; 

(b) SELECT empID FROM Employees GROUP BY (SELECT projID From Projects) HAVING COUNT(*)>1 ORDER BY empID; 

我觉得第二个问题的答案可能是错误的。

【问题讨论】:

  • 关于 b):仔细查看“作业”表。这个存储有价值的数据,可以帮助您。
  • 我正在试图弄清楚,也是在答案 (a) 中,这不是错误的,因为我从员工那里获取并将 WHERE 子句与项目类型的项目表相关联吗?
  • 使用 sql-server 标签标记 MySQL 问题会降低您的考试成绩 5 分:-)
  • 您应该熟悉JOIN 操作。您应该首先JOIN 需要从中获取数据的表,然后指定您的选择。
  • 你遇到了麻烦!另一个建议:考虑将JOIN 运算符与ON 结合使用。这使您的查询更具可读性并且很常用。

标签: mysql sql sql-server database


【解决方案1】:

对于 a) 部分,我将加入表格以匹配员工与项目类型:

 SELECT empName 
 FROM Employees 
 INNER JOIN Assignments ON Assignments.empID = Employees.empID
 INNER JOIN Projects ON Assignments.projID = Projects.projID
 WHERE empDOB < 31-01-1980 AND projType = 'Office Complex' 
 ORDER BY empName;

就目前而言,您的语句尝试在 Employee 表中查找 projType = 'Office Complex',但它并不存在。

对于第二个问题,您需要的一切都在 Assignments 表中:

SELECT empID, COUNT(projID)
FROM Assignments
GROUP BY empID
HAVING COUNT(projID) > 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多