Vous êtes sur la page 1sur 71

Escuela de Ingeniera de Sistemas

Semana
Modificacin

05:

de una base de datos: Archivos, Grupos y


opciones. Data Definition Language (DDL) y Data
Manipulation Language (DML).

Fundamentos (1)
Structured Query Language
Diseado e implementado por IBM Research

Versin standard ANSI 1986: SQL-86 o SQL1


Versin standard revisada: SQL-92 o SQL2

Ventajas :
Conjunto de comandos nico y con sintaxis
conocida
Independencia de cmo se implementan las
funciones
2

Fundamentos (2)
Considerado el standard en las bases relacionales

Se est extendiendo con los conceptos de OO y otros


conceptos recientes de Bases de Datos.
Algunas desventajas :
No todos los DBMSs implementan exactamente la misma
sintaxis para todo comando
Algunos DBMSs implementan comandos adicionales propios
que agregan funcionalidad pero quitan portabilidad

Comandos SQL
DDL
CREATE
DROP
ALTER

DML
SELECT
INSERT
UPDATE
DELETE

DDL Tablas
Manejo de Tablas
1.
Restricciones de Integridad
2.
Tablas
Creacin
Modificacin
Eliminacin

DDL Restricciones de Integridad


Las siguientes restricciones implementan las categoras
mencionadas:
PRIMARY KEY
UNIQUE
FOREIGN KEY
NOT NULL

Observaciones
Constraints son mecanismos ya implementados en el DBMS
para proveer integridad sobre los datos.

DDL Restricciones de Integridad

Tipo de Integridad

Tipo de Constraint

Domain

DEFAULT
CHECK

Entity

PRIMARY KEY
UNIQUE
FOREIGN KEY

Referential

FOREIGN KEY
CHECK

DDL Restricciones de Integridad


Ej1
CREATE TABLE Empleados(
IdEmp INT NOT NULL PRIMARY KEY,
Apellido VARCHAR(30) NOT NULL,
Nombre VARCHAR(30) NOT NULL,
Direccion VARCHAR(100) NOT NULL,
FecNac DATETIME NOT NULL,
Salario MONEY NOT NULL CONSTRAINT check_salario CHECK (Salario > 0)
)

DDL Restricciones de Integridad


Ej5 : Todo libro se identifica por un ISBN. Todo libro es escrito por slo
UN autor
CREATE TABLE Autores (
idAutor INT NOT NULL PRIMARY KEY,
Nombre VARCHAR(100) NOT NULL);
CREATE TABLE Libros (
ISBN
INT NOT NULL PRIMARY KEY,
idAutor INT NOT NULL,
Nombre VARCHAR(100) NOT NULL,
Precio MONEY NOT NULL,
FOREIGN KEY (idAutor ) REFERENCES
Autores (idAutor ));

DDL Tablas

CREATE TABLE
Crea una nueva tabla.
Dependiendo del DBMS exigir crearla bajo un Esquema determinado.
Sintaxis :

CREATE TABLE table_name


( { < column_definition >
| < table_constraint > } [ ,...n ]
)
< column_definition > ::= column_name data_type
[ DEFAULT constant_expression ]
[ < column_constraint > ] [ ...n ]

10

DDL Tablas

CREATE TABLE (2)


(definicin de restricciones por COLUMNA)
< column_constraint > ::= [ CONSTRAINT constraint_name ]
{ [ NULL | NOT NULL ]
| [{PRIMARY KEY | UNIQUE }]
| [[ FOREIGN KEY ]
REFERENCES ref_table [ ( ref_column ) ]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ]
]
| CHECK ( logical_expression )
}

11

DDL Tablas

CREATE TABLE (3)


(definicin de restricciones a nivel de TABLA)
< table_constraint > ::= [ CONSTRAINT constraint_name ]
{ [ { PRIMARY KEY | UNIQUE }
{ ( column [ ASC | DESC ] [ ,...n ] ) } ]

| FOREIGN KEY [ ( column [ ,...n ] ) ]


REFERENCES ref_table [ ( ref_column [ ,...n ] ) ]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE| NO ACTION } ]
}

