Vous êtes sur la page 1sur 191

Introduccin

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Objetivos
Al completar esta leccin, debera ser capaz de
hacer lo siguiente:
Discutir los aspectos tericos y fsicos de
las bases de datos relacionales.
Describir la implementacin de Oracle como
RDBMS y ORDBMS.
Describir el papel de SQL en Oracle.

1-2

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Objetivos
Describir el propsito de PL/SQL.
Describir el usuario de PL/SQL para el
desarrollador, as como para el
administrador de la base de datos.
Explicar los beneficios de PL/SQL.

1-3

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Almacenamiento de Datos
SALGRADE
SALGRADE

DEPTNO
DEPTNO
----------------YORK
YORK
20
20
30
30
40
40

GRADE
LOSAL
HISAL
GRADE
LOSAL
HISAL
----------------- ----------------- ----------------DEPT
DEPT
11
700
1200
700
1200
DNAME
LOC
DNAME
LOC
22
1201
1400
1201
1400
--------------------------- ------------------33
1401
2000
1401
2000
10
NEW
10 ACCOUNTING
ACCOUNTING
NEW
44
2001
3000
2001
3000
55
3001
9999
3001
9999
RESEARCH
DALLAS
RESEARCH
DALLAS
SALES
CHICAGO
SALES
CHICAGO
OPERATIONS
BOSTON
OPERATIONS
BOSTON

Base de
Datos
Hoja de
Clculo
1-4

Archivo
Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Concepto de B.D. Relacional


El Dr. E. F. Codd propuso el modelo relacional
para sistemas de bases de datos en 1970.

Constituye la base para el sistema manejador


de bases de datos relacionales (RDBMS).

El modelo relacional contiene los siguientes


componentes:

Coleccin de objetos o relaciones


Conjunto de operaciones para actuar sobre
las relaciones

Integridad de datos por precisin y


consistencia

1-5

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Definicin de B.D. Relacional


Una Base de Datos Relacional es un
conjunto de relaciones o tablas bidimensionales.
Database

Nombre Tabla: EMP


EMPNO
EMPNO
7839
7839
7698
7698
7782
7782
7566
7566

1-6

ENAME
ENAME
KING
KING
BLAKE
BLAKE
CLARK
CLARK
JONES
JONES

JOB
JOB
PRESIDENT
PRESIDENT
MANAGER
MANAGER
MANAGER
MANAGER
MANAGER
MANAGER

DEPTNO
DEPTNO
10
10
30
30
10
10
20
20

Nombre Tabla : DEPT


DEPTNO
DEPTNO
10
10
20
20
30
30
40
40

DNAME
DNAME
ACCOUNTING
ACCOUNTING
RESEARCH
RESEARCH
SALES
SALES
OPERATIONS
OPERATIONS

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

LOC
LOC
NEW
NEW YORK
YORK
DALLAS
DALLAS
CHICAGO
CHICAGO
BOSTON
BOSTON

Modelos de Datos

Modelo del
Sistema
que el cliente
tiene en mente

Modelo de
Entidades
a partir del modelo
del cliente

Paso a las Tablas,


partiendo del modelo
de entidades

Servidor

Tablas en Disco
1-7

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Modelo Entidad-Relacin

Crear un diagrama entidad-relacin a partir de


especificaciones de la empresa.

CUSTOMER
#* id
*
name
o phone

Escenario

asignado a
es
representante
de ventas
para

EMPLOYEE
#* id
*
last name
o first name

". . . A un vendedor se le asigna uno o ms


clientes . . ."

". . . A algunos vendedores an no se le


han asignado clientes . . ."
1-8

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Convenciones para el Modelo ER


Entidad
Caja con bordes redondeados,
con nombre nico, singular,
en maysculas
Sinnimos entre parntesis

CUSTOMER
#* id
*
name
o phone

Atributo
Nombre singular en minsculas
Si es obligatorio se marca con *
Si es opcional se marca con "o"

EMPLOYEE
#* id
last name
es representante *
de ventas para o first name

asignado a

Identificador Unico (UID)


Primario marcado con "(*)"
Secundario marcado con "(#)"
1-9

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Convenciones para el Modelo ER


Entidad
Caja con bordes redondeados,
con nombre nico, singular,
en maysculas
Sinnimos entre parntesis

EMPLOYEE
EMPLOYEE
#*
number
#*
number
**
name
name
oo
job
job title
title

Atributo
Nombre singular en minsculas
Si es obligatorio se marca con *
Si es opcional se marca con "o"

DEPARTMENT
DEPARTMENT
#*
number
#*
number
**
name
name
oo
location
location

Identificador Unico (UID)


Primario marcado con "(*)"
Secundario marcado con "(#)"
1-10

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Terminologa de una B.D. Relacional


2

EMPNO ENAME

JOB

4
MGR

HIREDATE

SAL

COMM DEPTNO

------------- ------------ --------------------- -------- ---------------- ----------- --------------

1
1-11

7839 KING

PRESIDENT

7698 BLAKE

MANAGER

7782 CLARK

-----------

17-NOV-81

5000

10

7839

01-MAY-81

2850

30

MANAGER

7839

09-JUN-81

2450

10

7566 JONES

MANAGER

7839

02-APR-81

2975

20

7654 MARTIN

SALESMAN

7698

28-SEP-81

1250

1400

30

7499 ALLEN

SALESMAN

7698

20-FEB-81

1600

300

30

7844 TURNER SALESMAN

7698

08-SEP-81

1500

30

7900 JAMES

CLERK

7698

03-DEC-81

950

7521 WARD

SALESMAN

7698

22-FEB-81

1250

7902 FORD

ANALYST

7566

03-DEC-81

3000

20

7369

SMITH

CLERK

7902

17-DEC-80

800

20

7788

SCOTT

ANALYST

7566

09-DEC-82

3000

20

7876

ADAMS

CLERK

7788

12-JAN-83

1100

20

7934

MILLER

CLERK

7782

23-JAN-82

1300

10

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

30
500

30

Relaciones entre Tablas

Cada fila de datos en una tabla esta identificada


unvocamente por una clave primaria (Primary
Key: PK).

Se puede relacionar informacin de mltiples


tablas lgicamente usando claves forneas
(Foreign Key: FK).

Nombre Tabla: EMP


EMPNO
7839
7698
7782
7566

ENAME
KING
BLAKE
CLARK
JONES

Primary Key
1-12

Nombre Tabla : DEPT

JOB
PRESIDENT
MANAGER
MANAGER
MANAGER

DEPTNO
10
30
10
20

Foreign key

DEPTNO
10
20
30
40

DNAME
ACCOUNTING
RESEARCH
SALES
OPERATIONS

Primary key

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

LOC
NEW YORK
DALLAS
CHICAGO
BOSTON

Propiedades de las B.D.


Relacionales
Una Base de Datos Relacional:

Acceso y modificacin de objetos en la base


de datos ejecutando comandos del Lenguaje
de Consulta Estructurado (SQL).

Contiene una coleccin de tablas sin


punteros lgicos.

Utiliza un conjunto de operaciones.

1-13

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Comunicacin con un RDBMS


Usando SQL
Se introduce la
sentencia SQL
SQL>
SQL> SELECT
SELECT loc
loc
22 FROM
dept;
FROM
dept;

La Sentencia se
enva a la B.D.
B.D.

Resultado
LOC
LOC
------------------------NEW
NEW YORK
YORK
DALLAS
DALLAS
CHICAGO
CHICAGO
BOSTON
BOSTON
1-14

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Oracle8: Object Relational


Database Management System
Servidor

Tablas de
Usuario
1-15

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Diccionario
de Datos

Oracle8: Object Relational


