Вы находитесь на странице: 1из 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
GRADE LOSAL HISAL --------- --------- --------DEPT 1 700 1200 DEPTNO DNAME LOC 2 1201 1400 --------- -------------- ---------3 1401 2000 10 ACCOUNTING NEW YORK 4 2001 3000 20 RESEARCH DALLAS 5 3001 9999 30 SALES CHICAGO 40 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 DEPTNO 7839 10 ENAME KING JOB PRESIDENT

Nombre Tabla : DEPT


DEPTNO 10 20 30 DNAME ACCOUNTING RESEARCH SALES LOC NEW YORK DALLAS CHICAGO

7698 7782 10 7566 1-6

BLAKE CLARK
JONES

MANAGER MANAGER

30

40

OPERATIONS

BOSTON

MANAGER Javier Balbuena / Jos 20 Manuel Ferrer. Curso 2.001 / 2.002

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

asignado a es representante de ventas para

EMPLOYEE #* id * last name o first name

Escenario

". . . 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

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

CUSTOMER #* id * name o phone

asignado a

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

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

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

EMPLOYEE #* number * name o job title

DEPARTMENT #* number * name o 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

3
MGR HIREDATE SAL

4
COMM DEPTNO ----------10 30 10 20 1400 300 30 30 30 30 500 30 20 20

------------- ------------ --------------------- -------- ---------------- ----------- -------------7839 KING 7698 BLAKE 7782 CLARK 7566 JONES 7654 MARTIN 7499 ALLEN PRESIDENT MANAGER MANAGER MANAGER SALESMAN SALESMAN 7839 7839 7839 7698 7698 7698 7698 7698 7566 7902 17-NOV-81 01-MAY-81 09-JUN-81 02-APR-81 28-SEP-81 20-FEB-81 08-SEP-81 03-DEC-81 22-FEB-81 03-DEC-81 17-DEC-80 5000 2850 2450 2975 1250 1600 1500 950 1250 3000 800

7844 TURNER SALESMAN 7900 JAMES 7521 WARD 7902 FORD 7369 SMITH CLERK SALESMAN ANALYST CLERK

7788
7876

SCOTT
ADAMS MILLER

ANALYST
CLERK CLERK

7566
7788 7782

09-DEC-82
12-JAN-83 23-JAN-82

3000
1100 1300

20
20 10

1
1-11

7934

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

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 : DEPT
DEPTNO 10 20 30 40 DNAME ACCOUNTING RESEARCH SALES OPERATIONS LOC NEW YORK DALLAS CHICAGO BOSTON EMPNO DEPTNO 7839 10 7698 ENAME KING BLAKE JOB PRESIDENT MANAGER 30

Nombre Tabla: EMP

7782 10 7566

CLARK
JONES

MANAGER
MANAGER 20

Primary Key
1-12

Foreign key

Primary key

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

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> SELECT loc 2 FROM dept;

La Sentencia se enva a la B.D.

B.D.

Resultado
LOC ------------NEW YORK DALLAS CHICAGO 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: HR Financials Manufacturing ...
Oracle Developer O. Discoverer Oracle Designer

SQL

PL/SQL

SQL* Plus

Oracle7/8

B.D.

Diccionario de Datos Tablas de Datos

1-20

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Comandos SQL
SELECT INSERT UPDATE DELETE CREATE ALTER DROP RENAME TRUNCATE COMMIT ROLLBACK SAVEPOINT GRANT REVOKE
1-21

Recuperacin de Datos

Manipulacin de Datos (DML)

Definicin de Datos (DDL)

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

Aplicacin

Otros DBMSs

Aplicacin

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

Oracle con PL/SQL

1-25

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Beneficios de PL/SQL
Modularizacin
Bloque Annimo
Proc./Func. Almacenada

DECLARE
Trigger de Aplicacin

BEGIN EXCEPTION

Proc./Func. de la Aplicacin

Trigger de B.D.

END;

Procedimiento Empaquetado