12

DDL Tablas
Ej:
PostgreSQL :
CREATE TABLE Empleados (
CI character(8) PRIMARY KEY ,
Nombre character varying(100),
Direccion character varying(200),
Fec_Nacimiento date
)
WITH ( OIDS=FALSE);
MS-SQLServer :
CREATE TABLE Empleados (
CI character(8) PRIMARY KEY ,
Nombre varchar(100),
Direccion varchar(200),
Fec_Nacimiento smalldatetime
);

MySQL :
CREATE TABLE Empleados (
CI character(8) PRIMARY
KEY ,
Nombre varchar(100),
Direccion varchar(200),
Fec_Nacimiento date
);

13

DDL Tablas
ALTER TABLE
Continuacin de sintaxis

ALTER TABLE
| DROP
{ [ CONSTRAINT ] constraint_name
| COLUMN column } [ ,...n ]
| { [ WITH CHECK | WITH NOCHECK ] CHECK |
CONSTRAINT

NOCHECK }

| { ENABLE | DISABLE } TRIGGER


}

14

DDL Tablas
ALTER TABLE : Ejemplos
Agregar una nueva columna
CREATE TABLE doc_exa ( column_a INT);
ALTER TABLE doc_exa ADD column_b VARCHAR(20) NULL ;

Eliminar una columna


CREATE TABLE doc_exb ( colA INT, colB VARCHAR(20) NULL) ;

ALTER TABLE doc_exb DROP COLUMN colB;

15

DDL Tablas Usos de ALTER (1)


1 - Crear claves forneas
La ciudad se identifica por un cdigo, pero un cdigo de ciudad puede
repetirse en diferentes departamentos (entidad dbil Ciudad)
CREATE TABLE DEPARTAMENTOS (
IdDep int primary key,
NomDep varchar(100) not null);
CREATE TABLE CIUDADES (
IdDep int,
IdCiud int,
NomCiud varchar(100) not null
CONSTRAINT PK_CIUDADES PRIMARY KEY(IdDep,IdCiud)
);
ALTER TABLE CIUDADES ADD CONSTRAINT FK_DEPTOS
FOREIGN KEY(IdDep)
REFERENCES DEPARTAMENTOS (IdDep);
16

DDL Tablas
DROP TABLE
Elimina :
La definicin de la tabla
Todos sus datos
Objetos asociados : ndices, triggers, constraints, especificaciones
de permisos

No siempre pueden eliminarse : solo cuando no existen constraints


de otras tablas hacia ella.
Cualquier vista o stored procedure referenciado deben ser
explcitamente eliminados antes con DROP VIEW o DROP
PROCEDURE.
No pueden eliminarse tablas del sistema
Sintaxis
DROP TABLE table_name
17

DML SELECT
SELECT
Sentencia nica de consulta en bases de datos
relacionales
Implementacin de operaciones vistas en Algebra
Relacional (seleccin , proyeccin, join, etc.)
Permite obtener datos de varias tablas
simultneamente.
Los resultados siempre sern conjuntos de tuplas :
No necesariamente se devuelven en orden.
La ejecucin de esta sentencia NO MODIFICA dato
alguno ni genera cambios en la base.
Puede afectar el rendimiento general del DBMS si se hace
descuidadamente

18

DML SELECT

Formato de la sentencia :
SELECT [ALL|DISTINCT] columnas deseadas
FROM tablas
[WHERE condicin]
[GROUP BY lista-nombre-columna o lista-posicin]
[HAVING condicin de grupo]
[ORDER BY nombre-columna o posicin]

19

DML SELECT
Seleccionando todas las columnas

Ejemplo:
SELECT * FROM SECCIONES
IdSec

NomSec

IdSecSup

Directorio

Tecnologia

Marketing

Ventas

Finanzas

20

