试图了解JOINS以及何时在作业中使用它们

时间:2019-04-21 23:52:54

标签: sql oracle

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

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

我要回答的问题是:生成一个结果集,显示部门名称,员工名字,员工姓氏,员工头衔和员工小时工资。仅包括同时满足两个条件的记录:时薪为25美元或以上的员工;以及标题中随处可见“ Analyst”的员工。按部门名称排序,然后按员工职务排序。

这是表格: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,只是想知道完成此问题的正确方法。

2 个答案:

答案 0 :(得分:1)

您正在混合使用老式的“ FROM子句中的联接”(ANSI之前的联接)和ANSI样式的联接。引用平克·弗洛伊德(Pink Floyd)的话,“这不会做”。 :-)

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

p12

好运。

答案 1 :(得分: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

有一种特定于Oracle的较旧的非ANSI语法,该语法将逗号分隔的表列表放在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子句中的引号。