You are on page 1of 45

SQL DE ORACLE

1
SQL = DML + DDL + DCL
+ TRANSACTION CONTROL

2
MODELO DE DATOS

emp
dept empno
deptno ename
dname job
loc mgr
hiredate
sal
salgrade comm
grade deptno
losal
hisal

3
CONSULTA 81

SELECT ename, CONCAT(ename,job), LENGTH(ename),


INSTR(ename,'A')
FROM emp
WHERE SUBSTR(ename,-1,1)='N';

ENAME CONCAT(ENAME,JOB) LENGTH(ENAME) INSTR(ENAME,'A')


----------- ------------------------ ------------- ----------------
MARTIN MARTINSALESMAN 6 2
ALLEN ALLENSALESMAN 5 1

4
CONSULTA 82
SELECT ename, TRUNC (SAL/3,3)
FROM emp
WHERE deptno = 20;

ENAME TRUNC(SAL/3,3)
----------- --------------
JONES 991.666
FORD 1000
SMITH 266.666
SCOTT 1000
ADAMS 366.666

5
CONSULTA 83

SELECT ename, sal, comm, MOD (sal, comm)


FROM emp
WHERE job='SALESMAN';

ENAME SAL COMM MOD(SAL,COMM)


----------- ---------- ---------- -------------
MARTIN 1250 1400 1250
ALLEN 1600 300 100
TURNER 1500 0 1500
WARD 1250 500 250

6
CONSULTA 84
SELECT ename, hiredate, SYSDATE,(SYSDATE-hiredate)/7 AS SEMANAS
FROM emp
WHERE deptno=10;

ENAME HIREDATE SYSDATE SEMANAS


----------- -------- -------- ----------
KING 17/11/11 29/01/18 323.599458
CLARK 09/06/11 29/01/18 346.599458
MILLER 23/01/12 29/01/18 314.028029

7
CONSULTA 85
SELECT empno, hiredate,
MONTHS_BETWEEN (SYSDATE, hiredate) AS meses,
ADD_MONTHS (hiredate, 6) AS revision,
LAST_DAY (hiredate) AS fin_mes
FROM emp
WHERE MONTHS_BETWEEN(SYSDATE, hiredate) >= 80;

EMPNO HIREDATE MESES REVISION FIN_MES


---------- -------- ---------- -------- --------
7698 01/05/11 80.9096703 01/11/11 31/05/11
7566 02/04/11 81.8774123 02/10/11 30/04/11
7499 20/02/11 83.2967671 20/08/11 28/02/11
7521 22/02/11 83.232251 22/08/11 28/02/11
7369 17/12/10 85.3935413 17/06/11 31/12/10

8
CONSULTA 86
SELECT empno, hiredate, ROUND (hiredate,'MONTH'),
TRUNC (hiredate,'MONTH')
FROM emp
WHERE hiredate LIKE '%11';