DML SELECT
Seleccionando columnas especficas (proyeccion)
Ejemplo:
SELECT NomEmp, Direccion FROM EMPLEADOS
NomEmp

Direccion

Juan Perez

Sarando 619 apto. 101

Roberto Martnez

Tiburcio Gomez 1420

Sandra Perez

Of. 17 m. S/N

Mariana de Leon

Ruta 8 Km. 28 Paraje El Grillo

Andres Gomez

Cno. Del Andaluz Km. 8

21

DML SELECT
Seleccionando valores nicos:
Ejemplo:
SELECT cuenta
FROM Movimientos

SELECT DISTINCT cuenta


FROM Movimientos

CUENTA
10002
10002
10004
10002
10003
10004

CUENTA
10002
10004
10003

22

DML SELECT : WHERE


La clusula WHERE:
Especifica un criterio de seleccin de registros a ver (seleccin)
SELECT lista_de_columnas
FROM nombre_de_tablas
WHERE condicin
SELECT cliente, cuenta, producto
FROM
cuentas
WHERE producto = 1

SELECT cliente, cuenta, producto


FROM
cuentas
WHERE producto <> 1

CLIENTE CUENTA

CLIENTE CUENTA

10002
10002
10004

100
125
789

PRODUCTO
1
1
1

10015
10003
10004

110
351
454

PRODUCTO
6
5
2

23

DML SELECT : WHERE


Delimitadores
En Strings o Fechas suelen ser comillas dobles
o apstrofes
Se usan para delimitar los literales usados en
el SELECT y evitar la confusin entre el nombre
de una columna y su contenido:
SELECT cliente, nombre

Ej:

FROM clientes
WHERE apellido = PEREZ

FecNacimiento = 01/01/2001
CLIENTE
apellido = PEREZ
10007
CI >= 1000000-0
10008

10001

APELLIDO
PEREZ
PEREZ
PEREZ

24

DML Operadores Relacionales


Significado

Igual
No igual

Simbolo

Ejemplo

Cuenta = 12003

<> , !=

Cuenta <> 12003

Mayor que

>

FecNac > 01/01/2001

Menor que

<

FecNac < 01/01/2001

Mayor o igual

>=

Saldo >= 12000

Menor o igual

<=

Saldo <= 12000

Pertenece a una lista

IN

Apellido IN (PEREZ,MARTINEZ)

BETWEEN

Sueldo BETWEEN 12000 and 24000

En un rango de valores
Contiene un string

LIKE

Nombre LIKE %JUAN%

25

DML Uso del NULL


SELECT persona, direccion
FROM personas
WHERE direccion IS NULL

SELECT persona, direccion


FROM personas
WHERE direccion IS NOT NULL

PERSONA DIRECCIN

PERSONA DIRECCIN

10045
10063
10036

10015
10034
10030

18 DE JULIO 2323
18 DE JULIO 2325
18 DE JULIO 2324

Dependiendo del
programa de consulta
puede mostrar NADA o la
palabra NULL
26

DML Operadores Lgicos


Operador

Significado

AND

Devuelve TRUE (verdadero) cuando ambas condiciones son verdaderas

OR

Devuelve TRUE (verdadero) cuando al menos UNA de las 2 condiciones es


verdadera

NOT

Devuelve la negacin de la condicin

IMPORTANTE : Los operadores poseen prioridad de


asociacin.
El AND posee la ms alta prioridad.
Si necesitamos condiciones complejas con AND y OR
debemos utilizar PARNTESIS.

27

DML Operadores Lgicos


1) Listar las personas que viven en La Paloma
el departamento de Rocha).

(en

SELECT persona, nombre


FROM personas
WHERE ciudad = La Paloma
AND departamento = Rocha

2) Listar las personas que viven en Rocha o Durazno.


SELECT persona,nombre
FROM personas
WHERE departamento = Rocha
OR departamento = Durazno

28

DML Operadores Lgicos


