oracle学习笔记(二)表的查询

  1 --oracle表的管理
  2 
  3 --创建表
  4 create table users(userName varchar2(20));
  5 --删除表
  6 drop table users;
  7 --创建表
  8 create table student(xh number(4),xm varchar2(20),sex char(2),birthday date,sal number(7,2));
  9 create table classes(classId number(2),cnmae varchar2(40));
 10 --添加一个字段
 11 alter table  student add (classId number(2));
 12 --修改字段长度
 13 alter table student modify(xm varchar2(30));
 14 --修改字段类型/或者名字(不能有数据)
 15 alter table student modify(xm char(30));
 16 --删除一个字段 不要删字段
 17 alter table student drop column sal;
 18 --修改表的名字
 19 rename student to stu;
 20 --删除表
 21 drop table student;
 22 --oracle中迷人的日期格式‘DD-MON-YY‘ DD代表日,MON代表月 YY代表年
 23 --变更日期的输入默认格式 临时生效
 24 alter session set nls_date_format=DD-MM-YYYY
 25 --插入空值
 26 insert into student(xh,xm,sex,birthday) values(1,aa,null);
 27 --查询数据为空的
 28 select * from student where birthday is null;
 29 --查询数据非空
 30 select * from student where birthday is not null;
 31 --把所有的男员工的工资减为原来的一半
 32 update student set sal=sal/2 where sex=;
 33 --删除数据
 34 --删除所有的记录,表结构还在,写日志,还可以恢复,速度慢
 35 delect from student;
 36 --删除表的结构和数据
 37 drop table student;
 38 --删除表中的所有记录,表结构还在,不写日志,无法找回删除的记录,速度快
 39 truncate table student;
 40 --设置保存点
 41 savepoint a;
 42 --回滚到a点
 43 rollback to a;
 44 --///////////////////////////////
 45 commit
 46 --表的查询
 47 --查询表结构
 48 sesc dept;
 49 select * from emp;
 50 select * from dept;
 51 --疯狂复制
 52 create table users(userId varchar2(20),userName varchar2(20),userpasswd varchar2(20));
 53 insert into users values(001,aaa,12aaa);
 54 insert into users(userId,userName,userpasswd) select * from users;
 55 --取消重复行 distinct
 56 select distinct  deptno,job from emp;
 57 --查询SMITH雇员的deptno,job,sal信息
 58 select deptno,job,sal from emp where ename=SMITH
 59 --使用算术表达式
 60 --显示所有雇员的年工资
 61 select ename,sal*13 "年工资" from emp; 
 62 --加上奖金的
 63 --处理null志使用 nvl判断是否为空值
 64 --如果查询出comm查询出为空值就用0替代,不为零则使用comm值
 65 select ename,sal*13+nvl(comm,0)*13 "年工资" from emp;
 66 --显示工资高于3000的员工
 67 select * from emp where sal>3000;
 68 --查找1982年1.1后入职的员工
 69 select ename,hiredate from emp where hiredate>1-1-1982;
 70 --显示工资在2000到2500之间的
 71 select * from emp where sal>2000 and sal<2500;
 72 --like操作符号
 73 --%代表任意的0到多个字符
 74 -- _表示任意单个字符
 75 --显示首字母是大写字母人的工资
 76 select ename ,sal from emp where ename like S%
 77 --显示第三个字母为大写O的人的工资
 78 select ename ,sal from emp where ename like __O%
 79 --使用in
 80 select * from emp where  empno in (7844,234,345);
 81 --显示没有上级的人
 82 select * from emp where mgr is null;
 83 
 84 --逻辑操作符号
 85 select * from emp where (sal>500 or job=MANAGER) and ename like J%
 86 --薪水从低到高排
 87 select * from emp  order by sal;
 88 --工资从高到底
 89 select * from emp order by sal desc;
 90 --按照部门编号排序升序,并按照薪水从高到底(降序)
 91 select * from emp order by deptno ,sal desc;
 92 --按照部门和升序,入职时间降序
 93 select * from emp order by deptno,hiredate ;
 94 --使用列的别名排序 按照年薪升序排列
 95 select ename,sal*12+nvl(comm,0)*12 "年薪" from emp order by "年薪";
 96 ---////////////////////////
 97 --表的复杂查询
 98 --分组函数和非分组函数不能放在一起
 99 --查询出最高工资和最低工资