1-26

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 --------7839 7698 7782 7566 7654 7499 7844 7900 ENAME ---------KING BLAKE CLARK JONES MARTIN ALLEN TURNER JAMES JOB MGR HIREDATE SAL COMM DEPTNO --------- --------- --------- --------- --------- --------PRESIDENT 17-NOV-81 5000 10 MANAGER 7839 01-MAY-81 2850 30 MANAGER MANAGER SALESMAN SALESMAN SALESMAN CLERK 7839 7839 7698 7698 7698 7698 09-JUN-81 02-APR-81 28-SEP-81 20-FEB-81 08-SEP-81 03-DEC-81 1500 2975 1250 1600 1500 950 10 20 30 30 30 30

1400 300 0

DEPT
DEPTNO --------10 20 30 40

7521 DNAMEWARD 7902 FORD -------------7369 SMITH ACCOUNTING 7788 SCOTT RESEARCH 7876 SALESADAMS 7934 MILLER OPERATIONS

SALESMAN LOC ANALYST ---------CLERK NEW YORK ANALYST DALLAS CLERK CHICAGO CLERK BOSTON

7698 7566 7902 7566 7788 7782

22-FEB-81 03-DEC-81 17-DEC-80 09-DEC-82 12-JAN-83 23-JAN-82

1250 500 30 SALGRADE 3000 20 800 20 GRADE LOSAL HISAL 3000 --------- --------20 --------1100 1 20 700 1200 1300 2 10 1201 1400 3 1401 2000 4 2001 3000 5 3001 9999

1-29

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

Join

Tabla 1

Tabla 1
1-33

Tabla 2

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Sentencia Bsica SQL


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

SELECT identifica qu columnas

FROM identifica qu tablas

1-34

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 DNAME -------------ACCOUNTING RESEARCH SALES OPERATIONS LOC ------------NEW YORK DALLAS CHICAGO BOSTON

1-36

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 LOC ------------NEW YORK DALLAS CHICAGO BOSTON

1-37

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 + Descripcin Suma Resta

*
/

Multiplicacin
Divisin

1-39

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

1-41

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.


ename, job, comm emp;

SQL> SELECT 2 FROM

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

1-46

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 Details ------------------------KING is a PRESIDENT BLAKE is a MANAGER CLARK is a MANAGER JONES is a MANAGER MARTIN is a SALESMAN ... 14 rows 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> SELECT deptno 2 FROM 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. SQL*Plus Un entorno Propio de ORACLE Las palabras clave s pueden abreviarse Los comandos no pueden manipular valores en la B.D.

Sentencias SQL
1-55

Bfer SQL

Comandos SQL*Plus

SQL*Plus buffer

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Generalidades de SQL*Plus

1-56

Conectarse al SQL*Plus. Describir la estructura de las tablas. Ejecutar SQL desde SQL*Plus. Editar la sentencia SQL. Guardar las sentencias SQL en archivos. Ejecutar los archivos guardados. 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] tablename

1-58

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Visualizacin de la Estructura de una Tabla


SQL> DESCRIBE dept

Name Null? ----------------- -------DEPTNO NOT NULL DNAME LOC

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

1-59

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 FROM [DISTINCT] {*,column[alias],...} 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


JOB PRESIDENT MANAGER MANAGER MANAGER ... DEPTNO 10 30 10 20 KING BLAKE CLARK JONES

EMPNO ENAME 7839 7698 7782 7566 ...

recupera todos los empleados del departamento 10

EMP
EMPNO ENAME JOB ... DEPTNO 10 10 10

7839 KING PRESIDENT 7782 CLARK MANAGER 7934 MILLER CLERK

1-66

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

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

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

1-68

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. maysculas/minsculas y los valores de tipo fecha son sensibles al formato.

Los valores de tipo caracter son sensibles a


El formato de fecha por defecto es 'DD-MON-YY'.
SQL> SELECT 2 FROM 3 WHERE ename, job, deptno emp ename = 'JAMES';

1-69

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Operadores de Comparacin
Operador
= > >= < <= <>

Significado
Igual a Mayor que Mayor que o igual a Menor que Menor que o igual a No igual a

1-70

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


Operador BETWEEN ...AND... IN(list) LIKE IS NULL Significado Entre dos valores (inclusive)

Lista de valores Se ajusta a un patrn Es un valor nulo