3) Ejemplo combinado de AND y OR
Cuales son los ttulos de las pelculas del estudio MGM que fueron filmadas
luego de 1970 cuya duracin es menor a 90 minutos?
Incorrecto :
SELECT NomPelicula
FROM Peliculas
WHERE anio > 1970 OR duracion < 90 AND NomEstudio = MGM

Error : el AND tiene mayor precedencia , el compilador entiende


anio > 1970 OR (duracion < 90 AND NomEstudio = MGM)
Correcto :
SELECT NomPelicula
FROM Peliculas
WHERE (anio > 1970 OR duracion < 90) AND NomEstudio = MGM

29

DML Ms bsquedas
Buscando en un rango de valores (BETWEEN)
2 Ejemplos equivalentes:
SELECT fecha,cuenta,importe
FROM movimientos
WHERE sucursal = 1 AND
(importe >= 10000 AND
importe <= 20000)
SELECT fecha,cuenta,importe
FROM movimientos
WHERE sucursal = 1 AND
importe BETWEEN 10000 AND 20000

30

DML Ms bsquedas
Buscando en un conjunto de valores (IN)
2 Ejemplos equivalentes:
SELECT cliente,nombre
FROM clientes
WHERE cliente = 10052
OR cliente = 10035
OR cliente = 10028
OR cliente = 10068
SELECT cliente,nombre
FROM clientes
WHERE cliente IN (10052,10035,10028,10068)

31

DML Ms bsquedas : LIKE (1)


Uso del operador LIKE : busquedas por caracteres o patrones
Mascara

Significado

% (En Access es *)

Equivale a cero o ms caracteres cualesquiera.

_ (guin inferior)

Representa a UN caracter cualquiera.

[v1-v2]

Intervalo de valores posibles, una ocurrencia

^[v1-v2]

Excluye el intervalo de valores, una ocurrencia

32

DML Uso de LIKE (2)


Bsquedas en Strings (char, varchar, char varying, etc.)
Ej: Nombres que finalizan en Prez
SELECT cliente, nombre
FROM clientes
WHERE
nombre LIKE %Perez
CLIENTE
10002
10013
10016
10012

NOMBRE
Juan Perez
Pedro Perez
Alberto Perez
Francisco Perez

33

DML Uso de LIKE (3)


Bsquedas en Strings (char, varchar, char varying, etc.)
Nombres que terminan en Pere y el ltimo carcter es cualquiera:

SELECT cliente,nombre
FROM clientes
WHERE nombre LIKE %Pere_
CLIENTE
10002
10013
10016
10012
10022

NOMBRE
Juan Perez
Pedro Perez
Alberto Perez
Francisco Perez
Luiz Peres

34

DML Uso de LIKE (4)


Otros ejemplos
SELECT cliente,nombre
FROM clientes
WHERE Nombre
LIKE [a-zA-Z]%Pere_

SELECT cliente,nombre
FROM clientes
WHERE Nombre
LIKE ^[A-J]%Pere_

CLIENTE
10002
10013
10016
10012
10044
10022

CLIENTE
10013
10022

NOMBRE
Juan Perez
Pedro Perez
Alberto Perez
Francisco Perez
Frank Peret
Luiz Peres

NOMBRE
Pedro Perez
Luiz Peres

35

DML La clusula ORDER BY


SELECT no devuelve los registros en algun orden preestablecido
ORDER BY indica en que orden quiero que muestre el resultado
Pueden ser varias columnas, en ese caso se respeta el orden de
izquierda a derecha.
ASC o DESC indican Ascendente o Descendente, ASC es el default
Sintaxis

SELECT campos
FROM tablas
[WHERE condicin]
...
ORDER BY nombre-columnas o posiciones [ASC | DESC]

36

DML La clusula ORDER BY


Un ejemplo

SELECT
cliente, nombre
FROM
clientes
WHERE
nombre LIKE %Perez
ORDER BY nombre ASC

CLIENTE
10016
10034
10012
10002
10022
10013