Database Management System
Tipos de datos y objetos, definidos por
el usuario.
Compatible con Relacional 100%
Soporte multimedia y de LOBs
Prestaciones del servidor de alta
calidad.

1-16

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Definicin de un Objecto
Un objeto:
Es una persona, lugar o cosa.
Sabe cosas sobre si mismo y realiza
acciones.
Tiene una identidad.

Yo soy un reloj. S mi zona


horaria y puedo decirte la hora

1-17

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Usando un Objeto Modelo


Los objetos modelan la resolucin de un
problema.
El modelo est definido en trminos de
la interaccin entre los objetos.
Se acercan a la realidad.
Compra
Venta

Clientes
1-18

Negocio
Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Caractersticas de los Sist. de Objetos


Presentan informacin como objetos.
Clasifican a los objetos segn tipos.
Heredan cdigo y atributos.
Ocultan datos, cdigo y atributos.
Interactan con otros objetos.
Reconocen diferentes objetos sin
previo anlisis.
Interpretan el mismo comando de
diferentes maneras.
1-19

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Solucin Completa de ORACLE


Aplicaciones:
Aplicaciones:
HR
HR
Financials
Financials
Manufacturing
Manufacturing
...
...

SQL
SQL

Oracle7/8

Oracle
Oracle Developer
Developer
O.
O. Discoverer
Discoverer
Oracle
Oracle Designer
Designer

PL/SQL
PL/SQL

B.D.

SQL*
SQL* Plus
Plus

Diccionario
de Datos
Tablas de Datos

1-20

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Comandos SQL
SELECT

Recuperacin de Datos

INSERT
UPDATE
DELETE

Manipulacin de Datos (DML)

CREATE
ALTER
DROP
RENAME
TRUNCATE

Definicin de Datos (DDL)

COMMIT
ROLLBACK
SAVEPOINT
GRANT
REVOKE
1-21

Control de Transacciones

Control de Datos (DCL)

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Qu es PL/SQL?
PL/SQL es una extensin de SQL con
caractersticas de los lenguajes de prog.
Sentencias de manipulacin y consulta
de datos, se incluyen sin tener que
desarrollar programas.

1-22

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Entorno de PL/SQL
Motor PL/SQL
Bloque
PL/SQL

Bloque
PL/SQL

PL/SQL
SQL

Ejecutor de
Sentencias
Procedurales

Ejecutor de Sentencias SQL


Servidor Oracle8

1-23

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Beneficios de PL/SQL
Integracin

Aplicacin

Librera
Compartida
1-24

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Servidor
Oracle8

Beneficios de PL/SQL
Mejora del Rendimiento
SQL

Aplicacin
Aplicacin

SQL
SQL

Otros
Otros DBMSs
DBMSs

SQL

Aplicacin
Aplicacin

1-25

SQL
IF...THEN
SQL
ELSE
SQL
END IF;
SQL

Oracle
Oracle con
con
PL/SQL
PL/SQL

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Beneficios de PL/SQL
Modularizacin
Bloque
Bloque
Annimo
Annimo

Trigger
Trigger de
de
Aplicacin
Aplicacin

DECLARE
BEGIN
EXCEPTION

Trigger
Trigger de
de
B.D.
B.D.

1-26

END;

Proc./Func.
Proc./Func.
Almacenada
Almacenada

Proc./Func.
Proc./Func.
de
de la
la
Aplicacin
Aplicacin

Procedimiento
Procedimiento
Empaquetado
Empaquetado

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Beneficios de PL/SQL
Es portable.
Puede declarar identificadores.
Puede programar con las estructuras de
control de un lenguaje procedural.
Puede manejar errores.

1-27

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Beneficios de PL/SQL
Es portable.
Puede declarar identificadores.
Puede programar con las estructuras de
control de un lenguaje procedural.
Puede manejar errores.

1-28

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Tablas Utilizadas en el Curso


EMP
EMPNO
JOB
MGR
EMPNO ENAME
ENAME
JOB
MGR
----------------- ------------------- ----------------- ----------------7839
KING
PRESIDENT
7839 KING
PRESIDENT
7698
MANAGER
7839
7698 BLAKE
BLAKE
MANAGER
7839
7782
MANAGER
7839
7782 CLARK
CLARK
MANAGER
7839
7566
MANAGER
7839
7566 JONES
JONES
MANAGER
7839
7654
SALESMAN
7698
7654 MARTIN
MARTIN
SALESMAN
7698
7499
SALESMAN
7698
7499 ALLEN
ALLEN
SALESMAN
7698
7844
SALESMAN
7698
7844 TURNER
TURNER
SALESMAN
7698
7900
CLERK
7698
DEPT
7900 JAMES
JAMES
CLERK
7698
7521
WARD
SALESMAN
7698
7521
SALESMAN
7698
DEPTNO
LOC
DEPTNO DNAME
DNAMEWARD
LOC
7902
FORD
ANALYST
7566
7902
FORD
ANALYST
7566
-------------------------- -----------------------------------7369
SMITH
CLERK
7902
7369 10
SMITH
CLERK NEW
7902
ACCOUNTING
10
ACCOUNTING
NEW
7788
ANALYST
7566
7788 SCOTT
SCOTT
ANALYST
7566
YORK
YORK
7876
ADAMS
CLERK
7788
7876
ADAMS
CLERK
7788
20
DALLAS
20 RESEARCH
RESEARCH
DALLAS
7934
MILLER
CLERK
7782
7934
CLERK
7782
30
CHICAGO
30 SALES
SALESMILLER
CHICAGO
40
BOSTON
40 OPERATIONS
OPERATIONS
BOSTON

1-29

HIREDATE
SAL
COMM
DEPTNO
HIREDATE
SAL
COMM
DEPTNO
----------------- ----------------- ----------------- ----------------17-NOV-81
5000
10
17-NOV-81
5000
10
01-MAY-81
2850
30
01-MAY-81
2850
30
09-JUN-81
1500
10
09-JUN-81
1500
10
02-APR-81
2975
20
02-APR-81
2975
20
28-SEP-81
1250
1400
30
28-SEP-81
1250
1400
30
20-FEB-81
1600
300
30
20-FEB-81
1600
300
30
08-SEP-81
1500
00
30
08-SEP-81
1500
30
03-DEC-81
950
30
03-DEC-81
950
30
22-FEB-81
1250
500
30
22-FEB-81
1250
500
30
03-DEC-81
3000
20
03-DEC-81 SALGRADE
3000
20
17-DEC-80
800
20
17-DEC-80
800
20
GRADE
LOSAL
HISAL
GRADE
LOSAL
HISAL
09-DEC-82
3000
20
09-DEC-82 --------3000 --------20
----------------- ----------------12-JAN-83
1100
20
12-JAN-83
1100 11
20
700
1200
700
1200
23-JAN-82
1300
10
23-JAN-82
1300 22
10
1201
1400
1201
1400
33
1401
2000
1401
2000
44
2001
3000
2001
3000
55
3001
9999
3001
9999

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Resumen
Las B.D. Relacionales:
Compuestas de Relaciones.
Gestionadas por operadores relacionales.
Gobernadas por restricciones de integridad

de datos.
Oracle8 est basado en un ORDBMS Object
Relational Database Management System.
Oracle8 permite almacenar y gestionar
informacin por medio de SQL y PL/SQL.
1-30

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Escritura Bsica de
Sentencias SQL

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Objetivos
Al completar esta leccin, debera ser
capaz de hacer lo siguiente:
Enumerar las posibilidades de una
sentencia SELECT de SQL
Ejecutar una sentencia bsica SELECT
Diferenciar entre sentencias SQL y
comandos de SQL*PLUS

1-32

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

