Могу ли я написать приведенный ниже запрос, используя коррелированное «СУЩЕСТВУЕТ»

#sql #oracle

Вопрос:

 select first_name, department_id, salary   
from employees e1  
where salary > (select avg(salary) 
                from employees e2 
                where e2.department_id=e1.department_id )
 

Ответ №1:

Да, вы можете:

 select first_name, department_id, salary
from employees e1
where exists (select 1
              from employees e2
              where e2.department_id = e1.department_id
              having e1.salary > avg(e2.salary)
             );
 

Однако я нахожу вашу версию со скалярным подзапросом более понятной. И я не думаю, что есть разница в производительности.