NOMBRE
Alberto Perez
Francisco Perez
Francisco Perez
Juan Perez
Luiz Peres
Pedro Perez

37

DML Operadores Aritmticos


Permiten formar expresiones complejas
Utilidad :
Devolver valores calculados (no incluidos en campos)
Expresar condiciones (en WHERE o HAVING)
Nuevos campos en Vistas
Operadores:
+ suma
- resta
* multiplicacin
/ divisin
% mdulo (resto)

38

DML Operadores Aritmticos


Ejemplo 1
Necesitaria ver la cotizacion de las monedas y cuanto sera si subieran todas un 5%

SELECT
moneda, cotizacin, cotizacin * 1.05
FROM
cotizaciones
ORDER BY cotizacion DESC
MONEDA
1
4
3
5

COTIZACION
15,70
2,70
2,20
0,89

(expression)
16.485
2.835
2.31
0.9345

39

DML Operadores Aritmticos


Ejemplo 2
Quiero todas los articulos cuyo precio de compra sea menor al 80% del
precio de venta
Select *
From ARTICULOS
Where precio_compra < (precio_venta * 0.8)

40

DML Etiquetas
Los campos calculados devueltos en SELECT no poseen nombre : se
les puede inventar un nombre on-the-fly
select moneda, cotizacin,
nueva_cotizacion = cotizacin * 1.05
from cotizaciones
where moneda <> moneda_val
ORDER BY nueva_cotizacion DESC

Tambien pueden utilizarse para presentar otro nombre para el campo


:
select Codigo Articulo = IdArt, Nombre Articulo = NomArt
from ARTICULOS
where .

41

DML Joins
Permite recuperar informacin de varias tablas vinculadas lgicamente
entre si.
Implementa la operacin Join del Algebra Relacional.
Ej: Quiero saber todos los datos de los Clientes ms sus N de cuenta
Tengo las tablas :
CLIENTES (nro_cliente, nom_cliente, direccion)
CUENTAS (nro_cliente,nro_cuenta, cod_moneda)
Listamos todos los datos de
Clientes + N de Cuenta

Consulta con Join :

SELECT Clientes.*, Cuentas.nro_cuenta


FROM Clientes , Cuentas
WHERE Clientes.nro_cliente = Cuentas.nro_cliente

Incluimos 2 tablas en el FROM

Obligatorio : condicin de Join

42

DML Joins : Que son ?


Es la implementacin del Producto Cartesiano (T1 x T2) + Seleccin
Si no se especifica una condicin el conjunto resultante no posee sentido
prctico.
Clientes

Nro_cliente

Nom_cliente

Direccin

1000

Ana

Dir1

1100

Pedro

1200
1300

Select *
From Clientes, Cuentas

Solo tienen sentido los que


coinciden en nro_cliente

Cuentas
Nro_cliente

Nro_cuenta

Cod_moneda

Dir2

1000

3521

Maria

Dir3

1200

3687

Roberto

Dir4

Nro_cliente

Nom_cliente

Direccin

Nro_cliente

Nro_cuenta

Cod_moneda

1000

Ana

Dir1

1000

3521

1000

Ana

Dir1

1200

3687

1100

Pedro

Dir2

1000

3521

1100

Pedro

Dir2

1200

3687

1200

Maria

Dir3

1000

3521

1200

Maria

Dir3

1200

3687

1300

Roberto

Dir4

1000

3521

1300

Roberto

Dir4

1200

3687

43

DML Joins : Que son ?


Aplicando la condicin de Join :
Select *
From Clientes, Cuentas
Where Clientes.nro_cliente = Cuentas.nro_cliente
Nro_cliente

Nom_cliente

Direccin

Nro_cliente

Nro_cuenta

Cod_moneda

1000

Ana

Dir1

1000

3521

1200

Maria

Dir3

1200

3687

El campo Nro_cliente aparece 2 veces : uno por cada tabla donde aparece
Solucion :
a) Exponer en el SELECT solo los campos que queremos ver
b) Utilizar ALIAS (opcional)

