Oracle数据库之Oracle数据库,简单SQL练习与答案
小标 2018-08-20 来源 : 阅读 2007 评论 0

摘要:本文主要向大家介绍了Oracle数据库之Oracle数据库,简单SQL练习与答案,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助。

本文主要向大家介绍了Oracle数据库之Oracle数据库,简单SQL练习与答案,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助。

1.数据


--创建职员表
create table tbEmp
(
eID number primary key, --职员编号
eName varchar2(20) not null, --职员姓名
eSex varchar2(2) not null --职员性别
check(esex in ('男','女')), 
eAge number not null check(eage>=18), --职员年龄
eAddr varchar2(50) not null, --职员地址
eTel varchar2(30) not null, --职员电话
eEmail varchar2(30) null, --职员邮箱
eJoinTime date not null --入职时间
);
insert into tbemp
(eID,ename,esex,eage,eaddr,etel,eemail,ejointime)
values
(1,'赵龙','男',25,'湖南省长沙市伍家岭江南苑9栋203号','0731-4230123','zl@163.net','5-10月-2005');
insert into tbemp
(eID,ename,esex,eage,eaddr,etel,eemail,ejointime)
values
(2,'李云','女',23,'湖南省长沙市东风路东风新村21栋502号','0731-4145268','ly@163.net','3-7月-2003');
insert into tbemp
(eID,ename,esex,eage,eaddr,etel,eemail,ejointime)
values
(3,'孙一成','男',24,'湖南省株洲市601厂宿舍15栋308号','0732-8342567','syc@163.net','2-11月-2002');
insert into tbemp
(eID,ename,esex,eage,eaddr,etel,eemail,ejointime)
values
(4,'林笑','男',27,'湖南省郴洲市人民医院20栋301号','0735-2245214','lx@163.net','5-1月-2006');
insert into tbemp
(eID,ename,esex,eage,eaddr,etel,eemail,ejointime)
values
(5,'卫晴','女',23,'湖南省长沙市望月湖12栋403号','0731-8325124','wq@163.net','5-3月-2007');

commit;

 

2.习题

--1. 查询所有职员的所有信息
select * from tbemp;

--2. 查询所有职员的姓名,电话,地址
select ename,etel,eaddr from tbemp;

--3. 查询所有女职员的详细信息
select * from tbemp where esex = '女'

--4. 查询年龄在24到26岁之间的职员的姓名,性别
select ename,esex from tbemp where eage between 24 and 26

--5. 查询家住长沙的女职员的姓名,电话,地址
select ename,etel,eaddr from tbemp where esex = '女' and eaddr like '%长沙市%' 

--6. 查询李云,孙一成,林笑的电话,地址
select ename,etel,eaddr from tbemp where ename in ('李云','孙一成','林笑');

--7. 查询郴洲和株洲的职员的姓名,性别,年龄
select ename,esex,eage from tbemp where eaddr like '%郴洲%' or eaddr like '%株洲%';

--8. 查询家住长沙,年龄在25到28岁之间的男职员的姓名
select ename from tbemp where eaddr like '%长沙%' and (eage between 25 and 28) and esex = '男';

--9. 查询邮件地址为空的职员
select * from tbemp where eemail is null;

--10.查询入职时间超过两年的员工 ----这里涉及日期的运算,当前时间-入职时间---------------------------
select * from tbemp where months_between(sysdate,ejointime)/12 > 2

--11.查出1月份入职的员工 
select * from tbemp where Extract(month from ejointime) = 1;

--12.将所有email为163.net的邮箱改为126.com ----修改查询出来的结果,字符串替换函数-------------------
select * from tbemp where eemail like '%163.net%'

--13.找出年龄最小的两位长沙员工------------分页查询--------------------
--1.分页写法 三层嵌套,上两层是分页处理,最里面一层是解决rownum分页和order by在一起导致排序错误
select a1.* from 
    (select a2.*,rownum as rn from 
        (select * from tbemp order by eage) a2
    where rownum <= 2) a1
where rn >= 1;

--14.查找员工信息,要求结果集表达方式为
--字段名:个人信息
--内容描述:'员工1,赵龙,今年25岁,家住湖南省长沙市伍家岭江南苑9栋203号'
select '员工'||eid||','||ename||',今年'||eage||'岁,家住'||eaddr as 员工介绍 from tbemp;

--15.求所有员工的年龄总和
select sum(eage) as 年龄总和 from tbemp;

--16.分别求男,女员工年龄总和
select esex as 性别,sum(eage) as 年龄总和 from tbemp group by esex;

 

3.总结

1.基本SQL格式



 

2.日期的运算

  a.日期运算:
      后面时间-前面时间
      日期相减默认结果是相差天数

      months_between(后面时间-前面时间)
      months_between默认返回结果是相差月数

  b.取日期的值
      Extract函数
      Extract(year from sysdate)

 

3.分页查询

  rownum:oracle特有关键字,用于分页

  a.嵌套实现分页查询

    分页查询采用两条查询嵌套,内部查询用来指定上界,且结果集返回rownum,外部查询指定下界

  b.排序和分页联合使用的问题

    rownum分页与order by在一起使用分页排序,会导致排序错误,解决方法:多嵌套一层select

   

             select a1.* from 
      (select a2.*,rownum as rn from 
        (select * from tbemp order by eage) a2
      where rownum <= 2) a1  
       where rn >= 1;    

本文由职坐标整理并发布,希望对同学们学习Oracle有所帮助,更多内容请关注职坐标数据库Oracle数据库频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程