1.数据库中有以下两张表:
部门表 - dept :deptno dname
员工表 - emp :empno、ename、deptno、sal请按要求写出标准的SQL 语句:
1)列出工资大于2000 的员工所属的部门编号
2)列出员工表中的部门名称 (用左连接)
3)列出员工少于3人的部门编号
4)求各部门的员工工资总额
5)求每个部门中的最大工资值和最小工资值,并且最小值小于5000,最大值大于15000
6)加入现在数据库中有一个和员工表结构相同的空表emp2,请用一条SQL 语句将emp 表中的所有记录插入到emp2 表中
部门表 - dept :deptno dname
员工表 - emp :empno、ename、deptno、sal请按要求写出标准的SQL 语句:
1)列出工资大于2000 的员工所属的部门编号
2)列出员工表中的部门名称 (用左连接)
3)列出员工少于3人的部门编号
4)求各部门的员工工资总额
5)求每个部门中的最大工资值和最小工资值,并且最小值小于5000,最大值大于15000
6)加入现在数据库中有一个和员工表结构相同的空表emp2,请用一条SQL 语句将emp 表中的所有记录插入到emp2 表中
1:select e.ename,d.dname
from emp e,dept d
where d.deptno=e.deptno and sal >2000
2:select e.ename,d.dname
from emp e left join dept d on d.deptno=e.deptno
3:
select d.dname
from dept d
where d.deptno in(
select e.deptno
from emp e
group by e.deptno
having count(*)>3 )
group by deptno5:select max(sal),min(sal)
from emp
group by deptno
having max(sal)>15000 and min(sal)<50006:insert into emp select * from emp2
部门表 - dept :deptno dname
员工表 - emp :empno、ename、deptno、sal请按要求写出标准的SQL 语句:
1)列出工资大于2000 的员工所属的部门编号
---select distinct deptno from dept a where exisits(select 1 from emp b where a.deptno=b.deptno and b.sal>2000)
2)列出员工表中的部门名称 (用左连接)
select a.deptno,b.dname from emp a,dept b where a.deptno=b.deptno(+)
3)列出员工少于3人的部门编号
select deptno from emp group by deptno having count(*)<3
4)求各部门的员工工资总额
select sum(sal) from emp group by deptno
5)求每个部门中的最大工资值和最小工资值,并且最小值小于5000,最大值大于15000
max(sal),min(sal) from emp group by deptno
6)加入现在数据库中有一个和员工表结构相同的空表emp2,请用一条SQL 语句将emp 表中的所有记录插入到emp2 表中
insert into emp2 select * from emp
SQL> select * from emp;
/*
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7369 SMITH CLERK 7902 1980-12-17 800.00 20
7499 ALLEN SALESMAN 7698 1981-2-20 1600.00 300.00 30
7521 WARD SALESMAN 7698 1981-2-22 1250.00 500.00 30
7566 JONES MANAGER 7839 1981-4-2 2975.00 20
7654 MARTIN SALESMAN 7698 1981-9-28 1250.00 1400.00 30
7698 BLAKE MANAGER 7839 1981-5-1 2850.00 30
7782 CLARK MANAGER 7839 1981-6-9 2450.00 10
7788 SCOTT ANALYST 7566 1987-4-19 3000.00 20
7839 KING PRESIDENT 1981-11-17 5000.00 10
7844 TURNER SALESMAN 7698 1981-9-8 1500.00 0.00 30
7876 ADAMS CLERK 7788 1987-5-23 1100.00 20
7900 JAMES CLERK 7698 1981-12-3 950.00 30
7902 FORD ANALYST 7566 1981-12-3 3000.00 20
7934 MILLER CLERK 7782 1982-1-23 1300.00 1014 rows selected
*/
SQL> select * from dept;
/*
DEPTNO DNAME LOC
------ -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
*/
--1)列出工资大于2000 的员工所属的部门编号
SQL> select e.ename,d.dname,e.sal
2 from emp e,dept d
3 where e.sal>2000 and
4 e.deptno=d.deptno;
/*
ENAME DNAME SAL
---------- -------------- ---------
CLARK ACCOUNTING 2450.00
KING ACCOUNTING 5000.00
JONES RESEARCH 2975.00
FORD RESEARCH 3000.00
SCOTT RESEARCH 3000.00
BLAKE SALES 2850.00
*/
--2)列出员工表中的部门名称 (用左连接)
SQL> select e.ename,d.deptno,d.dname
2 from emp e,dept d
3 where e.deptno=d.deptno(+);
/*
ENAME DEPTNO DNAME
---------- ------ --------------
MILLER 10 ACCOUNTING
KING 10 ACCOUNTING
CLARK 10 ACCOUNTING
FORD 20 RESEARCH
ADAMS 20 RESEARCH
SCOTT 20 RESEARCH
JONES 20 RESEARCH
SMITH 20 RESEARCH
JAMES 30 SALES
TURNER 30 SALES
BLAKE 30 SALES
MARTIN 30 SALES
WARD 30 SALES
ALLEN 30 SALES
*/
--3)列出员工少于3人的部门编号
SQL> select d.deptno
2 from dept d
3 where d.deptno in(
4 select e.deptno
5 from emp e
6 group by e.deptno
7 having count(e.deptno)<3);
/*
DEPTNO
------*/
SQL> select d.deptno,nvl(count(e.ename),0) d_person_num
2 from emp e,dept d
3 where e.deptno=d.deptno
4 group by d.deptno;
/*
DEPTNO D_PERSON_NUM
------ ------------
10 3
20 5
30 6
*/
--4)求各部门的员工工资总额
SQL> select d.dname,sum(e.sal)
2 from emp e,dept d
3 where e.deptno=d.deptno
4 group by d.dname;
/*
DNAME SUM(E.SAL)
-------------- ----------
ACCOUNTING 8750
RESEARCH 10875
SALES 9400
*/
--5)求每个部门中的最大工资值和最小工资值,并且最小值小于5000,最大值大于15000
--“并且最小值小于5000,最大值大于15000”这句话理解不了?
SQL> select deptno,max(sal),min(sal)
2 from emp
3 group by deptno;
/*
DEPTNO MAX(SAL) MIN(SAL)
------ ---------- ----------
10 5000 1300
20 3000 800
30 2850 950
*/
--6)加入现在数据库中有一个和员工表结构相同的空表emp2,
--请用一条SQL 语句将emp 表中的所有记录插入到emp2 表中
SQL> create table emp2 as
2 select * from emp;Table createdSQL> desc emp2;
Name Type Nullable Default Comments
-------- ------------ -------- ------- --------
EMPNO NUMBER(4) Y
ENAME VARCHAR2(10) Y
JOB VARCHAR2(9) Y
MGR NUMBER(4) Y
HIREDATE DATE Y
SAL NUMBER(7,2) Y
COMM NUMBER(7,2) Y
DEPTNO NUMBER(2) Y SQL> select * from emp2;
/*
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7369 SMITH CLERK 7902 1980-12-17 800.00 20
7499 ALLEN SALESMAN 7698 1981-2-20 1600.00 300.00 30
7521 WARD SALESMAN 7698 1981-2-22 1250.00 500.00 30
7566 JONES MANAGER 7839 1981-4-2 2975.00 20
7654 MARTIN SALESMAN 7698 1981-9-28 1250.00 1400.00 30
7698 BLAKE MANAGER 7839 1981-5-1 2850.00 30
7782 CLARK MANAGER 7839 1981-6-9 2450.00 10
7788 SCOTT ANALYST 7566 1987-4-19 3000.00 20
7839 KING PRESIDENT 1981-11-17 5000.00 10
7844 TURNER SALESMAN 7698 1981-9-8 1500.00 0.00 30
7876 ADAMS CLERK 7788 1987-5-23 1100.00 20
7900 JAMES CLERK 7698 1981-12-3 950.00 30
7902 FORD ANALYST 7566 1981-12-3 3000.00 20
7934 MILLER CLERK 7782 1982-1-23 1300.00 1014 rows selected
*/
SQL> drop table emp2;Table dropped