1,emp表
2,dept表
3,job表
4,loc表
创建表 复制oracle自带表
create table emp as select * from hr.employees;
create table dept as select * from hr.departments;
create table job as select * from hr.jobs;
create table loc as select * from hr.locations;
工资 = 薪金 + 佣金
1.列出至少有一个员工的所有部门。
- 这里用的是多行子查询 in
select * from dept
where department_id IN
(SELECT department_id FROM EMP group by department_id);
2,列出薪金比“Alexander”多的所有员工。
select first_name,salary from emp where salary >
(select max(salary) from emp where first_name = 'Alexander')
3.列出所有员工的姓名及其直接上级的姓名。
select a.first_name,
(select first_name from emp b where b.employee_id=a.manager_id)
as boss_name from emp a;
4,请在EMP表中查找部门号在10-30之间的雇员的姓名、部门号、部门名称、工资。
select first_name,department_id,salary,job_id from emp where department_id>=10 and department_id<=30;
5,列出部门名称和这些部门的员工信息,同时并列出那些没有员工的部门。
SELECT DEPT.*,EMP.* FROM DEPT LEFT JOIN EMP ON DEPT.DEPARTMENT_ID =EMP.Department_Id;
6.列出所有在“Seattle”(city等于这个值)工作的员工的姓名及其部门名称。
- 这里用的是相关子查询
select department_name ,
(select city from loc where loc.location_id = dept.location_id )
from dept
7.列出最低薪金大于15000的各种工作。
select min(salary) ,job_id from emp group by job_id having min(salary)>15000
9.列出薪金高于公司平均薪金的所有员工。
select first_name from emp where salary>
(select avg(salary) from emp )
12.列出薪金高于在Shipping部门工作的所有员工的薪金的员工姓名和薪金。
select first_name,salary from emp where salary > all
(select salary from emp where emp.department_id = (
select department_id from dept where department_name = 'Shipping'))
13.列出在每个部门工作的员工数量、平均工资。
select count(first_name),avg(salary)
from emp,dept
where emp.department_id = dept.department_id
14.列出所有员工的姓名、部门名称、工作地址、岗位名称和工资。
select first_name 姓名,
(select department_name from dept where dept.department_id = emp.department_id )部门名称,
(select street_address from loc where dept.location_id = loc.location_id )工作地址,
(select job_title from job where job.job_id = emp.job_id)岗位名称,
salary 工资
from emp,dept