La Sentencia SELECT de SQL


Seleccin

Projeccin

Tabla 1

Tabla 1

Tabla 1
1-33

Join

Tabla 2

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Sentencia Bsica SQL


SELECT
SELECT
FROM
FROM

1-34

[DISTINCT]
[DISTINCT] {*,
{*, column
column [alias],...}
[alias],...}
table;
table;

SELECT identifica qu columnas


FROM identifica qu tablas

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Escritura de Sentencias SQL

Los Comandos pueden constar de una


o varias lneas.

Las tabulaciones e indentaciones


pueden ser usadas por comodidad.

Las abreviaturas y separacin de


palabras no estn permitidas.

Los Comandos no son case sensitive.

1-35

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Seleccin de Todas las


Columnas
SQL> SELECT *
2 FROM
dept;
DEPTNO
--------10
20
30
40

1-36

DNAME
-------------ACCOUNTING
RESEARCH
SALES
OPERATIONS

LOC
------------NEW YORK
DALLAS
CHICAGO
BOSTON

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Seleccin Especfica de Columnas


SQL> SELECT deptno, loc
2 FROM
dept;
DEPTNO
--------10
20
30
40

1-37

LOC
------------NEW YORK
DALLAS
CHICAGO
BOSTON

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Etiquetas de Columnas por Defecto


Justificacin de la etiqueta por defecto:
Izquierda: fechas y caracteres
Derecha: datos numricos
Las etiquetas por defecto se muestran
en maysculas.

1-38

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Expresiones Aritmticas
Crear expresiones sobre tipos de datos
NUMERICOS y FECHAS usando operadores.
Operador

1-39

Descripcin

Suma

Resta

Multiplicacin

Divisin

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Uso de Operadores Aritmticos


SQL> SELECT ename, sal, sal+300
2 FROM
emp;
ENAME
SAL
SAL+300
---------- --------- --------KING
5000
5300
BLAKE
2850
3150
CLARK
2450
2750
JONES
2975
3275
MARTIN
1250
1550
ALLEN
1600
1900
...
14 rows selected.

1-40

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Precedencia de Operadores

* / +

La multiplicacin y la divisin tienen


prioridad sobre la suma y la resta.

Los operadores de la misma prioridad


se evalan de izquierda a derecha.

Los parntesis pueden ser usados para


cambiar la prioridad de evaluacin y
para clarificar las sentencias.

1-41

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Precedencia de Operadores
SQL> SELECT ename, sal, 12*sal+100
2 FROM
emp;
ENAME
SAL 12*SAL+100
---------- --------- ---------KING
5000
60100
BLAKE
2850
34300
CLARK
2450
29500
JONES
2975
35800
MARTIN
1250
15100
ALLEN
1600
19300
...
14 rows selected.

1-42

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Uso de Parntesis
SQL> SELECT ename, sal, 12*(sal+100)
2 FROM
emp;
ENAME
SAL 12*(SAL+100)
---------- --------- ----------KING
5000
61200
BLAKE
2850
35400
CLARK
2450
30600
JONES
2975
36900
MARTIN
1250
16200
...
14 rows selected.

1-43

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Definicin del Valor NULL


NULL es un valor que es inaccesible, sin valor
desconocido o inaplicable.

NULL no representa ni un cero (0) ni un


espacio en blanco.

SQL> SELECT
2 FROM

ename, job, comm


emp;

ENAME
JOB
COMM
---------- --------- --------KING
PRESIDENT
BLAKE
MANAGER
...
TURNER
SALESMAN
0
...
14 rows selected.
1-44

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Valores NULL en
Expresiones Aritmticas
Las expresiones aritmticas que
contengan un Null se evaluan a Null.
SQL> select ename NAME, 12*sal+comm
2 from
emp
3 WHERE ename='KING';

NAME
12*SAL+COMM
---------- ----------KING

1-45

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Definicin de un Alias de Columna


Un Alias de columna renombra un
encabezamiento de columna.

Es til especialmente en clculos.


Sigue inmediatamente al nombre de la
columna.

Palabra clave opcional AS entre el nombre


de la columna y el alias.

Se requiere encerrar un alias entre comillas


dobles si contiene espacios en blanco,
caracteres especiales o es case sensitive.

1-46

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Uso de Alias de Columna


SQL> SELECT ename AS name, sal salary
2 FROM
emp;
NAME
SALARY
------------- --------...
SQL> SELECT ename "Name",
2
sal*12 "Annual Salary"
3 FROM
emp;
Name
Annual Salary
------------- ------------...
1-47

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Operador de Concatenacin
El operador de concatenacin:

Esta representado por dos barras


verticales (||).

Vincula columnas o cadenas de


caracteres con otras columnas.

Crea una columna resultado que es una


expresin de tipo caracter.

1-48

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Uso del
Operador de Concatenacin
SQL> SELECT
2 FROM

ename||job AS "Employees"
emp;

Employees
------------------KINGPRESIDENT
BLAKEMANAGER
CLARKMANAGER
JONESMANAGER
MARTINSALESMAN
ALLENSALESMAN
...
14 rows selected.
1-49

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Cadenas de Caracteres
Un literal es un caracter, expresin o
nmero incluido en la lista de la
clusula SELECT.

Los valores literales de tipo fecha y

caracter deben estar encerrados dentro


de comillas simples.

Por cada fila devuelta se genera una


cadena de caracteres.

1-50

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Uso de Cadenas de Caracteres


SQL> SELECT ename ||' '||'is a'||' '||job
2
AS "Employee Details"
3 FROM
emp;
Employee
Employee Details
Details
------------------------------------------------KING
KING is
is aa PRESIDENT
PRESIDENT
BLAKE
BLAKE is
is aa MANAGER
MANAGER
CLARK
CLARK is
is aa MANAGER
MANAGER
JONES
JONES is
is aa MANAGER
MANAGER
MARTIN
MARTIN is
is aa SALESMAN
SALESMAN
...
...
14
14 rows
rows selected.
selected.

1-51

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Filas Duplicadas
Las consultas, por defecto, muestran
todas las filas incluyendo las duplicadas.
SQL>
SQL>
22

SELECT
SELECT
FROM
FROM

deptno
deptno
emp;
emp;

DEPTNO
--------10
30
10
20
...
14 rows selected.

1-52

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Eliminacin de Filas Duplicadas


Las filas duplicadas se eliminan usando
DISTINCT en la clusula SELECT.
SQL> SELECT DISTINCT deptno
2 FROM
emp;

DEPTNO
--------10
20
30

1-53

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Interaccin SQL y SQL*Plus


Sentecias SQL

Servidor
SQL*Plus
Resultado de la Consulta

Bfer

Scripts
SQL
1-54

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Sentencias SQL Versus


Comandos SQL*Plus
SQL
Un lenguaje
Estndar ANSI
Las palabras clave no
pueden abreviarse
Las sentencias manip.
datos y definiciones de
tablas en la B.D.
Sentencias
SQL
1-55

Bfer
SQL

SQL*Plus
Un entorno
Propio de ORACLE
Las palabras clave s
pueden abreviarse
Los comandos no
pueden manipular
valores en la B.D.
Comandos
SQL*Plus

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

SQL*Plus
buffer

Generalidades de SQL*Plus

Conectarse al SQL*Plus.

Ejecutar los archivos guardados.

1-56

Describir la estructura de las tablas.


Ejecutar SQL desde SQL*Plus.
Editar la sentencia SQL.
Guardar las sentencias SQL en
archivos.
Cargar los comandos desde el archivo
al bfer para editarlos.
Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Conexin a SQL*Plus
Desde un entorno Windows:

Desde la lnea de comandos:


sqlplus [username[/password
[@database]]]
1-57

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Visualizacin de la Estructura
de una Tabla
Use el comando DESCRIBE de SQL*Plus
para visualizar la estructura de una tabla.
DESC[RIBE]
DESC[RIBE] tablename
tablename

1-58

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Visualizacin de la Estructura
de una Tabla
SQL>
SQL> DESCRIBE
DESCRIBE dept
dept
Name
Name
--------------------------------DEPTNO
DEPTNO
DNAME
DNAME
LOC
LOC

1-59

Null?
Null?
--------------NOT
NOT NULL
NULL

Type
Type
------NUMBER(2)
NUMBER(2)
VARCHAR2(14)
VARCHAR2(14)
VARCHAR2(13)
VARCHAR2(13)

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Comandos de Edicin SQL*Plus


A[PPEND] text
C[HANGE] / old / new
C[HANGE] / text /
CL[EAR] BUFF[ER]
DEL
DEL n
DEL m n
1-60

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

SQL*Plus Editing Commands


I[NPUT]
I[NPUT] text
L[IST]
L[IST] n
L[IST] m n
R[UN]
n
n text
0 text
1-61

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Comandos de Ficheros
SQL*Plus
SAVE filename
GET filename
START filename
@ filename
EDIT filename
SPOOL filename
EXIT
1-62

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Resumen
SELECT
SELECT
FROM
FROM

[DISTINCT]
[DISTINCT] {*,column[alias],...}
{*,column[alias],...}
table;
table;

Use Sql*Plus como un entorno, para:


Ejecutar sentencias SQL
Editar sentencias SQL

1-63

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Restriccin y Clasificacin
de los Datos

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Objetivos
Al completar esta leccin, debera ser
capaz de hacer lo siguiente:
Limitar los registros recuperados por
una consulta
Clasificar los registros recuperados por
una consulta

1-65

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

EMP

Limitar Filas por medio de


Selecciones

EMPNO ENAME
7839
7698
7782
7566
...

KING
BLAKE
CLARK
JONES

JOB

...

DEPTNO

PRESIDENT
MANAGER
MANAGER
MANAGER

10
30
10
20

recupera todos
los empleados del
departamento 10

EMP
EMPNO ENAME

JOB

7839 KING
PRESIDENT
7782 CLARK MANAGER
7934 MILLER CLERK

1-66

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

...

DEPTNO
10
10
10

Limiting Rows Selected


Restringir las filas recuperadas usando
la clusula WHERE.
SELECT
FROM
[WHERE

[DISTINCT] {*, column [alias], ...}


table
condition(s)];

La clusula WHERE se escribe despus


de la clusula FROM.

1-67

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Uso de la Clasula WHERE


SQL> SELECT ename, job, deptno
2 FROM
emp
3 WHERE job='CLERK';

ENAME
---------JAMES
SMITH
ADAMS
MILLER

1-68

JOB
DEPTNO
--------- --------CLERK
30
CLERK
20
CLERK
20
CLERK
10

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Cadenas de Caracteres y
Fechas
Las cadenas de caracteres o las fechas se
encierran entre comillas simples.

Los valores de tipo caracter son sensibles a

maysculas/minsculas y los valores de tipo


fecha son sensibles al formato.

El formato de fecha por defecto es 'DD-MON-YY'.


SQL>
SQL>
22
33

1-69

SELECT
SELECT
FROM
FROM
WHERE
WHERE

ename,
ename, job,
job, deptno
deptno
emp
emp
ename
ename == 'JAMES';
'JAMES';

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Operadores de Comparacin
Operador

1-70

Significado

Igual a

>

Mayor que

>=

Mayor que o igual a

<

Menor que

<=

Menor que o igual a

<>

No igual a

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Uso de Operadores de
Comparacin
SQL> SELECT ename, sal, comm
2 FROM
emp
3 WHERE sal<=comm;

ENAME
SAL
COMM
---------- --------- --------MARTIN
1250
1400

1-71

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Otros Operadores de
Comparacin

1-72

Operador

Significado

BETWEEN
...AND...

Entre dos valores (inclusive)

IN(list)

Lista de valores

LIKE

Se ajusta a un patrn

IS NULL

Es un valor nulo

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Uso del Operador BETWEEN


Use el operador BETWEEN para visualizar
registros basados en un rango de valores.
SQL> SELECT
2 FROM
3 WHERE

ename, sal
emp
sal BETWEEN 1000 AND 1500;

ENAME
SAL
---------- --------MARTIN
1250
TURNER
1500
WARD
1250
ADAMS
1100
MILLER
1300

1-73

Lower
limit

Higher
limit

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Using the IN Operator


Use el operador IN para localizar valores
coincidentes con una determinada lista.
SQL> SELECT
2 FROM
3 WHERE

EMPNO
--------7902
7369
7788
7876
1-74

empno, ename, sal, mgr


emp
mgr IN (7902, 7566, 7788);

ENAME
SAL
MGR
---------- --------- --------FORD
3000
7566
SMITH
800
7902
SCOTT
3000
7566
ADAMS
1100
7788
Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Uso del Operador LIKE


Usar el operador LIKE para ejecutar

bsquedas en cadenas de caracteres


que incluyan comodines.

Las condiciones de bsqueda pueden


contener caracteres o nmeros.

"%" denota cero o varios caracteres.


"_" denota un solo caracter.
SQL> SELECT
2 FROM
3 WHERE
1-75

ename
emp
ename LIKE 'S%';

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Uso del Operador LIKE


Se puede combinar patrones de caracteres
SQL> SELECT
2 FROM
3 WHERE

ename
emp
ename LIKE '_A%';

ENAME
---------JAMES
WARD

Se puede usar el identificador ESCAPE


para buscar "%" o "_"
1-76

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Uso del Operador IS NULL


Verificar la presencia de valores nulos con
el operador IS NULL.
SQL> SELECT
2 FROM
3 WHERE

ename, mgr
emp
mgr IS NULL;

ENAME
MGR
---------- --------KING

1-77

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Operadores Lgicos

1-78

Operador

Significado

AND

Devuelve TRUE si ambas


condiciones son TRUE

OR

Devuelve TRUE si alguna de las


condiciones es TRUE

NOT

Devuelve TRUE si la siguiente


condicin es FALSE

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Uso del Operador AND


AND requiere que ambas condiciones sean TRUE
SQL>
2
3
4

SELECT
FROM
WHERE
AND

EMPNO
--------7876
7934

1-79

empno, ename, job, sal


emp
sal>=1100
job='CLERK';

ENAME
---------ADAMS
MILLER

JOB
SAL
--------- --------CLERK
1100
CLERK
1300

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Uso del Operador OR


OR requiere que alguna condicin sea TRUE
SQL>
2
3
4

SELECT
FROM
WHERE
OR

empno, ename, job, sal


emp
sal>=1100
job='CLERK';

EMPNO ENAME
JOB
SAL
--------- ---------- --------- --------7839
7698
7782
7566
7654

KING
BLAKE
CLARK
JONES
MARTIN

PRESIDENT
MANAGER
MANAGER
MANAGER
SALESMAN

5000
2850
2450
2975
1250

...
14 rows selected.
1-80

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Uso del Operador NOT


SQL> SELECT ename, job
2 FROM
emp
3 WHERE job NOT IN ('CLERK','MANAGER','ANALYST');

ENAME
---------KING
MARTIN
ALLEN
TURNER
WARD

1-81

JOB
--------PRESIDENT
SALESMAN
SALESMAN
SALESMAN
SALESMAN

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Reglas de Precedencia
Orden Evaluado
1
2
3
4

Operador
Todos los Operadores de
Comparacin
NOT
AND
OR

Utilice parntesis para modificar las reglas


