oracle学习(三)——表查询

笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值,找寻数据的秘密,笔者认为,数据的价值不仅仅只体现在企业中,个人也可以体会到数据的魅力,用技术力量探索行为密码,让大数据助跑每一个人,欢迎直筒们关注我的公众号,大家一起讨论数据中的那些有趣的事情。

我的公众号为:livandata

1、下面的操作主要以emp与dept表为基础:
先介绍这几张表:
 
MGR:该员工的上级编号(即他上级的empno);
Comm:该员工的奖金;
Deptno:该员工所在的部门;
 
2、基本查询操作:
 
Set timing on:打开显示操作时间的开关;
让数据进行疯狂复制:
Insert into users(userid, username, userpss)select * from users;
3、算术运算(加减乘除):
如何运行算数表达式:
Select sal*12 , ename from emp;
如何取别名:
Select sal*12 as “年收入”, ename from emp;
4、在oracle的运算中,如果一个字段是null,则整条运算都会变成null;

使用nvl函数,如果comm为空值,则用0来替换,如果不是空值,则用comm;
5、Select 字段中可以有:
Case when sal>0 then sal=’1’
When sal<0 then sal=’0’
Else sal=null end as “工资”,
作为一个单独的字段;
6、Where子句:
Where中的常用符号:
 
查询工资在2000到2500的员工:
 
查询名称以S开头的员工:
 
第三个字符为大写o的语句:
 
查询一定范围的员工信息:
 
如何显示没有上级的雇员情况:
 
查询工资高于500,岗位是manager,姓名首字母为J的员工:
Select * from emp where(sal>500 or job=’manager’)and ename like ‘J%’;
7、Order by子句:
按工资从低到高顺序显示信息:
 
Desc为降序;asc是升序(默认)
部门号升序,工资降序:
 
按照别名排序:
 
8、数据分组:
分组函数不能与单一字段混合使用:
 
此时需要用到子查询:
 
分组函数、单个字段、聚合函数三个类型的关系:
1) (分组函数、聚合函数)和单个字段不能一起出现在select字段中;
2) Where子句中不能使用分组函数、聚合函数;
9、Group by子句:
用于对查询结果分组统计;
分组统计平均工资和最高工资:
 
Group by中的deptno要显示在select中,同时,select中除了deptno不能存在其他单独字段,另外的字段必须为聚合函数(即对分组的数据的统计);
如果按照多个字段分组:
 
10、Having子句:
用于限制分组显示结果;
计算平均工资低于两千的部门,即对分组显示的内容进行限制:
Select avg(sal), max(sal), deptno from emp group by deptno having avg(sal)<=2000;
总结:

  

Order by可以使用单个字段,也可以使用分组函数;
11、多表查询:
首先将主键进行关联;
Select * from a1.ename, a1.sal, a2.dname from emp a1, dept a2 where a1.deptno=a2.deptno;
12、子查询:
即多个select语句在一个语句中,也叫嵌套查询:
 
数据库的执行使从左到右的,因此尽可能将优化条件写到最左边;
 
上面最大的区别即为在where条件中使用“=”还是in;
如何使用all操作符:
 
即查询出来的结果比30号部门所有的员工工资还高;
如何使用any操作符:
 
如何使用多列子查询:
 
只显示where条件部分:
 
如何在from中使用子查询:
1) 查询出各个部门的平均工资和部门号;
 
2) 把上面的查询看作是一张子表:
 
13、分页查询:
Oracle分页一共有三种方式:
1) rownum分页(rownum一条语句只能用一次):
第一步:添加rownum分页字段(由oracle分配的):
 
第二步:在上面的基础上添加一句话:
Select * 
from (select a1.*, rownum rn from (select * from emp) a1 where rownum<=10) 
where rn>=6;
查询出6-10的查询结果。
此处有几个查询的变化:
所有的改动只需要改动最里层的sql即可(select * from emp);
外面的嵌套语句只是用来分页的,不涉及查询的内容;
2) 按照rowid来分:
 
3) 按照分析函数来分:
 

 

用查询结果直接创建表:
 
14、合并查询:
 
1)union:
 
2)union all:
 
3)intersect:
 
4)minus(差集:前面-后面):
 
5)Inner join关联两张表中满足条件的所有记录;
 
6)Left join关联A表和B表中(A left join B on 条件),A表的所有记录和B表满足条件的所有记录;
 

7)Right join关联A表和B表中(A right join B on 条件),A表满足条件的所有记录和B表中的所有记录;

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值