----------------------------------------------------------------------------
--自连接
select worker.ename,boss.empno from emp worker,emp boss where worker.mgr=boss.empno;
--选出雇员名字为FORD的老板的名字
select worker.ename,boss.ename from emp worker,emp boss where worker.mgr=boss.empno and worker.ename='FORD';
--如何显示和SMITH同一部门的所有员工
select * from emp where DEPTNO=(select DEPTNO from emp e where e.ename='SMITH');
---多列查询的时候显示办法
--查询与SMITH的部门和岗位完全相同的所有雇员 (多列模式----------------------)
select deptno,job from emp where ename='SMITH';
select * from emp where(deptno,job)=(select deptno,job from emp where ename='SMITH');
-------------------------------------------------------------------------------------------------------------------------------------
--在from子句中使用子查询
--如何显示(高于自己部门)平均工资的所有员工的信息
--:逻辑要清晰,分析
--1:首先要查询出各个部门的平均工资信息
select deptno,avg(sal) from emp group by deptno;
--2:把上面的信息当做是一张表来处理
--3:指定查询列,只需要修改最里层的子查询就可以了
--4:如何排序,也只需要修改最里层的子查询就可以了
select e.*,avg_sal from emp e,(select deptno,avg(sal) as avg_sal from emp group by deptno)a where e.deptno=a.deptno and e.sal>avg_sal;
--创建表
create table myemp as select * from emp;
create table myemp1(eno,ename,sal) as select EMPNO,ename,sal from emp;
--修改scott的工资,岗位,奖金都和SMITH的工资,岗位,和奖金都一样
update emp set(sal,job,comm)=(select sal,job,comm from emp where ename='SMITH')where ename='SCOTT';
--事务的几个重要操作
--1:设置保存点
savepoint a1
--2:取消部分事务
rollback to a1;
--3:取消全部事务
rollback
-------------------------------------------------------------------------------------------------------
--Oracle中的字符函数的应用
--1:lower(char):将字符串转化为小写的格式
--2:upper(char):将字符串转化为大写的格式
--3:length(char):返回字符串的长度
--4:substr(char,m,n):取字符串的子串
--要求:以首字母大写的方式显示所有员工的姓名:
select upper(substr(ename,1,1))||lower(substr(ename,2,length(ename)-1)) from emp;
--要求:以首字母小写的方式显示所有员工的姓名:
select lower(substr(ename,1,1))||upper(substr(ename,2,length(ename)-1)) from emp;
--在做oracle的函数测试的时候可以使用dual表
select mod(10,3) from dual;