You are on page 1of 50

1

GESTIN DE DATOS 2012


- Clase 4 -

SQL
2

El lgebra relacional proporciona una notacin concisa y formal para la representacin de consultas. Sin embargo, los sistemas de bases de datos comerciales necesitan un lenguaje de consultas ms cmodo para el usuario. SQL es el lenguaje de consultas distribuido comercialmente de ms influencia. Usa una combinacin de constructores del lgebra relacional y del clculo relacional. Usando SQL, adems de lenguaje de consultas, es posible definir la estructura de los datos, modificar los datos de la base de datos y especificar restricciones de seguridad.

SQL
3

SQL (Structured Query Languaje, Lenguaje de Consultas Estructurado) est compuesto por dos submdulos fundamentales:

Mdulo para definicin del modelo de datos, denominado DDL (Data Definition Languaje). Mdulo para la manipulacin de la base de datos, denominada DML (Data Manipulation Languaje) con el cual se pueden realizar las consultas, altas, bajas y modificaciones de datos sobre las relaciones del modelo.

SQL - DDL
4

Permite la especificacin de un conjunto de relaciones y tambin la informacin relativa a esas relaciones.


El esquema de cada relacin. El dominio de valores asociado a cada atributo. Las restricciones de integridad. El conjunto de ndices que se deben mantener para cada relacin. La informacin de seguridad y de autorizacin de cada relacin. La estructura de almacenamiento fsico de cada relacin en el disco.

SQL DDL: Tipos bsicos de dominios


5

SQL soporta gran variedad de tipos de dominios, entre ellos:

char (n). Cadena de caracteres de longitud fija n. varchar (n). Cadena de caracteres de longitud variable mxima n. int. Entero date. Fecha con el formato 'YYYY-MM-DD'. El rango es desde '1000-01-01' hasta '9999-12-31'. numeric (p, d). Nmero de coma fija formado por p dgitos (ms el signo), y de esos p dgitos, d pertenecen a la parte decimal. real. Nmeros de coma flotante. float (n). Nmero de coma flotante con una precisin de al menos n dgitos.

SQL DDL: Definicin bsica de esquemas


6

Las relaciones se definen mediante el comando:


CREATE TABLE nombre (A1 D1, A2 D2,, An Dn,

<restriccin-integridad1>, , <restriccin-integridadk>)

nombre es el nombre de la relacin Ai es cada atributo Di es el tipo de dominio. Dentro de las restricciones de integridad est la definicin de la clave primaria a travs de primary key (A1, A2,, At )

SQL DDL: Definicin bsica de esquemas


7

Un ejemplo:

