您的位置:首页 > 数据库 > Oracle

Oracle SQL语句实操练习!含图表及答案!适合新手~

2017-04-20 21:40 363 查看
创建了两张表和一些问题 , 基本上把oracle的基础语句都用上了, 适合新手练习与巩固知识.

可以自己在oracle中创建表然后练习.没有可视化界面的可以用我下面准备好的语句直接导入.

EMP表



DEPT表



员工表建表语句:

CREATE TABLE EMP (

ENAME VARCHAR2(30),

EMPNO NUMBER(5),

DEPTNO NUMBER(5),

JOB VARCHAR2(20),

HIREDATE DATE,

COMM NUMBER(6,2),

SAL NUMBER(6,2)

)

部门表建表语句:

CREATE TABLE DEPT (

DNAME VARCHAR2(30),

DEPTNO NUMBER(5),

LOC VARCHAR2(50)

)

员工表插入数据:

INSERT INTO EMP VALUES ('Zhou润发', 10001, 10, '办事员', TO_DATE('20161130131322', 'YYYYMMDDHH24MISS'), 2500, 2400);

INSERT INTO EMP VALUES ('Liu德华', 10002, 10, '办事员', TO_DATE('20170105131334', 'YYYYMMDDHH24MISS'), 1800, 2250);

INSERT INTO EMP VALUES ('Li连杰', 20001, 20, '办事员', TO_DATE('20170313131339', 'YYYYMMDDHH24MISS'), 2200, 2350);

INSERT INTO EMP VALUES ('xiang华强', 20000, 20, '经理', TO_DATE('20160130131343', 'YYYYMMDDHH24MISS'), 3980, 3500);

INSERT INTO EMP VALUES ('Zhang柏芝', 30001, 30, '办事员', TO_DATE('20170314131346', 'YYYYMMDDHH24MISS'), 1300, 2200);

INSERT INTO EMP VALUES ('成long', 10000, 10, '经理', TO_DATE('20151031133724', 'YYYYMMDDHH24MISS'), 4800, 4000);

INSERT INTO EMP VALUES ('zhang子怡', 30000, 30, '经理', TO_DATE('20161011133915', 'YYYYMMDDHH24MISS'), 3500, 3480);

INSERT INTO EMP VALUES ('zhang家辉', 20002, 20, '办事员', TO_DATE('20170330134519', 'YYYYMMDDHH24MISS'), 1600, 2000);

INSERT INTO EMP VALUES ('Liu亦菲', 30002, 30, '驾驶员', TO_DATE('20170330135457', 'YYYYMMDDHH24MISS'), NULL, 2500);

INSERT INTO EMP VALUES ('peng于晏', 20003, 20, '驾驶员', TO_DATE('20170411135625', 'YYYYMMDDHH24MISS'), NULL, 2500);

INSERT INTO EMP VALUES ('Zhang涵予', 10003, 10, '驾驶员', TO_DATE('20170408135706', 'YYYYMMDDHH24MISS'), NULL, 2500);

部门表插入数据:

INSERT INTO DEPT VALUES ('市场部', 10, '北京');

INSERT INTO DEPT VALUES ('公关部', 20, '上海');

INSERT INTO DEPT VALUES ('研发部', 30, '南京');

两张表已全部建好,自己用查询语句查看一下表结构和数据是否没问题.

Select * From EMP                     Select * From DEPT

下面是题目:可以复制下来做, 做完再和我做答案对照一下, 当然, 有的题目可以用多种方法去做, 看你自己选择了.

还有一点需要注意的是:我是用的可视化界面输入的语句,别名中文不需要加引号,一开始我加引号老是报错,后来无意间去掉反而好了,不知道为什么.我开始学的时候,别名使用中文是需要加引号的,看你实际的情况吧!!



题目:

--1.选择30部门的职员   

--2.列出所有办事员的姓名、编号和部门   

--3.找出奖金高于薪资的雇员

--4.找出佣金高于薪金60%的雇员

--5.找出部门10中所有经理和部门20中的所有办事员的详细资料

--6.找出既不是经理又不是办事员但其薪金>=2000的所有雇员的详细资料