1-72

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

Lower limit

Higher limit

1-73

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, ename, sal, mgr emp mgr IN (7902, 7566, 7788);

EMPNO --------7902 7369 7788 7876

ENAME SAL MGR ---------- --------- --------FORD 3000 7566 SMITH 800 7902 SCOTT 3000 7566 ADAMS 1100 7788

1-74

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 ename emp ename LIKE 'S%';

1-75

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 ---------JAMES WARD ename emp ename LIKE '_A%';

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
Operador AND OR Significado Devuelve TRUE si ambas condiciones son TRUE Devuelve TRUE si alguna de las condiciones es TRUE Devuelve TRUE si la siguiente condicin es FALSE

NOT

1-78

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, ename, job, sal emp sal>=1100 job='CLERK'; JOB SAL --------- --------CLERK 1100 CLERK 1300

EMPNO --------7876 7934

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

1-79

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

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

1-81

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, job, sal emp job='SALESMAN' job='PRESIDENT' sal>1500;

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

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

1-83

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, job, sal emp (job='SALESMAN' job='PRESIDENT') sal>1500;

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

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

1-84

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

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 en Orden Descendente

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 Alas de Columna

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.

Clasificacin por Mltiples Columnas

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 [DISTINCT] {*, column [alias], ...} table condition(s)] {column, expr, alias} [ASC|DESC]];

1-89

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

1-91

Funciones SQL
Entrada arg 1 Salida

Funcin Las Funciones Realizan Acciones

arg 2

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

Funciones a Nivel de Mltiples Filas

1-93

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

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 (column|expression, [arg1, arg2,...])

Funciones a Nivel de Fila: Sintaxis

1-94

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Funciones a Nivel de Fila


Character

General

Single-row functions

Number

Conversion

Date

1-95

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Funciones de Caracteres
Funciones de Caracteres

Funciones de Funciones de Conversin Manipulacin de Caracteres LOWER CONCAT

UPPER INITCAP

SUBSTR LENGTH INSTR LPAD

1-96

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Funciones de Conversin
Conversin de cadenas de caracteres
Funcin LOWER('Curso SQL') UPPER ('Curso SQL') INITCAP('Curso SQL') Resultado curso sql

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> SELECT empno, ename, deptno 2 FROM emp 3 WHERE ename = 'blake'; no rows selected SQL> SELECT 2 FROM 3 WHERE empno, ename, deptno emp LOWER(ename) = 'blake';

EMPNO ENAME DEPTNO --------- ---------- --------7698 BLAKE 30


1-98
Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Funciones de Manipulacin de Caracteres


Manipulacin de cadenas de caracteres
Funcin CONCAT('Good', 'String') SUBSTR('String',1,3) Str 6 3 ******5000 Resultado GoodString

LENGTH('String')
INSTR('String', 'r') LPAD(sal,10,'*')

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 CONCAT(ENAME,JOB) LENGTH(ENAME) INSTR(ENAME,'A') ------------------- ------------- ---------------MARTINSALESMAN 6 2 ALLENSALESMAN 5 1 TURNERSALESMAN 6 0 WARDSALESMAN 4 2

1-100

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Funciones Numricas
ROUND: Redondea un valor al decimal especificado
ROUND(45.926, 2) TRUNC: decimal especificado MOD:
1-101

45.93

Trunca un valor en el

TRUNC(45.926, 2)

45.92
Devuelve el resto de la

divisin 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

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

1-107

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Funciones de Fecha
FUNCION MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY ROUND TRUNC DESCRIPCION Nmero de meses entre dos fechas Agregar meses segn calendario, a una fecha Prximo da de la fecha especificada Ultimo da del mes Redondea una fecha Trunca una fecha

1-108

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')
1-109
Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

'30-SEP-95'

Uso de Funciones de Fecha

ROUND('25-JUL-95','MONTH')

01-AUG-95

ROUND('25-JUL-95','YEAR') TRUNC('25-JUL-95','MONTH') TRUNC('25-JUL-95','YEAR')

01-JAN-96 01-JUL-95 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

Conversin Explcita

1-111

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Conversin Implcita del Tipo de Dato


