设为首页 收藏本站
查看: 664|回复: 0

[经验分享] 韩顺平oracle视频笔记三

[复制链接]

尚未签到

发表于 2016-8-4 09:38:19 | 显示全部楼层 |阅读模式
一、准备数据
创建账号huangbiao,并使用这个账号创建表
 
    conn system/admin as system;
    create user huangbiao identified by huangbiao;
 
    grant connect to huangbiao;
 

create table hb_user(
id int primary key,
name varchar2(20),
password varchar2(20),
deptid int
);
insert into hb_user (id,name,password,deptid)values(1,'zhangsan','zs',1000);
insert into hb_user (id,name,password,deptid)values(2,'lisi','ls',2000);
insert into hb_user (id,name,password,deptid)values(3,'wangwu','ww',3000);
insert into hb_user (id,name,password,deptid)values(4,'zhaoliu','zl',4000);
insert into hb_user (id,name,password,deptid)values(5,'tianqi','tq',5000);
insert into hb_user (id,name,password,deptid)values(6,'liuba','lb',6000);
create table dept_info(
dept_id int,
dept_name varchar2(20),
dept_phone int
);
insert into dept_info (dept_id,dept_name,dept_phone) values(1000,'软件开发',110);
insert into dept_info (dept_id,dept_name,dept_phone) values(2000,'软件测试',120);
insert into dept_info (dept_id,dept_name,dept_phone) values(3000,'软件设计',130);
insert into dept_info (dept_id,dept_name,dept_phone) values(4000,'软件管理',140);
insert into dept_info (dept_id,dept_name,dept_phone) values(5000,'软件架构',150);
insert into dept_info (dept_id,dept_name,dept_phone) values(6000,'项目经理',160);
 
查看一个表的结构
desc scott.dept;
 
打开显示操作的开关,即相关操作显示多长时间
set timing on;
 
二、快速准备数据办法之一
 

create tables users(
userid varchar2(20),
username varchar2(20),
password varchar2(20)
);

insert into users(userid,username,password)select * from users; 
 
三、查询例子
1、SQL语句的where区分大小写
SQL> select deptno,job,sal from emp where ename='smith';
SQL> select deptno,job,sal from emp where ename='SMITH';
 
2、但是SQL语句的关键字——列名、表名、关键字都不区分大小写
select sal*13 as "年工资",ename from scott.emp;
注意:上面的重命名使用的是“双引号”
 
3、设置默认值nvl()函数
select sal*13+comm as "年工资",ename from scott.emp;
注意:上面的查询结果可以发现有些人的工资是没有的,因为oracle查询运算发现如果有一个值为空则值的结果就位空
 
select sal*13+nvl(comm,0) as "年工资",ename from scott.emp;
备注:nvl(comm,0),如果comm的值为空就变为0,如果不为空就是comm
 
4、如何根据时间条件查找?查找大于1982年入职的同时信息
select * from emp where emp.hiredate>'1-1月-1982';
 
5、查询工资大于2000小于2500的员工信息
select * from emp where sal between 2000 and 2500;
 
%表示0到多个字符
_表示任意单个字符
 
6、如何显示首字母为S的员工的姓名?
SQL> select * from emp where ename like 'S%';
 
7、如何显示第三个字符为大写O的所有员工的信息?
select * from emp where ename like '__O%';
 
8、尽量使用in这种方式,效率比or快多了
SELECT * FROM EMP WHERE EMPNO IN(7369,223,4,12,32,4,324);
 
9、显示没有“上级”领导的信息
select * from emp where mgr is null;
 
10查询工资大于500或者是职位为经理并且名字是已J开头的
select * from emp where (sal>500 or job='MANAGER')AND ENAME LIKE 'J%';
 
11、排序
select * from emp order by desc;//降序
select * from emp order by asc;//升序,默认的
 
12查询部门号降序,工资降序排列——先排列deptno降序,然后再在同deptno情况下对sal再次降序排列
select * from emp order by deptno desc ,sal desc;
select  ename,(sal*13+nvl(comm,0)) "年薪" from emp order by "年薪" desc;
 
四、查询统计
1、显示员工的最高和最低工资
select max(sal) as "最高工资",min(sal) as "最低工资" from emp;
 
2、显示最高薪水员工的信息
select * from emp where sal in(select max(sal) as "最高工资" from emp);
select * from emp where sal=(select max(sal) as "最高工资" from emp);
 
3、显示所有员工的平均工资和工资总和
SQL> select avg(sal) from emp ;
 
4、查询大于平均工资的员工信息
select * from emp where sal < (select avg(sal) from emp );
 
5、计算共有多少员工
select count(*)from emp;
 
五、分组统计
group by对查询结果分组统计
 
1、显示每个部门的平均工资和最高工资
select deptno,avg(sal),max(sal) from emp group by deptno; 
 
2、显示每个部门的每种岗位的平均工资和最低工资
SQL> select deptno,job,avg(sal),max(sal) from emp group by deptno,job;
 
3、显示平均工资低于2000的部门号和他的平均工资
select deptno,avg(sal)from emp group by deptno having avg(sal)>2000;
 
4、having子句用于限制分组显示结果
如果一个查询语句如果同时包含下面三个限制条件,顺序如下
group by --> having --> order by
 
六、 查询语句练习
  1、自连接查询
  查询某个员工的上级领导的姓名,比如是FORD
  select boss.* from emp worker,emp boss where worker.ename='FORD' and worker.mgr=boss.empno;
  
  2、嵌套查询
  显示与SMITH同一部门的所有员工
  select * from emp where deptno = (select deptno from emp where ename='SMITH');
  select * from emp where deptno in (select deptno from emp where ename='SMITH');
  备注:数据库的执行时“从左到右”
  
  3、查询和部门10的工作相同的雇员的名字、岗位、工资、部门号
  SQL> select * from emp where emp.job in  (select job from emp where emp.deptno=10);
  关于多列嵌套查询
  
  4、查询与SMITH部门和工作相同的人员信息;
  select * from emp where (deptno,job)=(select deptno,job from emp where ename='SMITH');
  
  6、查询各个部门的平均工资和部门编号
  select deptno,avg(sal) from emp group by deptno;
  
  7、把上面的查询看做是一张子表
  select a1.*,a2.mysal from emp a1,(select deptno,avg(sal) as mysal from emp group by deptno) a2 where a1.sal > a2.mysal and a1.deptno = a2.deptno;
  备注:(在这里针对ORACL)在给表取别名的时候不要用as,否则会报错,但是可以给列取别名用as
  
  8、希望SCOTT的岗位、工资、补助和SMITH一样
  update emp set(job,sal,comm)=(select job,sal,comm from emp where ename='SMITH') where ename='SCOTT';
  
  当from子句中使用子查询时,该子查询会被作为一个视图来对待,因此叫作内嵌视图,当在from子句中使用子查询时,必须给子查询指定别名
 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-252607-1-1.html 上篇帖子: Oracle分析函数七——分析函数案例 下篇帖子: Oracle 常用函数的总结(一)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表