--7.找出收取佣金的雇员的不同工作

--8.找出不收取佣金或收取的佣金低于2000的雇员

--9.找出各月最后一天受雇的所有雇员

--10.找出早于1年之前受雇的雇员

--11.显示只有首字母大写的所有雇员的姓名

--12.显示正好为7个字符的雇员姓名

--13.显示不带有'Z'的雇员姓名

--14.显示所有雇员的姓名的前三个字符

--15.显示所有雇员的姓名,用小写 z 替换所有大写 Z .

--16.显示所有雇员的姓名以及满1年服务年限的日期

--17.显示雇员的详细资料,按姓名排序

--18.显示雇员姓名,根据其服务年限,将最老的雇员排在最前面

--19.显示所有雇员的姓名、工作和薪金,按工作的降序顺序排序,而工作相同时按薪金升序

--20.显示所有雇员的姓名和加入公司的年份和月份,按雇员受雇日所在月排序,将最早年份的项目排在最前面

--21.显示在一个月为30天的情况下所有雇员的日薪金

--22.找出在(任何年份的)1月受聘的所有雇员

--23.对于每个雇员,显示其加入公司的天数

--24.显示姓名字段的任何位置,包含 "i" 的所有雇员的姓名

--25.以年、月和日显示所有雇员的服务年限

答案:

1--

select ename,deptno from emp where deptno=30;

2--

select e.ename,e.empno,d.dname,e.job from emp e,dept d where e.deptno=d.deptno and e.job='办事员';

3--

select * from emp where comm>sal order by comm desc;

4--

select * from emp where comm>sal*0.6;

5.1--

select * from emp e,dept d where e.deptno=10 and e.job='经理' and e.deptno=d.deptno

union all

select * from emp e,dept d where e.deptno=20 and e.job='办事员' and e.deptno=d.deptno;

5.2--

select * from emp e,dept d where (e.deptno=10 and e.job='经理' and e.deptno=d.deptno)

or (e.deptno=20 and e.job='办事员' and e.deptno=d.deptno);

6--

select * from emp e,dept d where e.sal>=2000 and e.job<>'办事员' and e.job<>'经理' and e.deptno=d.deptno;

7--

select distinct job from emp where comm>0;

8--

select ename,nvl(comm,0) comms from emp where nvl(comm,0)<2000;

9--

select * from emp where hiredate=last_day(hiredate);

10.1--

select * from emp where months_between(sysdate,hiredate)>12;

10.2--

select * from emp where hiredate<add_months(sysdate,-12);

11--

select * from emp where ename=initcap(ename);

12--

select * from emp where length(ename)=7;

13--

select * from emp where instr(ename,'Z')=0;

14--

select substr(ename,0,3) from emp

15--

select replace(ename,'Z','z') from emp

16--

select ename,add_months(hiredate,12) from emp

17--

select * from emp e,dept d where e.deptno=d.deptno order by e.ename

18.1--

select ename,trunc(months_between(sysdate,hiredate)/12,0) 服务年限 from emp order by 服务年限 desc

18.2--

select ename,hiredate from emp order by hiredate

19--

select ename,job,sal from emp order by job desc,sal asc

20.1--

select ename,extract(year from hiredate) 年份,extract(month from hiredate) 月份 from emp order by 年份,月份

20.2--

select ename,to_char(hiredate,'yyyy') 年份,to_char(hiredate,'mm') 月份 from emp order by hiredate

21--

select ename,sal/30,trunc(sal/30,1),floor(sal/30),ceil(sal/30) from emp

22.1--

select * from emp where extract(month from hiredate)=1

22.2--

select * from emp where to_char(hiredate,'mm')='01'

23--

select ename,floor(sysdate-hiredate) 入职天数 from emp order by 入职天数 desc

24.1--

select ename from emp where ename like '%i%';

24.2--

select ename from emp where instr(ename,'i')>0

25--

select ename,floor(months_between(sysdate,hiredate)/12) 服务总年数,

floor(months_between(sysdate,hiredate)) 服务总月数,

floor(sysdate-hiredate) 服务总天数 from emp order by 服务总天数;

最后送上一句励志的话 ~~

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle sql