oracle入门学习笔记(二)

2014-11-24 14:18:32 · 作者: · 浏览: 1
e student drop column sal;

d).修改表名

rename tablename to stu;

e).删除表名

drop table tablename;

5. 查看表:desc tablename;

6. 添加数据:Oracle默认日期格式’DD-MON-YY’

//01-12月-13中“月”必须写上!

insert into student values(‘a001’,’conan’,’male’,’01-12月-13’);

//插入部分字段

insert into student (xh) values(‘a001’);

//添加空值

Insert into student(xh,xm,sex,birthday) values (‘a004’,’MARTIN’,’男’,null);

通过:alter session set nls_date_format = ‘yyyy-mm-dd’;修改日期默认格式。这样就不用写“月”了。

7. 修改字段数据:

//修改一个字段

update student set sex=’female’ where xh=”a004”;

//修改多个字段

update student set sex=’female’,birthday=’xx’ where xh=”a004”;

8. 删除数据

//删除所有记录,表结构还在,因为写入日志,可以恢复数据

delete from student;

//删除表的结构和数据

drop table student;

//删除一条记录

delete from student where xh=’a001’;

//删除表中所有记录,表结构还在,不写日志,无法找回

truncate table student;

9. 设置保存点:savepoint aa;

10. 恢复到保存点:rollback to aa;

16. 查询语句select。

EMP表结构:EMPNO/ENAME/JOB/MGR(上级的编号)/HIREDATE/SAL/COMN(奖金)/DEPTN(所在部门)。

DEPT表:DEPTNO/DNAME/LOC

1. 查看表结构:desc dept;

2. 查询所有列:select ename from emp;

3. 查询指定列:select ename, sal, job from emp;

4. 取消重复行:select distinct deptno, job from emp;

问题:

1. 查询SMITH的薪水、工作,所在部门:(oracle大小写不区分,但是单引号中的区分大小写)

Select deptno,job,sal from emp where ename=’SMITH’;

2. 使用算数表达式显示每个员工的年工资

Select ename, sal*12+nvl(comm.,0)*12 from emp;nvl表示如果comm是null,则替代为0;不为空,就用comm本身。否则,oracle规定,同含有null的进行运算,结果整体为null。

Select ename, sal*12 “年工资” from emp;(年工资是sal*12的别名)

3. 如何显示工资高于3000的员工

Select ename,sal from emp where sal>3000 and sal<10000;

4. like操作符。%表示0到多个字符;_:表示任意单个字符。显示首字母为S的员工姓名和工资。

Select ename,sal from emp where ename like ‘S%’;

5. where中使用in。显示empno为123,345,800的雇员情况

select * form emp where ename in (123,345,566);

6. is null.显示没有上级的雇员

select * from emp where MGR is null.

7. 逻辑运算符。and or

Select * from emp where (sal > 50 or job =’MANAGER’)注意括号

8. order by.按照工资从低到高的顺序显示雇员信息。

Select * from emp order by sal [asc];//从低到高

Select * from emp order by sal desc;//从高到底

按照部门号升序而雇员工资降序排列:

Select * from emp order by deptno, sal desc;

对年薪排序:

Select ename,sal*12 “年薪” from emp order by “年薪”;

9. 分页查询:详见子查询。

17. Oracle复杂查询

1. 数据分组:max,min,avg,sum,cout;

显示所有员工中最高工资和最低工资:

select max(sal),min(sal) from emp;

select ename,sal from emp where sal=(select max(sal) from emp);

2. group by(查询结果分组统计)和having子句(限制分组显示结果)

显示每个部门的平均工资和最高工资:

Select avg(sal),max(sal),deptno from emp group by deptno;

显示每个部门的每种岗位的平均工资和最低工资

Select avg(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;

总结:

1. 分组函数只能出现在选择列表、having、order by子句中;

2. 如果在select语句中同时包含group by,having,order by,那么他的书序是group by,having,order by。

3. 在选择列中如果有列、表达式和分组函数,那么这些列和表达式必须有一个出现子group by 子句中,否则就会出错。

18. 多表查询:

1.显示雇员名,雇员工资及所在部门的名字:

Select a1.ename,a1.sal,a2.dname from emp a1,dept a2 where a1.deptno=a2.deptno;不加where条件的话,是用第一个表中的每一条跟第二个表的全部构成,一共为第一表长度乘以第二个表长度。多表查询的条件至少是(表数-1)!

2.自连接:在同一张表的连接查询。显示某个员工的上级领导的姓名。

select worker.ename,boss.ename from emp worker,emp boss where boss.empno=worker.mgr;

3.子查询:嵌入在其他sql语句中的select查询。

单行子查询:返回一行数据的子查询语句。显示与SMITH同一部门的所有员工。

Select * form emp where deptno=(select deptno from emp where ename=’SMITH’);从右往左执行。

多行子查询:返回多行数据的子查询。查询和部门10的工作相同的雇员的名字、岗位、工资和部门号。

Select * from emp where job in (select distinct job from emp where deptno=10);

多行查询中使用all操作符。显示