orclae提供的最主要功能是表查询;
1,oracle的数据类型:
字符型
char :定长 最大2000个字符;优势:查询速度快;如表示身份证等定长的;
create tableusers(username char(20));
varchar2(20) 变长度,最大4000字符。优势:节省空间;如表示公司名字等;
clob :字符型大对象;最大4G;很少用;
数字型:
Number :-10的-38次方到10的38次方;可以表示正式和小数;
Number(5,2):5个有效数字,2个小数;
Number(5):5为整数;
日期型:
Date :
Timestamp:对date的扩张;银行数据,精度高
图片型:
Blob: 二进制数据,可以存放图片,声音;4G ;但一般在数据库里不会存放图片等,除非他保密性很高;
2,表的基本操作:
Create tablestudent(xh number(4),xm varchar2(20), sex char(2),birthday date,salnumber(7,2));//创建学生表;
Drop tablestudents;//删除学生表;
修改表:
Alter tablestudent add(classid number(2));添加一个字段
Descstudent; 查看表
Alter tablestudent modify (xm varchar2(30)); 修改字段长度:
alter tablestudent modify (xm char(30));// 修改字段类型(原来的类型为varchar2):只能针对空表;
alter tablestudent drop column sal;//删除字段
rename studentto stu; //修改表的名字
drop tablestudent ;//删除表;
添加数据:
Insert into student values(1,’张三’,’男’,’11-12月-1997’,’233’,’1’);//添加数据到表中
日期默认格式:11-12月-1997
Alter sessionset nls_date_format =’yyyy-mm-dd’;
//改变格式;
Insert into student(xh,xm,sex) values (2,’jone’,’女’)//插入部分字段:
Insert intostudent(xh,xm,sex,birthday)values (4,’marth’,’男’,’null’);插入空值 //我们不知道marth的生日时,就加入null;
查找为null的时候要用:
Select * fromstudent where birthday is null;
修改字段:
update student set sex='女',calssid=3 where xh=1;
删除数据:
delete from student; 可以通过savepoint a;(在删除之前调用),删除之后调用rollback to a;进行数据的恢复;
trucate table student : 删除表内容,不能恢复,因为不会写入日志;但是他的速度更快;
drop table student : 删除表内容及表结构;
3,查询表:
两个小命令: set timing on/off: 代开/关闭 查询时间;
distinct: 不显示重复行,例子: select distinct deptno,job from emp;
下面举例都用到orcle里的emp 表:
a, 显示emp表里的每个员工的年工资(包括奖金): select nvl(sal,0)*13 +comm*13 as "年工资" ,ename from emp; 其中nvl(sal,0)表示奖金为null就用0代替,否则会出错;
b, 查询后连接字符: select ename || ' is a ' || job from emp;
c,查询工资高于300的员工: select * from emp where sal>=3000;
d,查询在1982.1.1后入职的员工: select * from emp where hiredate>'1-1月-1982';
通配符的使用:
a,查找首字母为s的员工: select ename from emp where ename like 's%'; % 表示代替几个子都,注意like;
b,查找第3个字母为O的员工: select ename from emp where ename like ' _ _O'; _ 代表一个字符,俩个_代表两个字符;
c, 查找员工号为123,23的员工: select * from emp where empno in(123,23) ;
d,查找没有上级的员工: select * from emp where mgr is null;
and or 的使用:
a, 查询工资高于500或者岗位为manager的雇员,同时还要满足他的姓名首字母为’J’: select * from empwhere (sal>500 or job='manager') and ename like 'J%';
order by 的使用:
a,按照工资从低到高的顺序显示雇员的信息:select * from emp order by sal;
b,按照部门升序工资降序显示:select * from emp order by deptno ,sal desc; 注意升序:asc;降序:desc;
复杂查询:用到max,min,avg,sum,count;
1,显示最高工资和最低工资:select max(sal),min(sal) from emp;
2,显示平均工资和工资总和:select avg(sal),sum(sal) from emp;
3,计算共有多少员工: select count(*) from emp;
4,显示工资最高的员工名字,工作岗位:select ename,job from emp wheresal=(select max(sal) from emp);//下面两条都是子查询
5, 显示工资高于平均工资的员工信息:select * from emp where sal>(select avg(sal)from emp);
Group by 和having 子句:分组和限制分组:(若一个子查询里有groupby ,having,order by三个同时出现,那么顺序为group by ,having,order by)
1, 显示每个部门的平均工资和最高工资:select avg(sal),max(sal), deptno from emp group bydeptno; 当中的deptno也可以不写?;
2, 显示每个部门的每种岗位的平均工资和最搞工资:select avg(sal),max(sal), deptno,jobfrom emp group by deptno,job;
3, 显示平均工资低于2000的部门号和他的平均工资:select deptno,avg(sal) from emp group by deptno havingavg(sal)<2000;