de precedencia.
1-82

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Reglas de Precedencia
SQL>
2
3
4
5

SELECT
FROM
WHERE
OR
AND

ENAME
ENAME
------------------KING
KING
MARTIN
MARTIN
ALLEN
ALLEN
TURNER
TURNER
WARD
WARD

1-83

ename, job, sal


emp
job='SALESMAN'
job='PRESIDENT'
sal>1500;

JOB
SAL
JOB
SAL
----------------- ----------------PRESIDENT
5000
PRESIDENT
5000
SALESMAN
1250
SALESMAN
1250
SALESMAN
1600
SALESMAN
1600
SALESMAN
1500
SALESMAN
1500
SALESMAN
1250
SALESMAN
1250

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Reglas de Precedencia
Uso de parntesis para forzar prioridad.
SQL>
2
3
4
5

SELECT
FROM
WHERE
OR
AND

ENAME
ENAME
------------------KING
KING
ALLEN
ALLEN

1-84

ename, job, sal


emp
(job='SALESMAN'
job='PRESIDENT')
sal>1500;

JOB
SAL
JOB
SAL
----------------- ----------------PRESIDENT
5000
PRESIDENT
5000
SALESMAN
1600
SALESMAN
1600

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

La Clasula ORDER BY
Ordenar filas con la clusula ORDER BY.

ASC orden ascendente, constituye la opcin por


defecto.

DESC orden descendente.


La clusula ORDER BY siempre va al final del SELECT
SQL> SELECT
ename, job, deptno, hiredate
2 FROM
emp
3 ORDER BY hiredate;
ENAME
JOB
DEPTNO HIREDATE
---------- --------- --------- --------SMITH
CLERK
20 17-DEC-80
ALLEN
SALESMAN
30 20-FEB-81
...
14 rows selected.
1-85

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Clasificacin en Orden
Descendente

SQL> SELECT
ename, job, deptno, hiredate
2 FROM
emp
3 ORDER BY hiredate DESC;
ENAME
JOB
DEPTNO HIREDATE
---------- --------- --------- --------ADAMS
CLERK
20 12-JAN-83
SCOTT
ANALYST
20 09-DEC-82
MILLER
CLERK
10 23-JAN-82
JAMES
CLERK
30 03-DEC-81
FORD
ANALYST
20 03-DEC-81
KING
PRESIDENT
10 17-NOV-81
MARTIN
SALESMAN
30 28-SEP-81
...
14 rows selected.
1-86

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Clasificacin por Alas de


Columna

SQL> SELECT
empno, ename, sal*12 annsal
2 FROM
emp
3 ORDER BY annsal;
EMPNO ENAME
ANNSAL
--------- ---------- --------7369 SMITH
9600
7900 JAMES
11400
7876 ADAMS
13200
7654 MARTIN
15000
7521 WARD
15000
7934 MILLER
15600
7844 TURNER
18000
...
14 rows selected.
1-87

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Clasificacin por Mltiples


Columnas

La lista de ORDER BY es el orden de clasificacin


SQL> SELECT ename, deptno, sal
2 FROM
emp
3 ORDER BY deptno, sal DESC;
ENAME
DEPTNO
SAL
---------- --------- --------KING
10
5000
CLARK
10
2450
MILLER
10
1300
FORD
20
3000
...
14 rows selected.

Puede ordenar por una columna no seleccionada.


1-88

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Resumen
SELECT
FROM
[WHERE
[ORDER BY

1-89

[DISTINCT] {*, column [alias], ...}


table
condition(s)]
{column, expr, alias} [ASC|DESC]];

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Funciones a Nivel de Fila

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Objetivos
Al completar esta leccin, debera ser
capaz de hacer lo siguiente:

Explicar los diversos tipos de


funciones disponibles en SQL.

Incluir una variedad de funciones de


caracteres, numricas y de datos en
sentencias SELECT.

Explicar las funciones de conversin y


la manera en que podran ser usadas.

1-91

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Funciones SQL
Entrada

Salida

Funcin

arg 1
arg 2

Las Funciones
Realizan
Acciones

Valor
Resultado

arg n

1-92

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Dos Tipos de Funciones SQL

Funciones

Funciones a
Nivel de Fila

1-93

Funciones a
Nivel de
Mltiples Filas

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Funciones a Nivel de Fila:


Sintaxis
Manipulan tems de datos.
Aceptan argumentos y devuelven un valor.
Actan sobre cada fila retornada.
Devuelven un resultado por fila.
Modifican el tipo de datos.
Pueden estar anidadas.

Sintaxis:
function_name
function_name (column|expression,
(column|expression, [arg1,
[arg1, arg2,...])
arg2,...])

1-94

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Funciones a Nivel de Fila


Character

General

Conversion

1-95

Number

Single-row
functions

Date

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Funciones de Caracteres
Funciones de
Caracteres

Funciones de Conversin

Funciones de
Manipulacin de Caracteres

LOWER
UPPER

CONCAT
SUBSTR

INITCAP

LENGTH
INSTR
LPAD

1-96

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Funciones de Conversin
Conversin de cadenas de caracteres
Funcin

Resultado

LOWER('Curso SQL')

curso sql

UPPER ('Curso SQL')

CURSO SQL

INITCAP('Curso SQL')

Curso Sql

1-97

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Uso de Funciones de Conversin


Visualizar el nmero de empleado, nombre
y n de departamento de Blake.
SQL>
SQL> SELECT
SELECT empno,
empno, ename,
ename, deptno
deptno
22 FROM
emp
FROM
emp
33 WHERE
ename
WHERE
ename == 'blake';
'blake';
no
no rows
rows selected
selected
SQL> SELECT
2 FROM
3 WHERE
EMPNO
EMPNO
----------------7698
7698
1-98

empno, ename, deptno


emp
LOWER(ename) = 'blake';

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

Resultado

CONCAT('Good', 'String')

GoodString

SUBSTR('String',1,3)

Str

LENGTH('String')

INSTR('String', 'r')

LPAD(sal,10,'*')

******5000

1-99

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Uso de Funciones de
Manipulacin de Caracteres
SQL> SELECT ename, CONCAT (ename, job), LENGTH(ename),
2
INSTR(ename, 'A')
3 FROM
emp
4 WHERE SUBSTR(job,1,5) = 'SALES';
ENAME
---------MARTIN
ALLEN
TURNER
WARD

1-100

CONCAT(ENAME,JOB)
LENGTH(ENAME) INSTR(ENAME,'A')
------------------- ------------- ---------------MARTINSALESMAN
6
2
ALLENSALESMAN
5
1
TURNERSALESMAN
6
0
WARDSALESMAN
4
2

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

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-101

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Uso de la Funcin ROUND


Visualizar el valor 45.923 redondeado a
centenas, 0, y 10 posiciones decimales.
SQL> SELECT ROUND(45.923,2), ROUND(45.923,0),
2
ROUND(45.923,-1)
3 FROM
SYS.DUAL;

ROUND(45.923,2) ROUND(45.923,0) ROUND(45.923,-1)


--------------- -------------- ----------------45.92
46
50

1-102

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Uso de la Funcin TRUNC


Visualizar el valor 45.923 con TRUNC a
centenas, 0, y 10 posiciones decimales.
SQL> SELECT TRUNC(45.923,2), TRUNC(45.923),
2
TRUNC(45.923,-1)
3 FROM
SYS.DUAL;

TRUNC(45.923,2) TRUNC(45.923) TRUNC(45.923,-1)


--------------- ------------- --------------45.92
45
40

1-103

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Uso de la Funcin MOD


Calcular el resto de dividir el salario entre
la comisin de cada empleado, cuyo
trabajo sea VENDEDOR.
SQL> SELECT
2 FROM
3 WHERE

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


