【发布时间】:2017-03-30 05:09:32
【问题描述】:
我正在为我的数据库考试而学习,该考试涵盖了我需要手写的大量 SQL 语句。下面是我的书中概述的 2 个场景的架构图和解决方案,这些场景对我来说似乎没有意义。
Q13:检索部门 5 中每周在 ProductX 项目上工作超过 10 小时的所有员工的姓名。
SELECT FNAME, LNAME
FROM EMPLOYEE,PROJECT, WORKS_ON
WHERE DNO = 5 AND PNAME = ‘PRODUCT X’ AND HOURS>10 AND ESSN=SSN;
WHERE 子句不应该包含 PNO = NUMBER 吗? WORKS_ON 表如何知道引用 PROJECT 表而不包括它?是不是因为我们引用了ESSN = SSN?
Q1:检索拥有同名家属且性别相同的每位员工的姓名。
SELECT E.FNAME, E.LNAME
FROM EMPLOYEE AS E
WHERE E.SSN IN (SELECT D.ESSN FROM DEPENDENT AS D WHERE E.FNAME = D.DEPENDENT_NAME AND D.SEX = E.SEX);
我一直理解这个查询,直到 WHERE 子句。我不明白 E.SSN IN 试图对前面的子查询做什么。如果有人可以解释这一点,那就太好了。
【问题讨论】:
-
永远不要使用逗号连接语法。并查看相关子查询和非相关子查询。
-
您使用的是 MySQL 还是 MS SQL Server? (不要标记未涉及的产品。)
标签: mysql sql sql-server database database-design