44

DML Joins : Alias


Son un modo de renombrar las tablas para mayor comodidad
Permite hacer ms legible joins de varias tablas.

Ej: Listado de todos los Clientes con su N de cuenta y moneda


SELECT CLI.nom_cliente, CU.nro_cuenta, M.nom_moneda
FROM Clientes CLI, Cuentas CU, Monedas M
WHERE
CLI.nro_cliente = CU.nro_cliente
AND CU.cod_moneda = M.cod_moneda

45

DML Sintaxis ANSI del Join


SELECT Cuentas.*, Clientes.nro_cliente, Clientes.nom_cliente
FROM
Clientes, Cuentas
WHERE Cuentas.nro_cliente = Clientes.nro_cliente
and Clientes.nom_cliente like %PEREZ%;

46

Creando un JOIN:

Usualmente se desea recuperar informacin de ms de una tabla.


Por ejemplo:
CLIENTES

CUENTAS

Cliente 10001

Cliente 10001

Cliente 10002
...

Cliente 10050

Cliente 10001
Cliente 10001

Cliente 10002

47

Creacin de JOINs
1 creacin del Producto Cartesiano
2 refinamiento aplicando restricciones y
eliminando filas sin significado relevante
incluyendo una clasula WHERE vlida

48

Informacin adicional en las clusulas


de la sentencia Select:
SELECT Indicar que columnas se quiere seleccionar

de cada una de las tablas

FROM

Especificar las tablas de las que se esta


seleccionando informacion en la SELECT.

WHERE Indicar las columnas de las tablas

seleccionadas que se igualarn para


establecer el join.
49

Consideraciones
Clave Primaria (Primary Key)
Se define como el conjunto de 1 o ms campos de un
registro que conforman su clave, determinando la
unicidad de cada fila en la tabla.

Clave Externa (Foreign Key)


Asocia los campos de una tabla con un conjunto
idntico de campos, definidos como Clave Primaria en
otra tabla. Esta asociacin permite el chequeo de
integridad referencial y actualizaciones automticas.

50

Algunas particularidades

Primary Key Foreign Key


Es muy comn realizar joins entre tablas que se encuentran en
una Relacin de 1 a muchos.

Las columnas que se igualarn para establecer el join no tienen


porque tener el mismo nombre.
NOTA: Recordemos que el valor null significa sin valor o
desconocido. A traves de l no se puede hacer un join.
El orden en el que se escriben las condiciones del join no
afecta el significado del mismo.
51

Equi-Join:
Theta-Join basado en condicin de igualdad
S(C,D)

R(A,B)
A
3
5

C
2
6

B
4
7

R.B=S.D

RS
R.A

R.B

S.C

S.D

3
3
5
5

4
4
7
7

2
6
2
6

7
8
7
8

D
7
8

S
Resultado
R.A
5

R.B
7

S.C
2

S.D
7

52

Ms sobre el ejemplo:
SELECT
clientes.cliente,clientes.nombr
e,
cuenta, moneda, saldo
FROM
clientes, cuentas
WHERE clientes.cliente =
cuentas.cliente;

Problema?
53

Si el cliente No tiene cuenta, no figura en el resultado

cliente
10007
10007
10009
10010
10010
10011

nombre
CUENTA
CUENTA
CUENTA
CUENTA
CUENTA
CUENTA

cuenta moneda
10007
10007
10009
10010
10010
10011

100071
100072
100092
100101
100102
100112

saldo

1
51112.31000000
1 -31484.56000000
1
-5468.72000000
1 -425920.75000000
1
0.00000000
1
0.00000000

54

Un error comn:
SELECT cliente, clientes.nombre, cuenta,
moneda, saldo
FROM
clientes, cuentas
WHERE clientes.cliente = cuentas.cliente;
Columna ambigua, existe en ambas tablas.

324: Ambiguous column (cliente).

55

Natural Join
Emp (name, dept)
Name
Jack
Tom

Emp

