select e.first_name, e.last_name, e.salary
from employees e
where salary > (select avg(salary) from employees);
first_name |last_name |salary |
-----------|----------|--------|
Steven |King |24000.00|
Neena |Kochhar |17000.00|
Lex |De Haan |17000.00|
...
SELECT column1, column2, ...
FROM (subquery) AS table_alias;
select d.department_name,
ds.sum_salary
from departments d
join (select department_id,
SUM(salary) as sum_salary
from employees
group by department_id) ds
on (d.department_id = ds.department_id);
department_name |sum_salary|
----------------|----------|
Administration | 4400.00|
Marketing | 19000.00|
Purchasing | 24900.00|
...
select d.department_id,
d.department_name
from departments d
where d.department_id in (select department_id from employees where hire_date >= date '2008-01-01');
department_id|department_name|
-------------|---------------|
50|Shipping |
80|Sales |
select first_name, last_name, salary
from employees
where salary > all (select salary from employees where department_id = 80);
first_name|last_name|salary |
----------|---------|--------|
Steven |King |24000.00|
Neena |Kochhar |17000.00|
Lex |De Haan |17000.00|
select first_name, last_name, salary
from employees
where salary > any (select salary from employees where department_id = 80);
first_name |last_name |salary |
-----------|----------|--------|
Steven |King |24000.00|
Neena |Kochhar |17000.00|
Lex |De Haan |17000.00|
Alexander |Hunold | 9000.00|
...
select first_name, last_name, salary
from employees o
where o.salary > (select avg(salary) from employees i where i.department_id = o.department_id);
SELECT d.department_name,
(SELECT SUM(salary)
FROM employees e
WHERE e.department_id = d.department_id) AS sum_salary
FROM departments d
ORDER BY d.department_name;
-- Error case
select d.department_name,
t.avg_salary
from departments d
join (select avg(e.salary) as avg_salary
from employees e
where e.department_id = d.department_id) t;
SQL Error [42601]: ERROR: syntax error at end of input
Position: 209
select d.department_name,
t.sum_salary
from departments d
cross join lateral (select sum(e.salary) as sum_salary
from employees e
where e.department_id = d.department_id) t;
select d.department_id,
d.department_name
from departments d
where exists (select 1 from employees where department_id = d.department_id and hire_date >= date '2008-01-01');
select d.department_id,
d.department_name
from departments d
where not exists (select 1 from employees where department_id = d.department_id);
select d.department_id,
d.department_name
from departments d
where d.department_id not in (select department_id from employees);
select first_name, last_name, department_id
from employees
where department_id is null;
first_name|last_name|department_id|
----------|---------|-------------|
Kimberely |Grant | |
原文作者:SQL编程思想;如有侵权,请联系管理员删除。