玩转Oracle(3)

//oracle的数据类型
字符型
char  定长  最大2000字符
varchar2 变长  最大4000字符
clob  字符型大对象 最大4g

数字型
number  范围10的-38次方到10的38次方,可以表示整数,也可以表示小数
表示一个小数有5位有小数,2位小数
number(5,2) 范围-999.99到999.99
表示一个五位整数
number(5) 范围-99999到99999

日期类型
date  包含年月日和时分秒
timestamp 对date类型的扩展

图片类型
blob  二进制数据 可以存放图片/声音 最大4g


||-------  oracle表的管理  -------||

表名必须以字母开头,长度不能超过30个字符,不能使用oracle的保留字,只能使用A-Z,a-z,0-9,$,#等

//学生表
create table student( --表名
 xh  number(4), --学号
 xm  varchar2(20), --姓名
 sex  char(2), --性别
 birthday date,  --出生日期
 sal  number(7,2) --奖学金
);

//班级表
create table class(
 classid  number(2), --班级id
 cname  varchar2(20) --班级名称
);

//添加一个字段
alter table students 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;


||-------  数据的管理  -------||


//插入数据
默认日期格式:dd-MON-yy
insert into student values(1,'张三','男','13-5月-2010',6070.43,0512);
修改日期默认格式:yyyy-mm-dd
alter session set nls_date_format='yyyy-mm-dd'

//插入部分值
insert into student (xh,xm,sex) values (1,'丽丽','女');

//插入控制
insert into student(xh,xm,sex,birthday) values (1,'丽丽','女',null);

//查询生日为空的学生
select * from student where birthday is null //不为空is not null

//修改一个字段
update student set sex='女' where xh=1;

//删除数据
delete from student; //删除所有记录,表结构还在,写日志,可以恢复

//回滚命令
save point a; //存储回滚点
rollback to a; //回滚到存储点

//删除表的结构和数据
drop table student;

//删除表中所有记录,表结构还在,不写日志
truncate table student;


||-------  oracle表的各种查询技巧  -------||

//查询表结构
desc emp;

//显示操作时间
set timing on;

//如何取消重复行
select dictinct deptno,job from emp;

//显示雇员的年工资
select ename as "姓名",sal*12 as "年收入" from emp;

//如果运算符中有一个null值,如果做运算,则为null
使用nvl函数来判断该值是否为null
nvl(comm,0) //如果comm的值为null时,则用0来替代

//如何连接字符串
select ename || '  is a  ' || job from emp; //显示结果:SMITH  is a  CLERK

//如何显示工资高于3000的员工
select * from emp where sal>3000;

//如何查找1982.1.1后入职的员工
select * from emp where hiredate>'1-1月-1982';

//如何显示2000-2500元工资的员工
select * from emp where sal between 2000 and 2500;

//如何使用like操作符
%:代表任意0到多个字符
_:表示任意单个字符

//如何显示首字符为S的员工姓名和工资
select ename,sal from emp where ename like 'S%';

//如何显示第三个字符为大写0的所有员工的姓名和工资
select ename,sal from emp where ename like '__O%';

//如何显示empno为123,345,800的雇员情况
select * from emp where empno in (7844,123,345,800);  //批量处理方式

//如何查询没有上级的雇员信息
select * from emp where mgr is null;

//查询工资高于500或岗位为manager的雇员,同时要满足他们的姓名首字母为大写J
select * from emp where (job='MANAGER' or sal>500) and ename like 'J%';

//如何按照工资的从低到高的顺序显示雇员信息
select * from emp order by sal asc; //desc

//按照部门号升序而雇员的工资降序排列
select * from emp order by deptno,sal desc;

//使用列的别名排序
select ename,sal*12 as "年薪" from emp order by "年薪" desc;

//
//复杂查询 max,min,avg,sum,count
//

//如何显示所有员工中最高工资和最低工资
select max(sal),min(sal) from emp;