Name
Jack
Tom
Mary

Dept
Physics
ICS

Addr
Irvine
LA
Riverside

Contact: Todos los nombre, departamentos y direcciones

Emp Contact
Resultado

Contact (name, addr)

Emp.name
Jack
Jack
Jack
Tom
Tom
Tom

Name
Jack
Tom

Emp.Dept
Physics
Physics
Physics
ICS
ICS
ICS

Dept
Physics
ICS

Contact.name
Jack
Tom
Mary
Jack
Tom
Mary

Contact.addr
Irvine
LA
Riverside
Irvine
LA
Riverside

Addr
Irvine
LA

56

Natural Join
Es un Equi-Join en el cual una de las columnas duplicadas
es eliminada de la tabla resultante, usualmente utilizadas en
la condicin de Join

SELECT monedas.*, fecha,


cotizacion
FROM
monedas, cotizaciones
WHERE
monedas.moneda =
cotizaciones.moneda ;

57

Resultado: se evita la informacin redundante

moneda nombre
1
2
3
4
5
1
2
3
4
5

PESO URUGUAYO
DOLAR AMERICANO
PESO ARGENTINO
REAL
EURO
PESO URUGUAYO
DOLAR AMERICANO
PESO ARGENTINO
REAL
EURO

moneda_val fecha
1
1
1
1
1
1
1
1
1
1

01/03/2002
01/03/2002
01/03/2002
01/03/2002
01/03/2002
04/03/2002
04/03/2002
04/03/2002
04/03/2002
04/03/2002

cotizac
1.00
15.60
8.00
6.70
14.00
1.00
15.75
8.00
6.70
14.00

58

Join con muchas tablas:


SELECT clientes.nombre,
productos.nombre,
monedas.nombre
FROM
clientes, cuentas, productos, monedas
WHERE cuentas.cliente
= clientes.cliente
AND
cuentas.producto =
productos.producto AND
cuentas.moneda = monedas.moneda

59

Resultado

nombre
CLIENTE
CLIENTE
CLIENTE
CLIENTE
CLIENTE
CLIENTE
CLIENTE

nombre
10010
10101
10397
10080
10131
10404
10453

CAJA
CAJA
CAJA
CAJA
CAJA
CAJA
CAJA

DE
DE
DE
DE
DE
DE
DE

nombre
AHORRO
AHORRO
AHORRO
AHORRO
AHORRO
AHORRO
AHORRO

SOLES
SOLES
SOLES
SOLES
SOLES
DOLAR AMERICANO
SOLES

60

Los ALIAS:
SELECT

CE.nombre cliente,
P.nombre producto,
M.nombre moneda
FROM clientes CE, cuentas CU,
productos P, monedas M
WHERE
CU.cliente
= CE.cliente
AND CU.producto = P.producto
AND CU.moneda = M.moneda

61

Resultado

cliente
CLIENTE
CLIENTE
CLIENTE
CLIENTE
CLIENTE
CLIENTE
CLIENTE

10010
10101
10397
10080
10131
10404
10453

producto

moneda

CAJA
CAJA
CAJA
CAJA
CAJA
CAJA
CAJA

SOLES
SOLES
SOLES
SOLES
SOLES
DOLAR AMERICANO
SOLES

DE
DE
DE
DE
DE
DE
DE

AHORRO
AHORRO
AHORRO
AHORRO
AHORRO
AHORRO
AHORRO

62

El OUTER Join:

63

El OUTER Join:
El Join comn (INNER Join) trae solamente los registros
de ambas tablas que cumplan con las condiciones del
JOIN. Por ejemplo cuando recuperamos los clientes con
sus cuentas NO trae los clientes sin cuentas.

Es por ello que existe el OUTER Join que trae todos los
registros de la tabla principal y si no existen registros de
la otra que cumplan la condicin de Join pone sus
campos en NULO (NULL) y en caso contrario los trae.
Existen 3 tipos: left, right, o full, segn cual se
considere la tabla dominante.
64

