Beruflich Dokumente
Kultur Dokumente
1-1
Objetivos
Al completar esta leccin, debera ser
capaz de hacer lo siguiente:
1-2
Funciones SQL
Entrada
Salida
Funcin
arg 1
arg 2
Las Funciones
Realizan
Acciones
Valor
Resultado
arg n
1-3
Funciones
Funciones a
Nivel de Fila
1-4
Funciones a
Nivel de
Mltiples Filas
Sintaxis:
function_name
function_name (column|expression,
(column|expression, [arg1,
[arg1, arg2,...])
arg2,...])
1-5
General
Conversion
1-6
Number
Single-row
functions
Date
Funciones de Caracteres
Funciones de
Caracteres
Funciones de Conversin
Funciones de
Manipulacin de Caracteres
LOWER
UPPER
CONCAT
SUBSTR
INITCAP
LENGTH
INSTR
LPAD
1-7
Funciones de Conversin
Conversin de cadenas de caracteres
Funcin
1-8
Resultado
LOWER('Curso SQL')
curso sql
CURSO SQL
INITCAP('Curso SQL')
Curso Sql
ENAME
DEPTNO
ENAME
DEPTNO
--------------------------- --------BLAKE
30
BLAKE
30
Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002
Funciones de Manipulacin de
Caracteres
Manipulacin de cadenas de caracteres
Funcin
1-10
Resultado
CONCAT('Good', 'String')
GoodString
SUBSTR('String',1,3)
Str
LENGTH('String')
INSTR('String', 'r')
LPAD(sal,10,'*')
******5000
Uso de Funciones de
Manipulacin de Caracteres
SQL> SELECT ename, CONCAT (ename, job), LENGTH(ename),
2
INSTR(ename, 'A')
3 FROM
emp
SUBSTR(job,1,5) = 'SALES';
4 WHERE
ENAME
---------MARTIN
ALLEN
TURNER
WARD
1-11
CONCAT(ENAME,JOB)
LENGTH(ENAME) INSTR(ENAME,'A')
------------------- ------------- ---------------MARTINSALESMAN
6
2
ALLENSALESMAN
5
1
TURNERSALESMAN
6
0
WARDSALESMAN
4
2
Funciones Numricas
ROUND: Redondea un valor al decimal
especificado
ROUND(45.926, 2) 45.93
TRUNC:Trunca un valor en el decimal
especificado
TRUNC(45.926, 2) 45.92
MOD: Devuelve el resto de la divisin
MOD(1600, 300) 100
1-12
1-13
1-14
ENAME
SAL
COMM MOD(SAL,COMM)
---------- --------- --------- ------------MARTIN
1250
1400
1250
ALLEN
1600
300
100
TURNER
1500
0
1500
WARD
1250
500
250
1-15
1-16
Operadores Aritmticos de
Fechas
Sumar o restar un nmero a de una
fecha da por resultado una fecha.
1-17
ENAME
---------KING
CLARK
MILLER
1-18
WEEKS
--------830.93709
853.93709
821.36566
Funciones de Fecha
1-19
FUNCION
DESCRIPCION
MONTHS_BETWEEN
ADD_MONTHS
NEXT_DAY
Prximo da de la fecha
especificada
LAST_DAY
ROUND
TRUNC
1-20
ADD_MONTHS ('11-JAN-94',6)
'11-JUL-94'
NEXT_DAY ('01-SEP-95','FRIDAY')
'08-SEP-95'
LAST_DAY('01-SEP-95')
'30-SEP-95'
ROUND('25-JUL-95','MONTH')
01-AUG-95
ROUND('25-JUL-95','YEAR')
01-JAN-96
TRUNC('25-JUL-95','MONTH')
01-JUL-95
TRUNC('25-JUL-95','YEAR')
01-JAN-95
1-21
Funciones de Conversin
Conversin de
Tipos de Datos
Conversin
Implcita
1-22
Conversin
Explcita
1-23
De
VARCHAR2 o CHAR
NUMBER
VARCHAR2 o CHAR
DATE
NUMBER
VARCHAR2
DATE
VARCHAR2
Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002
1-24
De
VARCHAR2 o CHAR
NUMBER
VARCHAR2 o CHAR
DATE
NUMBER
TO_CHAR
1-25
TO_DATE
CHARACTER
TO_CHAR
DATE
El formato:
1-27
YYYY
Ao completo en nmero
YEAR
Ao en letras
MM
MONTH
DY
DAY
Obtencin de la hora:
HH24:MI:SS AM
15:45:32 PM
DD "of" MONTH
12 of OCTOBER
Sufijo que permita obtener el n del da en letra.
ddspth
1-28
fourteenth
Formato de Fecha RR
Ao Actual
1995
1995
2001
2001
Fecha Especficada
27-OCT-95
27-OCT-17
27-OCT-17
27-OCT-95
Formato RR
1995
2017
2017
1995
FormatoYY
1995
1917
2017
2095
1-29
0-49
50-99
0-49
La fecha devuelta
corresponde al
siglo corriente.
La fecha devuelta
corresponde al siglo
anterior al corriente.
50-99
La fecha devuelta
corresponde al
siglo posterior al
corriente.
La fecha devuelta
corresponde al siglo
corriente.
1-31
9
0
Representa un nmero
Fuerza a que se muestre el 0 (cero)
L
.
,
Uso de la
Funcin TO_CHAR con Nmeros
SQL> SELECT
2 FROM
3 WHERE
TO_CHAR(sal,'$99,999') SALARY
emp
ename = 'SCOTT';
SALARY
-------$3,000
1-32
Funciones
TO_NUMBER y TO_DATE
Convierte una cadena de caracteres a
un formato numrico usando la funcin
TO_NUMBER
TO_NUMBER(char)
TO_NUMBER(char)
NVL Function
Convierte un nulo a un valor.
Los tipos de datos pueden ser de fecha,
cadenas de caracteres y nmeros.
Los tipos de datos deben coincidir:
NVL(comm,0)
NVL(hiredate,'01-JAN-97')
NVL(job,'No Job Yet')
1-34
1-35
La Funcin DECODE
Hace las veces de sentecias CASE o
IF-THEN-ELSE, para facilitar consultas
condicionales.
DECODE(col/expression,
DECODE(col/expression, search1,
search1, result1
result1
[,
[, search2,
search2, result2,...,]
result2,...,]
[,
[, default])
default])
1-36
SAL*1.1,
SAL*1.15,
SAL*1.20,
SAL)
JOB
SAL REVISED_SALARY
--------- --------- -------------PRESIDENT
5000
5000
MANAGER
2850
3420
MANAGER
2450
2940
...
14 rows selected.
1-37
Anudamiento de Funciones
F3(F2(F1(col,arg1),arg2),arg3)
Paso 1 = Resultado 1
Paso 2 = Resultado 2
Paso 3 = Resultado 3
1-38
Funciones Anidadas
SQL> SELECT
2
3 FROM
4 WHERE
ename,
NVL(TO_CHAR(mgr),'No Manager')
emp
mgr IS NULL;
ENAME
NVL(TO_CHAR(MGR),'NOMANAGER')
---------- ----------------------------KING
No Manager
1-39
Resumen
Use funciones para:
Realizar cculos sobre los datos
Modificar datos de forma individual
Manipular la salida de grupos de
registros
Alterar formatos de fecha en su
visualizacin
Convertir tipos de datos de columnas
1-40
1-41
Visualizacin de Datos
a partir de Varias Tablas
Objetivos
Al completar esta leccin, debera ser
capaz de hacer lo siguiente:
1-43
DEPT
ENAME
----KING
BLAKE
... DEPTNO
... -----...
10
...
30
MILLER ...
10
DEPTNO
-----10
20
30
40
DNAME
---------ACCOUNTING
RESEARCH
SALES
OPERATIONS
EMPNO
EMPNO DEPTNO
DEPTNO LOC
LOC
---------------------- ------- -------7839
10
7839
10 NEW
NEW YORK
YORK
7698
30
CHICAGO
7698
30 CHICAGO
7782
10
7782
10 NEW
NEW YORK
YORK
7566
20
DALLAS
7566
20 DALLAS
7654
30
7654
30 CHICAGO
CHICAGO
7499
30
CHICAGO
7499
30 CHICAGO
...
...
14
14 rows
rows selected.
selected.
1-44
LOC
-------NEW YORK
DALLAS
CHICAGO
BOSTON
Qu es un JOIN?
Use un join para consultar datos de ms
de una tabla.
SELECT
SELECT
FROM
FROM
WHERE
WHERE
table.column,
table.column, table.column
table.column
table1,
table1, table2
table2
table1.column1
table1.column1 == table2.column2;
table2.column2;
Producto Cartesiano
Se establece un producto cartesiano cuando:
Se omite una condicin de join.
Se define una condicin de join invlida.
Se combinan todas las filas de la primer
tabla con todas las filas de la segunda.
1-46
Generacin de un Producto
EMP (14 registros)
DEPT (4 registros)
Cartesiano
EMPNO ENAME ... DEPTNO
DEPTNO DNAME
LOC
EMPNO ENAME
----------- --------7839
7839 KING
KING
7698
7698 BLAKE
BLAKE
...
...
7934
7934 MILLER
MILLER
Producto
Cartesiano:
14*4=56 rows
1-47
... DEPTNO
...
... ----------...
10
...
10
...
30
...
30
...
...
10
10
DEPTNO DNAME
LOC
----------- ------------------- --------------10
10 ACCOUNTING
ACCOUNTING NEW
NEW YORK
YORK
20
20 RESEARCH
RESEARCH DALLAS
DALLAS
30
CHICAGO
30 SALES
SALES
CHICAGO
40
OPERATIONS
BOSTON
40 OPERATIONS BOSTON
ENAME
DNAME
ENAME
DNAME
----------------------------KING
ACCOUNTING
KING
ACCOUNTING
BLAKE
ACCOUNTING
BLAKE
ACCOUNTING
...
...
KING
RESEARCH
KING
RESEARCH
BLAKE
RESEARCH
BLAKE
RESEARCH
...
...
56
56 rows
rows selected.
selected.
Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002
Tipos de Join
Equijoin Non-equijoin Outer join Self join
1-48
Qu es un Equijoin?
EMP
DEPT
EMPNO ENAME
DEPTNO
------ ------- ------7839 KING
10
7698 BLAKE
30
7782 CLARK
10
7566 JONES
20
7654 MARTIN
30
7499 ALLEN
30
7844 TURNER
30
7900 JAMES
30
7521 WARD
30
7902 FORD
20
7369 SMITH
20
...
14 rows selected.
Primary key
1-49
DEPTNO
------10
30
10
20
30
30
30
30
30
20
20
...
14 rows
DNAME
---------ACCOUNTING
SALES
ACCOUNTING
RESEARCH
SALES
SALES
SALES
SALES
SALES
RESEARCH
RESEARCH
selected.
Foreign key
LOC
-------NEW YORK
CHICAGO
NEW YORK
DALLAS
CHICAGO
CHICAGO
CHICAGO
CHICAGO
CHICAGO
DALLAS
DALLAS
1-50
Calificacin de
Nombres de Columna Ambiguos
Usar como prefijos los nombres de
tablas para calificar los nombres de
columnas que estn en varias tablas.
1-51
Condiciones de Bsqueda
Adicionales Usando el Operador
EMP
DEPT
AND: Ejemplo
EMPNO ENAME
DEPTNO
------ ------- ------7839 KING
10
7698 BLAKE
30
7782 CLARK
10
7566 JONES
20
7654 MARTIN
30
7499 ALLEN
30
7844 TURNER
30
7900 JAMES
30
7521 WARD
30
7902 FORD
20
7369 SMITH
20
...
14 rows selected.
1-52
DEPTNO DNAME
------ --------10 ACCOUNTING
30 SALES
10 ACCOUNTING
20 RESEARCH
30 SALES
30 SALES
30 SALES
30 SALES
30 SALES
20 RESEARCH
20 RESEARCH
...
14 rows selected.
LOC
-------NEW YORK
CHICAGO
NEW YORK
DALLAS
CHICAGO
CHICAGO
CHICAGO
CHICAGO
CHICAGO
DALLAS
DALLAS
1-53
ORD
NAME
CUSTID
NAME
CUSTID
------------------------------JOCKSPORTS
100
JOCKSPORTS
100
TKB
101
TKB SPORT
SPORT SHOP
SHOP
101
VOLLYRITE
102
VOLLYRITE
102
JUST
TENNIS
103
JUST TENNIS
103
K+T
SPORTS
105
K+T SPORTS
105
SHAPE
106
SHAPE UP
UP
106
WOMENS
107
WOMENS SPORTS
SPORTS
107
...
...
...
...
99 rows
rows selected.
selected.
1-54
CUSTID
CUSTID ORDID
ORDID
------------- ------------101
610
101
610
102
611
102
611
104
612
104
612
106
601
106
601
102
602
ITEM
102
602
106
604
106 ORDID
604 ITEMID
ORDID
ITEMID
106
605
106 -----605 ------------ ------...
...
610
33
610
21
rows
selected.
21 rows selected.
611
11
611
612
11
612
601
11
601
602
11
602
...
...
64
64 rows
rows selected.
selected.
Non-Equijoins
EMP
SALGRADE
EMPNO ENAME
SAL
------ ------- -----7839 KING
5000
7698 BLAKE
2850
7782 CLARK
2450
7566 JONES
2975
7654 MARTIN
1250
7499 ALLEN
1600
7844 TURNER
1500
7900 JAMES
950
...
14 rows selected.
1-55
el salario en la tabla
EMP, est entre el salario
ms bajo y el salario
ms alto de la tabla
SALGRADE
SELECT
FROM
WHERE
BETWEEN
ENAME
SAL
GRADE
---------- --------- --------JAMES
950
1
SMITH
800
1
ADAMS
1100
1
...
14 rows selected.
1-56
Outer Joins
EMP
ENAME
----KING
BLAKE
CLARK
JONES
...
DEPT
DEPTNO
-----10
30
10
20
DEPTNO
-----10
30
10
20
...
40
DNAME
---------ACCOUNTING
SALES
ACCOUNTING
RESEARCH
OPERATIONS
No hay empleados en el
departamento OPERATIONS
1-57
Outer Joins
Usar Outer Join para ver las filas que no
cumplen la condicin de join.
El operador de un Outer Join es el signo
ms (+).
1-58
SELECT
SELECT
FROM
FROM
WHERE
WHERE
table.column,
table.column, table.column
table.column
table1,
table1, table2
table2
table1.column(+)
table1.column(+) == table2.column;
table2.column;
SELECT
SELECT
FROM
FROM
WHERE
WHERE
table.column,
table.column, table.column
table.column
table1,
table1, table2
table2
table1.column
table1.column == table2.column(+);
table2.column(+);
SELECT
FROM
WHERE
ORDER BY
ENAME
DEPTNO DNAME
---------- --------- ------------KING
10 ACCOUNTING
CLARK
10 ACCOUNTING
...
40 OPERATIONS
15 rows selected.
1-59
Self Joins
EMP (WORKER)
EMPNO
----7839
7698
7782
7566
7654
7499
ENAME
-----KING
BLAKE
CLARK
JONES
MARTIN
ALLEN
MGR
---7839
7839
7839
7698
7698
EMP (MANAGER)
EMPNO ENAME
----- -------7839
7839
7839
7698
7698
KING
KING
KING
BLAKE
BLAKE
1-61
Resumen
SELECT
SELECT
FROM
FROM
WHERE
WHERE
table.column,
table.column, table.column
table.column
table1,
table1, table2
table2
table1.column1
table1.column1 == table2.column2;
table2.column2;
1-62
Objetivos
Al completar esta leccin, debera ser
capaz de hacer lo siguiente:
1-64
mximo salario
en la tabla EMP
MAX(SAL)
--------5000
AVG(sal), MAX(sal),
MIN(sal), SUM(sal)
emp
job LIKE 'SALES%';
1-68
MIN(hiredate), MAX(hiredate)
emp;
MIN(HIRED MAX(HIRED
--------- --------17-DEC-80 12-JAN-83
1-69
COUNT(*)
emp
deptno = 30;
COUNT(*)
--------6
1-70
COUNT(comm)
emp
deptno = 30;
COUNT(COMM)
----------4
1-71
AVG(COMM)
--------550
1-72
AVG(NVL(COMM,0))
---------------157.14286
1-73
2916.6667
media de
DEPTNO AVG(SAL)
salarios
------- --------en
EMP
2175
10 2916.6667
para cada
20
2175
departamento
30 1566.6667
1566.6667
column, group_function
table
condition]
group_by_expression]
column];
1-75
DEPTNO AVG(SAL)
--------- --------10 2916.6667
20
2175
30 1566.6667
1-76
AVG(SAL)
--------2916.6667
2175
1566.6667
1-77
EMP
DEPTNO
--------10
10
10
20
20
20
20
20
30
30
30
30
30
30
1-78
JOB
SUM(SAL)
--------- --------CLERK
1300
MANAGER
2450
PRESIDENT
5000
ANALYST
6000
CLERK
1900
MANAGER
2975
CLERK
950
MANAGER
2850
SALESMAN
5600
DEPTNO JOB
SUM(SAL)
--------- --------- --------10 CLERK
1300
10 MANAGER
2450
10 PRESIDENT
5000
20 ANALYST
6000
20 CLERK
1900
...
9 rows selected.
1-79
Consultas No vlidas
Usando Funciones de Grupo
Cualquier columna o expresin en la
SELECT que no sea una funcin agregada,P BY
U
O
tiene que ser especificada en la clusula
R
G
GROUP BY.
a
ul
SQL>
SQL>
22
1-80
SELECT
SELECT
FROM
FROM
deptno,
deptno, COUNT(ename)
COUNT(ename)
la
emp;
emp;
n
s
u
cl
e
a
d
a
SELECT
deptno,
COUNT(ename)
SELECT deptno, COUNT(ename) ic
if
**
c
e
p
ERROR
at
line
1:
ERROR at line 1:
s
e
ORA-00937:
group
ORA-00937: not
not aa single-group
single-group
group function
function
O
N
a
n
m
u
JavierlBalbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002
o
C
Consultas No vlidas
Usando Funciones de Grupo
No puede usar una clusula WHERE para restringir
grupos.
Utilice la clusula HAVING para restringir grupos.
E
R
SQL>
deptno,
SQL> SELECT
SELECT
deptno, AVG(sal)
AVG(sal)
HE
22 FROM
emp
W
FROM
emp
a
l
33 WHERE
AVG(sal)
u
WHERE
AVG(sal) >> 2000
2000
s
u
44 GROUP
GROUP BY
BY deptno;
deptno;
l
c os
a
l up
r
WHERE
a gr
WHERE AVG(sal)
AVG(sal) >> 2000
2000
s
u ir
**
e
g
d
n
ERROR
e tr i
ERROR at
at line
line 3:
3:
u
p es is
ORA-00934:
ORA-00934: group
groupofunction
function
is not
not allowed
allowed here
here
r
N ra
1-81
Javier Balbuena
pa/ Jos Manuel Ferrer. Curso 2.001 / 2.002
Exclusin de Resultados de un
EMP
Grupo
DEPTNO
SAL
--------- --------10
2450
10
5000
10
1300
20
800
20
1100
20
3000
20
3000
20
2975
30
1600
30
2850
30
1250
30
950
30
1500
30
1250
1-82
5000
mximo salario
por departamento
3000 mayor de 2900$
DEPTNO MAX(SAL)
--------- --------10
5000
20
3000
2850
Exclusin de Resultados de un
Grupo:
Use la clusula
Clusula
HAVING
HAVING
para restringir grupos:
Los registros son agrupados.
Se aplica la funcin de grupo.
Los grupos que se corresponden con la
column, group_function
table
condition]
group_by_expression]
group_condition]
column];
Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002
SELECT
FROM
GROUP BY
HAVING
deptno, max(sal)
emp
deptno
max(sal)>2900;
DEPTNO MAX(SAL)
--------- --------10
5000
20
3000
1-84
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
JOB
PAYROLL
--------- --------ANALYST
6000
MANAGER
8275
1-85
Anidamiento de Funciones de
Grupo
Visualizar la mxima media de salarios por
departamento:
SQL> SELECT
max(avg(sal))
2 FROM
emp
3 GROUP BY deptno;
MAX(AVG(SAL))
------------2916.6667
1-86
Resumen
SELECT
FROM
[WHERE
[GROUP BY
[HAVING
[ORDER BY
1-87
column, group_function
table
condition]
group_by_expression]
group_condition]
column];
Subconsultas
Objetivos
Al completar esta leccin, debera ser
capaz de hacer lo siguiente:
Describir los tipos de problemas que las
subconsultas pueden resolver.
Definir subconsultas.
Enumerar los tipos de subconsultas.
Escribir subconsultas que afecten a un
solo registro, o a ms de uno.
1-89
1-90
Subconsultas
SELECT
FROM
WHERE
select_list
table
expr operator
(SELECT
FROM
select_list
table);
1-91
1-92
Tipos de Subconsultas
Subconsulta mono-registro
Cons. Principal
Subquery
devuelve
CLERK
Subconsulta multi-registro
Cons. Principal
Subquery
devuelve
CLERK
MANAGER
Subconsulta multi-columna
Cons. Principal
Subquery
1-94
devuelve
CLERK
7900
MANAGER 7698
Subconsultas Mono-registro
Devuelven un nico registro.
Se utilizan operadores de comparacin.
Operador
1-95
Significado
Igual a
>
Mayor que
>=
<
Menor que
<=
<>
No igual a
SELECT
FROM
WHERE
AND
ENAME
ENAME
------------------MILLER
MILLER
1-96
ename, job
emp
job =
(SELECT
FROM
WHERE
sal >
(SELECT
FROM
WHERE
CLERK
job
emp
empno = 7369)
1100
sal
emp
empno = 7876);
JOB
JOB
----------------CLERK
CLERK
1-97
SQL> SELECT
2 FROM
3 WHERE
4
5
ENAME
ENAME
------------------SMITH
SMITH
JOB
SAL
JOB
SAL
----------------- ----------------CLERK
800
CLERK
800
800
MIN(sal)
emp);
La Clusula HAVING en
Subconsultas
SELECT
FROM
GROUP BY
HAVING
deptno, MIN(sal)
emp
deptno
MIN(sal) >
(SELECT
FROM
WHERE
800
MIN(sal)
emp
deptno = 20);
o
r
t
is
g
e
r
ti
l
u
m
ta
l
MIN(sal)
u
s
n
emp
o
deptno);bc
su
en
ro
ERROR:
t
ERROR:
s
i
ORA-01427:
single-row
subquery
returns
ORA-01427: single-row subquery greturns more
more than
than
e
one
r
one row
row
o
n
o
no
no rows
rows selected
selected
m
r
o
d
a
r
e
p
1-99
Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002
O
1-100
job
s
o
tr
s
i
g
re
e
v
l
(SELECT job
e
u
FROM
emp
v
e
d
WHERE
ename='SMYTHE');
O
N
ta
l
u
s
n
o
c
b
Su
La
Subconsultas Multi-registro
Devuelven ms de un registro.
Use comparadores multi-registro.
Operador
IN
ANY
ALL
1-101
Significado
SELECT
FROM
WHERE
AND
EMPNO
EMPNO
----------------7654
7654
7521
7521
1-102
ENAME
ENAME
------------------MARTIN
MARTIN
WARD
WARD
JOB
JOB
----------------SALESMAN
SALESMAN
SALESMAN
SALESMAN
ENAME
ENAME
------------------KING
KING
JONES
JONES
FORD
FORD
SCOTT
SCOTT
JOB
JOB
----------------PRESIDENT
PRESIDENT
MANAGER
MANAGER
ANALYST
ANALYST
ANALYST
ANALYST
Resumen
Las Subconsulas resultan muy tiles
cuando una consulta esta basada en
valores que no conocemos.
SELECT
FROM
WHERE
1-104
select_list
table
expr operator
(SELECT select_list
FROM
table);