//如何查询最大值的员工姓名和薪资
select ename,sal from emp where sal=(select max(sal) from emp);

//显示所有员工的平均工资和工资总和
select avg(sal) as "平均工资",sum(sal) as "工资总和" from emp;

//计算共有多少员工
select count(*) from emp;

//显示工资高于平均工资的员工信息
select * from emp where sal>(select avg(sal) from emp);

//如何显示每个部门的平均工资和最高工资
select deptno,avg(sal),max(sal) from emp group by deptno order by deptno;

//显示每个部门的每种岗位的平均工资和最低工资
select deptno,avg(sal),min(sal),job from emp group by deptno,job ;

//显示平均工资低于2000的部门号和它的平均工资
select deptno,avg(sal) from emp group by deptno having avg(sal)<2000;

//
//多表查询 
//

笛卡尔集:多表查询的条件至少不能少于表的个数-1

//显示雇员名,雇员工资及所在部门的名字
select e.ename,e.sal,d.dname from emp e,dept d where e.deptno=d.deptno;

//如何显示部门号为10的部门名、员工名和工资
select e.deptno,d.dname,e.ename,e.sal from emp e ,dept d where e.deptno=d.deptno and e.deptno=10;

//显示各个员工的姓名,工资,及其工资的级别
select e.ename,e.sal,s.grade from salgrade s,emp e where e.sal between s.losal and s.hisal;

//显示雇员名,雇员工资及所在部门的名字,并按部门排序
select e.ename,e.sal,d.dname from emp e ,dept d where e.deptno=d.deptno order by d.dname;

//自连接查询
在同一张表的连接查询

//显示某个员工的上级领导的姓名
select work.ename,boss.ename from emp work,emp boss where work.mgr=boss.empno and work.ename='FORD';

//
//子查询
//

//如何显示与smith同一个部门的所有员工
select * from emp where deptno=(select deptno from emp where ename='SMITH');

//如何查询和部门10的工作相同的雇员名字,岗位,工资,部门号
select ename,sal,job,deptno from emp where job in(select distinct job from emp where deptno=10);

//如何显示工资比部门30的所有员工工资高的员工姓名,工资,部门号
select * from emp where sal>all(select sal from emp where deptno=30);

//如何显示工资比部门30的任意一个员工的工资高的员工信息
select * from emp where sal>any(select sal from emp where deptno=30);

//如何查询与smith的部门和岗位完全相同的雇员信息
select * from emp where (deptno,job)=(select deptno,job from emp e where e.ename='SMITH');

//如何显示高于自己部门平均工资的员工信息
select deptno,avg(sal) from emp group by deptno; //查询每个部门的平均工资
select * from emp e1 ,(select deptno,avg(sal) sal from emp group by deptno) e2 where e1.deptno=e2.deptno and e1.sal>e2.sal;

//1、根据rownum分页
select e1.* ,rownum rn from (select * from emp) e1; //rownum给每1行分配的行号
select * from (select e1.* ,rownum rn from (select * from emp) e1 where rownum<=10) where rn>=6;

//指定查询列,只需修改最内容的子查询
select * from (select e1.* ,rownum rn from (select ename,sal from emp) e1 where rownum<=10) where rn>=6;

//2、根据分析函数分页

//3、根据rowid分页

//快速创建表,将查询数据存放该表
create table testTable (ename,sal) as select ename,sal from emp;

//
//合并查询
//

//两张表合并查询,使用union则可以自动去掉重复行
select * from emp where sal>2500 union select * from emp where job='MANAGER';

//union all 不会重复行,不会自动排序
select * from emp where sal>2500 union all select * from emp where job='MANAGER';

//intersect取交集的部分
select * from emp where sal>2500 intersect select * from emp where job='MANAGER';

//minus取差集
select * from emp where sal>2500 minus select * from emp where job='MANAGER';


||-------  创建新的oracle数据库  -------||

1、使用向导工具
2、使用Database Configuration Assisant //数据库配置助手

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值