- 浏览: 188253 次
- 性别:
- 来自: 上海
文章分类
最新评论
第一篇
--------1.列出至少有一个员工的所有部门。---------
SQL> select dname from dept where deptno in(select deptno from emp);
SQL> select dname from dept where deptno in(select deptno from emp group by deptno having count(deptno) >=1);
--------2.列出薪金比“SMITH”多的所有员工。----------
SQL> select * from emp where sal > (select sal from emp where ename = 'SMITH');
--------3.列出所有员工的姓名及其直接上级的姓名。----------
SQL> select a.ename,(select ename from emp b where b.empno=a.mgr) as boss_name from emp a;
--------4.列出受雇日期早于其直接上级的所有员工。----------
SQL> select a.ename from emp a where a.hiredate<(select hiredate from emp b where b.empno=a.mgr);
--------5.列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门----------
SQL> select a.dname,b.empno,b.ename,b.job,b.mgr,b.hiredate,b.sal,b.deptno
from dept a left join emp b on a.deptno=b.deptno;
--------6.列出所有“CLERK”(办事员)的姓名及其部门名称。----------
SQL> select a.ename,b.dname from emp a join dept b on a.deptno=b.deptno and a.job='CLERK';
--------7.列出最低薪金大于1500的各种工作。----------
SQL> select distinct job as HighSalJob from emp group by job having min(sal)>1500;
--------8.列出在部门“SALES”(销售部)工作的员工的姓名,假定不知道销售部的部门编号。----------
SQL> select ename from emp where deptno=(select deptno from dept where dname='SALES');
--------9.列出薪金高于公司平均薪金的所有员工。----------
SQL> select ename from emp where sal>(select avg(sal) from emp);
--------10.列出与“SCOTT”从事相同工作的所有员工。--------
SQL> select ename from emp where job=(select job from emp where ename='SCOTT');
--------11.列出薪金等于部门30中员工的薪金的所有员工的姓名和薪金。---------
SQL> select a.ename,a.sal from emp a where a.sal in (select b.sal
from emp b where b.deptno=30) and a.deptno<>30;
--------12.列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金。---------
SQL> select ename,sal from emp where sal>(select max(sal) from emp where deptno=30);
--------13.列出在每个部门工作的员工数量、平均工资和平均服务期限。---------
SQL> select (select b.dname from dept b where a.deptno=b.deptno) as deptname ,count(deptno) as deptcount,avg(sal) as deptavgsal
from emp a group by deptno;
--------14.列出所有员工的姓名、部门名称和工资。---------
SQL> select a.ename,(select b.dname from dept b where b.deptno=a.deptno) as deptname,sal from emp a;
--------15.列出所有部门的详细信息和部门人数。---------
SQL> select a.deptno,a.dname,a.loc,(select count(deptno) from emp b where b.deptno=a.deptno group by b.deptno) as deptcount from dept a;
--------16.列出各种工作的最低工资。---------
SQL> select job,avg(sal) from emp group by job;
--------17.列出各个部门的MANAGER(经理)的最低薪金。--------
SQL> select deptno,min(sal) from emp where job='MANAGER' group by deptno;
--------18.列出所有员工的年工资,按年薪从低到高排序。---------
SQL> select ename,(sal+nvl(comm,0))*12 as salpersal from emp order by salpersal;
第二篇
--------1. 找出EMP表中的姓名(ENAME)第三个字母是A 的员工姓名。---------
SQL> SELECT ENAME FROM SCOTT.EMP WHERE ENAME LIKE '__A%';
-------2. 找出EMP表员工名字中含有A 和N的员工姓名。----------
SQL> SELECT ENAME FROM SCOTT.EMP WHERE ENAME LIKE '%A%' AND ENAME LIKE '%N%';
--------3. 找出所有有佣金的员工,列出姓名、工资、佣金,显示结果按工资从小到大,佣金从大到小。----------
SQL> SELECT ENAME,SAL + COMM AS WAGE,COMM
FROM SCOTT.EMP
ORDER BY WAGE,COMM DESC;
-------4. 列出部门编号为20的所有职位。----------
SQL> SELECT DISTINCT JOB FROM EMP WHERE DEPTNO = 20;
-------5. 列出不属于SALES 的部门。----------
SQL> SELECT DISTINCT * FROM SCOTT.DEPT WHERE DNAME <> 'SALES';
或者
SQL> SELECT DISTINCT * FROM SCOTT.DEPT WHERE DNAME != 'SALES';
SQL> SELECT DISTINCT * FROM SCOTT.DEPT WHERE DNAME NOT IN('SALES');
SQL> SELECT DISTINCT * FROM SCOTT.DEPT WHERE DNAME NOT LIKE 'SALES';
---6. 显示工资不在1000 到1500 之间的员工信息:名字、工资,按工资从大到小排序。---------
SQL> SELECT ENAME,SAL + COMM AS WAGE FROM SCOTT.EMP
WHERE SAL + COMM NOT BETWEEN 1000 AND 1500
ORDER BY WAGE DESC;
--或者
SQL> SELECT ENAME,SAL + COMM AS WAGE FROM SCOTT.EMP
2 WHERE SAL + COMM < 1000 OR SAL + COMM > 1500
3 ORDER BY WAGE DESC;
/*----- 7. 显示职位为MANAGER 和SALESMAN,年薪在15000 和20000 之间的员工的信息:名字、职位、年薪。----------*/
SQL> SELECT ENAME 姓名,JOB 职位,(SAL + COMM) * 12 AS 年薪
2 FROM SCOTT.EMP
3 WHERE (SAL + COMM) * 12 BETWEEN 15000 AND 20000
4 AND JOB IN('MANAGER','SALESMAN');
/*----- 8. 说明以下两条SQL语句的输出结果:
SELECT EMPNO,COMM FROM EMP WHERE COMM IS NULL;
SELECT EMPNO,COMM FROM EMP WHERE COMM = NULL;
--说明:IS NULL是判断某个字段是否为空,为空并不等价于为空字符串或为数字0;
--而 =NULL 是判断某个值是否等于 NULL,NULL = NULL和NULL <> NULL都为 FALSE。
第三篇
/*--------1、改变NLS_LANG 的值,让SELECT TO_CHAR(SALARY,'L99,999.99') FROM HR.EMPLOYEES WHERE ROWNUM < 5 输出结果的货币单位是¥和$。---------*/
-----在没有设置NLS_LANG的情况下:
SQL> SELECT TO_CHAR(SALARY,'L99,999.99')
FROM HR.EMPLOYEES
WHERE ROWNUM < 5;
/*--------2、列出前五位每个员工的名字,工资、涨薪后的的工资(涨幅为8%),以“元”为单位进行四舍五入。---------*/
SQL> SELECT FIRST_NAME,SALARY,ROUND(SALARY * 1.08) FROM HR.EMPLOYEES
WHERE ROWNUM <=5;
/*--------3、找出谁是最高领导,将名字按大写形式显示。---------*/
SQL> SELECT UPPER(FIRST_NAME || ' ' || LAST_NAME) AS NAME
FROM HR.EMPLOYEES
WHERE MANAGER_ID IS NULL;
/*--------4、找出David 的直接领导的名字。---------*/
SQL> SELECT UPPER(FIRST_NAME ||' ' || LAST_NAME) AS NAME
FROM HR.EMPLOYEES
WHERE EMPLOYEE_ID IN(
SELECT MANAGER_ID FROM HR.EMPLOYEES
WHERE FIRST_NAME = 'David' AND LAST_NAME = 'Austin');
/*--------5、First_Name 为Alexander,LAST_NAME为Hunold领导谁。(谁向David 报告)。---------*/
SQL> SELECT UPPER(FIRST_NAME ||' ' || LAST_NAME) AS NAME
FROM HR.EMPLOYEES
WHERE MANAGER_ID IN(
SELECT EMPLOYEE_ID FROM HR.EMPLOYEES
WHERE FIRST_NAME = 'Alexander' AND LAST_NAME = 'Hunold');
/*--------6、哪些员工的工资高于他直接上司的工资,列出员工的名字和工资,上司的名字和工资。---------*/
SQL> SELECT E.FIRST_NAME,E.SALARY,M.FIRST_NAME,M.SALARY
FROM EMPLOYEES E,EMPLOYEES M
WHERE E.MANAGER_ID = M.EMPLOYEE_ID AND E.SALARY > M.SALARY;
--要是只列出员工的名字与工资的话,还可以这样:
SQL> SELECT E.FIRST_NAME,E.SALARY
FROM EMPLOYEES E WHERE E.SALARY >
(SELECT M.SALARY FROM EMPLOYEES M
WHERE E.MANAGER_ID = M.EMPLOYEE_ID);
/*--------7、哪些员工和Chen(LAST_NAME)同部门。---------*/
SQL> SELECT FIRST_NAME FROM EMPLOYEES
WHERE DEPARTMENT_ID IN
(SELECT DEPARTMENT_ID FROM EMPLOYEES WHERE LAST_NAME = 'Chen')
AND LAST_NAME <> 'Chen';
--或者--
SQL> SELECT E1.FIRST_NAME FROM EMPLOYEES E1,EMPLOYEES E2
WHERE E1.DEPARTMENT_ID = E2.DEPARTMENT_ID
AND E2.LAST_NAME = 'Chen' AND E1.LAST_NAME <> 'Chen';
/*--------8、哪些员工跟De Haan(LAST_NAME)做一样职位。---------*/
SQL> SELECT FIRST_NAME FROM EMPLOYEES
WHERE JOB_ID IN
(SELECT JOB_ID FROM EMPLOYEES
WHERE LAST_NAME = 'De Haan')
AND LAST_NAME <> 'De Haan';
--或者--
SQL> SELECT E1.FIRST_NAME FROM EMPLOYEES E1,EMPLOYEES E2
WHERE E1.JOB_ID = E2.JOB_ID
AND E2.LAST_NAME = 'De Haan' AND E1.LAST_NAME <> 'De Haan';
/*--------9、哪些员工跟Hall(LAST_NAME)不在同一个部门。---------*/
SQL> SELECT FIRST_NAME || ' ' || LAST_NAME FROM HR.EMPLOYEES
WHERE DEPARTMENT_ID NOT IN(
SELECT DEPARTMENT_ID FROM HR.EMPLOYEES
WHERE LAST_NAME = 'Hall');
--或者:
SQL> SELECT e1.FIRST_NAME FROM EMPLOYEES e1,EMPLOYEES e2
WHERE e1.DEPARTMENT_ID = e2.DEPARTMENT_ID(+)
and e2.LAST_NAME(+) = 'Hall'
and e2.LAST_NAME IS NULL;
/*-------10、哪些员工跟William(FIRST_NAME)、Smith(LAST_NAME)做不一样的职位。--------*/
SQL> SELECT FIRST_NAME || ' ' || LAST_NAME FROM HR.EMPLOYEES
WHERE JOB_ID <> (SELECT DISTINCT JOB_ID FROM EMPLOYEES
WHERE FIRST_NAME = 'William' AND LAST_NAME = 'Smith');
/*--------11、显示有提成的员工的信息:名字、提成、所在部门名称、所在地区的名称。---------*/
SQL> SELECT E.FIRST_NAME || ' ' || E.LAST_NAME AS NAME,
E.COMMISSION_PCT,D.DEPARTMENT_NAME,L.CITY
FROM HR.EMPLOYEES E,HR.DEPARTMENTS D,HR.LOCATIONS L
WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID
AND D.LOCATION_ID = L.LOCATION_ID
AND E.COMMISSION_PCT IS NOT NULL;
/*--------12、显示Executive部门有哪些职位。---------*/
SQL> SELECT DISTINCT E.JOB_ID FROM HR.EMPLOYEES E,HR.DEPARTMENTS D
WHERE D.DEPARTMENT_ID = E.DEPARTMENT_ID
AND D.DEPARTMENT_NAME = 'Executive';
/*--------13、整个公司中,最高工资和最低工资相差多少。---------*/
SQL> SELECT MAX(SALARY) - MIN(SALARY) FROM HR.EMPLOYEES;
/*--------14、提成大于0 的人数。---------*/
SQL> SELECT COUNT(*) AS 提成大小0的人数 FROM HR.EMPLOYEES
WHERE COMMISSION_PCT > 0;
--或者
SQL> SELECT COUNT(COMMISSION_PCT) AS 提成大小0的人数
FROM HR.EMPLOYEES
WHERE COMMISSION_PCT > 0;
/*--------15、显示整个公司的最高工资、最低工资、工资总和、平均工资保留到整数位。---------*/
SQL> SELECT MAX(NVL(SALARY,0)) AS 最高工资,
MIN(NVL(SALARY,0)) AS 最低工资,
SUM(NVL(SALARY,0)) AS 工资总和,
ROUND(AVG(NVL(SALARY,0))) AS 平均工资
FROM HR.EMPLOYEES;
/*--------16、整个公司有多少个领导。---------*/
SQL> SELECT COUNT(DISTINCT(MANAGER_ID)) FROM HR.EMPLOYEES
2 WHERE MANAGER_ID IS NOT NULL;
/*--------17、列出在同一部门入职日期晚但工资高于其他同事的员工:
名字、工资、入职日期。---------*/
SQL> SELECT DISTINCT E1.FIRST_NAME || ' ' || E1.LAST_NAME AS 姓名,
E1.SALARY AS 工资,E1.HIRE_DATE AS 入职日期
FROM HR.EMPLOYEES E1,HR.EMPLOYEES E2
WHERE E1.DEPARTMENT_ID = E2.DEPARTMENT_ID
AND E1.HIRE_DATE > E2.HIRE_DATE
AND E1.SALARY > E2.SALARY
ORDER BY 工资 DESC;
第四篇
/*--------1、各个部门平均、最大、最小工资、人数,按照部门号升序排列。---------*/
SQL> SELECT DEPARTMENT_ID AS 部门号,AVG(SALARY) AS 平均工资
,MAX(SALARY) AS 最高工资,MIN(SALARY) AS 最低工资
,COUNT(*) AS 人数
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID
ORDER BY DEPARTMENT_ID ASC;
/*--------2、各个部门中工资大于5000的员工人数。---------*/
SQL> SELECT DEPARTMENT_ID,COUNT(*) FROM EMPLOYEES
WHERE SALARY > 5000
GROUP BY DEPARTMENT_ID;
/*--------3、各个部门平均工资和人数,按照部门名字升序排列。---------*/
SQL> SELECT DPTNAME,AVG(SALARY),COUNT(*) FROM
(SELECT
(SELECT DEPT.DEPARTMENT_NAME FROM DEPARTMENTS DEPT
WHERE DEPT.DEPARTMENT_ID = EMP.DEPARTMENT_ID) DPTNAME,
EMP.SALARY
FROM EMPLOYEES EMP)
GROUP BY DPTNAME
ORDER BY DPTNAME;
--或者--
SQL> SELECT DEPT.DEPARTMENT_NAME,AVG(EMP.SALARY),COUNT(*)
FROM EMPLOYEES EMP,DEPARTMENTS DEPT
WHERE EMP.DEPARTMENT_ID = DEPT.DEPARTMENT_ID
GROUP BY DEPT.DEPARTMENT_NAME
ORDER BY DEPT.DEPARTMENT_NAME;
/*--------4、列出每个部门中有同样工资的员工的统计信息,
列出他们的部门号,工资,人数。---------*/
SQL> SELECT EMP1.DEPARTMENT_ID,EMP1.SALARY,COUNT(*) CNT
FROM EMPLOYEES EMP1,EMPLOYEES EMP2
WHERE EMP1.DEPARTMENT_ID = EMP2.DEPARTMENT_ID AND
EMP1.SALARY = EMP2.SALARY
AND EMP1.EMPLOYEE_ID <> EMP2.EMPLOYEE_ID
GROUP BY EMP1.DEPARTMENT_ID,EMP1.SALARY;
/*--------5、列出同部门中工资高于1000 的员工数量超过2 人的部门,
显示部门名字、地区名称。---------*/
SQL> SELECT D.DEPARTMENT_NAME,L.CITY,COUNT(*)
FROM EMPLOYEES E,DEPARTMENTS D,LOCATIONS L
WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID AND
D.LOCATION_ID = L.LOCATION_ID AND
E.SALARY > 1000
GROUP BY D.DEPARTMENT_NAME,L.CITY
HAVING COUNT(*) > 2;
/*--------6、哪些员工的工资,高于整个公司的平均工资,
列出员工的名字和工资(降序)。---------*/
SQL> SELECT FIRST_NAME || ' ' || LAST_NAME,SALARY
FROM EMPLOYEES
WHERE SALARY > (
SELECT AVG(SALARY)
FROM EMPLOYEES
)
ORDER BY SALARY DESC;
/*--------7、哪些员工的工资,介于50号 和80号 部门平均工资之间。---------*/
SQL> SELECT FIRST_NAME || ' ' || LAST_NAME AS NAME,SALARY
FROM EMPLOYEES
WHERE SALARY
BETWEEN
(SELECT AVG(SALARY) FROM EMPLOYEES
WHERE DEPARTMENT_ID = 50)
AND (SELECT AVG(SALARY) FROM EMPLOYEES
WHERE DEPARTMENT_ID = 80);
/*--------8、所在部门平均工资高于5000 的员工名字。---------*/
SQL> SELECT FIRST_NAME || ' ' || LAST_NAME AS NAME,SALARY
FROM EMPLOYEES
WHERE DEPARTMENT_ID IN
(SELECT DEPARTMENT_ID FROM EMPLOYEES
GROUP BY DEPARTMENT_ID
HAVING AVG(SALARY) > 5000);
/*--------9、列出各个部门中工资最高的员工的信息:名字、部门号、工资。---------*/
SQL> SELECT FIRST_NAME || ' ' || LAST_NAME AS NAME
,SALARY,DEPARTMENT_ID
FROM EMPLOYEES
WHERE (DEPARTMENT_ID,SALARY) IN
(SELECT DEPARTMENT_ID,MAX(SALARY)
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID);
/*--------10、最高的部门平均工资是多少。---------*/
SQL> SELECT MAX(AVGSALARY)
FROM(SELECT DEPARTMENT_ID,AVG(SALARY) AVGSALARY
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID);
--------1.列出至少有一个员工的所有部门。---------
SQL> select dname from dept where deptno in(select deptno from emp);
SQL> select dname from dept where deptno in(select deptno from emp group by deptno having count(deptno) >=1);
--------2.列出薪金比“SMITH”多的所有员工。----------
SQL> select * from emp where sal > (select sal from emp where ename = 'SMITH');
--------3.列出所有员工的姓名及其直接上级的姓名。----------
SQL> select a.ename,(select ename from emp b where b.empno=a.mgr) as boss_name from emp a;
--------4.列出受雇日期早于其直接上级的所有员工。----------
SQL> select a.ename from emp a where a.hiredate<(select hiredate from emp b where b.empno=a.mgr);
--------5.列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门----------
SQL> select a.dname,b.empno,b.ename,b.job,b.mgr,b.hiredate,b.sal,b.deptno
from dept a left join emp b on a.deptno=b.deptno;
--------6.列出所有“CLERK”(办事员)的姓名及其部门名称。----------
SQL> select a.ename,b.dname from emp a join dept b on a.deptno=b.deptno and a.job='CLERK';
--------7.列出最低薪金大于1500的各种工作。----------
SQL> select distinct job as HighSalJob from emp group by job having min(sal)>1500;
--------8.列出在部门“SALES”(销售部)工作的员工的姓名,假定不知道销售部的部门编号。----------
SQL> select ename from emp where deptno=(select deptno from dept where dname='SALES');
--------9.列出薪金高于公司平均薪金的所有员工。----------
SQL> select ename from emp where sal>(select avg(sal) from emp);
--------10.列出与“SCOTT”从事相同工作的所有员工。--------
SQL> select ename from emp where job=(select job from emp where ename='SCOTT');
--------11.列出薪金等于部门30中员工的薪金的所有员工的姓名和薪金。---------
SQL> select a.ename,a.sal from emp a where a.sal in (select b.sal
from emp b where b.deptno=30) and a.deptno<>30;
--------12.列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金。---------
SQL> select ename,sal from emp where sal>(select max(sal) from emp where deptno=30);
--------13.列出在每个部门工作的员工数量、平均工资和平均服务期限。---------
SQL> select (select b.dname from dept b where a.deptno=b.deptno) as deptname ,count(deptno) as deptcount,avg(sal) as deptavgsal
from emp a group by deptno;
--------14.列出所有员工的姓名、部门名称和工资。---------
SQL> select a.ename,(select b.dname from dept b where b.deptno=a.deptno) as deptname,sal from emp a;
--------15.列出所有部门的详细信息和部门人数。---------
SQL> select a.deptno,a.dname,a.loc,(select count(deptno) from emp b where b.deptno=a.deptno group by b.deptno) as deptcount from dept a;
--------16.列出各种工作的最低工资。---------
SQL> select job,avg(sal) from emp group by job;
--------17.列出各个部门的MANAGER(经理)的最低薪金。--------
SQL> select deptno,min(sal) from emp where job='MANAGER' group by deptno;
--------18.列出所有员工的年工资,按年薪从低到高排序。---------
SQL> select ename,(sal+nvl(comm,0))*12 as salpersal from emp order by salpersal;
第二篇
--------1. 找出EMP表中的姓名(ENAME)第三个字母是A 的员工姓名。---------
SQL> SELECT ENAME FROM SCOTT.EMP WHERE ENAME LIKE '__A%';
-------2. 找出EMP表员工名字中含有A 和N的员工姓名。----------
SQL> SELECT ENAME FROM SCOTT.EMP WHERE ENAME LIKE '%A%' AND ENAME LIKE '%N%';
--------3. 找出所有有佣金的员工,列出姓名、工资、佣金,显示结果按工资从小到大,佣金从大到小。----------
SQL> SELECT ENAME,SAL + COMM AS WAGE,COMM
FROM SCOTT.EMP
ORDER BY WAGE,COMM DESC;
-------4. 列出部门编号为20的所有职位。----------
SQL> SELECT DISTINCT JOB FROM EMP WHERE DEPTNO = 20;
-------5. 列出不属于SALES 的部门。----------
SQL> SELECT DISTINCT * FROM SCOTT.DEPT WHERE DNAME <> 'SALES';
或者
SQL> SELECT DISTINCT * FROM SCOTT.DEPT WHERE DNAME != 'SALES';
SQL> SELECT DISTINCT * FROM SCOTT.DEPT WHERE DNAME NOT IN('SALES');
SQL> SELECT DISTINCT * FROM SCOTT.DEPT WHERE DNAME NOT LIKE 'SALES';
---6. 显示工资不在1000 到1500 之间的员工信息:名字、工资,按工资从大到小排序。---------
SQL> SELECT ENAME,SAL + COMM AS WAGE FROM SCOTT.EMP
WHERE SAL + COMM NOT BETWEEN 1000 AND 1500
ORDER BY WAGE DESC;
--或者
SQL> SELECT ENAME,SAL + COMM AS WAGE FROM SCOTT.EMP
2 WHERE SAL + COMM < 1000 OR SAL + COMM > 1500
3 ORDER BY WAGE DESC;
/*----- 7. 显示职位为MANAGER 和SALESMAN,年薪在15000 和20000 之间的员工的信息:名字、职位、年薪。----------*/
SQL> SELECT ENAME 姓名,JOB 职位,(SAL + COMM) * 12 AS 年薪
2 FROM SCOTT.EMP
3 WHERE (SAL + COMM) * 12 BETWEEN 15000 AND 20000
4 AND JOB IN('MANAGER','SALESMAN');
/*----- 8. 说明以下两条SQL语句的输出结果:
SELECT EMPNO,COMM FROM EMP WHERE COMM IS NULL;
SELECT EMPNO,COMM FROM EMP WHERE COMM = NULL;
--说明:IS NULL是判断某个字段是否为空,为空并不等价于为空字符串或为数字0;
--而 =NULL 是判断某个值是否等于 NULL,NULL = NULL和NULL <> NULL都为 FALSE。
第三篇
/*--------1、改变NLS_LANG 的值,让SELECT TO_CHAR(SALARY,'L99,999.99') FROM HR.EMPLOYEES WHERE ROWNUM < 5 输出结果的货币单位是¥和$。---------*/
-----在没有设置NLS_LANG的情况下:
SQL> SELECT TO_CHAR(SALARY,'L99,999.99')
FROM HR.EMPLOYEES
WHERE ROWNUM < 5;
/*--------2、列出前五位每个员工的名字,工资、涨薪后的的工资(涨幅为8%),以“元”为单位进行四舍五入。---------*/
SQL> SELECT FIRST_NAME,SALARY,ROUND(SALARY * 1.08) FROM HR.EMPLOYEES
WHERE ROWNUM <=5;
/*--------3、找出谁是最高领导,将名字按大写形式显示。---------*/
SQL> SELECT UPPER(FIRST_NAME || ' ' || LAST_NAME) AS NAME
FROM HR.EMPLOYEES
WHERE MANAGER_ID IS NULL;
/*--------4、找出David 的直接领导的名字。---------*/
SQL> SELECT UPPER(FIRST_NAME ||' ' || LAST_NAME) AS NAME
FROM HR.EMPLOYEES
WHERE EMPLOYEE_ID IN(
SELECT MANAGER_ID FROM HR.EMPLOYEES
WHERE FIRST_NAME = 'David' AND LAST_NAME = 'Austin');
/*--------5、First_Name 为Alexander,LAST_NAME为Hunold领导谁。(谁向David 报告)。---------*/
SQL> SELECT UPPER(FIRST_NAME ||' ' || LAST_NAME) AS NAME
FROM HR.EMPLOYEES
WHERE MANAGER_ID IN(
SELECT EMPLOYEE_ID FROM HR.EMPLOYEES
WHERE FIRST_NAME = 'Alexander' AND LAST_NAME = 'Hunold');
/*--------6、哪些员工的工资高于他直接上司的工资,列出员工的名字和工资,上司的名字和工资。---------*/
SQL> SELECT E.FIRST_NAME,E.SALARY,M.FIRST_NAME,M.SALARY
FROM EMPLOYEES E,EMPLOYEES M
WHERE E.MANAGER_ID = M.EMPLOYEE_ID AND E.SALARY > M.SALARY;
--要是只列出员工的名字与工资的话,还可以这样:
SQL> SELECT E.FIRST_NAME,E.SALARY
FROM EMPLOYEES E WHERE E.SALARY >
(SELECT M.SALARY FROM EMPLOYEES M
WHERE E.MANAGER_ID = M.EMPLOYEE_ID);
/*--------7、哪些员工和Chen(LAST_NAME)同部门。---------*/
SQL> SELECT FIRST_NAME FROM EMPLOYEES
WHERE DEPARTMENT_ID IN
(SELECT DEPARTMENT_ID FROM EMPLOYEES WHERE LAST_NAME = 'Chen')
AND LAST_NAME <> 'Chen';
--或者--
SQL> SELECT E1.FIRST_NAME FROM EMPLOYEES E1,EMPLOYEES E2
WHERE E1.DEPARTMENT_ID = E2.DEPARTMENT_ID
AND E2.LAST_NAME = 'Chen' AND E1.LAST_NAME <> 'Chen';
/*--------8、哪些员工跟De Haan(LAST_NAME)做一样职位。---------*/
SQL> SELECT FIRST_NAME FROM EMPLOYEES
WHERE JOB_ID IN
(SELECT JOB_ID FROM EMPLOYEES
WHERE LAST_NAME = 'De Haan')
AND LAST_NAME <> 'De Haan';
--或者--
SQL> SELECT E1.FIRST_NAME FROM EMPLOYEES E1,EMPLOYEES E2
WHERE E1.JOB_ID = E2.JOB_ID
AND E2.LAST_NAME = 'De Haan' AND E1.LAST_NAME <> 'De Haan';
/*--------9、哪些员工跟Hall(LAST_NAME)不在同一个部门。---------*/
SQL> SELECT FIRST_NAME || ' ' || LAST_NAME FROM HR.EMPLOYEES
WHERE DEPARTMENT_ID NOT IN(
SELECT DEPARTMENT_ID FROM HR.EMPLOYEES
WHERE LAST_NAME = 'Hall');
--或者:
SQL> SELECT e1.FIRST_NAME FROM EMPLOYEES e1,EMPLOYEES e2
WHERE e1.DEPARTMENT_ID = e2.DEPARTMENT_ID(+)
and e2.LAST_NAME(+) = 'Hall'
and e2.LAST_NAME IS NULL;
/*-------10、哪些员工跟William(FIRST_NAME)、Smith(LAST_NAME)做不一样的职位。--------*/
SQL> SELECT FIRST_NAME || ' ' || LAST_NAME FROM HR.EMPLOYEES
WHERE JOB_ID <> (SELECT DISTINCT JOB_ID FROM EMPLOYEES
WHERE FIRST_NAME = 'William' AND LAST_NAME = 'Smith');
/*--------11、显示有提成的员工的信息:名字、提成、所在部门名称、所在地区的名称。---------*/
SQL> SELECT E.FIRST_NAME || ' ' || E.LAST_NAME AS NAME,
E.COMMISSION_PCT,D.DEPARTMENT_NAME,L.CITY
FROM HR.EMPLOYEES E,HR.DEPARTMENTS D,HR.LOCATIONS L
WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID
AND D.LOCATION_ID = L.LOCATION_ID
AND E.COMMISSION_PCT IS NOT NULL;
/*--------12、显示Executive部门有哪些职位。---------*/
SQL> SELECT DISTINCT E.JOB_ID FROM HR.EMPLOYEES E,HR.DEPARTMENTS D
WHERE D.DEPARTMENT_ID = E.DEPARTMENT_ID
AND D.DEPARTMENT_NAME = 'Executive';
/*--------13、整个公司中,最高工资和最低工资相差多少。---------*/
SQL> SELECT MAX(SALARY) - MIN(SALARY) FROM HR.EMPLOYEES;
/*--------14、提成大于0 的人数。---------*/
SQL> SELECT COUNT(*) AS 提成大小0的人数 FROM HR.EMPLOYEES
WHERE COMMISSION_PCT > 0;
--或者
SQL> SELECT COUNT(COMMISSION_PCT) AS 提成大小0的人数
FROM HR.EMPLOYEES
WHERE COMMISSION_PCT > 0;
/*--------15、显示整个公司的最高工资、最低工资、工资总和、平均工资保留到整数位。---------*/
SQL> SELECT MAX(NVL(SALARY,0)) AS 最高工资,
MIN(NVL(SALARY,0)) AS 最低工资,
SUM(NVL(SALARY,0)) AS 工资总和,
ROUND(AVG(NVL(SALARY,0))) AS 平均工资
FROM HR.EMPLOYEES;
/*--------16、整个公司有多少个领导。---------*/
SQL> SELECT COUNT(DISTINCT(MANAGER_ID)) FROM HR.EMPLOYEES
2 WHERE MANAGER_ID IS NOT NULL;
/*--------17、列出在同一部门入职日期晚但工资高于其他同事的员工:
名字、工资、入职日期。---------*/
SQL> SELECT DISTINCT E1.FIRST_NAME || ' ' || E1.LAST_NAME AS 姓名,
E1.SALARY AS 工资,E1.HIRE_DATE AS 入职日期
FROM HR.EMPLOYEES E1,HR.EMPLOYEES E2
WHERE E1.DEPARTMENT_ID = E2.DEPARTMENT_ID
AND E1.HIRE_DATE > E2.HIRE_DATE
AND E1.SALARY > E2.SALARY
ORDER BY 工资 DESC;
第四篇
/*--------1、各个部门平均、最大、最小工资、人数,按照部门号升序排列。---------*/
SQL> SELECT DEPARTMENT_ID AS 部门号,AVG(SALARY) AS 平均工资
,MAX(SALARY) AS 最高工资,MIN(SALARY) AS 最低工资
,COUNT(*) AS 人数
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID
ORDER BY DEPARTMENT_ID ASC;
/*--------2、各个部门中工资大于5000的员工人数。---------*/
SQL> SELECT DEPARTMENT_ID,COUNT(*) FROM EMPLOYEES
WHERE SALARY > 5000
GROUP BY DEPARTMENT_ID;
/*--------3、各个部门平均工资和人数,按照部门名字升序排列。---------*/
SQL> SELECT DPTNAME,AVG(SALARY),COUNT(*) FROM
(SELECT
(SELECT DEPT.DEPARTMENT_NAME FROM DEPARTMENTS DEPT
WHERE DEPT.DEPARTMENT_ID = EMP.DEPARTMENT_ID) DPTNAME,
EMP.SALARY
FROM EMPLOYEES EMP)
GROUP BY DPTNAME
ORDER BY DPTNAME;
--或者--
SQL> SELECT DEPT.DEPARTMENT_NAME,AVG(EMP.SALARY),COUNT(*)
FROM EMPLOYEES EMP,DEPARTMENTS DEPT
WHERE EMP.DEPARTMENT_ID = DEPT.DEPARTMENT_ID
GROUP BY DEPT.DEPARTMENT_NAME
ORDER BY DEPT.DEPARTMENT_NAME;
/*--------4、列出每个部门中有同样工资的员工的统计信息,
列出他们的部门号,工资,人数。---------*/
SQL> SELECT EMP1.DEPARTMENT_ID,EMP1.SALARY,COUNT(*) CNT
FROM EMPLOYEES EMP1,EMPLOYEES EMP2
WHERE EMP1.DEPARTMENT_ID = EMP2.DEPARTMENT_ID AND
EMP1.SALARY = EMP2.SALARY
AND EMP1.EMPLOYEE_ID <> EMP2.EMPLOYEE_ID
GROUP BY EMP1.DEPARTMENT_ID,EMP1.SALARY;
/*--------5、列出同部门中工资高于1000 的员工数量超过2 人的部门,
显示部门名字、地区名称。---------*/
SQL> SELECT D.DEPARTMENT_NAME,L.CITY,COUNT(*)
FROM EMPLOYEES E,DEPARTMENTS D,LOCATIONS L
WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID AND
D.LOCATION_ID = L.LOCATION_ID AND
E.SALARY > 1000
GROUP BY D.DEPARTMENT_NAME,L.CITY
HAVING COUNT(*) > 2;
/*--------6、哪些员工的工资,高于整个公司的平均工资,
列出员工的名字和工资(降序)。---------*/
SQL> SELECT FIRST_NAME || ' ' || LAST_NAME,SALARY
FROM EMPLOYEES
WHERE SALARY > (
SELECT AVG(SALARY)
FROM EMPLOYEES
)
ORDER BY SALARY DESC;
/*--------7、哪些员工的工资,介于50号 和80号 部门平均工资之间。---------*/
SQL> SELECT FIRST_NAME || ' ' || LAST_NAME AS NAME,SALARY
FROM EMPLOYEES
WHERE SALARY
BETWEEN
(SELECT AVG(SALARY) FROM EMPLOYEES
WHERE DEPARTMENT_ID = 50)
AND (SELECT AVG(SALARY) FROM EMPLOYEES
WHERE DEPARTMENT_ID = 80);
/*--------8、所在部门平均工资高于5000 的员工名字。---------*/
SQL> SELECT FIRST_NAME || ' ' || LAST_NAME AS NAME,SALARY
FROM EMPLOYEES
WHERE DEPARTMENT_ID IN
(SELECT DEPARTMENT_ID FROM EMPLOYEES
GROUP BY DEPARTMENT_ID
HAVING AVG(SALARY) > 5000);
/*--------9、列出各个部门中工资最高的员工的信息:名字、部门号、工资。---------*/
SQL> SELECT FIRST_NAME || ' ' || LAST_NAME AS NAME
,SALARY,DEPARTMENT_ID
FROM EMPLOYEES
WHERE (DEPARTMENT_ID,SALARY) IN
(SELECT DEPARTMENT_ID,MAX(SALARY)
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID);
/*--------10、最高的部门平均工资是多少。---------*/
SQL> SELECT MAX(AVGSALARY)
FROM(SELECT DEPARTMENT_ID,AVG(SALARY) AVGSALARY
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID);
发表评论
文章已被作者锁定,不允许评论。
-
oracle 查看执行计划的方式
2016-12-20 18:16 383一、通过PL/SQL Dev工具 1、直接File- ... -
pl/sql 乱码解决
2016-08-25 16:25 326select userenv('language') from ... -
使用MySQL Proxy解决MySQL主从同步延迟
2016-08-15 16:26 532使用MySQL Proxy解决MySQL主从同步延迟 ... -
分库分表
2016-07-03 12:30 533第1章 引言 随着互联网 ... -
select for update
2016-03-30 17:45 624xjr80C7HA3olbVr3y6H3t5--AcosrkB ... -
数据库超时
2016-03-07 10:37 462 -
oracle merge into
2016-03-04 16:16 422/*Merge into 详细介绍 MERGE语句是Oracl ... -
oracle 分区表
2016-03-02 14:59 426(1) 表空间及分区表的 ... -
一些注意的sql写法
2016-01-20 14:07 763Dashboard > 流程空间 > home ... -
oracle 组合索引使用
2016-01-14 20:33 892在Oracle中可以创建组合索引,即同时包含两个或两个以上列的 ... -
oracle 索引
2016-01-14 20:24 649一、 ROWID的概念 存储了row在数据文件中的具体位置: ... -
oracle 查看sql执行计划
2016-01-14 14:06 391如果要分析某条SQL的性能问题,通常我们要先看SQL的执行计划 ... -
oracle sql调优 执行计划固化 排序等 SQL Plan Baseline
2015-11-14 16:13 14191.对查询进行优化,应 ... -
oracle 字段类型 收录
2015-11-02 19:52 770字段类型 中文说明 限制条件 其它说明 CHAR 固定长度字符 ... -
oracle trunc 函数
2015-08-25 17:57 570Oracle trunc()函数的用法 --Oracle t ... -
oracle 分析函数
2015-08-03 12:49 608oracle分析函数--SQL*PLUS环 ... -
跨数据库事务研究
2015-05-12 11:16 868两种方案: 1、分布式 ... -
Oracle的悲观锁和乐观锁
2015-04-22 13:27 451为了得到最大的性能, ... -
MySQL数据库MyISAM和InnoDB存储引擎的比较
2015-04-21 13:49 487MySQL有多种存储引擎,MyISAM和InnoDB是其中常用 ... -
nosql学习
2015-04-20 09:56 5591、NoSQL数据库概念 NoSQL ...
相关推荐
SqlServer2008通过Oracle provider for OLEDB访问远程Oracle数据库 包括链接服务器环境安装、链接服务器创建、远程建表、修改表,增删改查数据,创建、执行带参与无参存储过程的方法等,资料为作者参考网络资料整理...
Oracle自整理学习资料是针对数据库管理系统Oracle的一套全面学习资源,涵盖了从基础概念到高级特性的深入理解。Oracle是全球广泛使用的大型企业级关系型数据库系统,尤其在金融、电信等行业有着重要应用。本资料旨在...
标题中的“省市区oracle数据库sql文件”指的是一个包含中国省级、市级、区级地理信息的Oracle数据库SQL脚本文件。这个文件可能包含了用于构建或更新一个地理位置数据库的SQL语句,便于在Oracle数据库系统中存储和...
本文将深入探讨Oracle的一些关键知识点,包括数据库语言、数据库管理、应用系统开发、应用服务器以及网络配置。 一、数据库语言部分 1. SQL 语言:SQL(Structured Query Language)是用于管理和操作关系数据库的...
Oracle数据库是全球广泛使用的大型关系型数据库管理系统,其在网络配置方面有着复杂的体系,涉及多个层次的设置和优化。本资料集主要关注Oracle网络的相关知识,对于学习和使用Oracle的爱好者来说,理解并掌握这些...
1. **系统安装**:在安装Oracle数据库时,需要考虑硬件配置、操作系统兼容性、网络环境等因素。错误可能包括磁盘空间不足、依赖库缺失、权限问题等,解决这些问题通常需要调整配置或按照官方文档的指导进行操作。 2...
6. **安全性**:Oracle数据库的安全管理包括用户权限、角色、审计和网络加密等方面。正确配置安全性,防止未经授权的访问,是数据库管理员的重要职责。 7. **性能调优**:Oracle有丰富的性能监控工具,如V$视图、...
李兴华Oracle笔记整理是Oracle核心基础知识的总结,涵盖了Oracle的安装、SQLPlus基本命令、scott用户的表结构、增删改查、分页处理、事务处理、DDL、三范式、用户权限管理、数据的备份与恢复、PL/SQL等知识点。...
韩顺平作为IT培训讲师,其Oracle视频教学内容被整理成笔记,旨在帮助初学者快速入门Oracle数据库。以下是从提供的文件内容中提炼出的知识点: 1. Oracle基本使用:文档提到基本命令的使用,这些是进行数据库操作的...
"使用Oracle SQL Developer连接数据库并创建用户" Oracle SQL Developer是Oracle公司提供的一款功能强大的数据库管理工具。以下是使用Oracle SQL Developer连接数据库并创建用户的知识点: 一、连接数据库 在...
Oracle SQL跟踪技术是数据库管理员和开发人员用于诊断和优化SQL语句的重要手段。在Oracle数据库环境中,SQL跟踪能够记录SQL语句的执行细节,帮助识别性能瓶颈,从而提高数据库的效率。以下是关于Oracle SQL跟踪技术...
最后,Oracle数据库复习题整理.doc可能包含了关于Oracle特定的SQL特性,如PL/SQL(Oracle的编程语言扩展)、触发器(Trigger)、索引(Index)、分区(Partitioning)和事务管理(Transaction Management)等内容。...
本文将深入探讨Oracle的一些核心知识点,主要基于提供的压缩包文件"Oracle_Words1",涵盖实用的Oracle命令和语句的编写。 1. **SQL基础**:SQL(Structured Query Language)是用于管理关系数据库的标准语言。在...
本文将深入探讨Oracle基础知识,包括其架构、安装、数据类型、SQL语句、表空间管理以及备份与恢复策略。 一、Oracle数据库架构 Oracle数据库采用客户/服务器(Client/Server)模式,由多个组件构成。主要包括数据库...
这份"Oracle技术狂人整理出的文档"很可能是由一位深入研究Oracle技术的专业人士精心编撰的,涵盖了Oracle数据库的各个方面,包括但不限于体系结构、安装配置、性能优化、SQL查询、备份恢复、安全性以及故障排查等...
这可能包括选择合适的硬件和软件环境、安装Oracle软件、创建数据库实例以及配置网络服务等步骤。此外,文档可能还讨论了数据库管理工具,如SQL*Plus和Enterprise Manager Cloud Control,以及如何使用它们进行日常...
数据链路是Oracle数据库间通信的方式,允许在不同网络环境下的数据库之间传输数据。文档可能讲解了配置和使用数据链路的步骤及注意事项。 8. **Oracle 11g导出空表、少表解决办法**: 在Oracle 11g中,可能遇到...
本资料整理集合了2012年12月17日的Oracle学习资源,旨在帮助初学者和进阶者全面理解Oracle 11g的基础知识及高级特性。 《Oracle+11g+从入门到精通》这部分内容可能会涵盖以下几个核心知识点: 1. **Oracle简介**:...
这些文档集合提供了全面的Oracle数据库和Java编程的面试与笔试准备材料。对于想要在IT行业中从事Oracle数据库管理或Java开发的人来说,这是一个宝贵的资源。 Oracle部分的知识点可能涵盖以下几个方面: 1. **...