1、 列出与“SCOTT”从事相同工作的所有员工及部门名称,部门人数。
# 按照部门分组 , 求出部门名称和人数
select e.deptno ,dname, count(empno) ct from emp e, dept d where e.deptno = d.deptno group by e.deptno, d.dname
# 单表查询所有员工
select from emp where job = (select job from emp where ename = 'SCOTT');
# 多表联查
select e.*,nt.dname, nt.ct
from emp e , (select e.deptno ,dname, count(empno) ct from emp e, dept
d where e.deptno = d.deptno group by e.deptno, d.dname) nt
where e.deptno = nt.deptno and job = (select job from emp where ename = 'SCOTT');
2、 列出公司各个工资等级雇员的数量、平均工资。
select s.grade,count(empno), avg(sal)
from emp e , salgrade s
where e.sal between s.losal and s.hisal
group by s.grade
3、 列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金、部门名称。
#在部门30工作的所有员工的薪金
select sal from emp where deptno = 30
select e.ename, e.sal , d.dname
from emp e join dept d on e.deptno = d.deptno
where sal > all(select sal from emp where deptno = 30);
4、 列出在每个部门工作的员工数量、平均工资和平均服务期限。
select deptno, count(empno),avg(sal) , avg(datediff(now(),hiredate)/365)
from emp
group by deptno
# 第二种更加精确的方式
select deptno, count(empno),avg(sal) , avg(timestampdiff(year,hiredate,now()))
from emp
group by deptno
5、 列出所有员工的姓名、部门名称和工资。
select ename, dname, sal from emp e join dept d on e.deptno = d.deptno
6、 列出所有部门的详细信息和部门人数。
# 1- 部门人数
select deptno , count(1) ct from emp group by deptno
# 2- 使用子查询+ 多表查询
select d.*, nt.ct
from dept d left join (select deptno , count(1) ct from emp group by deptno) nt
on d.deptno = nt.deptno
7、 列出各种工作的最低工资及从事此工作的雇员姓名。
# 各种工作的最低工资 该最低工资的雇员
select ename from emp where sal in (select min(sal) from emp group by job);
8、 列出各个部门的MANAGER(经理)的最低薪金、姓名、部门名称、部门人数。
# 1- 各个部门的MANAGER(经理)的最低薪金
select deptno, min(sal) min_sal from emp where job = 'MANAGER' group by deptno;
# 2- 统计部门人数
select deptno , count(1) ct from emp group by deptno;
# 3- 四表联合查询
select nt_sal.min_sal 最低薪金,e.ename, d.dname,nt_ct.ct
from emp e,dept d,
(select deptno, min(sal) min_sal from emp where job = 'MANAGER' group by deptno) nt_sal ,
(select deptno , count(1) ct from emp group by deptno) nt_ct
where e.deptno = d.deptno
and e.deptno = nt_sal.deptno
and e.deptno = nt_ct.deptno
and e.job = 'MANAGER'
9、 列出所有员工的年工资,所在部门名称,按年薪从低到高排序。
select e.sal + ifnull(comm,0) 年薪, d.dname
from emp e join dept d on e.deptno = d.deptno order by 年薪;
10、查出某个员工的上级主管及所在部门名称,并要求这些主管的薪水超过3000
# 员工姓名, 主管姓名 主管所在部门名称, 主管sal > 3000
select e.ename, m.ename, d.dname
from emp e join emp m on e.mgr = m.empno join dept d on m.deptno = d.deptno
where m.sal >= 3000
#
select e.ename, m.ename, d.dname
from emp e,emp m,dept d
where e.mgr = m.empno and m.deptno = d.deptno and m.sal >= 3000
11、求出部门名称中,带‘S’字符的部门员工的、工资合计、部门人数。
12、给任职日期超过30年或者在87年雇佣的雇员加薪,加薪原则:10部门增长10%,20部门增长20%,30部门增长30%,依次类推。
13.列出至少有一个员工的所有部门的信息:
14.列出薪金比SMITH对的所有员工:
15.列出所有员工的姓名以及其直接上级的姓名:
16.列出受雇日期早于其直接上级的所有员工的编号、姓名,部门名称
17.列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门
18.列出所有"CLERK(职员)"的姓名以及部门名称,部门的人数
19.列出最低薪金大于1500的各种工作以及从事此工作的全部雇员人数
20.列出在部门"SALES"工作的员工的姓名,假定不知道销售部的部门编号
21.列出薪金高于公司平均薪金的所有员工,所在部门,上级领导,公司的工资等级
25.列出受雇日期早于其直接上级的所有员工的编号、姓名、部门名称、部门位置、部门人数。
32.查询dept表的结构
33.检索emp表,用is a 这个字符串来连接员工姓名和工种两个字段
34.检索emp表中有提成的员工姓名、月收入及提成。
35.创建my_employee表,向表中插入下列数据
ID FIRST_NAME LAST_NAME USERID SALARY
1 patel Ralph Rpatel 895
2 Dancs Betty Bdancs 860
3 Biri Ben Bbiri 1100
4 Newman Chad Cnewman 750
5 Ropeburn Audrey Aropebur 1550
36.将3号员工的last_name修改为"drelxer"
37.将所有工资少于900的员工的工资修改为1000
38.删除所有数据
39.清空表my_employee
40. 创建表dept
列名 Null? type
id Number(7)
name Varchar2(25)
41.将表emp中的数据插入表dept中
42.创建表emp2
name Null? type
id Number(7)
First_name Varchar2(25)
Last_name Varchar2(25)
Dept_id Number(7)
43.直接删除表emp2中的列dept_id
44.将列Last_name的长度增加到50
45.根据表emp创建employees2
46.将表employees2重命名为emp3
47.在表dept和emp中添加新列test_column(varchar2(50)),并检查所作的操作
48.向表emp的id列中添加PRIMARY KEY约束
49.向表emp中添加列dept_id,并在其中定义FOREIGN KEY约束,与之相关联的列是dept表中的id列。
50.向表dept的id列中添加PRIMARY KEY约束