按子查询排序

时间:2015-03-08 12:17:00

标签: sql oracle subquery sql-order-by

我有以下oracle SQL代码,但我无法理解子查询的排序目的是什么。任何人都可以向我解释清楚吗?

SELECT employee_id, last_name
  FROM employees e
 ORDER BY (
            SELECT department_name
            FROM departments d
            WHERE e.department_id = d.department_id
           );

2 个答案:

答案 0 :(得分:4)

排序由其他表的结果完成。在这种情况下,查询仅返回employees表的结果,但排序由department_name完成,departments存储在employees表中。

您可以通过使用连接,仅从department_name表中选择值,并从部门表中按SELECT e.employee_id, e.last_name FROM employees e INNER JOIN departments d ON e.department_id = d.department_id ORDER BY d.department_name 排序来获得相同的结果:

LEFT

如果员工必须始终拥有部门,则此查询有效。如果可能有没有部门的员工,那么您应该使用{{1}}加入。

答案 1 :(得分:1)

该查询的明确意图是employee_id,员工的last_name应该是来自各部门的department_name。

好的,你没有子查询然后去加入

select e.employee_id,e.last_name from employees e join departments d on
e.department_id = d.department_id order by d.department_name;