- 浏览: 373671 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
一半水分子:
你好,我想转载您的文章,需要获取您的许可,请您在看到这条评论时 ...
Centos7 卸载ibus无法进入桌面 -
flylynne:
1、 车辆证书,发票和合格证都要齐全,不能听他们说是分开的,因 ...
技术内容 -
josico:
问一下,如果1替换成 M2替换成 N3替换成 O那其实不要这样 ...
SQL replace的使用 -
xiezhiwei0314:
lomboz 目录我也没有看到
Eclipse SDK安装web开发插件 -
xiezhiwei0314:
我安装好tomact插件但是没有看到web那个目录!在网上查了 ...
Eclipse SDK安装web开发插件
题目一:
有两张表:部门表department 部门编号dept_id 部门名称dept_name
员工表employee 员工编号emp_id 员工姓名emp_name 部门编号dept_id 工资emp_wage
根据下列题目写出sql:
1、列出工资大于5000的员工所属的部门名、员工id和员工工资; 2、列出员工表中的部门id对应的名称和员工id(左连接) 3、列出员工大于等于2人的部门编号 4、列出工资最高的员工姓名 5、求各部门的平均工资 6、求各部门的员工工资总额 7、求每个部门中的最大工资值和最小工资值,并且它的最小值小于5000,最大值大于10000 8、假如现在在库中有一个和员工表结构相同的空表employee2,请用一条sql语句将employee表中的所以记录插入到employee2表中。 answer:
--------------------------------------------------------------------------------
1:列出工资大于5000的员工所属的部门名、员工id和员工工资;
select emp_id,emp_wage,dept_name from employee as e inner join department as d on e.dept_id=d.dept_id where e.emp_wage>5000 group by e.emp_id;
--------------------------------------------------------------------------------
2:列出员工表中的部门id对应的名称和员工id(左连接)
select dept_name,emp_id from department d left join employee e on e.dept_id=d.dept_id group by e.emp_id;
+------------+--------+
| dept_name | emp_id |
+------------+--------+
| 咨询部 | NULL |
| 软件开发部 | 1001 |
| 市场策划部 | 1002 |
| 销售部 | 1003 |
| HR | 1004 |
| HR | 1005 |
| HR | 1006 |
| 软件开发部 | 1007 |
+------------+--------+
--------------------------------------------------------------------------------
3:列出员工大于等于2人的部门编号
select dept_name from department d [inner] join employee e on d.dept_id=e.dept_id group by dept_name
having count(e.dept_id) >=2;
--------------------------------------------------------------------------------
4:列出工资最高的员工姓名
select * from employee
where emp_wage =(select max(emp_wage) from employee);
+--------+----------+---------+----------+
| emp_id | emp_name | dept_id | emp_wage |
+--------+----------+---------+----------+
| 1007 | ad | 1 | 12000 |
+--------+----------+---------+----------+
--------------------------------------------------------------------------------
5: 求各部门的平均工资
select dept_name,AVG(emp_wage) as '平均工资' from employee e join department d on e
.dept_id=d.dept_id Group by dept_name;
+------------+------------+
| dept_name | 平均工资 |
+------------+------------+
| HR | 7500.0000 |
| 市场策划部 | 2500.0000 |
| 软件开发部 | 10000.0000 |
| 销售部 | 3200.0000 |
+------------+------------+
如果用右连接:
select dept_name,AVG(emp_wage) as '平均工资' from employee e right
join department d on e.dept_id=d.dept_id Group by dept_name;
+------------+------------+
| dept_name | 平均工资 |
+------------+------------+
| HR | 7500.0000 |
| 咨询部 | NULL |
| 市场策划部 | 2500.0000 |
| 软件开发部 | 10000.0000 |
| 销售部 | 3200.0000 |
+------------+------------+
--------------------------------------------------------------------------------
6:求各部门的员工工资总额
select dept_name,SUM(emp_wage) as '部门工资总额' from employee e join department d on e.dept_id=d.dept_id
Group by dept_name;
--------------------------------------------------------------------------------
7:求每个部门中的最大工资值和最小工资值,并且它的最小值小于5000,最大值大于10000
select dept_name ,max(emp_wage)from employee e inner join department d on e.dept_id=d.dept_id
where emp_wage>=10000
group by dept_name
union all
select dept_name ,
min(emp_wage) from employee e inner join department d on e.dept_id=d.dept_id
where emp_wage<=5000
group by dept_name;
如果是求每个部门中的最大工资值和最小工资值-->
select dept_name ,max(emp_wage),min(emp_wage) from employee e inner join department d on e.dept_id=d.dept_id group by dept_name;
--------------------------------------------------------------------------------
8:假如现在在库中有一个和员工表结构相同的空表employee2,请用一条sql语句将employee表中的所以记录插入到employee2表中。
insert into employee2 select * from employee;
二
--编写多表查询语句的一般过程
--(1)、分析句子要涉及到哪些表
--(2)、对应的表中要查询哪些关联字段
--(3)、确定连接条件或筛选条件
--(4)、写成完整的SQL查询语句
--1、查询出每一位雇员的姓名、职位、以及领导的姓名。
SELECT e.ename 雇佣姓名,e.job 职位,m.ename 领导姓名 FROM EMP e,EMP m WHERE e.mgr = m.empno;
--结果
雇佣姓名 职位 领导姓名
---------- --------- ----------
FORD ANALYST JONES
SCOTT ANALYST JONES
TURNER SALESMAN BLAKE
ALLEN SALESMAN BLAKE
WARD SALESMAN BLAKE
JAMES CLERK BLAKE
MARTIN SALESMAN BLAKE
MILLER CLERK CLARK
ADAMS CLERK SCOTT
BLAKE MANAGER KING
JONES MANAGER KING
CLARK MANAGER KING
SMITH CLERK FORD
13 rows selected
--2、查询每个雇佣的雇佣编号,姓名、基本工资、职位、领导的姓名、部门名称及位置
SELECT e.empno 编号,e.ename 姓名,e.sal 工资,e.job 职位,m.ename 领导姓名,d.dname 部门名称,d.loc 所在位置 FROM emp e,emp m,dept d WHERE m.empno=e.mgr AND m.deptno = d.deptno;
--结果
编号 姓名 工资 职位 领导姓名 部门名称 所在位置
----- ---------- --------- --------- ---------- -------------- -------------
7369 SMITH 800.00 CLERK FORD RESEARCH DALLAS
7499 ALLEN 1600.00 SALESMAN BLAKE SALES CHICAGO
7521 WARD 1250.00 SALESMAN BLAKE SALES CHICAGO
7566 JONES 2975.00 MANAGER KING ACCOUNTING NEW YORK
7654 MARTIN 1250.00 SALESMAN BLAKE SALES CHICAGO
7698 BLAKE 2850.00 MANAGER KING ACCOUNTING NEW YORK
7782 CLARK 2450.00 MANAGER KING ACCOUNTING NEW YORK
7788 SCOTT 3000.00 ANALYST JONES RESEARCH DALLAS
7844 TURNER 1500.00 SALESMAN BLAKE SALES CHICAGO
7876 ADAMS 1100.00 CLERK SCOTT RESEARCH DALLAS
7900 JAMES 950.00 CLERK BLAKE SALES CHICAGO
7902 FORD 3000.00 ANALYST JONES RESEARCH DALLAS
7934 MILLER 1300.00 CLERK CLARK ACCOUNTING NEW YORK
13 rows selected
--要求查询出每一个雇员的编号、姓名、工资、部门名称、工资在所在公司的工资等级
SELECT e.empno,e.ename,e.sal,d.dname,sg.grade FROM emp e,dept d,salgrade sg WHERE e.deptno = d.deptno AND sg.hisal >=e.sal AND sg.losal <=e.sal;
--结果
EMPNO ENAME SAL DNAME GRADE
----- ---------- --------- -------------- ----------
7369 SMITH 800.00 RESEARCH 1
7900 JAMES 950.00 SALES 1
7876 ADAMS 1100.00 RESEARCH 1
7654 MARTIN 1250.00 SALES 2
7521 WARD 1250.00 SALES 2
7934 MILLER 1300.00 ACCOUNTING 2
7844 TURNER 1500.00 SALES 3
7499 ALLEN 1600.00 SALES 3
7782 CLARK 2450.00 ACCOUNTING 4
7698 BLAKE 2850.00 SALES 4
7566 JONES 2975.00 RESEARCH 4
7902 FORD 3000.00 RESEARCH 4
7788 SCOTT 3000.00 RESEARCH 4
7839 KING 5000.00 ACCOUNTING 5
14 rows selected
--或者
SELECT e.empno,e.ename,e.sal,d.dname,sg.grade FROM emp e,dept d,salgrade sg WHERE e.deptno = d.deptno AND e.sal BETWEEN sg.losal AND sg.hisal;
--结果
EMPNO ENAME SAL DNAME GRADE
----- ---------- --------- -------------- ----------
7839 KING 5000.00 ACCOUNTING 5
7902 FORD 3000.00 RESEARCH 4
7788 SCOTT 3000.00 RESEARCH 4
7566 JONES 2975.00 RESEARCH 4
7698 BLAKE 2850.00 SALES 4
7782 CLARK 2450.00 ACCOUNTING 4
7499 ALLEN 1600.00 SALES 3
7844 TURNER 1500.00 SALES 3
7934 MILLER 1300.00 ACCOUNTING 2
7521 WARD 1250.00 SALES 2
7654 MARTIN 1250.00 SALES 2
7876 ADAMS 1100.00 RESEARCH 1
7900 JAMES 950.00 SALES 1
7369 SMITH 800.00 RESEARCH 1
--还或者
SELECT e.empno,e.ename,e.sal,d.dname,sg.grade,DECODE(sg.grade,'1','第一等级工资','2','第二等级工资','3','第三等级工资','4','第四等级工资','5','第五等级工资') 等级 FROM emp e,dept d,salgrade sg WHERE e.deptno = d.deptno AND e.sal BETWEEN sg.losal AND sg.hisal;
--结果
EMPNO ENAME SAL DNAME GRADE 等级
----- ---------- --------- -------------- ---------- ------------
7839 KING 5000.00 ACCOUNTING 5 第五等级工资
7902 FORD 3000.00 RESEARCH 4 第四等级工资
7788 SCOTT 3000.00 RESEARCH 4 第四等级工资
7566 JONES 2975.00 RESEARCH 4 第四等级工资
7698 BLAKE 2850.00 SALES 4 第四等级工资
7782 CLARK 2450.00 ACCOUNTING 4 第四等级工资
7499 ALLEN 1600.00 SALES 3 第三等级工资
7844 TURNER 1500.00 SALES 3 第三等级工资
7934 MILLER 1300.00 ACCOUNTING 2 第二等级工资
7521 WARD 1250.00 SALES 2 第二等级工资
7654 MARTIN 1250.00 SALES 2 第二等级工资
7876 ADAMS 1100.00 RESEARCH 1 第一等级工资
7900 JAMES 950.00 SALES 1 第一等级工资
7369 SMITH 800.00 RESEARCH 1 第一等级工资
14 rows selected
--左右连接
--当(+)在连接条件的左边的时候,表示的是右连接
--当(+)在连接条件的右边的时候,表示的是左连接
--3、查询每个雇员的姓名和领导的姓名
SELECT e.ename 雇员姓名,m.ename 领导姓名 FROM emp e,emp m WHERE m.empno(+) = e.mgr;
--结果
雇员姓名 领导姓名
---------- ----------
FORD JONES
SCOTT JONES
JAMES BLAKE
TURNER BLAKE
MARTIN BLAKE
WARD BLAKE
ALLEN BLAKE
MILLER CLARK
ADAMS SCOTT
CLARK KING
BLAKE KING
JONES KING
SMITH FORD
KING
14 rows selected
--4、统计出领取佣金和不领取佣金的雇员人数和平均工资
SELECT comm,COUNT(empno),AVG(sal) FROM emp GROUP BY comm;--(此语句不完善,那位看了之后又什么想法的话欢迎大家回复)
--结果
COMM COUNT(EMPNO) AVG(SAL)
--------- ------------ ----------
10 2342.5
1400.00 1 1250
500.00 1 1250
300.00 1 1600
0.00 1 1500
--5、按照职位分组,求出每个职位的最高工资、最低工资以及平均工资
SELECT job ,COUNT(empno),MAX(sal),MIN(sal),AVG(sal) FROM emp GROUP BY job;
--结果
JOB COUNT(EMPNO) MAX(SAL) MIN(SAL) AVG(SAL)
--------- ------------ ---------- ---------- ----------
CLERK 4 1300 800 1037.5
SALESMAN 4 1600 1250 1400
PRESIDENT 1 5000 5000 5000
MANAGER 3 2975 2450 2758.33333
ANALYST 2 3000 3000 3000
--6、统计平均工资最高和最低
SELECT MAX(AVG(sal)),MIN(AVG(sal)) FROM EMP GROUP BY job;
--结果
MAX(AVG(SAL)) MIN(AVG(SAL))
------------- -------------
5000 1037.5
--7、查询出每个部门的名称、部门人数、平均工资
SELECT d.dname,COUNT(e.empno),NVL(AVG(e.sal),0) FROM emp e,dept d WHERE d.deptno = e.deptno(+) GROUP BY d.dname;
--结果
DNAME COUNT(E.EMPNO) NVL(AVG(E.SAL),0)
-------------- -------------- -----------------
ACCOUNTING 3 2916.66666666667
OPERATIONS 0 0
RESEARCH 5 2175
SALES 6 1566.66666666667
--8、查询出每个部门的名称、位置、部门人数、平均工资(这是一个多字段分组查询)
SELECT d.deptno,d.dname,d.loc,COUNT(e.empno),NVL(AVG(sal),0) FROM emp e, dept d WHERE d.deptno = e.deptno(+) GROUP BY d.deptno,d.dname,d.loc ;
DEPTNO DNAME LOC COUNT(E.EMPNO) NVL(AVG(SAL),0)
------ -------------- ------------- -------------- ---------------
20 RESEARCH DALLAS 5 2175
40 OPERATIONS BOSTON 0 0
10 ACCOUNTING NEW YORK 3 2916.6666666666
30 SALES CHICAGO 6 1566.6666666666
--9、统计平均工资大于2000的部门的详细信息
SELECT d.*,AVG(e.sal) FROM emp e,dept d WHERE d.deptno = e.deptno GROUP BY d.deptno,d.dname,d.loc HAVING AVG(e.sal)>2000;
--结果
DEPTNO DNAME LOC AVG(E.SAL)
------ -------------- ------------- ----------
20 RESEARCH DALLAS 2175
10 ACCOUNTING NEW YORK 2916.66666
--10、显示非销售人员工资名称及从事同一工作雇员的月工资的总和,并且要满足从事同一工作的雇员的月工资合计大于5000,
--给出的结果按月工资的合计升序排序:
SELECT job,SUM(sal) FROM emp GROUP BY job HAVING SUM(sal)>5000 ORDER BY SUM(sal);
--结果
JOB SUM(SAL)
--------- ----------
SALESMAN 5600
ANALYST 6000
MANAGER 8275
--11、计算出工资比SMITH的要高的员工详细信息
SELECT * FROM EMP WHERE sal > (SELECT sal FROM EMP WHERE ename='SMITH');
--结果
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7499 ALLEN SALESMAN 7698 20-二月-81 1600.00 300.00 30
7521 WARD SALESMAN 7698 22-二月-81 1250.00 500.00 30
7566 JONES MANAGER 7839 02-四月-81 2975.00 20
7654 MARTIN SALESMAN 7698 28-九月-81 1250.00 1400.00 30
7698 BLAKE MANAGER 7839 01-五月-81 2850.00 30
7782 CLARK MANAGER 7839 09-六月-81 2450.00 10
7788 SCOTT ANALYST 7566 19-四月-87 3000.00 20
7839 KING PRESIDENT 17-十一月-81 5000.00 10
7844 TURNER SALESMAN 7698 08-九月-81 1500.00 0.00 30
7876 ADAMS CLERK 7788 23-五月-87 1100.00 20
7900 JAMES CLERK 7698 03-十二月-81 950.00 30
7902 FORD ANALYST 7566 03-十二月-81 3000.00 20
7934 MILLER CLERK 7782 23-一月-82 1300.00 10
13 rows selected
--12、查询出工资高于公司平均工资的员工详细信息
SELECT * FROM EMP WHERE sal >(SELECT AVG(sal) FROM EMP);
--结果
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7566 JONES MANAGER 7839 02-四月-81 2975.00 20
7698 BLAKE MANAGER 7839 01-五月-81 2850.00 30
7782 CLARK MANAGER 7839 09-六月-81 2450.00 10
7788 SCOTT ANALYST 7566 19-四月-87 3000.00 20
7839 KING PRESIDENT 17-十一月-81 5000.00 10
7902 FORD ANALYST 7566 03-十二月-81 3000.00 20
6 rows selected
三
--1、选择部门30的所有员工
SELECT * FROM EMP WHERE deptno=30;
--结果
SELECT * FROM EMP WHERE deptno=30;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7499 ALLEN SALESMAN 7698 20-二月-81 1600.00 300.00 30
7521 WARD SALESMAN 7698 22-二月-81 1250.00 500.00 30
7654 MARTIN SALESMAN 7698 28-九月-81 1250.00 1400.00 30
7698 BLAKE MANAGER 7839 01-五月-81 2850.00 30
7844 TURNER SALESMAN 7698 08-九月-81 1500.00 0.00 30
7900 JAMES CLERK 7698 03-十二月-81 950.00 30
--2、列出所有办事员(CLERK)的姓名,员工编号和部门编号
SELECT ename 姓名,empno 员工编号,deptno 部门编号 FROM emp WHERE job='CLERK';
--结果
姓名 员工编号 部门编号
---------- -------- --------
SMITH 7369 20
ADAMS 7876 20
JAMES 7900 30
MILLER 7934 10
--3、找出佣金高于薪金的员工
SELECT * FROM EMP WHERE NVL(comm,0)>sal;
--结果
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7654 MARTIN SALESMAN 7698 28-九月-81 1250.00 1400.00 30
--4、找出佣金高于薪金60%的员工
SELECT * FROM EMP WHERE NVL(comm,0)>sal*0.6;
--结果
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7654 MARTIN SALESMAN 7698 28-九月-81 1250.00 1400.00 30
--5、找出部门10中的所有经理(MANAGER)和部门20的所有办事员(CLERK)的详细资料
SELECT * FROM EMP WHERE (job='MANAGER' AND deptno=10) OR (job='CLERK' AND deptno=20);
--结果
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7369 SMITH CLERK 7902 17-十二月-80 800.00 20
7782 CLARK MANAGER 7839 09-六月-81 2450.00 10
7876 ADAMS CLERK 7788 23-五月-87 1100.00 20
--6、找出部门10的所有经理(MANAGER),部门20中所有办事员(CLERK),既不是办事员也不是经理但是薪金大于2000的所有员工的详细资料
SELECT * FROM EMP WHERE (job='MANAGER' AND deptno=10) OR (job='CLERK' AND deptno=20) OR (job NOT IN('MANAGER','CLERK') AND sal>2000);
--结果
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7369 SMITH CLERK 7902 17-十二月-80 800.00 20
7782 CLARK MANAGER 7839 09-六月-81 2450.00 10
7788 SCOTT ANALYST 7566 19-四月-87 3000.00 20
7839 KING PRESIDENT 17-十一月-81 5000.00 10
7876 ADAMS CLERK 7788 23-五月-87 1100.00 20
7902 FORD ANALYST 7566 03-十二月-81 3000.00 20
6 rows selected
--7、找出收取佣金的员工的员工的不同工作
SELECT DISTINCT(job) FROM EMP WHERE comm IS NOT NULL AND comm !=0;
--结果
JOB
---------
SALESMAN
--8、找出不取佣金或者是收取佣金小于100的员工详细信息
SELECT * FROM EMP WHERE comm IS NULL OR comm<100;
--结果
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7369 SMITH CLERK 7902 17-十二月-80 800.00 20
7566 JONES MANAGER 7839 02-四月-81 2975.00 20
7698 BLAKE MANAGER 7839 01-五月-81 2850.00 30
7782 CLARK MANAGER 7839 09-六月-81 2450.00 10
7788 SCOTT ANALYST 7566 19-四月-87 3000.00 20
7839 KING PRESIDENT 17-十一月-81 5000.00 10
7844 TURNER SALESMAN 7698 08-九月-81 1500.00 0.00 30
7876 ADAMS CLERK 7788 23-五月-87 1100.00 20
7900 JAMES CLERK 7698 03-十二月-81 950.00 30
7902 FORD ANALYST 7566 03-十二月-81 3000.00 20
7934 MILLER CLERK 7782 23-一月-82 1300.00 10
11 rows selected
--9、找出各月的倒数第三天受雇佣的员工
--每个员工的雇佣时间是不一样的,所有需要找出每个员工雇佣的时间所在月份的最后一天,
--之后按照‘日期-数字’的方式求出前三天的日期,这个日期必须和雇佣日期相符才能满足条件。
SELECT LAST_DAY(hiredate),EMP.* FROM EMP WHERE LAST_DAY(hiredate)-2=hiredate;
--结果
LAST_DAY(HIREDATE) EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
------------------ ----- ---------- --------- ----- ----------- --------- --------- ------
30-九月-81 7654 MARTIN SALESMAN 7698 28-九月-81 1250.00 1400.00 30
--10、找出12早于年前受雇的员工
--先使用MONTHS_BETWEEN(SYSDATE,hiredate)求出雇佣的月份,然后除以12的到雇佣的年份
SELECT MONTHS_BETWEEN(SYSDATE,hiredate)/12 雇佣年份,EMP.* FROM EMP WHERE MONTHS_BETWEEN(SYSDATE,hiredate)/12 > 12;
--结果
雇佣年份 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ----- ---------- --------- ----- ----------- --------- --------- ------
31.5449952 7369 SMITH CLERK 7902 17-十二月-80 800.00 20
31.3702640 7499 ALLEN SALESMAN 7698 20-二月-81 1600.00 300.00 30
31.3648877 7521 WARD SALESMAN 7698 22-二月-81 1250.00 500.00 30
31.25 7566 JONES MANAGER 7839 02-四月-81 2975.00 20
30.7654253 7654 MARTIN SALESMAN 7698 28-九月-81 1250.00 1400.00 30
31.1713393 7698 BLAKE MANAGER 7839 01-五月-81 2850.00 30
31.0665006 7782 CLARK MANAGER 7839 09-六月-81 2450.00 10
25.2062855 7788 SCOTT ANALYST 7566 19-四月-87 3000.00 20
30.6283285 7839 KING PRESIDENT 17-十一月-81 5000.00 10
30.8191887 7844 TURNER SALESMAN 7698 08-九月-81 1500.00 0.00 30
25.1121995 7876 ADAMS CLERK 7788 23-五月-87 1100.00 20
30.5826296 7900 JAMES CLERK 7698 03-十二月-81 950.00 30
30.5826296 7902 FORD ANALYST 7566 03-十二月-81 3000.00 20
30.4455328 7934 MILLER CLERK 7782 23-一月-82 1300.00 10
14 rows selected
--11、以首字母大写的方式显示员工姓名
SELECT INITCAP(ename) FROM emp;
--结果
INITCAP(ENAME)
--------------
Smith
Allen
Ward
Jones
Martin
Blake
Clark
Scott
King
Turner
Adams
James
Ford
Miller
14 rows selected
--12、显示姓名正好为5个长度的所有员工
SELECT * FROM EMP WHERE LENGTH(ename) = 5;
--结果
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7369 SMITH CLERK 7902 17-十二月-80 800.00 20
7499 ALLEN SALESMAN 7698 20-二月-81 1600.00 300.00 30
7566 JONES MANAGER 7839 02-四月-81 2975.00 20
7698 BLAKE MANAGER 7839 01-五月-81 2850.00 30
7782 CLARK MANAGER 7839 09-六月-81 2450.00 10
7788 SCOTT ANALYST 7566 19-四月-87 3000.00 20
7876 ADAMS CLERK 7788 23-五月-87 1100.00 20
7900 JAMES CLERK 7698 03-十二月-81 950.00 30
8 rows selected
--13、显示带有'R'的员工的详细
SELECT * FROM EMP WHERE ename LIKE '%R%';
--结果
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7521 WARD SALESMAN 7698 22-二月-81 1250.00 500.00 30
7654 MARTIN SALESMAN 7698 28-九月-81 1250.00 1400.00 30
7782 CLARK MANAGER 7839 09-六月-81 2450.00 10
7844 TURNER SALESMAN 7698 08-九月-81 1500.00 0.00 30
7902 FORD ANALYST 7566 03-十二月-81 3000.00 20
7934 MILLER CLERK 7782 23-一月-82 1300.00 10
6 rows selected
--14、显示员工姓名的前三个字符
SELECT ename 全名,SUBSTR(ename,0,3) 前三个字符 FROM EMP;
--结果
全名 前三个字符
---------- ----------
SMITH SMI
ALLEN ALL
WARD WAR
JONES JON
MARTIN MAR
BLAKE BLA
CLARK CLA
SCOTT SCO
KING KIN
TURNER TUR
ADAMS ADA
JAMES JAM
FORD FOR
MILLER MIL
14 rows selected
--15、显示所有员工的姓名,用‘a’替换所有的'A'
SELECT ename 原名,REPLACE(ename,'A','a') 大A替换为小a FROM EMP;
--结果
原名 大A替换为小A
---------- ------------
SMITH SMITH
ALLEN aLLEN
WARD WaRD
JONES JONES
MARTIN MaRTIN
BLAKE BLaKE
CLARK CLaRK
SCOTT SCOTT
KING KING
TURNER TURNER
ADAMS aDaMS
JAMES JaMES
FORD FORD
MILLER MILLER
14 rows selected
--16、--列出满10年雇佣期限的员工的详细信息
SELECT * FROM EMP WHERE MONTHS_BETWEEN(SYSDATE,hiredate)/12>10;
--结果
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7369 SMITH CLERK 7902 17-十二月-80 800.00 20
7499 ALLEN SALESMAN 7698 20-二月-81 1600.00 300.00 30
7521 WARD SALESMAN 7698 22-二月-81 1250.00 500.00 30
7566 JONES MANAGER 7839 02-四月-81 2975.00 20
7654 MARTIN SALESMAN 7698 28-九月-81 1250.00 1400.00 30
7698 BLAKE MANAGER 7839 01-五月-81 2850.00 30
7782 CLARK MANAGER 7839 09-六月-81 2450.00 10
7788 SCOTT ANALYST 7566 19-四月-87 3000.00 20
7839 KING PRESIDENT 17-十一月-81 5000.00 10
7844 TURNER SALESMAN 7698 08-九月-81 1500.00 0.00 30
7876 ADAMS CLERK 7788 23-五月-87 1100.00 20
7900 JAMES CLERK 7698 03-十二月-81 950.00 30
7902 FORD ANALYST 7566 03-十二月-81 3000.00 20
7934 MILLER CLERK 7782 23-一月-82 1300.00 10
14 rows selected
--显示员工的详细资料,并按姓名排序
SELECT * FROM EMP ORDER BY ename;
--结果
SELECT * FROM EMP ORDER BY ename;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7876 ADAMS CLERK 7788 23-五月-87 1100.00 20
7499 ALLEN SALESMAN 7698 20-二月-81 1600.00 300.00 30
7698 BLAKE MANAGER 7839 01-五月-81 2850.00 30
7782 CLARK MANAGER 7839 09-六月-81 2450.00 10
7902 FORD ANALYST 7566 03-十二月-81 3000.00 20
7900 JAMES CLERK 7698 03-十二月-81 950.00 30
7566 JONES MANAGER 7839 02-四月-81 2975.00 20
7839 KING PRESIDENT 17-十一月-81 5000.00 10
7654 MARTIN SALESMAN 7698 28-九月-81 1250.00 1400.00 30
7934 MILLER CLERK 7782 23-一月-82 1300.00 10
7788 SCOTT ANALYST 7566 19-四月-87 3000.00 20
7369 SMITH CLERK 7902 17-十二月-80 800.00 20
7844 TURNER SALESMAN 7698 08-九月-81 1500.00 0.00 30
7521 WARD SALESMAN 7698 22-二月-81 1250.00 500.00 30
14 rows selected
--18、显示员工的姓名和受雇日期,并按照老的员工排在前面的方式显示出来
SELECT ename,hiredate FROM EMP ORDER BY hiredate ASC;
--结果
ENAME HIREDATE
---------- -----------
SMITH 17-十二月-80
ALLEN 20-二月-81
WARD 22-二月-81
JONES 02-四月-81
BLAKE 01-五月-81
CLARK 09-六月-81
TURNER 08-九月-81
MARTIN 28-九月-81
KING 17-十一月-81
JAMES 03-十二月-81
FORD 03-十二月-81
MILLER 23-一月-82
SCOTT 19-四月-87
ADAMS 23-五月-87
14 rows selected
--19、显示所有员工的姓名、工作和薪金,按工作的降序排列,工作相同则按照薪金的升序排列
SELECT ename,job,sal FROM emp ORDER BY job DESC,sal ASC;
--结果
ENAME JOB SAL
---------- --------- ---------
WARD SALESMAN 1250.00
MARTIN SALESMAN 1250.00
TURNER SALESMAN 1500.00
ALLEN SALESMAN 1600.00
KING PRESIDENT 5000.00
CLARK MANAGER 2450.00
BLAKE MANAGER 2850.00
JONES MANAGER 2975.00
SMITH CLERK 800.00
JAMES CLERK 950.00
ADAMS CLERK 1100.00
MILLER CLERK 1300.00
SCOTT ANALYST 3000.00
FORD ANALYST 3000.00
14 rows selected
--20、显示所有员工的姓名、加入公司的年份和月份、按接受所在雇佣月排序,若月的相同则按最早年份的员工排在最前面
--本程序需要求出所雇的日期的年份和月份,然后再来显示
SELECT ename 姓名,TO_CHAR(hiredate,'yyyy') 年份, TO_CHAR(hiredate,'mm') 月份 FROM emp ORDER BY 月份,年份;
--结果
姓名 年份 月份
---------- ---- ----
MILLER 1982 01
ALLEN 1981 02
WARD 1981 02
JONES 1981 04
SCOTT 1987 04
BLAKE 1981 05
ADAMS 1987 05
CLARK 1981 06
TURNER 1981 09
MARTIN 1981 09
KING 1981 11
SMITH 1980 12
JAMES 1981 12
FORD 1981 12
14 rows selected
--21、显示一个月为30天的情况下,所有员工的日薪,忽略余数
SELECT ename 姓名,sal 月薪,TRUNC(sal/30) 日薪 FROM EMP;
--结果
姓名 月薪 日薪
---------- --------- ----------
SMITH 800.00 26
ALLEN 1600.00 53
WARD 1250.00 41
JONES 2975.00 99
MARTIN 1250.00 41
BLAKE 2850.00 95
CLARK 2450.00 81
SCOTT 3000.00 100
KING 5000.00 166
TURNER 1500.00 50
ADAMS 1100.00 36
JAMES 950.00 31
FORD 3000.00 100
MILLER 1300.00 43
--22、找出在(任何年份的)2月受雇的员工
SELECT * FROM EMP WHERE TO_CHAR(hiredate,'mm') = 02;
--结果
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7499 ALLEN SALESMAN 7698 20-二月-81 1600.00 300.00 30
7521 WARD SALESMAN 7698 22-二月-81 1250.00 500.00 30
--23、对于每个员工显示其来到公司的天数
SELECT ename 姓名,SYSDATE-hiredate 来公司的天数 FROM EMP;
--结果
姓名 来公司的天数
---------- ------------
SMITH 11520.760555
ALLEN 11455.760555
WARD 11453.760555
JONES 11414.760555
MARTIN 11235.760555
BLAKE 11385.760555
CLARK 11346.760555
SCOTT 9206.7605555
KING 11185.760555
TURNER 11255.760555
ADAMS 9172.7605555
JAMES 11169.760555
FORD 11169.760555
MILLER 11118.760555
14 rows selected
--24、显示姓名字段的任何位置包含有’A‘的员工
SELECT * FROM EMP WHERE ename LIKE '%A%';
--结果
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7499 ALLEN SALESMAN 7698 20-二月-81 1600.00 300.00 30
7521 WARD SALESMAN 7698 22-二月-81 1250.00 500.00 30
7654 MARTIN SALESMAN 7698 28-九月-81 1250.00 1400.00 30
7698 BLAKE MANAGER 7839 01-五月-81 2850.00 30
7782 CLARK MANAGER 7839 09-六月-81 2450.00 10
7876 ADAMS CLERK 7788 23-五月-87 1100.00 20
7900 JAMES CLERK 7698 03-十二月-81 950.00 30
7 rows selected
--25、以月份的方式显示所有员工的服务年限
--结果分析:
-- 第一步:求出员工的雇佣年数,雇佣的月数除以12
SELECT ename,TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate)/12) 年数 FROM EMP;
ENAME 年数
---------- ----------
SMITH 31
ALLEN 31
WARD 31
JONES 31
MARTIN 30
BLAKE 31
CLARK 31
SCOTT 25
KING 30
TURNER 30
ADAMS 25
JAMES 30
FORD 30
MILLER 30
14 rows selected
-- 第二步:求除去的出去年份之后的月份
SELECT ename,TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate)/12) 年数,TRUNC(MOD(MONTHS_BETWEEN(SYSDATE,hiredate),12)) 月数 FROM emp;
ENAME 年数 月数
---------- ---------- ----------
SMITH 31 6
ALLEN 31 4
WARD 31 4
JONES 31 3
MARTIN 30 9
BLAKE 31 2
CLARK 31 0
SCOTT 25 2
KING 30 7
TURNER 30 9
ADAMS 25 1
JAMES 30 6
FORD 30 6
MILLER 30 5
14 rows selected
-- 第三步:求出的除去年份和月份之后的天数
SELECT ename,TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate)/12) 年数,TRUNC(MOD(MONTHS_BETWEEN(SYSDATE,hiredate),12)) 月数,TRUNC(SYSDATE-ADD_MONTHS(hiredate,MONTHS_BETWEEN(SYSDATE,hiredate))) 天数 FROM emp;
ENAME 年数 月数 天数
---------- ---------- ---------- ----------
SMITH 31 6 15
ALLEN 31 4 12
WARD 31 4 10
JONES 31 3 0
MARTIN 30 9 4
BLAKE 31 2 1
CLARK 31 0 23
SCOTT 25 2 13
KING 30 7 15
TURNER 30 9 24
ADAMS 25 1 9
JAMES 30 6 29
FORD 30 6 29
MILLER 30 5 9
14 rows selected
--最后结果
SELECT ename,TO_CHAR(SYSDATE,'YYYY-MM-DD'),TO_CHAR(hiredate,'YYYY-MM-DD') 雇佣日期,TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate)/12) 年数,TRUNC(MOD(MONTHS_BETWEEN(SYSDATE,hiredate),12)) 月数,TRUNC(SYSDATE-ADD_MONTHS(hiredate,MONTHS_BETWEEN(SYSDATE,hiredate))) 天数 FROM emp;
--结果
ENAME TO_CHAR(SYSDATE,'YYYY-MM-DD') 雇佣日期 年数 月数 天数
---------- ----------------------------- ---------- ---------- ---------- ----------
SMITH 2012-07-02 1980-12-17 31 6 15
ALLEN 2012-07-02 1981-02-20 31 4 12
WARD 2012-07-02 1981-02-22 31 4 10
JONES 2012-07-02 1981-04-02 31 3 0
MARTIN 2012-07-02 1981-09-28 30 9 4
BLAKE 2012-07-02 1981-05-01 31 2 1
CLARK 2012-07-02 1981-06-09 31 0 23
SCOTT 2012-07-02 1987-04-19 25 2 13
KING 2012-07-02 1981-11-17 30 7 15
TURNER 2012-07-02 1981-09-08 30 9 24
ADAMS 2012-07-02 1987-05-23 25 1 9
JAMES 2012-07-02 1981-12-03 30 6 29
FORD 2012-07-02 1981-12-03 30 6 29
MILLER 2012-07-02 1982-01-23 30 5 9
14 rows selected
有两张表:部门表department 部门编号dept_id 部门名称dept_name
员工表employee 员工编号emp_id 员工姓名emp_name 部门编号dept_id 工资emp_wage
根据下列题目写出sql:
1、列出工资大于5000的员工所属的部门名、员工id和员工工资; 2、列出员工表中的部门id对应的名称和员工id(左连接) 3、列出员工大于等于2人的部门编号 4、列出工资最高的员工姓名 5、求各部门的平均工资 6、求各部门的员工工资总额 7、求每个部门中的最大工资值和最小工资值,并且它的最小值小于5000,最大值大于10000 8、假如现在在库中有一个和员工表结构相同的空表employee2,请用一条sql语句将employee表中的所以记录插入到employee2表中。 answer:
--------------------------------------------------------------------------------
1:列出工资大于5000的员工所属的部门名、员工id和员工工资;
select emp_id,emp_wage,dept_name from employee as e inner join department as d on e.dept_id=d.dept_id where e.emp_wage>5000 group by e.emp_id;
--------------------------------------------------------------------------------
2:列出员工表中的部门id对应的名称和员工id(左连接)
select dept_name,emp_id from department d left join employee e on e.dept_id=d.dept_id group by e.emp_id;
+------------+--------+
| dept_name | emp_id |
+------------+--------+
| 咨询部 | NULL |
| 软件开发部 | 1001 |
| 市场策划部 | 1002 |
| 销售部 | 1003 |
| HR | 1004 |
| HR | 1005 |
| HR | 1006 |
| 软件开发部 | 1007 |
+------------+--------+
--------------------------------------------------------------------------------
3:列出员工大于等于2人的部门编号
select dept_name from department d [inner] join employee e on d.dept_id=e.dept_id group by dept_name
having count(e.dept_id) >=2;
--------------------------------------------------------------------------------
4:列出工资最高的员工姓名
select * from employee
where emp_wage =(select max(emp_wage) from employee);
+--------+----------+---------+----------+
| emp_id | emp_name | dept_id | emp_wage |
+--------+----------+---------+----------+
| 1007 | ad | 1 | 12000 |
+--------+----------+---------+----------+
--------------------------------------------------------------------------------
5: 求各部门的平均工资
select dept_name,AVG(emp_wage) as '平均工资' from employee e join department d on e
.dept_id=d.dept_id Group by dept_name;
+------------+------------+
| dept_name | 平均工资 |
+------------+------------+
| HR | 7500.0000 |
| 市场策划部 | 2500.0000 |
| 软件开发部 | 10000.0000 |
| 销售部 | 3200.0000 |
+------------+------------+
如果用右连接:
select dept_name,AVG(emp_wage) as '平均工资' from employee e right
join department d on e.dept_id=d.dept_id Group by dept_name;
+------------+------------+
| dept_name | 平均工资 |
+------------+------------+
| HR | 7500.0000 |
| 咨询部 | NULL |
| 市场策划部 | 2500.0000 |
| 软件开发部 | 10000.0000 |
| 销售部 | 3200.0000 |
+------------+------------+
--------------------------------------------------------------------------------
6:求各部门的员工工资总额
select dept_name,SUM(emp_wage) as '部门工资总额' from employee e join department d on e.dept_id=d.dept_id
Group by dept_name;
--------------------------------------------------------------------------------
7:求每个部门中的最大工资值和最小工资值,并且它的最小值小于5000,最大值大于10000
select dept_name ,max(emp_wage)from employee e inner join department d on e.dept_id=d.dept_id
where emp_wage>=10000
group by dept_name
union all
select dept_name ,
min(emp_wage) from employee e inner join department d on e.dept_id=d.dept_id
where emp_wage<=5000
group by dept_name;
如果是求每个部门中的最大工资值和最小工资值-->
select dept_name ,max(emp_wage),min(emp_wage) from employee e inner join department d on e.dept_id=d.dept_id group by dept_name;
--------------------------------------------------------------------------------
8:假如现在在库中有一个和员工表结构相同的空表employee2,请用一条sql语句将employee表中的所以记录插入到employee2表中。
insert into employee2 select * from employee;
二
--编写多表查询语句的一般过程
--(1)、分析句子要涉及到哪些表
--(2)、对应的表中要查询哪些关联字段
--(3)、确定连接条件或筛选条件
--(4)、写成完整的SQL查询语句
--1、查询出每一位雇员的姓名、职位、以及领导的姓名。
SELECT e.ename 雇佣姓名,e.job 职位,m.ename 领导姓名 FROM EMP e,EMP m WHERE e.mgr = m.empno;
--结果
雇佣姓名 职位 领导姓名
---------- --------- ----------
FORD ANALYST JONES
SCOTT ANALYST JONES
TURNER SALESMAN BLAKE
ALLEN SALESMAN BLAKE
WARD SALESMAN BLAKE
JAMES CLERK BLAKE
MARTIN SALESMAN BLAKE
MILLER CLERK CLARK
ADAMS CLERK SCOTT
BLAKE MANAGER KING
JONES MANAGER KING
CLARK MANAGER KING
SMITH CLERK FORD
13 rows selected
--2、查询每个雇佣的雇佣编号,姓名、基本工资、职位、领导的姓名、部门名称及位置
SELECT e.empno 编号,e.ename 姓名,e.sal 工资,e.job 职位,m.ename 领导姓名,d.dname 部门名称,d.loc 所在位置 FROM emp e,emp m,dept d WHERE m.empno=e.mgr AND m.deptno = d.deptno;
--结果
编号 姓名 工资 职位 领导姓名 部门名称 所在位置
----- ---------- --------- --------- ---------- -------------- -------------
7369 SMITH 800.00 CLERK FORD RESEARCH DALLAS
7499 ALLEN 1600.00 SALESMAN BLAKE SALES CHICAGO
7521 WARD 1250.00 SALESMAN BLAKE SALES CHICAGO
7566 JONES 2975.00 MANAGER KING ACCOUNTING NEW YORK
7654 MARTIN 1250.00 SALESMAN BLAKE SALES CHICAGO
7698 BLAKE 2850.00 MANAGER KING ACCOUNTING NEW YORK
7782 CLARK 2450.00 MANAGER KING ACCOUNTING NEW YORK
7788 SCOTT 3000.00 ANALYST JONES RESEARCH DALLAS
7844 TURNER 1500.00 SALESMAN BLAKE SALES CHICAGO
7876 ADAMS 1100.00 CLERK SCOTT RESEARCH DALLAS
7900 JAMES 950.00 CLERK BLAKE SALES CHICAGO
7902 FORD 3000.00 ANALYST JONES RESEARCH DALLAS
7934 MILLER 1300.00 CLERK CLARK ACCOUNTING NEW YORK
13 rows selected
--要求查询出每一个雇员的编号、姓名、工资、部门名称、工资在所在公司的工资等级
SELECT e.empno,e.ename,e.sal,d.dname,sg.grade FROM emp e,dept d,salgrade sg WHERE e.deptno = d.deptno AND sg.hisal >=e.sal AND sg.losal <=e.sal;
--结果
EMPNO ENAME SAL DNAME GRADE
----- ---------- --------- -------------- ----------
7369 SMITH 800.00 RESEARCH 1
7900 JAMES 950.00 SALES 1
7876 ADAMS 1100.00 RESEARCH 1
7654 MARTIN 1250.00 SALES 2
7521 WARD 1250.00 SALES 2
7934 MILLER 1300.00 ACCOUNTING 2
7844 TURNER 1500.00 SALES 3
7499 ALLEN 1600.00 SALES 3
7782 CLARK 2450.00 ACCOUNTING 4
7698 BLAKE 2850.00 SALES 4
7566 JONES 2975.00 RESEARCH 4
7902 FORD 3000.00 RESEARCH 4
7788 SCOTT 3000.00 RESEARCH 4
7839 KING 5000.00 ACCOUNTING 5
14 rows selected
--或者
SELECT e.empno,e.ename,e.sal,d.dname,sg.grade FROM emp e,dept d,salgrade sg WHERE e.deptno = d.deptno AND e.sal BETWEEN sg.losal AND sg.hisal;
--结果
EMPNO ENAME SAL DNAME GRADE
----- ---------- --------- -------------- ----------
7839 KING 5000.00 ACCOUNTING 5
7902 FORD 3000.00 RESEARCH 4
7788 SCOTT 3000.00 RESEARCH 4
7566 JONES 2975.00 RESEARCH 4
7698 BLAKE 2850.00 SALES 4
7782 CLARK 2450.00 ACCOUNTING 4
7499 ALLEN 1600.00 SALES 3
7844 TURNER 1500.00 SALES 3
7934 MILLER 1300.00 ACCOUNTING 2
7521 WARD 1250.00 SALES 2
7654 MARTIN 1250.00 SALES 2
7876 ADAMS 1100.00 RESEARCH 1
7900 JAMES 950.00 SALES 1
7369 SMITH 800.00 RESEARCH 1
--还或者
SELECT e.empno,e.ename,e.sal,d.dname,sg.grade,DECODE(sg.grade,'1','第一等级工资','2','第二等级工资','3','第三等级工资','4','第四等级工资','5','第五等级工资') 等级 FROM emp e,dept d,salgrade sg WHERE e.deptno = d.deptno AND e.sal BETWEEN sg.losal AND sg.hisal;
--结果
EMPNO ENAME SAL DNAME GRADE 等级
----- ---------- --------- -------------- ---------- ------------
7839 KING 5000.00 ACCOUNTING 5 第五等级工资
7902 FORD 3000.00 RESEARCH 4 第四等级工资
7788 SCOTT 3000.00 RESEARCH 4 第四等级工资
7566 JONES 2975.00 RESEARCH 4 第四等级工资
7698 BLAKE 2850.00 SALES 4 第四等级工资
7782 CLARK 2450.00 ACCOUNTING 4 第四等级工资
7499 ALLEN 1600.00 SALES 3 第三等级工资
7844 TURNER 1500.00 SALES 3 第三等级工资
7934 MILLER 1300.00 ACCOUNTING 2 第二等级工资
7521 WARD 1250.00 SALES 2 第二等级工资
7654 MARTIN 1250.00 SALES 2 第二等级工资
7876 ADAMS 1100.00 RESEARCH 1 第一等级工资
7900 JAMES 950.00 SALES 1 第一等级工资
7369 SMITH 800.00 RESEARCH 1 第一等级工资
14 rows selected
--左右连接
--当(+)在连接条件的左边的时候,表示的是右连接
--当(+)在连接条件的右边的时候,表示的是左连接
--3、查询每个雇员的姓名和领导的姓名
SELECT e.ename 雇员姓名,m.ename 领导姓名 FROM emp e,emp m WHERE m.empno(+) = e.mgr;
--结果
雇员姓名 领导姓名
---------- ----------
FORD JONES
SCOTT JONES
JAMES BLAKE
TURNER BLAKE
MARTIN BLAKE
WARD BLAKE
ALLEN BLAKE
MILLER CLARK
ADAMS SCOTT
CLARK KING
BLAKE KING
JONES KING
SMITH FORD
KING
14 rows selected
--4、统计出领取佣金和不领取佣金的雇员人数和平均工资
SELECT comm,COUNT(empno),AVG(sal) FROM emp GROUP BY comm;--(此语句不完善,那位看了之后又什么想法的话欢迎大家回复)
--结果
COMM COUNT(EMPNO) AVG(SAL)
--------- ------------ ----------
10 2342.5
1400.00 1 1250
500.00 1 1250
300.00 1 1600
0.00 1 1500
--5、按照职位分组,求出每个职位的最高工资、最低工资以及平均工资
SELECT job ,COUNT(empno),MAX(sal),MIN(sal),AVG(sal) FROM emp GROUP BY job;
--结果
JOB COUNT(EMPNO) MAX(SAL) MIN(SAL) AVG(SAL)
--------- ------------ ---------- ---------- ----------
CLERK 4 1300 800 1037.5
SALESMAN 4 1600 1250 1400
PRESIDENT 1 5000 5000 5000
MANAGER 3 2975 2450 2758.33333
ANALYST 2 3000 3000 3000
--6、统计平均工资最高和最低
SELECT MAX(AVG(sal)),MIN(AVG(sal)) FROM EMP GROUP BY job;
--结果
MAX(AVG(SAL)) MIN(AVG(SAL))
------------- -------------
5000 1037.5
--7、查询出每个部门的名称、部门人数、平均工资
SELECT d.dname,COUNT(e.empno),NVL(AVG(e.sal),0) FROM emp e,dept d WHERE d.deptno = e.deptno(+) GROUP BY d.dname;
--结果
DNAME COUNT(E.EMPNO) NVL(AVG(E.SAL),0)
-------------- -------------- -----------------
ACCOUNTING 3 2916.66666666667
OPERATIONS 0 0
RESEARCH 5 2175
SALES 6 1566.66666666667
--8、查询出每个部门的名称、位置、部门人数、平均工资(这是一个多字段分组查询)
SELECT d.deptno,d.dname,d.loc,COUNT(e.empno),NVL(AVG(sal),0) FROM emp e, dept d WHERE d.deptno = e.deptno(+) GROUP BY d.deptno,d.dname,d.loc ;
DEPTNO DNAME LOC COUNT(E.EMPNO) NVL(AVG(SAL),0)
------ -------------- ------------- -------------- ---------------
20 RESEARCH DALLAS 5 2175
40 OPERATIONS BOSTON 0 0
10 ACCOUNTING NEW YORK 3 2916.6666666666
30 SALES CHICAGO 6 1566.6666666666
--9、统计平均工资大于2000的部门的详细信息
SELECT d.*,AVG(e.sal) FROM emp e,dept d WHERE d.deptno = e.deptno GROUP BY d.deptno,d.dname,d.loc HAVING AVG(e.sal)>2000;
--结果
DEPTNO DNAME LOC AVG(E.SAL)
------ -------------- ------------- ----------
20 RESEARCH DALLAS 2175
10 ACCOUNTING NEW YORK 2916.66666
--10、显示非销售人员工资名称及从事同一工作雇员的月工资的总和,并且要满足从事同一工作的雇员的月工资合计大于5000,
--给出的结果按月工资的合计升序排序:
SELECT job,SUM(sal) FROM emp GROUP BY job HAVING SUM(sal)>5000 ORDER BY SUM(sal);
--结果
JOB SUM(SAL)
--------- ----------
SALESMAN 5600
ANALYST 6000
MANAGER 8275
--11、计算出工资比SMITH的要高的员工详细信息
SELECT * FROM EMP WHERE sal > (SELECT sal FROM EMP WHERE ename='SMITH');
--结果
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7499 ALLEN SALESMAN 7698 20-二月-81 1600.00 300.00 30
7521 WARD SALESMAN 7698 22-二月-81 1250.00 500.00 30
7566 JONES MANAGER 7839 02-四月-81 2975.00 20
7654 MARTIN SALESMAN 7698 28-九月-81 1250.00 1400.00 30
7698 BLAKE MANAGER 7839 01-五月-81 2850.00 30
7782 CLARK MANAGER 7839 09-六月-81 2450.00 10
7788 SCOTT ANALYST 7566 19-四月-87 3000.00 20
7839 KING PRESIDENT 17-十一月-81 5000.00 10
7844 TURNER SALESMAN 7698 08-九月-81 1500.00 0.00 30
7876 ADAMS CLERK 7788 23-五月-87 1100.00 20
7900 JAMES CLERK 7698 03-十二月-81 950.00 30
7902 FORD ANALYST 7566 03-十二月-81 3000.00 20
7934 MILLER CLERK 7782 23-一月-82 1300.00 10
13 rows selected
--12、查询出工资高于公司平均工资的员工详细信息
SELECT * FROM EMP WHERE sal >(SELECT AVG(sal) FROM EMP);
--结果
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7566 JONES MANAGER 7839 02-四月-81 2975.00 20
7698 BLAKE MANAGER 7839 01-五月-81 2850.00 30
7782 CLARK MANAGER 7839 09-六月-81 2450.00 10
7788 SCOTT ANALYST 7566 19-四月-87 3000.00 20
7839 KING PRESIDENT 17-十一月-81 5000.00 10
7902 FORD ANALYST 7566 03-十二月-81 3000.00 20
6 rows selected
三
--1、选择部门30的所有员工
SELECT * FROM EMP WHERE deptno=30;
--结果
SELECT * FROM EMP WHERE deptno=30;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7499 ALLEN SALESMAN 7698 20-二月-81 1600.00 300.00 30
7521 WARD SALESMAN 7698 22-二月-81 1250.00 500.00 30
7654 MARTIN SALESMAN 7698 28-九月-81 1250.00 1400.00 30
7698 BLAKE MANAGER 7839 01-五月-81 2850.00 30
7844 TURNER SALESMAN 7698 08-九月-81 1500.00 0.00 30
7900 JAMES CLERK 7698 03-十二月-81 950.00 30
--2、列出所有办事员(CLERK)的姓名,员工编号和部门编号
SELECT ename 姓名,empno 员工编号,deptno 部门编号 FROM emp WHERE job='CLERK';
--结果
姓名 员工编号 部门编号
---------- -------- --------
SMITH 7369 20
ADAMS 7876 20
JAMES 7900 30
MILLER 7934 10
--3、找出佣金高于薪金的员工
SELECT * FROM EMP WHERE NVL(comm,0)>sal;
--结果
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7654 MARTIN SALESMAN 7698 28-九月-81 1250.00 1400.00 30
--4、找出佣金高于薪金60%的员工
SELECT * FROM EMP WHERE NVL(comm,0)>sal*0.6;
--结果
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7654 MARTIN SALESMAN 7698 28-九月-81 1250.00 1400.00 30
--5、找出部门10中的所有经理(MANAGER)和部门20的所有办事员(CLERK)的详细资料
SELECT * FROM EMP WHERE (job='MANAGER' AND deptno=10) OR (job='CLERK' AND deptno=20);
--结果
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7369 SMITH CLERK 7902 17-十二月-80 800.00 20
7782 CLARK MANAGER 7839 09-六月-81 2450.00 10
7876 ADAMS CLERK 7788 23-五月-87 1100.00 20
--6、找出部门10的所有经理(MANAGER),部门20中所有办事员(CLERK),既不是办事员也不是经理但是薪金大于2000的所有员工的详细资料
SELECT * FROM EMP WHERE (job='MANAGER' AND deptno=10) OR (job='CLERK' AND deptno=20) OR (job NOT IN('MANAGER','CLERK') AND sal>2000);
--结果
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7369 SMITH CLERK 7902 17-十二月-80 800.00 20
7782 CLARK MANAGER 7839 09-六月-81 2450.00 10
7788 SCOTT ANALYST 7566 19-四月-87 3000.00 20
7839 KING PRESIDENT 17-十一月-81 5000.00 10
7876 ADAMS CLERK 7788 23-五月-87 1100.00 20
7902 FORD ANALYST 7566 03-十二月-81 3000.00 20
6 rows selected
--7、找出收取佣金的员工的员工的不同工作
SELECT DISTINCT(job) FROM EMP WHERE comm IS NOT NULL AND comm !=0;
--结果
JOB
---------
SALESMAN
--8、找出不取佣金或者是收取佣金小于100的员工详细信息
SELECT * FROM EMP WHERE comm IS NULL OR comm<100;
--结果
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7369 SMITH CLERK 7902 17-十二月-80 800.00 20
7566 JONES MANAGER 7839 02-四月-81 2975.00 20
7698 BLAKE MANAGER 7839 01-五月-81 2850.00 30
7782 CLARK MANAGER 7839 09-六月-81 2450.00 10
7788 SCOTT ANALYST 7566 19-四月-87 3000.00 20
7839 KING PRESIDENT 17-十一月-81 5000.00 10
7844 TURNER SALESMAN 7698 08-九月-81 1500.00 0.00 30
7876 ADAMS CLERK 7788 23-五月-87 1100.00 20
7900 JAMES CLERK 7698 03-十二月-81 950.00 30
7902 FORD ANALYST 7566 03-十二月-81 3000.00 20
7934 MILLER CLERK 7782 23-一月-82 1300.00 10
11 rows selected
--9、找出各月的倒数第三天受雇佣的员工
--每个员工的雇佣时间是不一样的,所有需要找出每个员工雇佣的时间所在月份的最后一天,
--之后按照‘日期-数字’的方式求出前三天的日期,这个日期必须和雇佣日期相符才能满足条件。
SELECT LAST_DAY(hiredate),EMP.* FROM EMP WHERE LAST_DAY(hiredate)-2=hiredate;
--结果
LAST_DAY(HIREDATE) EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
------------------ ----- ---------- --------- ----- ----------- --------- --------- ------
30-九月-81 7654 MARTIN SALESMAN 7698 28-九月-81 1250.00 1400.00 30
--10、找出12早于年前受雇的员工
--先使用MONTHS_BETWEEN(SYSDATE,hiredate)求出雇佣的月份,然后除以12的到雇佣的年份
SELECT MONTHS_BETWEEN(SYSDATE,hiredate)/12 雇佣年份,EMP.* FROM EMP WHERE MONTHS_BETWEEN(SYSDATE,hiredate)/12 > 12;
--结果
雇佣年份 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ----- ---------- --------- ----- ----------- --------- --------- ------
31.5449952 7369 SMITH CLERK 7902 17-十二月-80 800.00 20
31.3702640 7499 ALLEN SALESMAN 7698 20-二月-81 1600.00 300.00 30
31.3648877 7521 WARD SALESMAN 7698 22-二月-81 1250.00 500.00 30
31.25 7566 JONES MANAGER 7839 02-四月-81 2975.00 20
30.7654253 7654 MARTIN SALESMAN 7698 28-九月-81 1250.00 1400.00 30
31.1713393 7698 BLAKE MANAGER 7839 01-五月-81 2850.00 30
31.0665006 7782 CLARK MANAGER 7839 09-六月-81 2450.00 10
25.2062855 7788 SCOTT ANALYST 7566 19-四月-87 3000.00 20
30.6283285 7839 KING PRESIDENT 17-十一月-81 5000.00 10
30.8191887 7844 TURNER SALESMAN 7698 08-九月-81 1500.00 0.00 30
25.1121995 7876 ADAMS CLERK 7788 23-五月-87 1100.00 20
30.5826296 7900 JAMES CLERK 7698 03-十二月-81 950.00 30
30.5826296 7902 FORD ANALYST 7566 03-十二月-81 3000.00 20
30.4455328 7934 MILLER CLERK 7782 23-一月-82 1300.00 10
14 rows selected
--11、以首字母大写的方式显示员工姓名
SELECT INITCAP(ename) FROM emp;
--结果
INITCAP(ENAME)
--------------
Smith
Allen
Ward
Jones
Martin
Blake
Clark
Scott
King
Turner
Adams
James
Ford
Miller
14 rows selected
--12、显示姓名正好为5个长度的所有员工
SELECT * FROM EMP WHERE LENGTH(ename) = 5;
--结果
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7369 SMITH CLERK 7902 17-十二月-80 800.00 20
7499 ALLEN SALESMAN 7698 20-二月-81 1600.00 300.00 30
7566 JONES MANAGER 7839 02-四月-81 2975.00 20
7698 BLAKE MANAGER 7839 01-五月-81 2850.00 30
7782 CLARK MANAGER 7839 09-六月-81 2450.00 10
7788 SCOTT ANALYST 7566 19-四月-87 3000.00 20
7876 ADAMS CLERK 7788 23-五月-87 1100.00 20
7900 JAMES CLERK 7698 03-十二月-81 950.00 30
8 rows selected
--13、显示带有'R'的员工的详细
SELECT * FROM EMP WHERE ename LIKE '%R%';
--结果
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7521 WARD SALESMAN 7698 22-二月-81 1250.00 500.00 30
7654 MARTIN SALESMAN 7698 28-九月-81 1250.00 1400.00 30
7782 CLARK MANAGER 7839 09-六月-81 2450.00 10
7844 TURNER SALESMAN 7698 08-九月-81 1500.00 0.00 30
7902 FORD ANALYST 7566 03-十二月-81 3000.00 20
7934 MILLER CLERK 7782 23-一月-82 1300.00 10
6 rows selected
--14、显示员工姓名的前三个字符
SELECT ename 全名,SUBSTR(ename,0,3) 前三个字符 FROM EMP;
--结果
全名 前三个字符
---------- ----------
SMITH SMI
ALLEN ALL
WARD WAR
JONES JON
MARTIN MAR
BLAKE BLA
CLARK CLA
SCOTT SCO
KING KIN
TURNER TUR
ADAMS ADA
JAMES JAM
FORD FOR
MILLER MIL
14 rows selected
--15、显示所有员工的姓名,用‘a’替换所有的'A'
SELECT ename 原名,REPLACE(ename,'A','a') 大A替换为小a FROM EMP;
--结果
原名 大A替换为小A
---------- ------------
SMITH SMITH
ALLEN aLLEN
WARD WaRD
JONES JONES
MARTIN MaRTIN
BLAKE BLaKE
CLARK CLaRK
SCOTT SCOTT
KING KING
TURNER TURNER
ADAMS aDaMS
JAMES JaMES
FORD FORD
MILLER MILLER
14 rows selected
--16、--列出满10年雇佣期限的员工的详细信息
SELECT * FROM EMP WHERE MONTHS_BETWEEN(SYSDATE,hiredate)/12>10;
--结果
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7369 SMITH CLERK 7902 17-十二月-80 800.00 20
7499 ALLEN SALESMAN 7698 20-二月-81 1600.00 300.00 30
7521 WARD SALESMAN 7698 22-二月-81 1250.00 500.00 30
7566 JONES MANAGER 7839 02-四月-81 2975.00 20
7654 MARTIN SALESMAN 7698 28-九月-81 1250.00 1400.00 30
7698 BLAKE MANAGER 7839 01-五月-81 2850.00 30
7782 CLARK MANAGER 7839 09-六月-81 2450.00 10
7788 SCOTT ANALYST 7566 19-四月-87 3000.00 20
7839 KING PRESIDENT 17-十一月-81 5000.00 10
7844 TURNER SALESMAN 7698 08-九月-81 1500.00 0.00 30
7876 ADAMS CLERK 7788 23-五月-87 1100.00 20
7900 JAMES CLERK 7698 03-十二月-81 950.00 30
7902 FORD ANALYST 7566 03-十二月-81 3000.00 20
7934 MILLER CLERK 7782 23-一月-82 1300.00 10
14 rows selected
--显示员工的详细资料,并按姓名排序
SELECT * FROM EMP ORDER BY ename;
--结果
SELECT * FROM EMP ORDER BY ename;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7876 ADAMS CLERK 7788 23-五月-87 1100.00 20
7499 ALLEN SALESMAN 7698 20-二月-81 1600.00 300.00 30
7698 BLAKE MANAGER 7839 01-五月-81 2850.00 30
7782 CLARK MANAGER 7839 09-六月-81 2450.00 10
7902 FORD ANALYST 7566 03-十二月-81 3000.00 20
7900 JAMES CLERK 7698 03-十二月-81 950.00 30
7566 JONES MANAGER 7839 02-四月-81 2975.00 20
7839 KING PRESIDENT 17-十一月-81 5000.00 10
7654 MARTIN SALESMAN 7698 28-九月-81 1250.00 1400.00 30
7934 MILLER CLERK 7782 23-一月-82 1300.00 10
7788 SCOTT ANALYST 7566 19-四月-87 3000.00 20
7369 SMITH CLERK 7902 17-十二月-80 800.00 20
7844 TURNER SALESMAN 7698 08-九月-81 1500.00 0.00 30
7521 WARD SALESMAN 7698 22-二月-81 1250.00 500.00 30
14 rows selected
--18、显示员工的姓名和受雇日期,并按照老的员工排在前面的方式显示出来
SELECT ename,hiredate FROM EMP ORDER BY hiredate ASC;
--结果
ENAME HIREDATE
---------- -----------
SMITH 17-十二月-80
ALLEN 20-二月-81
WARD 22-二月-81
JONES 02-四月-81
BLAKE 01-五月-81
CLARK 09-六月-81
TURNER 08-九月-81
MARTIN 28-九月-81
KING 17-十一月-81
JAMES 03-十二月-81
FORD 03-十二月-81
MILLER 23-一月-82
SCOTT 19-四月-87
ADAMS 23-五月-87
14 rows selected
--19、显示所有员工的姓名、工作和薪金,按工作的降序排列,工作相同则按照薪金的升序排列
SELECT ename,job,sal FROM emp ORDER BY job DESC,sal ASC;
--结果
ENAME JOB SAL
---------- --------- ---------
WARD SALESMAN 1250.00
MARTIN SALESMAN 1250.00
TURNER SALESMAN 1500.00
ALLEN SALESMAN 1600.00
KING PRESIDENT 5000.00
CLARK MANAGER 2450.00
BLAKE MANAGER 2850.00
JONES MANAGER 2975.00
SMITH CLERK 800.00
JAMES CLERK 950.00
ADAMS CLERK 1100.00
MILLER CLERK 1300.00
SCOTT ANALYST 3000.00
FORD ANALYST 3000.00
14 rows selected
--20、显示所有员工的姓名、加入公司的年份和月份、按接受所在雇佣月排序,若月的相同则按最早年份的员工排在最前面
--本程序需要求出所雇的日期的年份和月份,然后再来显示
SELECT ename 姓名,TO_CHAR(hiredate,'yyyy') 年份, TO_CHAR(hiredate,'mm') 月份 FROM emp ORDER BY 月份,年份;
--结果
姓名 年份 月份
---------- ---- ----
MILLER 1982 01
ALLEN 1981 02
WARD 1981 02
JONES 1981 04
SCOTT 1987 04
BLAKE 1981 05
ADAMS 1987 05
CLARK 1981 06
TURNER 1981 09
MARTIN 1981 09
KING 1981 11
SMITH 1980 12
JAMES 1981 12
FORD 1981 12
14 rows selected
--21、显示一个月为30天的情况下,所有员工的日薪,忽略余数
SELECT ename 姓名,sal 月薪,TRUNC(sal/30) 日薪 FROM EMP;
--结果
姓名 月薪 日薪
---------- --------- ----------
SMITH 800.00 26
ALLEN 1600.00 53
WARD 1250.00 41
JONES 2975.00 99
MARTIN 1250.00 41
BLAKE 2850.00 95
CLARK 2450.00 81
SCOTT 3000.00 100
KING 5000.00 166
TURNER 1500.00 50
ADAMS 1100.00 36
JAMES 950.00 31
FORD 3000.00 100
MILLER 1300.00 43
--22、找出在(任何年份的)2月受雇的员工
SELECT * FROM EMP WHERE TO_CHAR(hiredate,'mm') = 02;
--结果
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7499 ALLEN SALESMAN 7698 20-二月-81 1600.00 300.00 30
7521 WARD SALESMAN 7698 22-二月-81 1250.00 500.00 30
--23、对于每个员工显示其来到公司的天数
SELECT ename 姓名,SYSDATE-hiredate 来公司的天数 FROM EMP;
--结果
姓名 来公司的天数
---------- ------------
SMITH 11520.760555
ALLEN 11455.760555
WARD 11453.760555
JONES 11414.760555
MARTIN 11235.760555
BLAKE 11385.760555
CLARK 11346.760555
SCOTT 9206.7605555
KING 11185.760555
TURNER 11255.760555
ADAMS 9172.7605555
JAMES 11169.760555
FORD 11169.760555
MILLER 11118.760555
14 rows selected
--24、显示姓名字段的任何位置包含有’A‘的员工
SELECT * FROM EMP WHERE ename LIKE '%A%';
--结果
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7499 ALLEN SALESMAN 7698 20-二月-81 1600.00 300.00 30
7521 WARD SALESMAN 7698 22-二月-81 1250.00 500.00 30
7654 MARTIN SALESMAN 7698 28-九月-81 1250.00 1400.00 30
7698 BLAKE MANAGER 7839 01-五月-81 2850.00 30
7782 CLARK MANAGER 7839 09-六月-81 2450.00 10
7876 ADAMS CLERK 7788 23-五月-87 1100.00 20
7900 JAMES CLERK 7698 03-十二月-81 950.00 30
7 rows selected
--25、以月份的方式显示所有员工的服务年限
--结果分析:
-- 第一步:求出员工的雇佣年数,雇佣的月数除以12
SELECT ename,TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate)/12) 年数 FROM EMP;
ENAME 年数
---------- ----------
SMITH 31
ALLEN 31
WARD 31
JONES 31
MARTIN 30
BLAKE 31
CLARK 31
SCOTT 25
KING 30
TURNER 30
ADAMS 25
JAMES 30
FORD 30
MILLER 30
14 rows selected
-- 第二步:求除去的出去年份之后的月份
SELECT ename,TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate)/12) 年数,TRUNC(MOD(MONTHS_BETWEEN(SYSDATE,hiredate),12)) 月数 FROM emp;
ENAME 年数 月数
---------- ---------- ----------
SMITH 31 6
ALLEN 31 4
WARD 31 4
JONES 31 3
MARTIN 30 9
BLAKE 31 2
CLARK 31 0
SCOTT 25 2
KING 30 7
TURNER 30 9
ADAMS 25 1
JAMES 30 6
FORD 30 6
MILLER 30 5
14 rows selected
-- 第三步:求出的除去年份和月份之后的天数
SELECT ename,TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate)/12) 年数,TRUNC(MOD(MONTHS_BETWEEN(SYSDATE,hiredate),12)) 月数,TRUNC(SYSDATE-ADD_MONTHS(hiredate,MONTHS_BETWEEN(SYSDATE,hiredate))) 天数 FROM emp;
ENAME 年数 月数 天数
---------- ---------- ---------- ----------
SMITH 31 6 15
ALLEN 31 4 12
WARD 31 4 10
JONES 31 3 0
MARTIN 30 9 4
BLAKE 31 2 1
CLARK 31 0 23
SCOTT 25 2 13
KING 30 7 15
TURNER 30 9 24
ADAMS 25 1 9
JAMES 30 6 29
FORD 30 6 29
MILLER 30 5 9
14 rows selected
--最后结果
SELECT ename,TO_CHAR(SYSDATE,'YYYY-MM-DD'),TO_CHAR(hiredate,'YYYY-MM-DD') 雇佣日期,TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate)/12) 年数,TRUNC(MOD(MONTHS_BETWEEN(SYSDATE,hiredate),12)) 月数,TRUNC(SYSDATE-ADD_MONTHS(hiredate,MONTHS_BETWEEN(SYSDATE,hiredate))) 天数 FROM emp;
--结果
ENAME TO_CHAR(SYSDATE,'YYYY-MM-DD') 雇佣日期 年数 月数 天数
---------- ----------------------------- ---------- ---------- ---------- ----------
SMITH 2012-07-02 1980-12-17 31 6 15
ALLEN 2012-07-02 1981-02-20 31 4 12
WARD 2012-07-02 1981-02-22 31 4 10
JONES 2012-07-02 1981-04-02 31 3 0
MARTIN 2012-07-02 1981-09-28 30 9 4
BLAKE 2012-07-02 1981-05-01 31 2 1
CLARK 2012-07-02 1981-06-09 31 0 23
SCOTT 2012-07-02 1987-04-19 25 2 13
KING 2012-07-02 1981-11-17 30 7 15
TURNER 2012-07-02 1981-09-08 30 9 24
ADAMS 2012-07-02 1987-05-23 25 1 9
JAMES 2012-07-02 1981-12-03 30 6 29
FORD 2012-07-02 1981-12-03 30 6 29
MILLER 2012-07-02 1982-01-23 30 5 9
14 rows selected
发表评论
-
SQL 语句大全
2020-08-21 12:12 253一、基础 1、说明:创建数据库CREATE DATABA ... -
kafka技术题
2020-08-20 10:06 3541.Kafka 的设计时什么样的呢? Kafka 将消息以 ... -
大数据基础知识
2018-07-13 17:37 0mapreduce工作原理 MapReduce模型主要包含 ... -
题海 JAVA和大数据
2018-07-13 17:36 01、HashMap 源码解读(TreeMap. LinkedH ... -
spark 题目和答案 精典题
2018-07-13 17:03 0Spark Core面试篇01 新增《Spark面试2000 ... -
技术内容
2018-06-07 16:27 3951、HashMap 源码解读(TreeMap. Lin ... -
java面试题及答案(基础题122道,代码题19道)
2017-11-24 10:35 18301。请大概描述一下Vector和ArrayList的区别,H ... -
百度“Java面试题”前200页
2017-11-24 10:17 931基本概念 操作系统中 heap 和 stac ... -
Java 相关知识
2017-10-26 18:05 730内存泄漏(memory leak)? 指由于疏 ... -
Java多线程面试、笔试方向
2015-04-16 09:17 9351.ThreadLocal类 线程级别的局部变量, ... -
深入ThreadLocal的内部机制
2015-03-15 00:23 635JDK 1.2的版本中就提供java.lang.Thread ... -
mysql对binlog的处理
2015-02-26 09:50 707mysql对binlog的处理 Mysql和其它开源 ... -
listener.ora/sqlnet.ora/tnsnames.ora配置文件详解
2014-02-16 11:59 990转自:http://blog.csdn.net/aten_x ... -
core java核心面试题
2013-03-17 23:17 1347 -
经典题
2012-08-22 13:12 18211.1到100有多少个9 answer: 个位9的9 19 ... -
形容人的性格的英语单词
2012-08-22 11:18 1249able 有才干的,能干的; adaptable 适应性强的 ... -
Java教程 实战JMS
2012-08-20 23:50 7314JMS API JMS源于企业应用 ... -
经典面试题
2012-08-20 23:47 1387public class ThreadMethod { p ... -
某信用卡公司测试项目组笔试题
2012-08-20 18:55 1210/* * 有50个人站成一个圈, * 第一个人开始数数 ... -
lv mama面试题
2012-08-17 19:19 12471.如何优化java代码? 可供程序利用的资源(内存、CPU ...
相关推荐
本文将深入探讨“数据库SQL面试题大全”所涵盖的关键知识点,帮助求职者准备面试,确保在面对数据库相关问题时能够胸有成竹。 首先,SQL是用于管理关系型数据库的标准语言,它包括数据查询、数据更新、数据插入和...
以下是一些常见的SQL面试题及相关的知识点解析: 1. **INSERT INTO**:用于向数据表中插入新记录。例如,`INSERT INTO user(username, password, age) VALUES('李老四', '6666', 45)` 插入了一条新的用户记录。 2....
### SQL语法面试题知识点解析 #### 一、SQL概述与分类 SQL(Structured Query Language,结构化查询语言)是一种用于管理关系数据库的标准语言。它主要分为以下几类: 1. **DDL (Data Definition Language)**: ...
根据提供的文件内容,我们可以整理出一系列与SQL相关的面试题及解答思路。这些题目涵盖了SQL的基础查询、数据处理、以及更高级的功能应用等多方面内容,非常适合准备数据库工程师面试的求职者进行练习。下面是针对每...
【SQLServer经典面试题详解】 在SQLServer面试中,掌握基本的SQL语法和高级查询技巧是至关重要的。以下是一些常见的面试重点: 1. **DDL(数据定义语言)**:包括CREATE, ALTER, DROP和DECLARE等命令,用于创建、...
以下是一些可能遇到的SQL面试题目和相关知识点: 1. **SQL基础概念**: - SQL是用于管理关系型数据库的标准语言。 - 关系型数据库模型基于实体间的关系,如表与表之间的连接。 2. **DML(Data Manipulation ...
主要有INNER JOIN(内连接),LEFT JOIN(左连接),RIGHT JOIN(右连接)和FULL JOIN(全连接)。 6. **子查询**:子查询是在一个SQL语句中嵌套另一个SQL查询,用于获取满足特定条件的子集数据,可以作为其他查询...
以下是一些可能的SQL面试题及其详细解答,旨在帮助你准备面试。 1. **基础概念** - **什么是SQL?** SQL是结构化查询语言,用于管理和操作关系型数据库,包括数据的查询、更新、插入和删除。 2. **数据类型** -...
我们可以归纳总结出一系列与SQL相关的知识点,这些知识点主要涵盖了基本的数据操作语言(DML)命令,如INSERT、UPDATE、DELETE等,以及更高级的数据查询语言(DQL)技巧,例如使用聚合函数、连接操作和特定查询条件...
在SQL面试中,掌握基本的SQL语法和概念是至关重要的。SQL(Structured Query Language)是用于管理和处理关系数据库的标准语言,主要包括数据定义语言(DDL)、数据操纵语言(DML)和数据控制语言(DCL)三大部分。 ...
根据给定文件中的标题“2024 SQL面试题二”及描述“SQL编程”,结合提供的部分案例数据,我们可以从中提炼出几个重要的SQL知识点及其应用示例。下面将逐一进行详细解析。 ### 1. 查询所有客户的下单货号数、下单总...
在IT领域,SQL(Structured Query Language)是一种必不可少的语言,用于管理和操作关系数据库系统。无论是数据分析师、数据库管理员还是软件开发者,掌握SQL都是基础且重要的技能。以下是一些经典的SQL语句以及各大...
在SQL的世界里,面试题是检验候选人技能的重要方式。这些题目涵盖了从基础的查询操作到复杂的联结、子查询、窗口函数以及优化策略等多个方面。本文将深入探讨一些SQL的经典面试题,帮助你全面理解并掌握这个强大的...
深圳华为等大型企业的面试题可能涵盖这些基础内容,同时也可能涉及更高级的主题,如Oracle的RAC集群、SQL的窗口函数、存储过程的编写和优化等。因此,全面掌握Oracle和SQL数据库的知识对于求职者至关重要。
SQL数据库经典面试题修改笔试题有答案 SQL数据库经典面试题修改笔试题有答案是数据库面试中常见的题目,涵盖了数据库基本操作、数据分析、数据提取等多方面的知识点。本文将对这些题目进行详细的解释和分析。 28. ...
在本文中,我们将对SQL数据库经典面试题修改笔试题进行总结,涵盖了数据库抽出部门、平均工资、字符串顺序排序、最小值、每个Customer的Revenue总和、选出score最高的一条记录等多方面的知识点。 一、数据库抽出...
本文将围绕《这几道SQL面试题秒杀大部分的0年工作经验的毕业生》这一主题,深入探讨SQL在面试中的关键知识点。 1. 数据表建表语句:在SQL中,CREATE TABLE语句用于创建新的数据表。理解不同数据类型(如INT、...
- `LEFT JOIN` 和 `RIGHT JOIN`:左连接保留左侧表的所有记录,右连接保留右侧表的所有记录,如: ```sql SELECT x.[name], y.[name] FROM x LEFT JOIN y ON x.[refid] = y.id; SELECT y.[name], x.[name] ...
### T-Sql 面试题解析 #### 题目背景 在IT行业中,数据库技术一直是企业数据管理和处理的核心工具之一。SQL(Structured Query Language)作为与数据库交互的主要语言,其掌握程度往往成为衡量一个程序员能力的...
- 选项D(SALES表中qty列最小值大于等于60)是正确答案,因为事务的提交顺序保证了qty值被递增。 13. SQLiteOpenHelper使用: - SQLiteOpenHelper是一个辅助类,用于管理数据库的创建和版本管理。 - 方法...