create table cliente (


nombre varchar (100) , apellido varchar (60) NOT NULL, edad int, dni varchar(10) NOT NULL, id_cliente int AUTO_INCREMENT PRIMARY KEY

SQL
8

Las relaciones recin creadas estn vacas.

El comando INSERT aade datos a la relacin. Existen dos maneras bsicas de insertar:

Insertar la fila completa. Insertar slo algunas columnas de una fila (se deben especificar los nombres de las columnas que se van a completar. INSERT INTO nombreTabla (<nombreAtributo>,) VALUES (valor)

SQL - DML
9

La estructura bsica de una expresin SQL consta de tres clusulas: SELECT, FROM y WHERE.

La clusula SELECT se corresponde con la operacin proyeccin del lgebra relacional. La clusula FROM se corresponde con la operacin producto cartesiano del lgebra relacional. La clusula WHERE se corresponde con el predicado seleccin del lgebra relacional.

SQL - DML
10

Las consultas habituales tienen la forma:


SELECT lista de atributos FROM lista de tablas WHERE predicado

La lista de atributos indica los nombres de los atributos que sern presentados en el resultado. El smbolo * se usa para denotar todos los atributos. La lista de tablas indica las tablas de la BD necesarias para resolver la consulta. El predicado indica que condicin deben cumplir las tuplas de las tablas para estar presentes en el resultado final de la consulta.

SQL - DML
11

Si se omite la clusula WHERE, el predicado se considera verdadero.


Sobre las tablas indicadas en la lista de tablas se realiza un producto cartesiano. Una consulta siempre retorna como resultado una tabla temporal.

SQL - DML
12

Tabla Cliente
idCliente 19.283.746 1.928.374 nombre Gonzalez Gmez calle Arenal Carretas ciudad La Granja Junn

Tabla Cuenta
nroCuenta C-101 C-215 C-102 C-305 C-201 C-217 saldo 500 700 400 350 900 750

Tabla Prstamo
nroPrstamo importe P-15 P-10 50000 7000

Tabla PoseeCuenta
idCliente 19.283.746 19.283.746 1.928.374 67.789.901 nroCuenta C-101 C-201 C-215 C-102

67.789.901 18.273.609
32.112.312 33.666.999 25.123.456 23.928.374

Lpez Abril
Santos Ruprez Daz Prez

Mayor Preciados
Mayor Ramblas Corrientes Maip

Pergamino Valsain
Pergamino Len La Plata Junn

P-30 P-20

40000 3500

18.273.609
32.112.312 23.928.374

C-305
C-217 C-201

Tabla PoseePrstamo

Cliente= (idCliente, nombre, calle, ciudad) Cuenta= (nroCuenta, saldo) Prstamo= (nroPrstamo, importe) PoseeCuenta= (idCliente, nroCuenta) PoseePrstamo= (idCliente, nroPrstamo)

idCliente 19.283.746 1.928.374 18.273.609 33.666.999 23.928.374

nroPrstamo P-30 P-10 P-20 P-15 P-10

SQL - DML
13

Ej. 1: Presentar los nombres de todos los clientes que figuran en la tabla Cliente.
SELECT nombre FROM cliente
Tabla Cliente
nombre ciudad La Granja Junn Pergamino Valsain Pergamino Len La Plata Gonzalez Gmez Lpez Abril Santos

idCliente 19.283.746 1.928.374 67.789.901 18.273.609 32.112.312 33.666.999 25.123.456

nombre Gonzalez Gmez Lpez Abril Santos Ruprez Daz

calle Arenal Carretas Mayor Preciados Mayor Ramblas Corrientes

Ruprez Daz
Prez

23.928.374

Prez

Maip

Junn

SQL - DML
14

Ej. 2: Presentar los nombres y ciudades de todos los clientes que figuran en la tabla Cliente.
SELECT ciudad, nombre FROM cliente
Tabla Cliente
ciudad ciudad La Granja Junn Pergamino Valsain Pergamino La Granja Junn Pergamino Valsain nombre Gonzalez Gmez Lpez Abril

idCliente 19.283.746 1.928.374 67.789.901 18.273.609 32.112.312

nombre Gonzalez Gmez Lpez Abril Santos

calle Arenal Carretas Mayor Preciados Mayor

Pergamino
Len La Plata Junn

Santos
Ruprez Daz Prez

33.666.999
25.123.456 23.928.374

Ruprez
Daz Prez

Ramblas
Corrientes Maip

Len
La Plata Junn

El listado se muestra en el orden indicado en la descripcin del SELECT.

SQL - DML
15

Ej. 3: Presentar todos los datos de los clientes que figuran en la tabla Cliente.
SELECT * FROM cliente
idCliente 19.283.746 1.928.374 67.789.901 18.273.609 32.112.312 nombre Gonzalez Gmez Lpez Abril Santos calle Arenal Carretas Mayor Preciados Mayor ciudad La Granja Junn Pergamino Valsain Pergamino

33.666.999
25.123.456 23.928.374

Ruprez
Daz Prez

Ramblas
Corrientes Carretas

Len
La Plata Junn

SQL - DML
16

Ej. 4: Presentar los nombres de los clientes que figuran el la tabla Cliente que viven en la ciudad de Pergamino.
SELECT nombre FROM cliente WHERE ciudad = Pergamino
Tabla Cliente

idCliente 19.283.746 1.928.374

nombre Gonzalez Gmez

calle Arenal Carretas

ciudad La Granja Junn nombre Lpez Santos

67.789.901
18.273.609 32.112.312 33.666.999 25.123.456 23.928.374

Lpez
Abril Santos Ruprez Daz Prez

Mayor
Preciados Mayor Ramblas Corrientes Maip

Pergamino
Valsain Pergamino Len La Plata Junn

SQL - DML
17

Ej. 5: Presentar los nombres de los clientes y sus nmeros de prstamo.


SELECT nombre, nroCuenta FROM cliente, poseePrstamo WHERE cliente.idCliente = poseePrstamo.idCliente
Tabla Cliente Tabla PoseePrstamo
ciudad La Granja Junn Pergamino Valsain Pergamino idCliente 19.283.746 1.928.374 nroPrstamo P-30 P-10 nombre Gonzalez Gmez Abril Ruprez nro-cuenta P-30 P-10 P-20 P-15

idCliente 19.283.746 1.928.374 67.789.901 18.273.609 32.112.312

nombre Gonzalez Gmez Lpez Abril Santos

calle Arenal Carretas Mayor Preciados Mayor

18.273.609
33.666.999 23.928.374

P-20
P-15 P-10

Prez

P-10

33.666.999
25.123.456 23.928.374

Ruprez
Daz Prez

Ramblas
Corrientes Maip

Len
La Plata Junn

18

Esquema de diseo de la BD

Uso de operadores aritmticos


19

Creacin de expresiones con nmeros y datos fecha empleando operadores

+ * /

Uso de operadores aritmticos


20

Ejercicio: Liste todas las pelculas indicando su identificador, su ttulo y costo de alquiler incrementado en $ 15.

SELECT .. FROM ;

Uso de operadores aritmticos


21

Ejercicio - resolucin: Liste todas las pelculas indicando su identificador, su ttulo y costo de alquiler incrementado en $ 15.

SELECT pelicula_id, titulo, alquiler_costo + 15 FROM peliculas;

Uso de operadores aritmticos


22

Ejercicio: Liste de todos los empleados: su apellido, salario mensual y el clculo de su salario anual considerando un nico pago de aguinaldo por valor de $ 100.

SELECT .. FROM ;

Uso de operadores aritmticos


23

Ejercicio - resolucin: Liste de todos los empleados: su apellido, salario mensual y el clculo de su salario anual considerando un nico pago de aguinaldo por valor de $ 100.

SELECT apellido, salario, 12 * salario + 100 FROM empleados;

Uso de operadores aritmticos


24

Ejercicio: Muestre un informe que permita observar de los empleados: el apellido, salario mensual y el valor correspondiente a su salario anual considerando un nico pago de aguinaldo por valor de $100 y un incremento en el sueldo mensual de $5.

SELECT .. FROM ;

Uso de operadores aritmticos


25

Ejercicio - resolucin: Muestre un informe que permita observar de los empleados: el apellido, salario mensual y el valor correspondiente a su salario anual considerando un nico pago de aguinaldo por valor de $100 y un incremento en el sueldo mensual de $5.

SELECT apellido, salario, 12 * (salario + 5) + 100 FROM empleados;

Precedencia de operadores
26

La multiplicacin y divisin tienen prioridades sobre los de suma y resta. Operadores de la misma prioridad son evaluados de izquierda a derecha.

Los parntesis son empleados para forzar la prioridad de evaluacin y para clarificar las sentencias.

La operacin renombramiento
27

SQL proporciona un mecanismo para renombrar tanto tablas como atributos. Utiliza la clusula AS de la siguiente forma: nombreAntiguo AS nombreNuevo

La clusula AS puede aparecer tanto en la clusula SELECT como en la clusula FROM. Por ejemplo,
SELECT FROM cliente_id AS identificadorDelCliente, apellido, nombre clientes

Clusula WHERE: Condiciones de bsqueda


28

Test de comparacin Test de rango Test de pertenencia a un conjunto Test de correspondencia con un patrn Test de valor desconocido, NULL Test de comparacin por: =, <>, <, <=, >, >=

Test de rango WHERE


29

Select From Where nombreAtributo BETWEEN expr1 AND expr2

Ejercicio:
Mostrar los ttulos y costo de reemplazo de las pelculas para las cuales dicho costo se encuentre entre $25 y $35

SELECT FROM WHERE

titulo, costo_reemplazo peliculas costo_reemplazo BETWEEN 25 AND 35

Test de rango WHERE


30

Select From Where nombreAtributo NOT BETWEEN expr1 AND expr2

Ejercicio:
Hallar los identificadores e importe de los clientes cuyo importe de pago no est entre $40 y $55.
SELECT cliente_id, importe FROM pagos WHERE importe NOT BETWEEN 40 AND 55

Test de pertenencia a un conjunto WHERE


31

Select From Where nombreAtributo [NOT] IN (valor1, valor2 , valor3):

Examina si un valor dado coincide con la lista de valores objetivos. Ejercicio:


Liste las direcciones con cdigo postal de La Plata, Berisso o Ensenada.
SELECT direccion FROM direcciones WHERE codigo-postal IN (1900, 1923, 1920)

Test de correspondencia con un patrn


32

WHERE

Where nombreAtributo [NOT] LIKE <patrn> Para la descripcin de <patrn> se utilizan dos caracteres especiales:
% : Coincide con cualquier subcadena de caracteres. Por ej., Ma% coincide con cualquier cadena de caracteres que empiece con Ma. _ : Coincide con cualquier carcter. Por ej., _ _ _ coincide con cualquier cadena que tenga exactamente tres caracteres.

Test de correspondencia con un patrn


33

WHERE

Ejercicio: Liste los ttulos de las pelculas cuya descripcin contenga la palabra amor. SELECT titulo FROM peliculas WHERE descripcion LIKE % amor %

Ejercicio: Liste los nombres y apellidos de los empleados cuyo nombre contiene 4 letras. SELECT nombre, apellido FROM empleados WHERE nombre LIKE _ _ _ _

Test de valor NULL


34

WHERE

El uso de valores nulos sirve para indicar la ausencia de informacin sobre el valor de un atributo. Se utiliza la palabra clave NULL.

Where nombreAtributo IS [NOT] NULL


Ejercicio:
Liste los ttulos de las pelculas que no tienen descripcin. SELECT titulo FROM peliculas WHERE descripcion IS NULL

Condicin de bsqueda AND, OR, NOT WHERE


35

Ejercicio: Hallar los ttulos de las pelculas cuyo costo de alquiler es $ 8 o el costo de reemplazo es superior a $30. SELECT titulo FROM peliculas WHERE (costo_alquiler = 8) OR (costo_reemplazo > 30)

Usando el operador concatenacin: CONCAT()


36

Ejercicio: Liste el nombre y apellido de los clientes en una misma columna, denominada NombreApellido. SELECT CONCAT( nombre, apellido ) as NombreApellido FROM clientes

Ordenacin de los datos presentados: ORDER BY


37

SELECT lista de atributos FROM lista de tablas [ WHERE predicado] ORDER BY <atributo_1>, ..., <atributo_N>;

De manera predeterminada, la clusula ORDER BY coloca los elementos en orden ascendente. Para especificar el tipo de ordenacin se utiliza DESC o ASC. Ejercicio:
Liste los nombres y apellidos de los clientes desde el ltimo incorporado hasta el primero. SELECT nombre, apellido FROM clientes ORDER BY fecha_creacion desc

Funciones de agregacin
38

COUNT(*) {devuelve el nmero total de tuplas de una tabla} SUM(<atributo>) {suma los valores de un atributo} MIN(< atributo >) {devuelve el valor mnimo de atributo}

MAX(< atributo >) {devuelve valor mximo de atributo}


AVG(< atibuto >) {devuelve el promedio de los valores del atributo}

Funciones de agregacin: Ejemplos


39

Ejercicio: Obtener el nombre y salario del empleado de mayor salario. SELECT nombre, MAX (salario) FROM empleados Ejercicio: Obtener el salario promedio de los empleados. SELECT AVG (salario) FROM empleados

Agrupamiento de datos: Clusula GROUP BY


40

Permite mostrar grupos con las filas de datos que tengan valores iguales para determinados campos. La respuesta tiene tantas filas como grupos haya establecido la instruccin.

Ejercicio:
Obtener los tipos y su cantidad de pelculas.

SELECT tipo, COUNT (titulo) FROM peliculas GROUP BY tipo

Agrupamiento de datos bajo condicin de agrupamiento: Clusula HAVING


41

Es posible adicionar la clusula HAVING luego de la clusula GROUP BY para establecer una condicin que sea aplicable a las tuplas seleccionadas. Los predicados de la clusula HAVING se aplican despus de la formacin de grupos, de modo que se pueden usar las funciones de agregacin. Ejercicio:
Obtener los tipos y su cantidad de pelculas, para aquellos tipos con ms de 30 unidades.

SELECT tipo, COUNT (titulo) FROM peliculas GROUP BY tipo HAVING COUNT (titulo) > 30

Eliminacin de tuplas repetidas: Clusula DISTINCT


42

Ejemplo:
SELECT DISTINCT cliente_id FROM pagos;

Ejercicio: Obtener los tipos de pelculas disponibles.


SELECT DISTINCT tipo FROM peliculas

Ejercicio: Obtener la cantidad de tipos de pelculas.


SELECT COUNT (DISTINCT tipo) FROM peliculas

Relaciones entre tablas


43

Una pelcula puede tener varios actores, un cliente alquila varias veces, etc. La relacin entre las tablas est dada por la relacin entre sus campos

Consultas sobre ms de una tabla


44

Ejercicio:
Obtener los nombres y apellidos de los clientes que viven en la ciudad con cdigo postal 7600. SELECT clientes.nombre, clientes.apellido FROM clientes, direcciones WHERE direcciones.codigo_postal = 7600 AND direcciones.direccion_id = clientes. direccion_id

Ejercicio:
Obtener los nombres y apellidos de los actores de la pelcula Titanic. SELECT actores.nombre, actores.apellido FROM peliculas, peliculas_actores, actores WHERE peliculas.titulo = Titanic AND peliculas.pelicula_id = peliculas_actores.pelicula_id AND peliculas_actores.actor_id = actores.actor_id

Consultas sobre ms de una tabla: alias


45

Notacin: SELECT <nom_atributos> FROM <nom_tabla alias> , <nom_tabla alias>, ... , <nom_tabla alias> [ WHERE <condiciones_booleanas> ]

Ejercicio: Obtener los nombres y apellidos de los actores de la pelcula Titanic. SELECT a.nombre, a.apellido FROM peliculas p, peliculas_actores pa, actores a WHERE p.titulo = Titanic AND p.pelicula_id = pa.pelicula_id AND pa.actor_id = a.actor_id

Modificacin de la base de datos


46

Borrado: Slo se pueden borrar tuplas completas.

El siguiente comando borra todas las tuplas de la tabla DELETE FROM nombreTabla El siguiente comando borra aquellas tuplas que hacen verdadero el predicado. DELETE FROM nombreTabla WHERE predicado

Modificacin de la base de datos


47

Actualizacin: Se utiliza cuando se debe modificar un valor dentro de una tupla, sin cambiar todos los valores de la misma.

El siguiente comando actualiza el valor del atributo especificado para cada tupla de la tabla. UPDATE nombreTabla SET nombreAtributo = valor El siguiente comando actualiza el valor del atributo especificado para las tuplas de la tabla que hacen verdadero el predicado. UPDATE nombreTabla SET nombreAtributo = valor WHERE predicado

Algunas funciones: fecha


48

DAY (date): retorna el da del mes para date, en el rango de 1 a 31. MONTH (date): retorna el mes para date, en el rango 1 a 12. YEAR (date): retorna el ao para date, en el rango 1000 a 9999. NOW(): retorna la fecha y hora actual como valor en formato 'YYYY-MM-DD HH:MM:SS' o YYYYMMDDHHMMSS
dependiendo de si la funcin se usa en contexto numrico o de cadena de carcteres.

Algunas funciones: fecha


49

Ejercicio: Obtener los nombres y apellidos de los clientes creados durante mayo de 2010.
SELECT nombre, apellido FROM clientes WHERE MONTH (fecha_creacion) = 5 and YEAR (fecha_creacion) = 2010

Ejercitacin

Proveedor=(id_prov, nombre_prov, direccin, ciudad) Partes(id_parte, color, nombre_parte) Proyectos=(id_proy, nombre_proy, ciudad, costo) Envos=(id_prov, id_parte, id_proy, cantidad, fecha) {esta tabla registra los envos de las partes a cada proyecto}

a) b)

c)
d) e) f) g) h) i)
50 j)

k)

Obtener id, nombre y costo de los proyectos de Crdoba. Obtener el id del proyecto y su costo, para el proyecto de mayor costo. Obtener los envos con cantidad entre 300 y 500. Obtener los envos que no tengan la cantidad nula. Conocer los id_prov, que suministren partes al proyecto con id = A1 ordenado por id del proveedor. Obtener id_prov, id_proy e id_parte para aquellas tuplas donde el proveedor y el proyecto sean de la misma ciudad. Obtener la cantidad total de partes P1 suministradas por el proveedor S1. Obtener los colores de las partes suministras por proveedor S1. Cambiar a gris el color de las partes rojas. Eliminar la parte con id = P7. Obtener los id de los proyectos con envos durante agosto de 2011.

You might also like