botang 发表于 2020-9-13 20:45:41

关联子查询都可以改写成两表连接,普通子查询和关联子查询可以放在任何地方:

SELECT last_name, salary, department_id
FROM   employees outer
WHEREsalary >
    (SELECT AVG(salary)
FROM   employees
WHEREdepartment_id =
      outer.department_id) ;
      
select    e.employee_id, e.last_name , a.avg_sal   ,e.salary
from
(SELECT   department_id ,AVG(salary)avg_sal
    FROM   employeesgroupby department_id) a , employees e
    where e.department_id=a.department_id   and e.salary > a.avg_sal;
   
    select    e.employee_id, e.last_name , a.avg_sal   ,e.salary
from
(SELECT   department_id ,AVG(salary)avg_sal
    FROM   employeesgroupby department_id) a    join employees e
    using (department_id )wheree.salary > a.avg_sal;
   
SELECT   employee_id, last_name
FROM   employees e
ORDER BY            
(SELECT department_name
FROM departments d
WHERE e.department_id = d.department_id);

select department_id, department_name,
(select count(*)
from
employees e
where e.department_id = d.department_id) as emp_count
from
departments d;


selectd.department_id, d.department_name , count(*)
from employees e , departments d
where e.department_id(+) =d.department_id
group byd.department_id, d.department_name;


页: [1]
查看完整版本: 关联子查询都可以改写成两表连接,普通子查询和关联子查询可以放在任何地方: