oracle学习笔记(二)表的查询
--oracle表的管理 --创建表
create table users(userName varchar2(20));
--删除表
drop table users;
--创建表
create table student(xh number(4),xm varchar2(20),sex char(2),birthday date,sal number(7,2));
create table classes(classId number(2),cnmae varchar2(40));
--添加一个字段
alter table student add (classId number(2));
--修改字段长度
alter table student modify(xm varchar2(30));
--修改字段类型/或者名字(不能有数据)
alter table student modify(xm char(30));
--删除一个字段 不要删字段
alter table student drop column sal;
--修改表的名字
rename student to stu;
--删除表
drop table student;
--oracle中迷人的日期格式'DD-MON-YY' DD代表日,MON代表月 YY代表年
--变更日期的输入默认格式 临时生效
alter session set nls_date_format='DD-MM-YYYY'
--插入空值
insert into student(xh,xm,sex,birthday) values(1,'aa','女',null);
--查询数据为空的
select * from student where birthday is null;
--查询数据非空
select * from student where birthday is not null;
--把所有的男员工的工资减为原来的一半
update student set sal=sal/2 where sex='男';
--删除数据
--删除所有的记录,表结构还在,写日志,还可以恢复,速度慢
delect from student;
--删除表的结构和数据
drop table student;
--删除表中的所有记录,表结构还在,不写日志,无法找回删除的记录,速度快
truncate table student;
--设置保存点
savepoint a;
--回滚到a点
rollback to a;
--///////////////////////////////
commit
--表的查询
--查询表结构
sesc dept;
select * from emp;
select * from dept;
--疯狂复制
create table users(userId varchar2(20),userName varchar2(20),userpasswd varchar2(20));
insert into users values('','aaa','12aaa');
insert into users(userId,userName,userpasswd) select * from users;
--取消重复行 distinct
select distinct deptno,job from emp;
--查询SMITH雇员的deptno,job,sal信息
select deptno,job,sal from emp where ename='SMITH'
--使用算术表达式
--显示所有雇员的年工资
select ename,sal*13 "年工资" from emp;
--加上奖金的
--处理null志使用 nvl判断是否为空值
--如果查询出comm查询出为空值就用0替代,不为零则使用comm值
select ename,sal*13+nvl(comm,0)*13 "年工资" from emp;
--显示工资高于3000的员工
select * from emp where sal>3000;
--查找1982年1.1后入职的员工
select ename,hiredate from emp where hiredate>'1-1-1982';
--显示工资在2000到2500之间的
select * from emp where sal>2000 and sal<2500;
--like操作符号
--%代表任意的0到多个字符
-- _表示任意单个字符
--显示首字母是大写字母人的工资
select ename ,sal from emp where ename like 'S%'
--显示第三个字母为大写O的人的工资
select ename ,sal from emp where ename like '__O%'
--使用in
select * from emp where empno in (7844,234,345);
--显示没有上级的人
select * from emp where mgr is null; --逻辑操作符号
select * from emp where (sal>500 or job='MANAGER') and ename like 'J%'
--薪水从低到高排
select * from emp order by sal;
--工资从高到底
select * from emp order by sal desc;
--按照部门编号排序升序,并按照薪水从高到底(降序)
select * from emp order by deptno ,sal desc;
--按照部门和升序,入职时间降序
select * from emp order by deptno,hiredate ;
--使用列的别名排序 按照年薪升序排列
select ename,sal*12+nvl(comm,0)*12 "年薪" from emp order by "年薪";
---////////////////////////
--表的复杂查询
--分组函数和非分组函数不能放在一起
--查询出最高工资和最低工资
select max(sal),min(sal) from emp;
--查询出最高工资的人名
select ename,sal from emp where sal =(select max(sal) ab from emp);
--显示工资高于平均工资的员工
select * from emp where sal<( select avg(sal) from emp);
--group by 分组
--having 过滤
--显示各个部门的平均工资和最高工资
select avg(sal),max(sal),min(sal),deptno ,job from emp group by deptno,job;
--显示平均工资低于2000的部门号和它的平均工资
select avg(sal),max(sal),deptno from emp group by deptno having avg(sal)>2000;
--总结
--分组函数只能出现在选择列表,having,order by子句中
--在select中使用的顺序group by>having>order by
select avg(sal),max(sal),deptno from emp group by deptno having avg(sal)>2000 order by avg(sal) desc;
--//////////////////////////////////
--多表查询
--显示雇员名,雇员工资,及所在部门名称,要用到emp表和dept表
select ab.ename ,ab.sal ,ac.dname from emp ab,dept ac where ab.deptno=ac.deptno
--如何显示部门号为10的部门名,员工名和工资
select a1.ename,a2.dname,a1.sal from emp a1,dept a2 where a1.deptno=a2.deptno and a1.deptno=10
--显示雇员名,雇员工资,及所在部门的名字,并按照部门排序
select a1.ename,a1.sal,a2.dname from emp a1,dept a2 where a1.deptno=a2.deptno order by a1.deptno;
--自连接
--显示某个员工的上级 'FORD'
select worker.ename "员工",boss.ename "上级" from emp worker ,emp boss where worker.mgr=boss.empno and worker.ename='FORD';
--子查询
--多列子查询
---查询和smith部门号,工作职位一样的员工
select * from emp where (deptno,job)=(select deptno,job from emp where ename='SMITH')
--如何显示高于自己部门平均工资的员工的信息
--1.各个部门的平均工资
select avg(sal) mysal ,deptno from emp group by deptno
--2.把上面的查询看做是一张子表
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;
---////////////////////////////////////////
--oracle分页,一共有三种
--1.rownum分页
select * from emp;
--2.显示rownum
select a1.* ,rownum rn from (select * from emp) a1 ;
--3.分页
--a,指定查询列,只需改变最里面的
--b,排序,也只需修改最里面的查询
select a2.* from (select a1.* ,rownum rn from (select ename,sal from emp order by sal) a1 where rownum<9)a2 where rn>=6;
--/////////////////////
--用查询结果创建一张新表
create table myemp2(id,ename,sal)as select empno,ename,sal from emp;
desc myemp2;
select * from myemp2;
--合并查询
--为了合并多个select语句的结果,可以使用集合操作符号 union ,union all,minus,intersect
--union 改操作符号用于取得两个结果的的并集,当使用该操作符号时会自动去掉结果集合中的重复行
--union 改操作符号和union相似,但不会取消重复行,而且不会排序
--minus 改操作符号,用于取得两个结果集的差集,只会显示在第一个集合的,而不存在第二个集合中的数据
oracle学习笔记(二)表的查询的更多相关文章
- Bootstrap学习笔记(二) 表单
在Bootstrap学习笔记(一) 排版的基础上继续学习Bootstrap的表单,编辑器及head内代码不变. 3-1 基础表单 单中常见的元素主要包括:文本输入框.下拉选择框.单选按钮.复选按钮.文 ...
- Oracle学习笔记八 表空间
表空间 表空间是一个或多个数据文件的集合,所有的数据对象都存放在指定的表空间中,但主要存放的是表, 所以称作表空间 . 分区表 当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下 ...
- ofbiz学习笔记01--多表关联查询
不管做什么项目,肯定会用到多表关联查询数据,从网络查询得知ofbiz有三种多表关联查询方法 实现一:Screem.xml 中的 section 里,加 <action>, 加 get-re ...
- Oracle 学习笔记(二)
一.索引 表的数据是无序的,所以叫堆表(heap table),意思为随机存储数据.因为数据是随机存储的,所以在查询的时候需要全表扫描.索引就是将无序的数据有序化,这样就可以在查询数据的时候 减少数据 ...
- Oracle 学习笔记二
一.oracle通用函数vnl(a,b) 用于任何类型,如果a的值不为null返回a的值否则返回b的值 条件判断oracle中可以使用 case 字段 when 条件1 then 表达式1 when ...
- Oracle学习笔记二 初识Oracle(二)
Windows 中的 Oracle 服务 Oracle 9i的每个实例在Windows中都作为一项服务启动 服务是在 Windows 注册表中注册的可执行进程,由 Windows 操作系统管理 “服务 ...
- oracle学习笔记(二)
1. Oracle字符串操作 1.1. 字符串类型 1.1.1. CHAR和VARCHAR2类型 CHAR和VARCHAR2类型都是用来表示字符串数据类型,用来在表中存放字符串信息, 比如姓名.职业. ...
- Oracle学习笔记二
多表查询: 笛卡尔积: 实际上是两张表的乘积,但是在实际开发中没有太大意义 格式: select * from 表1,表2 select * from emp; select * from dept; ...
- Oracle学习笔记(5)——查询
基本查询语句 SELECT [DISTINCT] column_name1,...|* FROM table_name [WHERE conditions] 在SQL*PLUS中设置格式 更改显示字段 ...
- oracle学习笔记(十三) 查询练习(三) 子查询查询
子查询练习 create table empployee_demo( empno number(4) not null primary key, --员工编号,主键 ename varchar2(10 ...
随机推荐
- C#string与char互转
string s = "asdf"; //字符转char char[] c = s.ToCharArray(); Console.WriteLine(s[]); //char转st ...
- h5标签canvas关于getImageData跨域的问题
h5标签canvas关于getImageData跨域的问题 在学习h5的时候,canvas标签中getImageData()报错:security error! 具体代码如下(chrome浏览器): ...
- 单源最短路径 hdu 2066
#include<string.h> //和prim类似#include<stdio.h> //prim所考虑的是节点与当前所建成的树的距离最小using namespace ...
- Jquery 判断IE
if( $.browser.msie && ( $.browser.version == '7.0' || $.browser.version == '8.0' ) ){ alert( ...
- JavaScript键盘事件全面控制代码
JavaScript键盘事件全面控制,它可以捕获键盘事件的输入状态,可以判断你敲打了键盘的那个键,ctrl.shift,26个字母等等,返回具体键盘值. <html> <head&g ...
- Python函数小结(1)--参数类型(*, ** 的区别), 闭包
刚开始学习python,python相对于java确实要简洁易用得多.内存回收类似hotspot的可达性分析, 不可变对象也如同java得Integer类型,with函数类似新版本C++的特性,总体来 ...
- webpack,react,babel
window搭建webpack,react,babel傻瓜教程 首先现在的webpack教程已经很多了,写这篇的原因是因为自己在从小白开始的搭建过程中,并没有找到比较好的教程,花费了很多的时间,s ...
- jquery easyui根据需求二次开发记录
1.tree需要显示多个图标 实际需求:设备树上节点需搁三个图片,分别标识运行状态.告警状态.设备类型 解决方法:给tree的iconCls传入一个数组,分别是各状态下的class(css),然后要改 ...
- Android Activity 生命周期的透彻理解
说来惭愧,虽然已经做了一年多的android开发,但是最近被人问起activity的生命周期的时候,却感觉自己并不能很自信很确定的回答对方的问题,对activity的生命周期的理解还不透彻啊. ...
- $parse , $interpolate ,$complie , $destroy
$parse 是angular 提供的javascript解析器 . var getter = $parse(expression); var setter = getter.assign; cont ...