emp
job = 'SALESMAN';

ENAME
SAL
COMM MOD(SAL,COMM)
---------- --------- --------- ------------MARTIN
1250
1400
1250
ALLEN
1600
300
100
TURNER
1500
0
1500
WARD
1250
500
250
1-104

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Trabajando con Fechas


Oracle almacena fechas en un formato numrico
interno.

Siglo, ao, mes, da, horas, minutos,


segundos.

El formato de fecha por defecto es DD-MON-YY.


SYSDATE es una funcin que devuelve fecha y
hora.

DUAL es una tabla virtual de la Base de Datos,


que puede ser usada para inspeccionar
SYSDATE.

1-105

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Operadores Aritmticos de
Fechas
Sumar o restar un nmero a de una
fecha da por resultado una fecha.

Restar dos fechas para encontrar la


cantidad de das entre esas fechas.

Sumar horas a una fecha dividiendo la


cantidad de horas por 24.

1-106

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Uso de Operadores Aritmticos


en Fechas
SQL> SELECT ename, (SYSDATE-hiredate)/7 WEEKS
2 FROM
emp
3 WHERE deptno = 10;

ENAME
---------KING
CLARK
MILLER

1-107

WEEKS
--------830.93709
853.93709
821.36566

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Funciones de Fecha

1-108

FUNCION

DESCRIPCION

MONTHS_BETWEEN

Nmero de meses entre dos


fechas

ADD_MONTHS

Agregar meses segn


calendario, a una fecha

NEXT_DAY

Prximo da de la fecha
especificada

LAST_DAY

Ultimo da del mes

ROUND

Redondea una fecha

TRUNC

Trunca una fecha

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Uso de Funciones de Fecha


MONTHS_BETWEEN ('01-SEP-95','11-JAN-94')
19.6774194
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'

1-109

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Uso de Funciones de Fecha

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-110

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Funciones de Conversin
Conversin de
Tipos de Datos

Conversin
Implcita

1-111

Conversin
Explcita

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Conversin Implcita del Tipo de


Dato
Para asignaciones, Oracle automticamente
puede convertir:
De

VARCHAR2 o CHAR

NUMBER

VARCHAR2 o CHAR

DATE

NUMBER

VARCHAR2

DATE

VARCHAR2

1-112

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Conversin Explcita del Tipo de


Dato
Para evaluar una expresin, Oracle
automticamente puede convertir:
De

VARCHAR2 o CHAR

NUMBER

VARCHAR2 o CHAR

DATE

1-113

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Conversin Explcita del Tipo de


Dato
TO_NUMBER

NUMBER

TO_CHAR

1-114

TO_DATE

CHARACTER

TO_CHAR

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

DATE

Funcin TO_CHAR con Fechas


TO_CHAR(date,
TO_CHAR(date, 'fmt')
'fmt')

El formato:

Debe estar encerrado entre comillas simples y


es sensible a maysculas/minsculas.

Puede incluir cualquier elemento de formato de


fecha vlido.

Tiene un elemento fm (fill mode) para eliminar

espacios en blanco de relleno o suprimir ceros


a la izquierda.

Est separado de la fecha por una coma.


1-115

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Elementos del Modelo Formato de Fecha


YYYY

Ao completo en nmero

YEAR

Ao en letras

MM

N del mes con dos dgitos

MONTH

Nombre completo del mes

DY

Abreviatura de tres letras del


da de la semana

DAY

Nombre completo del da

1-116

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Elementos del Formato de


Fechas

Obtencin de la hora:

HH24:MI:SS AM

15:45:32 PM

Aadir cadenas de caracteres encerrndolas


entre dobles comillas.

DD "of" MONTH
12 of OCTOBER
Sufijo que permita obtener el n del da en letra.
ddspth

1-117

fourteenth

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

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

Si los 2 dgitos especificados del ao estn


Si los 2
dgitos del
ao
corriente
estn

1-118

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.

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Funcin TO_CHAR con Fechas


SQL> SELECT ename,
2
TO CHAR(hiredate, 'fmDD Month YYYY') HIREDATE
3 FROM
emp;
ENAME
HIREDATE
---------- ----------------KING
17 November 1981
BLAKE
1 May 1981
CLARK
9 June 1981
JONES
2 April 1981
MARTIN
28 September 1981
ALLEN
20 February 1981
...
14 rows selected.
1-119

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Funcin TO_CHAR con Nmeros


TO_CHAR(number,
TO_CHAR(number, 'fmt')
'fmt')

Use estos formatos con la funcin


TO_CHAR para mostrar un carcter como
un nmero.

1-120

9
0

Representa un nmero
Fuerza a que se muestre el 0 (cero)

Signo del dlar

L
.
,

Usa el smbolo de moneda local


Imprime el punto decimal
Imprime el indicador de millar
Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

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-121

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

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)

Convierte una cadena de caracteres a


un formato de fecha usando la funcin
TO_DATE
TO_DATE(char[,
TO_DATE(char[, 'fmt'])
'fmt'])

1-122

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

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-123

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Uso de la Funcin NVL


SQL> SELECT ename, sal, comm, (sal*12)+NVL(comm,0)
2 FROM
emp;
ENAME
SAL
COMM (SAL*12)+NVL(COMM,0)
---------- --------- --------- -------------------KING
5000
60000
BLAKE
2850
34200
CLARK
2450
29400
JONES
2975
35700
MARTIN
1250
1400
16400
ALLEN
1600
300
19500
...
14 rows selected.

1-124

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

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-125

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Uso de la Funcin DECODE


