Académique Documents
Professionnel Documents
Culture Documents
Semana
Modificacin
05:
Fundamentos (1)
Structured Query Language
Diseado e implementado por IBM Research
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
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
Observaciones
Constraints son mecanismos ya implementados en el DBMS
para proveer integridad sobre los datos.
Tipo de Integridad
Tipo de Constraint
Domain
DEFAULT
CHECK
Entity
PRIMARY KEY
UNIQUE
FOREIGN KEY
Referential
FOREIGN KEY
CHECK
DDL Tablas
CREATE TABLE
Crea una nueva tabla.
Dependiendo del DBMS exigir crearla bajo un Esquema determinado.
Sintaxis :
10
DDL Tablas
11
DDL Tablas
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 }
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 ;
15
DDL Tablas
DROP TABLE
Elimina :
La definicin de la tabla
Todos sus datos
Objetos asociados : ndices, triggers, constraints, especificaciones
de permisos
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
Roberto Martnez
Sandra Perez
Of. 17 m. S/N
Mariana de Leon
Andres Gomez
21
DML SELECT
Seleccionando valores nicos:
Ejemplo:
SELECT cuenta
FROM Movimientos
CUENTA
10002
10002
10004
10002
10003
10004
CUENTA
10002
10004
10003
22
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
Ej:
FROM clientes
WHERE apellido = PEREZ
FecNacimiento = 01/01/2001
CLIENTE
apellido = PEREZ
10007
CI >= 1000000-0
10008
10001
APELLIDO
PEREZ
PEREZ
PEREZ
24
Igual
No igual
Simbolo
Ejemplo
Cuenta = 12003
<> , !=
Mayor que
>
Menor que
<
Mayor o igual
>=
Menor o igual
<=
IN
Apellido IN (PEREZ,MARTINEZ)
BETWEEN
En un rango de valores
Contiene un string
LIKE
25
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
Significado
AND
OR
NOT
27
(en
28
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
Significado
% (En Access es *)
_ (guin inferior)
[v1-v2]
^[v1-v2]
32
NOMBRE
Juan Perez
Pedro Perez
Alberto Perez
Francisco Perez
33
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
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
SELECT campos
FROM tablas
[WHERE condicin]
...
ORDER BY nombre-columnas o posiciones [ASC | DESC]
36
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
38
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
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
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
42
Nro_cliente
Nom_cliente
Direccin
1000
Ana
Dir1
1100
Pedro
1200
1300
Select *
From Clientes, Cuentas
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
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
45
46
Creando un JOIN:
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
FROM
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.
50
Algunas particularidades
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
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.
55
Natural Join
Emp (name, dept)
Name
Jack
Tom
Emp
Name
Jack
Tom
Mary
Dept
Physics
ICS
Addr
Irvine
LA
Riverside
Emp Contact
Resultado
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
57
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
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
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
65
66
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
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
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