Professional Documents
Culture Documents
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
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.
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.
<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 )
Un ejemplo:
SQL
8
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
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
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)
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
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
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
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
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
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
+ * /
Ejercicio: Liste todas las pelculas indicando su identificador, su ttulo y costo de alquiler incrementado en $ 15.
SELECT .. FROM ;
Ejercicio - resolucin: Liste todas las pelculas indicando su identificador, su ttulo y costo de alquiler incrementado en $ 15.
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 ;
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.
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 ;
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.
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
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: =, <>, <, <=, >, >=
Ejercicio:
Mostrar los ttulos y costo de reemplazo de las pelculas para las cuales dicho costo se encuentre entre $25 y $35
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
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.
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 _ _ _ _
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.
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)
Ejercicio: Liste el nombre y apellido de los clientes en una misma columna, denominada NombreApellido. SELECT CONCAT( nombre, apellido ) as NombreApellido FROM clientes
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}
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
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.
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
Ejemplo:
SELECT DISTINCT cliente_id FROM pagos;
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
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
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
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
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
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.
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.