Para asignaciones, Oracle automticamente puede convertir:
De A

VARCHAR2 o CHAR
VARCHAR2 o CHAR

NUMBER
DATE

NUMBER
DATE
1-112

VARCHAR2
VARCHAR2
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 A

VARCHAR2 o CHAR
VARCHAR2 o CHAR

NUMBER
DATE

1-113

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Conversin Explcita del Tipo de Dato


TO_NUMBER TO_DATE

NUMBER

CHARACTER

DATE

TO_CHAR

TO_CHAR

1-114

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Funcin TO_CHAR con Fechas


TO_CHAR(date, 'fmt')

El formato:


1-115

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

Elementos del Modelo Formato de Fecha


YYYY YEAR MM MONTH DY DAY
1-116

Ao completo en nmero Ao en letras N del mes con dos dgitos Nombre completo del mes

Abreviatura de tres letras del da de la semana


Nombre completo del da
Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Elementos del Formato de Fechas


Obtencin de la hora: 15:45:32 PM

HH24:MI:SS AM

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 fourteenth

1-117

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


0-49 50-99 La fecha devuelta corresponde al siglo anterior al corriente. La fecha devuelta corresponde al siglo corriente.

Si los 2 dgitos del ao corriente estn

0-49

La fecha devuelta corresponde al siglo corriente. La fecha devuelta corresponde al siglo posterior al corriente.

50-99

1-118

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, 'fmt')

Use estos formatos con la funcin TO_CHAR para mostrar un carcter como un nmero.
9 0 Representa un nmero Fuerza a que se muestre el 0 (cero)

$
L . ,
1-120

Signo del dlar


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)

Convierte una cadena de caracteres a un formato de fecha usando la funcin TO_DATE


TO_DATE(char[, '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, search1, result1 [, search2, result2,...,] [, 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;
JOB SAL REVISED_SALARY --------- --------- -------------PRESIDENT 5000 5000 MANAGER 2850 3420 MANAGER 2450 2940 ... 14 rows selected.
1-126

SAL*1.1, SAL*1.15, SAL*1.20, SAL)

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

1-130

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 ENAME ----KING BLAKE ... DEPTNO ... -----... 10 ... 30 10

DEPT
DEPTNO -----10 20 30 40 DNAME ---------ACCOUNTING RESEARCH SALES OPERATIONS LOC -------NEW YORK DALLAS CHICAGO BOSTON

MILLER ...

EMPNO DEPTNO LOC ----- ------- -------7839 10 NEW YORK 7698 30 CHICAGO 7782 10 NEW YORK 7566 20 DALLAS 7654 30 CHICAGO 7499 30 CHICAGO ... 14 rows selected.
1-133
Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Qu es un JOIN?
Use un join para consultar datos de ms de una tabla.
SELECT FROM WHERE table.column, table.column table1, table2 table1.column1 = 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
-----7839 7698 ... 7934 ----KING BLAKE ... -----... 10 ... 30
10 MILLER ... -----10 20 30 40 ---------ACCOUNTING RESEARCH SALES OPERATIONS -------NEW YORK DALLAS CHICAGO BOSTON

Producto Cartesiano: 14*4=56 rows

ENAME DNAME --------------KING ACCOUNTING BLAKE ACCOUNTING ... KING RESEARCH BLAKE RESEARCH ... 56 rows selected.
Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

1-136

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

DEPT
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. LOC -------NEW YORK CHICAGO NEW YORK DALLAS CHICAGO CHICAGO CHICAGO CHICAGO CHICAGO DALLAS DALLAS

Primary key
1-138

Foreign key

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

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

1-140

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

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

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
NAME CUSTID ---------------JOCKSPORTS 100 TKB SPORT SHOP 101 VOLLYRITE 102 JUST TENNIS 103 K+T SPORTS 105 SHAPE UP 106 WOMENS SPORTS 107 ... ... 9 rows selected.

ORD
CUSTID ORDID ------- ------101 610 102 611 104 612 106 601 102 602 ITEM 106 604 ORDID ITEMID 106 605 ------ ------... 610 3 21 rows selected. 611 1 612 1 601 1 602 1 ... 64 rows selected.

1-143

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Non-Equijoins
EMP
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.

SALGRADE
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

1-144

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 ... DEPTNO -----10 30 10 20

DEPT
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 table.column, table.column FROM table1, table2 WHERE table1.column(+) = table2.column; SELECT table.column, table.column FROM table1, table2 WHERE table1.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 ------------------------------BLAKE works for KING CLARK works for KING JONES works for KING MARTIN works for BLAKE ... 13 rows selected.

1-150

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Resumen
SELECT FROM WHERE table.column, table.column table1, table2 table1.column1 = 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.
Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002


1-153

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

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

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

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%';

Uso de las Funciones AVG y SUM

AVG(SAL) MAX(SAL) MIN(SAL) SUM(SAL) -------- --------- --------- --------1400 1600 1250 5600

1-157

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Puede usar MIN y MAX para cualquier tipo de dato.


SQL> SELECT 2 FROM MIN(hiredate), MAX(hiredate) emp;

Uso de las Funciones MIN y MAX

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(*) --------6 COUNT(*) emp deptno = 30;

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) ----------4 COUNT(comm) emp deptno = 30;

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

