oracle 笔记 第一部分
来源:互联网 发布:mac ios模拟器安装ipa 编辑:程序博客网 时间:2024/04/28 06:55
create table student(
xh number(4),
xm varchar2(20),
sex char(2),
birthday date,
sal number(7,2)
);
create table class(
classId number(2),
cname varchar2(40)
);
alter table student add(classId number(2));
insert into student values(1,'xiaoming','男','12-1月-1997',123.67,23);
alter session set nls_date_format ='yyyy-mm-dd';
insert into student values(1,'xiaoming','男','1997-12-09',123.67,23);
--想要插入自己想要的日期格式的数据,用to_date('****','yyyy-mm-dd')格式;
insert into student values(2,'xiaohong','女',to_date('1989-09-09','yyyy-mm-dd'),123.45,24);
savepoint aa; --设置保存点,在删除数据之前
delete from student; --表的结构还在,但是数据没有了,但oracle有日志记录,所以数据可以恢复
rollback to aa;--回滚到保存点。
select * from student;
savepoint my;
select * from emp;
set timing on; --显示所用时间
select ename from emp;
select count(*)from student;--显示行数
--显示表的结构
desc dept;
--如何取消重复行
select distinct deptno, job from emp;
--年工资,包含奖金为空项
select sal*13+comm*13 "年工资", ename from emp;
select sal*13+nvl(comm,0) "年工资", ename from emp;--这样显示就正确了,nvl(comm,0),如果comm为空,则设置为0,否则正常
--sal>3000
select ename , sal from emp where sal >3000;
--找出1982年1月一号以后的员工,如果日期没有设置nsl_date_fromat,则要写成'1-1月-1982';
select ename, hiredate from emp where hiredate >'1982-01-01';
--如何显示工资在200-2500的员工
select ename ,sal 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%';
--显示empno为123,234,345,
select * from emp where empno in(7844,234,345);
--如何显示没有上级的员工
select * from emp where mgr is null;
--查询工资高于500或者是高位时manager的员工,同时满足他们的姓名手写字母大写为J
select * from emp where (sal>500 or job='mgr' ) and ename like 'J%';
--order by
select * from emp order by sal ;
select * from emp order by sal desc;--从高到低
--order by deptno 升序,sal降序排列
select * from emp order by deptno,sal desc ;
--如果按照两个参照物,那么前后顺序不一样会有不同的结果
select * from emp order by deptno,hiredate desc;
select * from emp order by hiredate desc,deptno;
--使用列别名排序
--按照年薪排序
select ename,(sal+nvl(comm,0))*12 "年薪" from emp order by "年薪";
--分页查询????以后讲
--较复杂的select 语句
--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 ename,sal from emp where sal in (select max(sal) from emp);
--????
select count(*) form emp;
--查询比平均工资低的员工
select * from emp where sal<(select avg(sal) from emp);
--group by :分组统计 ; having:限制分组显示结果
--按照部分分组,deptno必须出现在查询字段中,因为按照deptno分组
select avg(sal), max(sal),deptno from emp group by deptno ;
--显示每个部分的每中岗位的平均工资和最低工资?????
select avg(sal),max(sal),deptno ,job from emp group by deptno , job;
--显示avg(sal)<2000的部门号和它的平均工资,写上order by 就可以再进行排序,解决上面的问题;group by ->having ->order by->ok
select avg(sal), max(sal),deptno from emp group by deptno having avg(sal)>100 order by deptno desc;
--多表查询,规定:表表查询的条件是至少不能少于表的个数-1;
--显示员工名、员工工资,以及所在部分的名字
select emp.ename, emp.sal,dept.dname from emp ,dept where dept.deptno = emp.deptno;
--如何显示部门号为10的部门的名称、员工名和员工工资?,一般会取个别名
select a1.dname "部门名称", a2.ename "员工名称", a2.sal "工资" from emp a2, dept a1 where a1.deptno = a2.deptno and a1.deptno=10;
--如何显示员工的名字、工资、工资的级别 between...and...
select a1.ename,a1.sal, a2.grade from emp a1, salgrade a2 where a1.sal between a2.losal and a2.hisal;
--显示员工名字、工资、所在部分的名字、并按部分排序,多表排序
select a1.ename, a1.sal ,a2.dname from emp a1, dept a2 where a1.deptno = a2.deptno order by a1.deptno;
--自连接,对一个表的操作,把一张表看成多个表的操作
--显示某个员工的上级领导的名字
select a1.ename "员工", a2.ename "老板" from emp a1 ,emp a2 where a1.mgr = a2.empno and a1.ename ='FORD';
--子查询
--单行子查询,只返回一行查询结果
--如何显示和SMITH同一部分的员工(从左到右进行扫描,然后从右到左进行执行语句)
select ename from emp where deptno =( select deptno from emp where ename = 'SMITH');
--多行字查询,返回多行
--如何查询和部门10的工作相同的员工的名字、岗位、工资、部门号
select ename, job, sal, deptno from emp where job in (select distinct job from emp where deptno = 10);
--多行子查询中使用all操作符
--如何显示工资比部门30所有员工最高工资还高的员工的姓名,薪水,部门号
select ename, sal , deptno from emp where sal >(select max(sal) from emp where deptno=30); --效率高
select ename, sal, deptno from emp where sal>all(select sal from emp where deptno = 30);
select max(sal) from emp where deptno=30;
--any操作符,在多子查询中使用
--显示工资比部分30的任何一个员工的工资高就可以了。
select ename, sal, deptno from emp where sal>(select min(sal) from emp where deptno=30);
--查找与simth的部门和岗位都相同的员工,前后字段要一致
select * from emp where (deptno , job )= (select deptno , job from emp where ename='SMITH');
--如何显示高于自己部门平均工资的员工的信息
select deptno, avg(sal) mysal from emp group by deptno;
--把上面的查询看成是一张字表而存在,看成是独立的一张表进行比较操作。***-》内嵌视图
--在from 中使用子查询的时候必须要设置别名,不能加as
select a1.ename,a1.sal ,a1.deptno ,a2.mysal from emp a1,(select deptno, avg(sal) mysal from emp group by deptno) a2 where a1.deptno = a2.deptno and a1.sal>a2.mysal;
--分页查询
--oracle 分页有三种方式。
--@1:rownum分页 ;select * from emp;
--2: 显示rownum [oracle 分配的]; select a1.* ,rownum rn from (select * from emp);
--3: 指定查询列,只需要修改最里面的select 即可
select * from (select a1.* ,rownum rn from (select * from emp) a1 where rownum<=10)where rn >=6;
select * from (select a1.* ,rownum rn from (select ename, sal from emp) a1 where rownum<=10)where rn >=6;
--如何排序,也是修改最里面的select的语句。
select * from (select a1.* ,rownum rn from (select ename, sal from emp order by sal) a1 where rownum<=10)where rn >=6;
--显示第4条到第9条的记录
select * from (select a1.* ,rownum rn from (select ename, sal from emp order by sal) a1 where rownum<=9)where rn >=4;
--查询共有多少行
select count(*) from emp;
--用查询结果创建新表
create table myemp (id,name,sal,job,deptno) as select empno,ename,sal,job,deptno from emp;
desc myemp;
select * from myemp;
--合并查询
--1:union,取得两个结果集的并集,并自动去掉重复项。
--2: union all,取得的记录不去掉重复记录。
--3:intersect,取两个集合的交集。
--4:minus ,取差集。
select ename ,sal ,job from emp where sal>2500 union
select ename, sal, job from emp where job='MANAGER';
select ename ,sal ,job from emp where sal>2500 union all
select ename, sal, job from emp where job='MANAGER';
--创建数据库
- oracle 笔记 第一部分
- oracle基础第一部分
- Oracle 10g sql 入门基础知识 笔记 第一部分
- javascript笔记第一部分
- oracle学习笔记 oracle软件安装准备工作 第一部分 环境准备
- oracle学习笔记 Oracle数据库及相关软件的启动和关闭 第一部分
- DirectShow 学习笔记第一部分
- 算法学习笔记----第一部分
- HTML笔记(第一部分)
- 【写词笔记】第一部分
- hive学习笔记第一部分
- 土地经济学笔记第一部分
- 《循序渐进Oracle》部分笔记
- Oracle部分笔记
- oracle学习笔记部分
- ORACLE SQL and SQL*PLUS 第一部分
- Oracle常用傻瓜问题 第一部分
- Oracle部分函数个人理解(第一部分)
- 高精度除法
- C++进行网络开发需要的工具
- 高精度乘法
- 第二十三章烤羊肉串引来的思考--命令模式(读书笔记)
- Address already in use:JVM_Bind:8080
- oracle 笔记 第一部分
- toString和new String()
- db2里的truncate命令
- linux 上装多个jdk版本
- db2 export import
- 40_大写字母转换为小写字母
- db2新建实例-win7
- 杭电之BOX
- 10月总结——写写最近