64

Left Outer Join


R

Name
Jack
Tom

Dept
Physics
ICS

Name
Jack
Mike
Mary

Addr
Irvine
LA
Riverside

RS
Left outer join
R
S

R.name
Jack
Jack
Jack
Tom
Tom
Tom

Name
Jack
Tom

R.Dept
Physics
Physics
Physics
ICS
ICS
ICS

Dept
Physics
ICS

S.name
Jack
Mike
Mary
Jack
Mike
Mary

S.addr
Irvine
LA
Riverside
Irvine
LA
Riverside

Addr
Irvine
NULL

Rellena con nulos para tuplas sin correspondiente a la derecha


65

65

Ejemplo de Left OUTER Join :


SELECT C.cliente,
C.nombre,U.cuenta
FROM clientes C LEFTOUTER JOIN
cuentas U ON
(c.cliente = u.cliente)

66

Resultado Outer Join Simple

cliente nombre
10005 CLIENTE
10006 CLIENTE
10007 CLIENTE
10007 CLIENTE
10008 CLIENTE
10009 CLIENTE
10010 CLIENTE
10010 CLIENTE
10011 CLIENTE
10011 CLIENTE
10012 CLIENTE
10012 CLIENTE
10013 CLIENTE
10014 CLIENTE

cuenta
10005
10006
10007
10007
10008
10009
10010
10010
10011
10011
10012
10012
10013
10014

100071
100072
100092
100101
100102
100112
100111
100121
100122

67

Right Outer Join


R

Name
Jack
Tom

Dept
Physics
ICS

Name
Jack
Mike
Mary

Addr
Irvine
LA
Riverside

RS
Right outer join
R
S

R.name
Jack
Jack
Jack
Tom
Tom
Tom

Name
Jack
Mike
Mary

R.Dept
Physics
Physics
Physics
ICS
ICS
ICS

Dept
Physics
NULL
NULL

S.name
Jack
Mike
Mary
Jack
Mike
Mary

S.addr
Irvine
LA
Riverside
Irvine
LA
Riverside

Addr
Irvine
LA
Riverside

Rellena con nulos para tuplas sin correspondiente a la izquierda


68

Full Outer Join


R

Name
Jack
Tom

Dept
Physics
ICS

Name
Jack
Mike
Mary

Addr
Irvine
LA
Riverside

RS
Full outer join
R
S

R.name
Jack
Jack
Jack
Tom
Tom
Tom

Name
Jack
Tom
Mike
Mary

R.Dept
Physics
Physics
Physics
ICS
ICS
ICS

Dept
Physics
ICS
NULL
NULL

S.name
Jack
Mike
Mary
Jack
Mike
Mary

S.addr
Irvine
LA
Riverside
Irvine
LA
Riverside

Addr
Irvine
NULL
LA
Riverside

Rellena con blancos para las tuplas sin correspondiente tanto a la derecha como a la izquierda
69

Self Join
Utilidad: comparacin de valores en una
columna con otros valores en la misma
columna.
SELECT X.cod_orden, X.peso, X.fecha_envio,
Y.cod_orden, Y.peso, Y.fecha_envio
FROM
Ordenes X, Ordenes Y
WHERE X.peso >= 5*Y.peso AND
X.fecha_envio IS NOT NULL AND
Y.fecha_envio IS NOT NULL
70

Resultado
Este SELECT encuentra pares de rdenes cuyo peso
difiere en por lo menos un factor de 5 y cuyas fechas de
envo no son nulas.
cod_orden peso fecha_envio cod_orden peso

fecha_envio

1004
1004
1007
1007
1007

07/03/1991
07/16/1991
07/30/1991
07/16/1991
07/16 /1991

95.8
95.8
125.9
125.9
125.9

05/03/1991
05/03/1991
06/03/1991
06/03/1991
06/03/1991

1011
1020
1015
1020
1022

10.4
14.0
20.6
14.0
15.0

71

Vous aimerez peut-être aussi