media de DEPTNO AVG(SAL) 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 agrupado por ANALYST 3000 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 SELECT que no sea una funcin agregada, tiene que ser especificada en la clusula GROUP BY.
SQL> SELECT 2 FROM deptno, COUNT(ename) emp;

SELECT deptno, COUNT(ename) * ERROR at line 1: ORA-00937: not a single-group group function

1-169

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Consultas No vlidas Usando Funciones de Grupo


No puede usar una clusula WHERE para restringir grupos. Utilice la clusula HAVING para restringir grupos.
SQL> 2 3 4 SELECT FROM WHERE GROUP BY deptno, AVG(sal) emp AVG(sal) > 2000 deptno;

WHERE AVG(sal) > 2000 * ERROR at line 3: ORA-00934: group function is not allowed here
1-170
Javier Balbuena / 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

5000 mximo salario por departamento 3000 mayor de 2900$

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

2850

1-171

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 column, group_function table condition] group_by_expression] group_condition] column];

1-176

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

Cul es el salario de Jones?

1-179

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 ---------KING FORD 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 devuelve

Subquery

CLERK

Subconsulta multi-registro
Cons. Principal devuelve Subquery

CLERK MANAGER

Subconsulta multi-columna
Cons. Principal devuelve Subquery
1-183

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 ename, job emp job = (SELECT FROM WHERE sal > (SELECT FROM WHERE
CLERK

job emp empno = 7369)


1100

AND

sal emp empno = 7876);

ENAME JOB ---------- --------MILLER CLERK

1-185

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
800

MIN(sal) emp);

ENAME JOB SAL ---------- --------- --------SMITH CLERK 800

1-186

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

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

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);

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

MIN(sal) emp deptno);

ERROR: ORA-01427: single-row subquery returns more than one row no rows selected

1-188

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Funcionara esta Sentencia?


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

(SELECT job FROM emp WHERE ename='SMYTHE');

no rows selected

1-189

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Subconsultas Multi-registro
Devuelven ms de un registro. Use comparadores multi-registro.
Operador IN Significado Igual a los valores de cierta lista

ANY

Compara los valores con cada valor devuelto por la subconsulta


Compara los valores con cada uno de los valores devueltos por la subconsulta

ALL

1-190

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 empno, ename, job 1300 1100 emp 800 sal < ANY 950 (SELECT sal FROM emp WHERE job = 'CLERK') job <> 'CLERK';
JOB --------SALESMAN SALESMAN

AND

EMPNO --------7654 7521

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

1-191

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 --------7839 7566 7902 7788

empno, ename, job 2175 emp 2916.6667 sal > ALL (SELECT FROM GROUP BY
JOB --------PRESIDENT MANAGER ANALYST ANALYST

1566.6667

avg(sal) emp deptno)

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

1-192

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 select_list table expr operator (SELECT select_list FROM table);

1-193

Javier Balbuena / Jos Manuel Ferrer. Curso 2.001 / 2.002

Вам также может понравиться