EMPNO HIREDATE ROUND(HI TRUNC(HI


---------- -------- -------- --------
7839 17/11/11 01/12/11 01/11/11
7698 01/05/11 01/05/11 01/05/11
7782 09/06/11 01/06/11 01/06/11
7566 02/04/11 01/04/11 01/04/11
7654 28/09/11 01/10/11 01/09/11
7499 20/02/11 01/03/11 01/02/11
7844 08/09/11 01/09/11 01/09/11
7900 03/12/11 01/12/11 01/12/11
7521 22/02/11 01/03/11 01/02/11 9
7902 03/12/11 01/12/11 01/12/11
CONSULTA 87
SELECT empno, TO_CHAR (hiredate,'mm/yyyy') AS m_hired
FROM emp
WHERE ename='BLAKE';

EMPNO M_HIRED
---------- -------
7698 05/2011
TO_CHAR
TO_CHAR

DATE CHAR NUMBER

TO_DATE TO_NUMBER 10
CONSULTA 88

SELECT ename, TO_CHAR(hiredate,'fmDdspth "de" Month


yyyy’) AS H_DATE
FROM emp
WHERE ename = 'KING' OR ename = 'CLARK';

ENAME H_DATE
----------- --------------------------------------
KING Seventeenth de Noviembre 2011
CLARK Ninth de Junio 2011

11
CONSULTA 89

SELECT TO_CHAR (sal,'$99999’) AS SALARY


FROM emp
WHERE ename='SCOTT';

SALARY
-------
$3000

12
CONSULTA 90

SELECT ename, hiredate


FROM emp
WHERE hiredate = TO_DATE('22 febrero 2011','ddmmYYYY’);

ENAME HIREDATE
----------- --------
WARD 22/02/11

13
CONSULTA 91.
SELECT ename, sal, comm, (sal*12) + NVL(comm, 0) AS NVL
FROM emp
WHERE deptno <> 20;

ENAME SAL COMM NVL


----------- ---------- ---------- ----------
ENAME SAL COMM NVL
----------- ---------- ---------- ----------
KING 5000 60000
BLAKE 2850 34200
CLARK 2450 29400
MARTIN 1250 1400 16400
ALLEN 1600 300 19500
TURNER 1500 0 18000
JAMES 950 11400
WARD 1250 500 15500
14
MILLER 1300 15600
CONSULTA 92
SELECT ename, NVL(TO_CHAR(mgr), 'No manager’) AS "Tiene Mgr"
FROM emp;
ENAME Tiene Mgr
----------- ----------------------------------------
KING No manager
BLAKE 7839
CLARK 7839
JONES 7839
MARTIN 7698
ALLEN 7698
TURNER 7698
JAMES 7698
WARD 7698
FORD 7566
SMITH 7902
SCOTT 7566
ADAMS 7788
MILLER 7782

15
14 rows selected.
CONSULTA 93
SELECT ename, job, sal,
DECODE(job,
JOB SAL NUEVO
'ANALYST', sal*1.1, ------------- ---------- ----------
'CLERK', sal*1.55, PRESIDENT 5000 5000
'MANAGER', sal*1.2, MANAGER 2850 3420
sal) AS nuevo MANAGER 2450 2940
FROM emp; MANAGER 2975 3570
SALESMAN 1250 1250
SALESMAN 1600 1600
SALESMAN 1500 1500
CLERK 950 1472.5
SALESMAN 1250 1250
ANALYST 3000 3300
CLERK 800 1240
ANALYST 3000 3300
CLERK 1100 1705
CLERK 1300 2015

16
CONSULTA 94
SELECT ename,sal, DECODE (TRUNC(sal/1000,0),
0, 0.00,
1, 0.09,
2, 0.20,
3, 0.30,
4, 0.40,
5, 0.42,
6, 0.44,
0.45) Tasa_de_impuesto
FROM emp
WHERE deptno=30;
ENAME SAL TAX_RATE
----------- ---------- ----------
BLAKE 2850 .2
MARTIN 1250 .09
ALLEN 1600 .09
TURNER 1500 .09
JAMES 950 0
WARD 1250 .09
17
6 filas seleccionadas.
CONSULTA 95
SELECT ename, hiredate, TO_CHAR(ADD_MONTHS(hiredate,6))
"Revision 6 meses“
FROM emp
WHERE hiredate NOT LIKE ‘%11’
ORDER BY hiredate;

ENAME HIREDATE Revision


----------- -------- --------
SMITH 17/12/10 17/06/11
MILLER 23/01/12 23/07/12
SCOTT 09/12/12 09/06/13
ADAMS 12/01/13 12/07/13

18
CONSULTA 96. PRODUCTO CARTESIANO
SELECT ename, dname
FROM emp, dept;

ENAME DNAME
----------- ------------
KING ACCOUNTING
BLAKE ACCOUNTING
CLARK ACCOUNTING
JONES ACCOUNTING
MARTIN ACCOUNTING
ALLEN ACCOUNTING
TURNER ACCOUNTING
JAMES ACCOUNTING
WARD ACCOUNTING

19

56 filas seleccionadas.
CONSULTA 97. REUNIÓN NATURAL
SELECT emp.empno, emp.ename, emp.deptno, dept.deptno, dept.loc
FROM emp, dept
WHERE emp.deptno = dept.deptno;

EMPNO ENAME DEPTNO DEPTNO LOC


---------- ----------- ---------- ---------- -----------
7839 KING 10 10 NEW_YORK
7698 BLAKE 30 30 CHICAGO
7782 CLARK 10 10 NEW_YORK
7566 JONES 20 20 DALLAS
7654 MARTIN 30 30 CHICAGO
7499 ALLEN 30 30 CHICAGO
7844 TURNER 30 30 CHICAGO
7900 JAMES 30 30 CHICAGO
7521 WARD 30 30 CHICAGO
7902 FORD 20 20 DALLAS
7369 SMITH 20 20 DALLAS
7788 SCOTT 20 20 DALLAS
7876 ADAMS 20 20 DALLAS
7934 MILLER 10 10 NEW_YORK

20
14 rows selected.
CONSULTA 98

SELECT empno, ename, emp.deptno, loc


FROM emp, dept
WHERE emp.deptno = dept.deptno
AND INITCAP(ename) = 'King';

EMPNO ENAME DEPTNO LOC


---------- ----------- ---------- -----------
7839 KING 10 NEW_YORK

21
CONSULTA 99
SELECT e.empno, e.ename, e.deptno, d.deptno, d.loc
FROM emp e, dept d
WHERE e.deptno = d.deptno;
EMPNO ENAME DEPTNO DEPTNO LOC
---------- ----------- ---------- ---------- -----------
7839 KING 10 10 NEW_YORK
7698 BLAKE 30 30 CHICAGO
7782 CLARK 10 10 NEW_YORK
7566 JONES 20 20 DALLAS
7654 MARTIN 30 30 CHICAGO
7499 ALLEN 30 30 CHICAGO
7844 TURNER 30 30 CHICAGO
7900 JAMES 30 30 CHICAGO
7521 WARD 30 30 CHICAGO
7902 FORD 20 20 DALLAS
7369 SMITH 20 20 DALLAS
7788 SCOTT 20 20 DALLAS
7876 ADAMS 20 20 DALLAS
7934 MILLER 10 10 NEW_YORK
22

14 rows selected.
MODELO DE DATOS
customer ord product
custid ordid prodid
name orderdate descrip
address commplan
city custid
state shipdate
zip total price
area prodid
phone stdprice
repid item minprice
creditlimit ordid startdate
comments itemid enddate
prodid
actualprice
qty
itemtot 23
CONSULTA 100

SELECT c.name, o.ordid, i.itemid, o.total


FROM customer c, ord o, item i
WHERE c.custid = o.custid
AND o.ordid = i.ordid
AND c.name = 'TKB SPORT SHOP';

24
CONSULTA.101. OUTER JOIN

SELECT e.ename, e.sal, s.grade


FROM emp e, salgrade s
WHERE e.sal BETWEEN s.losal AND s.hisal;

ENAME SAL GRADE


----------- ---------- ----------
JAMES 950 1
SMITH 800 1
ADAMS 1100 1

FORD 3000 4
SCOTT 3000 4
KING 5000 5

25
14 filas seleccionadas.
CONSULTA.102. NATURAL JOIN
SELECT e.ename, d.deptno,d.dname
FROM emp e, dept d
WHERE e.deptno = d.deptno
ORDER BY e.deptno;

ENAME DEPTNO DNAME


----------- ---------- ------------
KING 10 ACCOUNTING
CLARK 10 ACCOUNTING

MARTIN 30 SALES
BLAKE 30 SALES
TURNER 30 SALES

26
14 filas seleccionadas.
CONSULTA.103. SELF JOIN
SELECT workers.ename|| ' works for ' || manager.ename
FROM emp workers, emp manager
WHERE workers.mgr = manager.empno;

WORKERS.ENAME||'WORKSFOR'||MANAGE
---------------------------------
JONES works for KING
CLARK works for KING
BLAKE works for KING

SMITH works for FORD
ADAMS works for SCOTT

13 filas seleccionadas.

27
CONSULTA.104

SELECT AVG(sal),MAX(sal),MIN(sal),SUM(sal)
FROM emp
WHERE job LIKE 'SALES%';

AVG(SAL) MAX(SAL) MIN(SAL) SUM(SAL)


---------- ---------- ---------- ----------
1400 1600 1250 5600

28
CONSULTA.105

SELECT MIN(hiredate), MAX(hiredate)


FROM emp;

MIN(HIRE MAX(HIRE
-------- --------
17/12/10 12/01/13

29
CONSULTA.106

SELECT COUNT(*)
FROM emp
WHERE deptno = 30;

COUNT(*)
----------
6

30
CONSULTA.107

SELECT COUNT(comm)
FROM emp
WHERE deptno=30;

COUNT(COMM)
-----------
4

31
CONSULTA.108

SELECT COUNT(deptno)
FROM emp;

COUNT(DEPTNO)
-------------
14

32
CONSULTA.109

SELECT COUNT(DISTINCT(deptno))
FROM emp;

COUNT(DISTINCT(DEPTNO))
-----------------------
3

33
CONSULTA.110

SELECT AVG(comm)
FROM emp;

AVG(COMM)
----------
550

34
CONSULTA.111
SELECT AVG(NVL(comm,0))
FROM emp;

AVG(NVL(COMM,0))
----------------
157.142857

35
CONSULTA.112

SELECT deptno, AVG(sal)


FROM emp
GROUP BY deptno;

DEPTNO AVG(SAL)
---------- ----------
30 1566.66667
20 2175
10 2916.66667

36
CONSULTA.113

SELECT AVG(sal)
FROM emp
GROUP BY deptno;

AVG(SAL)
----------
1566.66667
2175
2916.66667

37
CONSULTA.114

SELECT deptno, AVG(sal)


FROM emp
GROUP BY deptno
ORDER BY AVG(sal);

DEPTNO AVG(SAL)
---------- ----------
30 1566.66667
20 2175
10 2916.66667

38
CONSULTA.115
SELECT deptno, job, sum(sal)
FROM emp
GROUP BY deptno, job;

DEPTNO JOB SUM(SAL)


---------- ------------- ----------
20 MANAGER 2975
30 SALESMAN 5600
30 CLERK 950

10 CLERK 1300
10 MANAGER 2450
20 ANALYST 6000
39

9 filas seleccionadas.
CONSULTA.116
SELECT deptno, COUNT(ename)
FROM emp
GROUP BY deptno;

DEPTNO COUNT(ENAME)
---------- ------------
30 6
20 5
10 3

40
CONSULTA.117

SELECT deptno, AVG(sal)


FROM emp
GROUP BY deptno
HAVING AVG(sal)>2000;

DEPTNO AVG(SAL)
---------- ----------
20 2175
10 2916.66667

41
CONSULTA.118
SELECT deptno, MAX(sal)
FROM emp
GROUP BY deptno
HAVING MAX(sal)>2900;

DEPTNO MAX(SAL)
---------- ----------
20 3000
10 5000

42
CONSULTA.119

SELECT job, sum(sal) "ROL de PAGO“


FROM emp
GROUP BY job;

JOB ROL de PAGO


------------- -----------
SALESMAN 5600
CLERK 4150
ANALYST 6000
MANAGER 8275
PRESIDENT 5000
43
CONSULTA.120

SELECT job, sum(sal) AS "ROL de PAGO“


FROM emp
WHERE job NOT LIKE 'SALES%'
GROUP BY job
HAVING SUM(sal)>5000
ORDER BY SUM(sal) DESC;

JOB ROL de PAGO


------------- -----------
MANAGER 8275
ANALYST 6000

44
CONSULTA.121. SUBCONSULTA
SELECT ename
FROM emp
WHERE sal = (SELECT sal
FROM emp
WHERE empno=7566);

ENAME
-----------
JONES

45

You might also like