100 select  max(sal),min(sal) from emp;
101 --查询出最高工资的人名
102 select ename,sal from emp where sal =(select max(sal) ab from emp);
103 --显示工资高于平均工资的员工
104 select * from emp where sal<( select avg(sal) from emp);
105 --group by 分组
106 --having 过滤
107 --显示各个部门的平均工资和最高工资
108 select avg(sal),max(sal),min(sal),deptno ,job from emp group by deptno,job;
109 --显示平均工资低于2000的部门号和它的平均工资
110 select avg(sal),max(sal),deptno from emp group by deptno having avg(sal)>2000;
111 --总结
112 --分组函数只能出现在选择列表,having,order by子句中
113 --在select中使用的顺序group by>having>order by
114 select avg(sal),max(sal),deptno from emp group by deptno having avg(sal)>2000 order by avg(sal) desc;
115 --//////////////////////////////////
116 --多表查询 
117 --显示雇员名,雇员工资,及所在部门名称,要用到emp表和dept表
118 select ab.ename ,ab.sal ,ac.dname from emp ab,dept ac where ab.deptno=ac.deptno
119 --如何显示部门号为10的部门名,员工名和工资
120 select a1.ename,a2.dname,a1.sal from emp a1,dept a2 where a1.deptno=a2.deptno and a1.deptno=10
121 --显示雇员名,雇员工资,及所在部门的名字,并按照部门排序
122 select a1.ename,a1.sal,a2.dname from emp a1,dept a2 where a1.deptno=a2.deptno order by a1.deptno;
123 --自连接
124 --显示某个员工的上级 ‘FORD‘
125 select worker.ename "员工",boss.ename "上级" from emp worker ,emp boss where worker.mgr=boss.empno and worker.ename=FORD;
126 --子查询
127 --多列子查询
128 ---查询和smith部门号,工作职位一样的员工
129 select * from emp where (deptno,job)=(select deptno,job from emp where ename=SMITH)
130 --如何显示高于自己部门平均工资的员工的信息
131 --1.各个部门的平均工资
132 select avg(sal) mysal ,deptno from emp group by deptno
133 --2.把上面的查询看做是一张子表
134 select * from emp a2,(select avg(sal) mysal ,deptno from emp group by deptno) a1 where a2.deptno=a1.deptno and a2.sal>a1.mysal;
135 ---////////////////////////////////////////
136 --oracle分页,一共有三种
137 --1.rownum分页
138 select * from emp;
139 --2.显示rownum
140 select a1.* ,rownum rn from (select * from emp) a1 ;
141 --3.分页 
142 --a,指定查询列,只需改变最里面的
143 --b,排序,也只需修改最里面的查询
144 select a2.* from (select a1.* ,rownum rn from (select ename,sal from emp order by sal) a1 where rownum<9)a2 where rn>=6;
145 --/////////////////////
146 --用查询结果创建一张新表
147 create table myemp2(id,ename,sal)as select empno,ename,sal from emp;
148 desc myemp2;
149 select * from myemp2;
150 --合并查询
151 --为了合并多个select语句的结果,可以使用集合操作符号 union ,uniob all,minus,intersect
152 --union 改操作符号用于取得两个结果的的并集,当使用该操作符号时会自动去掉结果集合中的重复行
153 --union 改操作符号和union相似,但不会取消重复行,而且不会排序
154 --minus  改操作符号,用于取得两个结果集的差集,只会显示在第一个集合的,而不存在第二个集合中的数据

 

oracle学习笔记(二)表的查询,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。