试图理解JOINS以及何时在家庭作业问题中使用它们

问题描述 投票:1回答:2

我是SQL的新手,我不确定我是否正在使用条件来解决我想要回答作业的问题。

我有一个完整的SELECT语句,我只想知道我是否正确使用条件,如果代码是正确的。我无法测试它,因为我没有给出表格内容。

我想回答的问题是:生成一个结果集,显示部门名称,员工名字,员工姓氏,员工职称和员工小时工资。仅包括满足两个条件的记录:小时工资为25美元或以上的员工;和“分析师”的员工在他们的头衔中的任何地方。按部门名称排序,然后按员工标题排序。

这是表:https://imgur.com/a/sr8EHCn

SELECT deptName, empFirstName, empLastName, empTitle, empHourlyWage
FROM department, employee
JOIN employee on department.deptID=employee.deptID
WHERE empHourlyWage >= 25.00
AND empTitle LIKE ‘%Analyst’ 
ORDER BY deptName, empTitle;

我不认为我正确使用了JOIN,只是想知道完成这个问题的正确方法。

sql oracle
2个回答
1
投票

您正在混合FROM子句中的旧式“连接”(ANSI之前的)连接和ANSI样式的连接。引用Pink Floyd,“这不会做”。 :-)

只需从FROM子句中删除“,employee”,我认为你很好:

SELECT deptName, empFirstName, empLastName, empTitle, empHourlyWage
FROM department
JOIN employee on department.deptID=employee.deptID
WHERE empHourlyWage >= 25.00
AND empTitle LIKE ‘%Analyst’ 
ORDER BY deptName, empTitle;

祝你好运。


0
投票

SQL查询通常看起来或多或少像这样:

SELECT <columns and expressions of what you want to know>
FROM   <a table>
INNER JOIN <another table>
        ON <clause that relates first table to this table>
WHERE <zero or more predicates to filter on>
ORDER BY <columns to sort by>

所以在你的FROM条款中,只需拿出employee

有一种较旧的非ANSI语法特定于Oracle,它在FROM子句中放置以逗号分隔的表列表,并且不使用JOIN关键字。我建议你不要使用它,但如果你这样做,你的查询将如下所示:

SELECT deptName, empFirstName, empLastName, empTitle, empHourlyWage
  FROM department, employee
 WHERE department.deptID=employee.deptID  [<-- JOIN condition is here]
   AND empHourlyWage >= 25.00
   AND empTitle LIKE '%Analyst'
 ORDER BY deptName, empTitle;

另外,请注意empHourlyWage子句中的引号。

© www.soinside.com 2019 - 2024. All rights reserved.