现在的位置: 首页 > 综合 > 正文

第三课 oracle表查询

2013年07月08日 ⁄ 综合 ⁄ 共 2841字 ⁄ 字号 评论关闭

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;

抱歉!评论已关闭.