- 浏览: 1028707 次
文章分类
最新评论
-
libufengiam:
很好很强大,报错不能用。
network: Android 网络判断(wifi、3G与其他) -
kome2000:
这代码 没效率啊!到是能用!o(︶︿︶)o 唉
使用Matrix对bitmap的旋转和镜像水平垂直翻转 -
javadeveloped:
《Ext JS权威指南》一书的源代码下载地址 -
javadeveloped:
《Ext JS权威指南》一书的源代码下载地址 -
javadeveloped:
[color=red]就开了[/color]
《Ext JS权威指南》一书的源代码下载地址
Oracle中绝对经典的单表查询练习,非常值得一练
这是一个学习Oracle的查询语句的一个非常好的练习,其中包括了一些简单的查询,已经具有Oracle自身特点的单行函数的应用,非常值得一看。
--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
相关推荐
这是一个采用Oracle数据库自带的表的查询语句的一个非常好的练习,其中包括了一些简单的查询,已经具有Oracle自身特点的单行函数的应用,非常值得一看.
oracle查询练习
Oracle里面HR表或者Scott表里面一些经典的练习!
oracle 有关emp表的简单查询练习题 使用scott/tiger用户下的emp表和dept表完成下列练习,表的结构说明如下 emp员工表(empno员工号/ename员工姓名/job工作/mgr上级编号/hiredate受雇日期/sal薪金/comm佣金/deptno...
oracle锁表查询oracle锁表查询oracle锁表查询oracle锁表查询
Oracle SQL:经典查询练手四篇Oracle SQL:经典查询练手四篇Oracle SQL:经典查询练手四篇
Oracle基础练习题及答案(多表查询1)Oracle基础练习题及答案(多表查询1).
Oracle基础练习题,采用Oracle数据库自带的表,适合初学者,其中包括了一些简单的查询,已经具有Oracle自身特点的单行函数的应用,后面附答案,非常值得一看
Oracle基础查询关联查询练习题.docx
Oracle 多表查询优化
数据库 增、删、改、查练习题目,多表联查练习及答案详解
达内ORACLE练习一达内ORACLE练习一达内ORACLE练习一达内ORACLE练习一达内ORACLE练习一
oracle系统表查询,详细讲解各个系统表的使用
oracle经典sql语句查询,近百中查询练习,个个经典! 适合学习!
OracleOracle查询死锁表OracleOracle查询死锁表OracleOracle查询死锁表
ORACLE SQL :经典查询练手系列文章汇总.pdf
Oracle 查询优化,个人练习
个人觉得比较好的oracle查询练习,学会举一反三,其他题迎刃而解!
oracle查询表碎片语句
Oracle系统表查询Oracle系统表查询