SQL> SELECT job, sal,
2
DECODE(job, 'ANALYST'
3
'CLERK',
4
'MANAGER',
5
6
REVISED_SALARY
7 FROM
emp;

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-126

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Anudamiento de Funciones

Las funciones a nivel de fila pueden ser


anidadas hasta cualquier nivel.

Las funciones anidadas son evaluadas desde


el nivel ms profundo al nivel menos
profundo.

F3(F2(F1(col,arg1),arg2),arg3)
Paso 1 = Resultado 1
Paso 2 = Resultado 2
Paso 3 = Resultado 3

1-127

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

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-128

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

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-129

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Visin General de la Prctica


Crear consultas que requieran el uso de

funciones numricas, de caracteres y de


fechas.

Usar concatenacin con funciones.


Escribir consultas case insensitive para probar
la utilidad de las funciones de caracteres.

Ejecutar clculos sobre aos y meses de


servicio para un empleado.

Determinar la fecha de revisin para un


empleado.

1-130

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Visualizacin de Datos
a partir de Varias Tablas

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Objetivos
Al completar esta leccin, debera ser
capaz de hacer lo siguiente:

Escribir sentencias SELECT para acceder a


los datos desde una o ms tablas usando
equality y non-equality joins (combinaciones
por igualdad y por desigualdad).

Visualizar datos que no se cumpliran


normalmente con una condicin de join
usando outer joins (uniones externas).

Combinar (Join) una tabla consigo misma.

1-132

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Obtencin de Datos de Mltiples Tablas


EMP
EMPNO
-----7839
7698
...
7934

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
NEW
7839
10 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-133

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

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;

Escriba la condicin de join en la


clasula WHERE.
Preceda el nombre de la columna con el
de la tabla, cuando el mismo nombre de
columna, aparezca en ms de una tabla.
1-134

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

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.

Para evitar un producto cartesiano, se debe

incluir siempre una condicin de join vlida en


la clusula WHERE.

1-135

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

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-136

... DEPTNO
...
... ----------...
10
...
10
...
30
...
30
...
...

10
10

DEPTNO DNAME
LOC
----------- ------------------- --------------10
10 ACCOUNTING
ACCOUNTING NEW
NEW YORK
YORK
20
RESEARCH
DALLAS
20 RESEARCH
DALLAS
30
SALES
CHICAGO
30 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-137

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

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-138

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

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

LOC
-------NEW YORK
CHICAGO
NEW YORK
DALLAS
CHICAGO
CHICAGO
CHICAGO
CHICAGO
CHICAGO
DALLAS
DALLAS

Recuperacin de Registros con


Equijoins
SQL> SELECT
2
3 FROM
4 WHERE

emp.empno, emp.ename, emp.deptno,


dept.deptno, dept.loc
emp, dept
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
...
14 rows selected.

1-139

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Calificacin de
Nombres de Columna Ambiguos
Usar como prefijos los nombres de
tablas para calificar los nombres de
columnas que estn en varias tablas.

Mejorar el rendimiento usando como


prefijos los nombres de tablas.

Distinguir columnas que tienen nombres


idnticos pero pertenecen a diferentes
tablas usando alias de columnas.

1-140

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

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-141

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.

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

LOC
-------NEW YORK
CHICAGO
NEW YORK
DALLAS
CHICAGO
CHICAGO
CHICAGO
CHICAGO
CHICAGO
DALLAS
DALLAS

Uso de Alias de Tabla


Ayudan a simplificar las consultas
SQL> SELECT emp.empno, emp.ename, emp.deptno,
2
dept.deptno, dept.loc
3 FROM
emp, dept
4 WHERE emp.deptno=dept.deptno;

SQL> SELECT e.empno, e.ename, e.deptno,


2
d.deptno, d.loc
3 FROM
emp e, dept d
4 WHERE e.deptno=d.deptno;

1-142

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Combinando Ms de Dos Tablas


CUSTOMER

ORD

NAME
CUSTID
NAME
CUSTID
------------------------------JOCKSPORTS
100
JOCKSPORTS
100
TKB
SPORT
SHOP
101
TKB SPORT SHOP
101
VOLLYRITE
102
VOLLYRITE
102
JUST
103
JUST TENNIS
TENNIS
103
K+T
105
K+T SPORTS
SPORTS
105
SHAPE
106
SHAPE UP
UP
106
WOMENS
107
WOMENS SPORTS
SPORTS
107
...
...
...
...
99 rows
selected.
rows selected.

1-143

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.

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

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-144

GRADE LOSAL HISAL


----- ----- -----1
700
1200
2
1201
1400
3
1401
2000
4
2001
3000
5
3001
9999

el salario en la tabla
EMP, est entre el salario
ms bajo y el salario
ms alto de la tabla
SALGRADE

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Recuperacin de Registros con


Non-Equijoins
SQL>
2
3
4

SELECT
FROM
WHERE
BETWEEN

e.ename, e.sal, s.grade


emp e, salgrade s
e.sal
s.losal AND s.hisal;

ENAME
SAL
GRADE
---------- --------- --------JAMES
950
1
SMITH
800
1
ADAMS
1100
1
...
14 rows selected.

1-145

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

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-146

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

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 (+).
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(+);

1-147

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Uso de Outer Joins


SQL>
2
3
4

SELECT
FROM
WHERE
ORDER BY

e.ename, d.deptno, d.dname


emp e, dept d
e.deptno(+) = d.deptno
e.deptno;

ENAME
DEPTNO DNAME
---------- --------- ------------KING
10 ACCOUNTING
CLARK
10 ACCOUNTING
...
40 OPERATIONS
15 rows selected.

1-148

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

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

MGR en la tabla WORKER es igual a


EMPNO en la tabla MANAGER
1-149

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Combinacin de una Tabla


Consigo Misma
SQL> SELECT worker.ename||' works for '||manager.ename
2 FROM
emp worker, emp manager
3 WHERE worker.mgr = manager.empno;
WORKER.ENAME||'WORKSFOR'||MANAG
WORKER.ENAME||'WORKSFOR'||MANAG
------------------------------------------------------------BLAKE
BLAKE works
works for
for KING
KING
CLARK
CLARK works
works for
for KING
KING
JONES
JONES works
works for
for KING
KING
MARTIN
MARTIN works
works for
for BLAKE
BLAKE
...
...
13
13 rows
rows selected.
selected.

1-150

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

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;

Equijoin Non-equijoin Outer join Self join

1-151

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Datos Agregados por medio


de Funciones de Grupo

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Objetivos
Al completar esta leccin, debera ser
capaz de hacer lo siguiente:

Identificar las funciones de grupo


disponibles.

Explicar el uso de las funciones de


grupo.

Mostrar estadsticas para diferentes


grupos usando la clusula GROUP BY.

Incluir o excluir filas agrupadas usando


la clusula HAVING.

1-153

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Qu son las Funciones de


Las Funciones de Grupo operan sobre conjuntos de
Grupo?
registros para dar un resultado a nivel de grupo.
EMP
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-154

mximo salario
en la tabla EMP

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

MAX(SAL)
--------5000

Uso de las Funciones AVG y


SUM

Puede usar AVG y SUM para datos numricos.


SQL> SELECT
2
3 FROM
4 WHERE

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

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


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

1-157

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Uso de las Funciones MIN y


MAX

Puede usar MIN y MAX para cualquier tipo


de dato.
SQL> SELECT
2 FROM

MIN(hiredate), MAX(hiredate)
emp;

MIN(HIRED MAX(HIRED
--------- --------17-DEC-80 12-JAN-83

1-158

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Uso de la Funcin COUNT


COUNT(*) devuelve el n de registros en una
tabla.
SQL> SELECT
2 FROM
3 WHERE

COUNT(*)
emp
deptno = 30;

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

1-159

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Uso de la Funcin COUNT


COUNT(expr) devuelve el n de registros
no nulos en una tabla.
SQL> SELECT
2 FROM
3 WHERE

COUNT(comm)
emp
deptno = 30;

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

1-160

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Funciones de Grupo y Val. Nulos


Las Funciones de Grupo ignoran los
valores nulos de las columnas.
SQL> SELECT AVG(comm)
2 FROM
emp;

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

1-161

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Uso de la Funcin NVL con


Funciones de Grupo
La Funcin NVL fuerza a las funciones de
grupo a incluir valores nulos (null).
SQL> SELECT AVG(NVL(comm,0))
2 FROM
emp;

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

1-162

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Creando Grupos de Datos


EMP
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-163

2916.6667

DEPTNO AVG(SAL)
media de
salarios
------- --------en EMP
2175
10 2916.6667
para cada
20
2175
departamento
30 1566.6667
1566.6667

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Creando Grupos de Datos:


La Clusula GROUP BY
SELECT
FROM
[WHERE
[GROUP BY
[ORDER BY

column, group_function
table
condition]
group_by_expression]
column];

Divide los registros de una tabla en grupos


ms pequeos, por medio de GROUP BY.

1-164

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Uso de la Clusula GROUP BY


Todas las columnas mencionadas en la
SELECT que no son funciones de grupo,
tienen que estar en la clusula GROUP BY.
SQL> SELECT
deptno, AVG(sal)
2 FROM
emp
3 GROUP BY deptno;

DEPTNO AVG(SAL)
--------- --------10 2916.6667
20
2175
30 1566.6667
1-165

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Uso de la Clusula GROUP BY


La columna referencia por GROUP BY no
es necesario seleccionarla.
SQL> SELECT
AVG(sal)
2 FROM
emp
3 GROUP BY deptno;

AVG(SAL)
--------2916.6667
2175
1566.6667

1-166

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

EMP
DEPTNO
--------10
10
10
20
20
20
20
20
30
30
30
30
30
30
1-167

Agrupacin por Ms de Una


Columna
JOB
SAL
--------- --------MANAGER
2450
DEPTNO
PRESIDENT
5000
-------CLERK
1300
10
CLERK
800 suma de salarios
10
CLERK
1100
de EMP para
10
ANALYST
3000 cada oficio (job),
20
ANALYST
3000
agrupado por
20
departamento
MANAGER
2975
20
SALESMAN
1600
30
MANAGER
2850
30
SALESMAN
1250
30
CLERK
950
SALESMAN
1500
SALESMAN
1250
Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

JOB
SUM(SAL)
--------- --------CLERK
1300
MANAGER
2450
PRESIDENT
5000
ANALYST
6000
CLERK
1900
MANAGER
2975
CLERK
950
MANAGER
2850
SALESMAN
5600

Uso de la Clusula GROUP BY


sobre Mltiples Columnas
SQL> SELECT
deptno, job, sum(sal)
2 FROM
emp
3 GROUP BY deptno, job;

DEPTNO JOB
SUM(SAL)
--------- --------- --------10 CLERK
1300
10 MANAGER
2450
10 PRESIDENT
5000
20 ANALYST
6000
20 CLERK
1900
...
9 rows selected.
1-168

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Consultas No vlidas
Usando Funciones de Grupo
Cualquier columna o expresin en la
Y
SELECT que no sea una funcin agregada,P B
U
O
tiene que ser especificada en la clusula
R
G
a
GROUP BY.
ul
SQL>
SQL>
22

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
1-169
Javierl Balbuena / 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-170
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-171

5000
mximo salario
3000 por departamento
mayor de 2900$

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

2850

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Exclusin de Resultados de un
Grupo:
Clusula
HAVING
Use la clusula
HAVING
para restringir grupos:
Los registros son agrupados.
Se aplica la funcin de grupo.
Los grupos que se corresponden con la

clusula HAVING se visualizan.


SELECT
FROM
[WHERE
[GROUP BY
[HAVING
[ORDER BY
1-172

column, group_function
table
condition]
group_by_expression]
group_condition]
column];
Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Uso de la Clusula HAVING


SQL>
2
3
4

SELECT
FROM
GROUP BY
HAVING

deptno, max(sal)
emp
deptno
max(sal)>2900;

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

1-173

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Uso de la Clusula HAVING


SQL>
2
3
3
4
5

SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY

job, SUM(sal) PAYROLL


emp
job NOT LIKE 'SALES%'
job
SUM(sal)>5000
SUM(sal);

JOB
PAYROLL
--------- --------ANALYST
6000
MANAGER
8275

1-174

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

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-175

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Resumen
SELECT
FROM
[WHERE
[GROUP BY
[HAVING
[ORDER BY

1-176

column, group_function
table
condition]
group_by_expression]
group_condition]
column];

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Subconsultas

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

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-178

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Uso de una Subconsulta para


Resolver un Problema
Quin tiene un salario superior al de Jones?
Consulta Principal

Qu empleados tienen un salario


superior al salrio de Jones?
Subconsulta

1-179

Cul es el salario de Jones?

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Subconsultas
SELECT
FROM
WHERE

select_list
table
expr operator
(SELECT
FROM

select_list
table);

La subconsulta se ejecuta una vez y


antes de la consulta principal.

El resultado de la subconsulta es usado


por la consulta principal externa.

1-180

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Usando una Subconsulta


SQL> SELECT ename
2 FROM
emp
2975
3 WHERE sal >
4
(SELECT sal
5
FROM
emp
6
WHERE empno=7566);
ENAME
ENAME
------------------KING
KING
FORD
FORD
SCOTT
SCOTT

1-181

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Gua para el Uso de


Subconsultas
Encierre las subconsultas entre parntesis.
Una subconsulta debe aparecer a la
derecha del operador.
No aada una clusula ORDER BY a una
subconsulta.
Utilice operadores a nivel de fila para
subconsultas que devuelvan solo una fila.
Utilice operadores que actan sobre
varios registros para subconsultas que
devuelvan ms de una fila.
1-182

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

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-183

devuelve

CLERK
7900
MANAGER 7698

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Subconsultas Mono-registro
Devuelven un nico registro.
Se utilizan operadores de comparacin.
Operador

1-184

Significado

Igual a

>

Mayor que

>=

Mayor que o igual a

<

Menor que

<=

Menor que o igual a

<>

No igual a

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Ejecucin de Subc. Mono-registro


SQL>
2
3
4
5
6
7
8
9
10

SELECT
FROM
WHERE

AND

ENAME
ENAME
------------------MILLER
MILLER

1-185

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

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Uso de Funciones de Grupo


en una Subconsulta
SQL> SELECT
2 FROM
3 WHERE
4
5

ename, job, sal


emp
sal =
(SELECT
FROM

ENAME
ENAME
------------------SMITH
SMITH

JOB
SAL
JOB
SAL
----------------- ----------------CLERK
800
CLERK
800

1-186

800

MIN(sal)
emp);

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

La Clusula HAVING en
Subconsultas

El Servidor Oracle8 ejecuta primero las


subconsultas.
El Servidor Oracle8 devuelve el
resultado a la clusula HAVING de la
consulta principal.
SQL>
2
3
4
5
6
7
1-187

SELECT
FROM
GROUP BY
HAVING

deptno, MIN(sal)
emp
deptno
MIN(sal) >
(SELECT
FROM
WHERE

800

MIN(sal)
emp
deptno = 20);

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Qu est mal en esta


Sentencia?
SQL> SELECT empno, ename
2 FROM
emp
3 WHERE sal =
4
(SELECT
5
FROM
6
GROUP BY

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-188
Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002
O

Funcionara esta Sentencia?


SQL> SELECT ename,
2 FROM
emp
3 WHERE job =
4
5
6
no
no rows
rows selected
selected

1-189

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

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Subconsultas Multi-registro
Devuelven ms de un registro.
Use comparadores multi-registro.
Operador
IN

Igual a los valores de cierta lista

ANY

Compara los valores con cada valor


devuelto por la subconsulta

ALL

1-190

Significado

Compara los valores con cada uno de los


valores devueltos por la subconsulta

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Uso del Operador ANY en


Subconsultas Multi-registro
SQL>
2
3
4
5
6
7

SELECT
FROM
WHERE

AND

EMPNO
EMPNO
----------------7654
7654
7521
7521

1-191

empno, ename, job 1300


1100
emp
800
950
sal < ANY
(SELECT
sal
FROM
emp
WHERE
job = 'CLERK')
job <> 'CLERK';

ENAME
ENAME
------------------MARTIN
MARTIN
WARD
WARD

JOB
JOB
----------------SALESMAN
SALESMAN
SALESMAN
SALESMAN

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Uso del Operador ALL en


Subconsultas Multi-registro
SQL> SELECT
2 FROM
3 WHERE
4
5
6
EMPNO
EMPNO
----------------7839
7839
7566
7566
7902
7902
7788
7788
1-192

empno, ename, job 1566.6667


2175
emp
2916.6667
sal > ALL
(SELECT
avg(sal)
FROM
emp
GROUP BY
deptno)

ENAME
ENAME
------------------KING
KING
JONES
JONES
FORD
FORD
SCOTT
SCOTT

JOB
JOB
----------------PRESIDENT
PRESIDENT
MANAGER
MANAGER
ANALYST
ANALYST
ANALYST
ANALYST

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Resumen
Las Subconsulas resultan muy tiles
cuando una consulta esta basada en
valores que no conocemos.
SELECT
FROM
WHERE

1-193

select_list
table
expr operator
(SELECT select_list
FROM
table);

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Vous aimerez peut-être aussi