Cover | Table of Contents
1 select * 2 from emp
select empno,ename,job,sal,mgr,hiredate,comm,deptno from emp
1 select * 2 from emp 3 where deptno = 10
1 select * 2 from emp 3 where deptno = 10 4 or comm is not null 5 or sal <= 2000 and deptno=20
1 select * 2 from emp
select empno,ename,job,sal,mgr,hiredate,comm,deptno from emp
1 select * 2 from emp 3 where deptno = 10
1 select * 2 from emp 3 where deptno = 10 4 or comm is not null 5 or sal <= 2000 and deptno=20
select * from emp where ( deptno = 10 or comm is not null or sal <= 2000 ) and deptno=20 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ------ ----- ----- ----------- ----- ---------- ------ 7369 SMITH CLERK 7902 17-DEC-1980 800 20 7876 ADAMS CLERK 7788 12-JAN-1983 1100 20
1 select ename,deptno,sal 2 from emp
1 select sal,comm 2 from emp
1 select sal as salary, comm as commission
2 from emp
SALARY COMMISSION
------- ----------
800
1600 300
1250 500
2975
1250 1300
2850
2450
3000
5000
1500 0
1100
950
3000
1300select sal as salary, comm as commission from emp where salary < 5000
1 select * 2 from ( 3 select sal as salary, comm as commission 4 from emp 5 ) x 6 where salary < 5000
CLARK WORKS AS A MANAGER KING WORKS AS A PRESIDENT MILLER WORKS AS A CLERK
select ename, job
from emp
where deptno = 10
ENAME JOB
---------- ---------
CLARK MANAGER
KING PRESIDENT
MILLER CLERK1 select ename||' WORKS AS A '||job as msg 2 from emp 3 where deptno=10
1 select concat(ename, ' WORKS AS A ',job) as msg 2 from 3 where deptno=10
1 select ename + ' WORKS AS A ' + job as msg 2 from emp 3 where deptno=10
ENAME SAL STATUS ---------- ---------- --------- SMITH 800 UNDERPAID ALLEN 1600 UNDERPAID WARD 1250 UNDERPAID JONES 2975 OK MARTIN 1250 UNDERPAID BLAKE 2850 OK CLARK 2450 OK SCOTT 3000 OK KING 5000 OVERPAID TURNER 1500 UNDERPAID ADAMS 1100 UNDERPAID JAMES 950 UNDERPAID FORD 3000 OK MILLER 1300 UNDERPAID
1 select ename,sal, 2 case when sal <= 2000 then 'UNDERPAID' 3 when sal >= 4000 then 'OVERPAID' 4 else 'OK' 5 end as status 6 from emp
1 select * 2 from emp fetch first 5 rows only
1 select * 2 from emp limit 5
1 select * 2 from emp 3 where rownum <= 5
1 select top 5 * 2 from emp
select ename, job from emp
1 select ename,job 2 from emp 3 order by rand() fetch first 5 rows only
1 select ename,job 2 from emp 3 order by rand() limit 5
1 select ename,job 2 from emp 3 order byrandom() limit 5
1 select * 2 from ( 3 select ename, job 4 from emp 6 order by dbms_random.value() 7 ) 8 where rownum <= 5
1 select top 5 ename,job 2 from emp 3 order by newid()
1 select * 2 from emp 3 where comm is null
1 select coalesce(comm,0) 2 from emp
select case when comm is null then 0 else comm end from emp
select ename, job
from emp
where deptno in (10,20)
ENAME JOB
---------- ---------
SMITH CLERK
JONES MANAGER
CLARK MANAGER
SCOTT ANALYST
KING PRESIDENT
ADAMS CLERK
FORD ANALYST
MILLER CLERKENAME JOB ---------- --------- SMITH CLERK JONES MANAGER CLARK MANAGER KING PRESIDENT MILLER CLERK
1 select ename, job 2 from emp 3 where deptno in (10,20) 4 and (ename like '%I%' or job like '%ER')
ENAME JOB SAL ---------- --------- ---------- MILLER CLERK 1300 CLARK MANAGER 2450 KING PRESIDENT 5000
1 select ename,job,sal 2 from emp 3 where deptno = 10 4 order by sal asc
select ename,job,sal
from emp
where deptno = 10
order by sal desc
ENAME JOB SAL
---------- --------- ----------
KING PRESIDENT 5000
CLARK MANAGER 2450
MILLER CLERK 1300
select ename,job,sal
from emp
where deptno = 10
order by 3 desc
ENAME JOB SAL
---------- --------- ----------
KING PRESIDENT 5000
CLARK MANAGER 2450
MILLER CLERK 1300EMPNO DEPTNO SAL ENAME JOB ---------- ---------- ---------- ---------- --------- 7839 10 5000 KING PRESIDENT 7782 10 2450 CLARK MANAGER 7934 10 1300 MILLER CLERK 7788 20 3000 SCOTT ANALYST 7902 20 3000 FORD ANALYST 7566 20 2975 JONES MANAGER 7876 20 1100 ADAMS CLERK 7369 20 800 SMITH CLERK 7698 30 2850 BLAKE MANAGER 7499 30 1600 ALLEN SALESMAN 7844 30 1500 TURNER SALESMAN 7521 30 1250 WARD SALESMAN 7654 30 1250 MARTIN SALESMAN 7900 30 950 JAMES CLERK
ENAME JOB SAL ---------- --------- ---------- MILLER CLERK 1300 CLARK MANAGER 2450 KING PRESIDENT 5000
1 select ename,job,sal 2 from emp 3 where deptno = 10 4 order by sal asc
select ename,job,sal
from emp
where deptno = 10
order by sal desc
ENAME JOB SAL
---------- --------- ----------
KING PRESIDENT 5000
CLARK MANAGER 2450
MILLER CLERK 1300
select ename,job,sal
from emp
where deptno = 10
order by 3 desc
ENAME JOB SAL
---------- --------- ----------
KING PRESIDENT 5000
CLARK MANAGER 2450
MILLER CLERK 1300EMPNO DEPTNO SAL ENAME JOB ---------- ---------- ---------- ---------- --------- 7839 10 5000 KING PRESIDENT 7782 10 2450 CLARK MANAGER 7934 10 1300 MILLER CLERK 7788 20 3000 SCOTT ANALYST 7902 20 3000 FORD ANALYST 7566 20 2975 JONES MANAGER 7876 20 1100 ADAMS CLERK 7369 20 800 SMITH CLERK 7698 30 2850 BLAKE MANAGER 7499 30 1600 ALLEN SALESMAN 7844 30 1500 TURNER SALESMAN 7521 30 1250 WARD SALESMAN 7654 30 1250 MARTIN SALESMAN 7900 30 950 JAMES CLERK
1 select empno,deptno,sal,ename,job 2 from emp 3 order by deptno, sal desc
ENAME JOB ---------- --------- KING PRESIDENT SMITH CLERK ADAMS CLERK JAMES CLERK MILLER CLERK JONES MANAGER CLARK MANAGER BLAKE MANAGER ALLEN SALESMAN MARTIN SALESMAN WARD SALESMAN TURNER SALESMAN SCOTT ANALYST FORD ANALYST
select ename,job from emp order by substr(job,length(job)-2)
select ename,job from emp order by substring(job,len(job)-2,2)
create view V
as
select ename||' '||deptno as data
from emp
select * from V
DATA
-------------
SMITH 20
ALLEN 30
WARD 30
JONES 20
MARTIN 30
BLAKE 30
CLARK 10
SCOTT 20
KING 10
TURNER 30
ADAMS 20
JAMES 30
FORD 20
MILLER 10DATA ---------- CLARK 10 KING 10 MILLER 10 SMITH 20 ADAMS 20 FORD 20 SCOTT 20 JONES 20 ALLEN 30 BLAKE 30 MARTIN 30 JAMES 30 TURNER 30 WARD 30
DATA --------- ADAMS 20 ALLEN 30 BLAKE 30 CLARK 10 FORD 20 JAMES 30 JONES 20 KING 10 MARTIN 30 MILLER 10 SCOTT 20 SMITH 20 TURNER 30 WARD 30
/* ORDER BY DEPTNO */ 1 select data 2 from V 3 order by replace(data, 4 replace( 5 translate(data,'0123456789','##########'),'#',''),'') /* ORDER BY ENAME */ 1 select data 2 from emp 3 order by replace( 4 translate(data,'0123456789','##########'),'#','')
/* ORDER BY DEPTNO */ 1 select * 2 from ( 3 select ename||' '||cast(deptno as char(2)) as data 4 from emp 5 ) v 6 order by replace(data, 7 replace( 8 translate(data,'##########','0123456789'),'#',''),'') /* ORDER BY ENAME */ 1 select * 2 from ( 3 select ename||' '||cast(deptno as char(2)) as data 4 from emp 5 ) v 6 order by replace( 7 translate(data,'##########','0123456789'),'#','')
ENAME SAL COMM ---------- ---------- ---------- TURNER 1500 0 ALLEN 1600 300 WARD 1250 500 MARTIN 1250 1400 SMITH 800 JONES 2975 JAMES 950 MILLER 1300 FORD 3000 ADAMS 1100 BLAKE 2850 CLARK 2450 SCOTT 3000 KING 5000
ENAME SAL COMM ---------- ---------- ---------- SMITH 800 JONES 2975 CLARK 2450 BLAKE 2850 SCOTT 3000 KING 5000 JAMES 950 MILLER 1300 FORD 3000 ADAMS 1100 MARTIN 1250 1400 WARD 1250 500 ALLEN 1600 300 TURNER 1500 0
1 select ename,sal,comm 2 from emp 3 order by 3 1 select ename,sal,comm 2 from emp 3 order by 3 desc
ENAME SAL JOB COMM ---------- ---------- --------- ---------- TURNER 1500 SALESMAN 0 ALLEN 1600 SALESMAN 300 WARD 1250 SALESMAN 500 SMITH 800 CLERK JAMES 950 CLERK ADAMS 1100 CLERK MARTIN 1250 SALESMAN 1300 MILLER 1300 CLERK CLARK 2450 MANAGER BLAKE 2850 MANAGER JONES 2975 MANAGER SCOTT 3000 ANALYST FORD 3000 ANALYST KING 5000 PRESIDENT
1 select ename,sal,job,comm 2 from emp 3 order by case when job = 'SALESMAN' then comm else sal end
select ename,sal,job,comm,
case when job = 'SALESMAN' then comm else sal end as ordered
from emp
order by 5
ENAME SAL JOB COMM ORDERED
---------- ---------- --------- ---------- ----------
TURNER 1500 SALESMAN 0 0
ALLEN 1600 SALESMAN 300 300
WARD1 250 SALESMAN 500 500
SMITH 800 CLERK 800
JAMES 950 CLERK 950
ADAMS 1100 CLERK 1100
MARTIN 1250 SALESMAN 1300 1300
MILLER 1300 CLERK 1300
CLARK2 450 MANAGER 2450
BLAKE2 850 MANAGER 2850
JONES2 975 MANAGER 2975
SCOTT 3000 ANALYST 3000
FORD 3000 ANALYST 3000
KING 5000 PRESIDENT 5000ENAME_AND_DNAME DEPTNO --------------- ---------- CLARK 10 KING 10 MILLER 10 ---------- ACCOUNTING 10 RESEARCH 20 SALES 30 OPERATIONS 40
1 select ename as ename_and_dname, deptno 2 from emp 3 where deptno = 10 4 union all 5 select '----------', null 6 from t1 7union all 8 select dname, deptno 9 from dept
select deptno | select deptno, dname from dept | from dept union all | union select ename | select deptno from emp | from emp
select deptno
from emp
union
select deptno
from dept
DEPTNO
---------
10
20
30
40ENAME_AND_DNAME DEPTNO --------------- ---------- CLARK 10 KING 10 MILLER 10 ---------- ACCOUNTING 10 RESEARCH 20 SALES 30 OPERATIONS 40
1 select ename as ename_and_dname, deptno 2 from emp 3 where deptno = 10 4 union all 5 select '----------', null 6 from t1 7union all 8 select dname, deptno 9 from dept
select deptno | select deptno, dname from dept | from dept union all | union select ename | select deptno from emp | from emp
select deptno
from emp
union
select deptno
from dept
DEPTNO
---------
10
20
30
40
select distinct deptno
from (
select deptno
from emp
union all
select deptno
from dept
)ENAME LOC ---------- ---------- CLARK NEW YORK KING NEW YORK MILLER NEW YORK
1 select e.ename, d.loc 2 from emp e, dept d 3 where e.deptno = d.deptno 4 and e.deptno = 10
select e.ename, d.loc,
e.deptno as emp_deptno,
d.deptno as dept_deptno
from emp e, dept d
where e.deptno = 10
ENAME LOC EMP_DEPTNO DEPT_DEPTNO
---------- ------------- ---------- -----------
CLARK NEW YORK 10 10
KING NEW YORK 10 10
MILLER NEW YORK 10 10
CLARK DALLAS 10 20
KING DALLAS 10 20
MILLER DALLAS 10 20
CLARK CHICAGO 10 30
KING CHICAGO 10 30
MILLER CHICAGO 10 30
CLARK BOSTON 10 40
KING BOSTON 10 40
MILLER BOSTON 10 40
create view V
as
select ename,job,sal
from emp
where job = 'CLERK'
select * from V
ENAME JOB SAL
---------- --------- ----------
SMITH CLERK 800
ADAMS CLERK 1100
JAMES CLERK 950
MILLER CLERK 1300EMPNO ENAME JOB SAL DEPTNO -------- ---------- --------- ---------- --------- 7369 SMITH CLERK 800 20 7876 ADAMS CLERK 1100 20 7900 JAMES CLERK 950 30 7934 MILLER CLERK 1300 10
1 select e.empno,e.ename,e.job,e.sal,e.deptno 2 from emp e, V 3 where e.ename = v.ename 4 and e.job = v.job 5 and e.sal = v.sal
1 select e.empno,e.ename,e.job,e.sal,e.deptno 2 from emp e join V 3 on ( e.ename = v.ename 4 and e.job = v.job 5 and e.sal = v.sal )
1 select empno,ename,job,sal,deptno 2 from emp 3 where (ename,job,sal) in ( 4 select ename,job,sal from emp 5intersect 6 select ename,job,sal from V 7 )
DEPTNO ---------- 40
1 select deptno from dept 2 except 3 select deptno from emp
1 select deptno from dept 2 minus 3 select deptno from emp
1 select deptno 2 from dept 3 where deptno not in (select deptno from emp)
DEPTNO DNAME LOC ---------- -------------- ------------- 40 OPERATIONS BOSTON
1 select d.* 2 from dept d left outer join emp e 3 on (d.deptno = e.deptno) 4 where e.deptno is null
1 select d.* 2 from dept d, emp e 3 where d.deptno = e.deptno (+) 4 and e.deptno is null