grant to
revoke
vreatetable . alter index
select insert . update delete locktable
commit 提交保存
rollback 回滚撤销

select * from name where 条件
select * from emp where deptno = 10;

select deptno,dname from dept;
虚列
select rownum,ename from emp;

select ename,sal,sal*(1+20/100) from emp;

select ename AS 名称,sal 工资 from emp;
区分大小写和特殊符号需要用双引号

select ename||job AS "雇员和职务表" from emp;
字符和日期用单引号
select ename || 'IS'||job AS"雇员和职务表"from emp;
eg: smith is clerk

select '部门'||department||'所在的城市文件'||city from dept;

消除重复行
select distinct job from emp;

升序asc(默认)
降序desc
select ename,sal from emp
order by sal;

select ename hiredate from emp
order by hiredate desc;
查询雇员信息,先按部门从小到大排序,在按雇佣时间的先后排序
select ename,deptno,hiredate feom emp
order by deptno,hiredate;
按工资和工作月份的乘积排序
select empno,ename,sal*month AS total from emp
order by total;

Oracle二、查询
select ename,job,sal from emp where job='SALESMAN';

select ename ,hiredate from emp where hirdate >='1-1月-82';

select ename,hiredate from emp where empno=10;
Oracle二、查询
优先顺序->not,and,or
select ename ,job,sal from emp where sal>1000 and sal<2000;
select ename,job,sal from emp where sal>1500 and empno=10;
select ename,job,sal from emp where job='clerk' or job='manager';
select * from emp where not deptno = 10;
select * from emp where (deptno = 10 or deptno =20) and sal<1500;

between...and..
select * from emp where sal between 1000 and 2000;
可加NOT
IN(...)
select * from emp where job in('salesman','clerk','manager');
select * from emp where empno in('10','20');
可加NOT


LIKE
Oracle二、查询

select * from emp where ename like 'S%';
select * from emp where ename like '_A%';
select * from emp where ename like '%A%';

select ename , mgr from emp where mgr is NULL;

函数

绝对值函数abs
select abs(-5) from dual;
求平方根sqrt
select sqrt(2) from dual;
大于等于的最小整数 ceil
select ceil(2.35) from dual; -----3
小于等于的最大整数 floor
select floor(2.35) from dual; ------2
四舍五入函数round
select round(23.324,2),round(53.645,-1),round(64.234,0) from dual;
2--小数点后三位,0-----小数位, -1 ---------个位
截断函数trunc
select trunc(34.543,2),trunc(543.23,0),trunc(324.234,-1) from dual;
2--小数点后三位,0-----小数位, -1 ---------个位
求余数mod
select mod(1600,300) from dual;
cos函数
select cos(3.1415926) from dual;
Oracle二、查询
select round(abs(sin(230*3.1415/180)),1) from dual;
select round(23/2,1) from dual;
Oracle二、查询
Oracle二、查询
select '12.23'+11 from dual; ----23.23
select '23.5'||11 from dual; -------23.511
Oracle二、查询
多表
Oracle二、查询
1.连接列上在两个表中都出现且值相等的行才会出现在查询结果中
select emp.ename , emp.deptno,dept.dname from emp,dept where emp.deptno = dept.deptno;
select ename,emp.deptno,dname from emp,dept;
别名
select ename ,e.deptno,dname from emp e,dept d where e.deptno=d.deptno;
Oracle二、查询
select ename,sal,dname from emp,dept where emp.deptno=dept.deptno and sal>3000;
Oracle二、查询

select ename ,sal,dname from emp ,dept where emp.depto(+)=dept.deptno;
select ename ,sal,dname from emp right outer join dept on emp.deptno = dept.deptno;//右侧dept表不动全部显示。。左去和右匹配 。 。on==where
select ename ,sal,dname from emp,dept where emp.deptno = dept.deptno(+);
select ename ,sal,dname from emp left outer join dept on emp.deptno = dept.deptno;//即部门下没有任何职工那条不显示
3.......
Oracle二、查询

select e.ename ,e.sal,s.grader from emp e,salgrade s where e.sal between s.losal and s.hisal;

4.......

Oracle二、查询

select worker.ename || '的经理是'||manager.ename as 雇员经理 from emp worker,emp manager
where worker.mgr = manager.empno;
Oracle二、查询
统计查询-----------组函数----统计函数
Oracle二、查询
select count(*) from emp;//雇员总人数
*代表返回所有行数否则返回非空行数
select count (comm) from emp;//有佣金的人数
select avg(sal) from emp where deptno =10;//部门10 的平均工资
select max(hiredate),min(hiredate) from emp;//最早最晚时间
select count(distinct job) from emp;
select count(comm) from emp where deptno =10 and sal>1500;

分组统计
select sum(sal) from emp group by job;//按职务统计工资总和
select job,sum(sal) from emp group by job;

select ename ,job,sum(sal) from emp group by job;//error

多列分组统计
select deptno , job,sum(sal) from emp group by depto,job;

Oracle二、查询

select deptno,max(sal) from emp group by deptno having max(sal)>=3000;
select deptno,avg(sal),count(deptno) from emp group by deptno having count(deptno)<4;
Oracle二、查询
select job 职务,sum(sal)工资总和 from emp group by job order by sum(sal);
select job 职务, sum(sal) 工资总和 from emp group by job order by 工资总和;//别名
select count(deptno),avg(sal) from emp group by deptno order by avg(sal);

组函数嵌套
select max(avg(sal)) from emp group by deptno;
Oracle二、查询

select min(sum(sal)) from emp group by job;

子查询 ----出现在其他查询中的查询
1.单行
Oracle二、查询
select ename ,sal from emp where sal>(select sal from emp where empno=7788);//scott的雇员号为7788---唯一
Oracle二、查询
select ename ,sal from emp where sal<(select sal from emp where empno=7788) and
deptno = (select deptno from emp where empno=7788);
Oracle二、查询
select ename,sal from emp where sal > (select avg(sal) from emp);

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

2.多行
Oracle二、查询
select eptno,ename,job,sal from emp where sal <any(select sal from emp where job = 'clerk' ) and job <> 'clerk';

select emptno ,ename,sal from emp where sal> all(select sal from emp where job = 'SALESMAN');

select emptno ,ename ,job from emp where job IN(select job from emp where deptno=10) and deptno =20;

select empno ,ename,job from emp where job = (select job from emp where emptno = 7788) and hirdate<(select hirdate from emp where emptno = 7788);

select emptno , ename from emp where sal>(select sal from emp where emptno =7788 ) or hirdate <(select hirdate from emp where emptno = 7788);

Oracle二、查询
select emptno ,ename ,sal from emp where (job,deptno) = (select job,deptno from emp where emptno = 7788);






相关文章: