320 likes | 526 Views
Bases de Datos 1. Teórico: Structured Query Language. Historia. Los orígenes del SQL están ligados a los orígenes de las bases de datos relacionales Estandarizado por ANSI en 1986 (SQL-86) Hubieron varias revisiones: SQL-89 SQL-92 SQL-1999 SQL-2003 SQL-2006 SQL-2008 SQL-2011.
E N D
Bases de Datos 1 Teórico: Structured Query Language
Historia • Los orígenes del SQL están ligados a los orígenes de las bases de datos relacionales • Estandarizado por ANSI en 1986 (SQL-86) • Hubieron varias revisiones: • SQL-89 • SQL-92 • SQL-1999 • SQL-2003 • SQL-2006 • SQL-2008 • SQL-2011
Características • Opera sobre conjunto de tuplas • No elimina automáticamente tuplas repetidas • Lenguaje no procedural • Su poder de expresión incluye el álgebra relacional y lo extiende • Se distinguen dos sublenguajes: • DDL (Data Definition Language) • DML (Data Manipulation Language)
Data Definition Language (DDL) • Permite crear, modificar y eliminar objetos de la base de datos: • Tablas • Una tabla es un conjunto de valores organizados en filas y columnas. Es la representación de una relación aunque no son estrictamente equivalentes • Vistas • Una vista es una tabla virtual basada en el resultado de una consulta. Pueden usarse en consultas como si fueran tablas • Usuarios
Operaciones sobre tablas • CREATE TABLE • Crea una nueva tabla • Parámetros: • Nombre de la tabla • Nombre y tipo de dato de cada columna • Restricciones de clave primaria y clave foránea sobre otras tablas • ALTER TABLE • Modifica una tabla existente • DROP TABLE • Elimina una tabla existente y elimina los datos almacenados en ella
Ejemplo • Sistema de Información relativo a hospitales: HOSPITALES(codHosp, nomHosp, direccion) MEDICOS(ciMed, nomMed, especialidad) PACIENTES(ciPac, nomPac, fchNac, sexo)
Ejemplo Creo la tabla hospitales: CREATE TABLE hospitales( codHosp integer NOT NULL, nomHosp character varying(40), direccion character varying(20) ); ALTER TABLE hospitales add constraint hospitales_pkey PRIMARY KEY (codHosp);
Operaciones sobre vistas • CREATE VIEW • Crea una vista • Ejemplo: Creo una vista sobre la tabla hospitales en la que no aparezca la dirección: CREATE VIEWhospitalesSinDirAS (SELECT codHosp, nomHosp FROM hospitales ); • ALTER VIEW • Modifica una vista • DROP VIEW • Elimina una vista
Data Manipulation Language (DML) • Permite crear, modificar, eliminar y recuperar datos: • INSERT • Agrega tuplas a una tabla • Ejemplo: INSERT INTO hospitales VALUES (1, ‘Maciel’, ‘25 de Mayo 174’); • UPDATE • Actualiza tuplas de una tabla • Ejemplo: UPDATE hospitales SET direccion = ‘25 de Mayo 172’) WHEREcodHosp= 1;
DML • DELETE • Borra tuplas de una tabla • Ejemplo: DELETE hospitales WHERE nomHosp = ‘Maciel’; • SELECT • Recupera datos • Ejemplo: SELECT direccion FROM hospitales WHEREnomHosp = ‘Maciel’;
Recuperación de datos • Sintaxis: SELECTA1, …, An FROM R1, …, Rm WHEREC; donde: • A1, …, An son nombres de atributos. También se puede utilizar (*) • R1, …, Rm son nombres de tablas • C es una condición booleana
Cláusula ORDER BY • La cláusula ORDER BYpermite ordenar el resultado ascendentemente o descendentemente (ASC ó DESC) • Ejemplo: Devolver los códigos de los hospitales ordenados ascendentemente SELECTcodHosp FROMhospitales ORDER BY codHosp ASC;
Cláusula DISTINCT • La cláusula DISTINCTpermite filtrar tuplas repetidas • Ejemplo: Devolver las especialidades, sin repetir, de los médicos SELECTDISTINCT especialidad FROMmedicos;
Operador JOIN • JOIN es un operador que se utiliza para combinar datos de dos o más tablas basados en una relación entre determinadas columnas en estas tablas • En el JOIN sólo se incluyen en el resultado tuplas que coincidan en valor en los campos del JOIN
Ejemplo PERSONAS(ci, nombre, apellido, fchNac, lugarNac) TECNOLOGOS(ci, fchTitulo) • Obtener los nombres y apellidos de los Tecnólogos: SELECTnombre, apellido FROM(personas JOINtecnologos ON personas.ci = tecnologos.ci);
Otros tipos de JOIN • NATURAL JOIN: Elimina columnas con nombres repetidos • LEFT JOIN: Agrega para cada tupla de T1 que no satisface la condición de JOIN con ninguna de T2, una fila con nulos en las columnas de T2 • RIGHT JOIN: Análogo a LEFT JOIN pero se incluyen todos los de T2 • FULL JOIN: Equivalente a la unión de LEFT JOIN y RIGHT JOIN
Alias • Ejemplo: Devolver las parejas de cédulas de identidad de las personas que tienen igual nombre pero distinto apellido SELECTp1.ci, p2.ci FROMpersonas p1, personas p2 WHEREp1.nombre = p2.nombre and p1.apellido <> p2.apellido;
Renombrar atributos • Ejemplo: PRODUCTOS(nroProd, nombre, peso) FABRICANTES( nroFab, nombre, departamento) VENTAS( nroFab, nroProd, precio) Dar los nombres de fabricantes y los nombres de los productos que venden SELECT fabricantes.nombre asnomFab, productos.nombre asnomProd FROM ventas, fabricantes, productos WHERE ventas.nroFab = fabricantes.nroFab and ventas.nroProd = productos.nroProd;
Unión (UNION) • Ejemplo: Devolver la cédula de identidad de las personas que nacieron en el año 2000 o que nacieron en Salto SELECT ci FROM personas WHERE personas.fchNac >= to_date('01/01/2000','dd/mm/yyyy') and personas.fchNac <= to_date('31/12/2000','dd/mm/yyyy') UNION SELECT ci FROM personas WHERE personas.lugarNac = ‘Salto’; • La UNION elimina tuplas repetidas
Diferencia (NOT IN) • Ejemplo: Devolver las cédulas de identidad de las personas que no se recibieron de Tecnólogo SELECT ci FROM personas WHERE ci NOT IN (SELECT ci FROM tecnologos);
Funciones y operadores aritméticos • En las cláusulas SELECT y WHERE se pueden aplicar funciones y operadores aritméticos sobre atributos: • Funciones: round (n), abs (n), etc • Operadores aritméticos: (+, *, /)
Funciones de agregación • Las funciones de agregación extienden el álgebra relacional • Se aplican sobre conjuntos de tuplas, no sobre tuplas individuales • Permiten sumar, obtener el máximo, contar tuplas, etc
Consultas anidadas • Las consultas anidadas son consultas dentro de la cláusula WHERE de otra consulta • Sintaxis: SELECTA1, …, An FROM R1, …, Rm WHERE Aj, …, Ak <op_comp> (SELECT B1, …, Bk FROM S1, …, Sm WHERE C); donde <op-comp> puede ser: IN = ANY > ANY = ALL > ALL
Función EXISTS • La función EXISTS sirve para chequear si el resultado de una consulta no es vacío • Ejemplo: Dar los nombres de los fabricantes que sólo venden el producto número 15. SELECT nombre FROM fabricantes f1, ventas v1 WHERE f1.nroFab = v1.nroFab andv1.nroProd = 15 AND NOT EXISTS (SELECT * FROM ventas v2 WHERE v2.nroFab = f1.nroFab and v2.nroProd <> 15);
Cláusula GROUP BY • La cláusula GROUP BY sirve para agrupar tuplas • El agrupamiento se realiza después de aplicar el WHERE, es decir, sobre las tuplas que cumplen la condición • En el SELECT sólo puede haber atributos presentes en la cláusula GROUP BY, funciones de agregación sobre atributos y/o expresiones aritméticas
Ejemplo • ACTIVIDADES(ci-est, cod-as, cod-car, tipo-act, fecha, aprobo, nota) • En esta relación: • Se guardan todas las actividades que realizan los estudiantes en la facultad • Estas actividades pueden ser de distintos tipos (examen (‘E’) o realización de curso (‘RC’)) • El atributo aprobo tiene valor ‘S’ o ‘N’. Si este atributo tiene valor ‘S’ asumimos que la asignatura esta aprobada totalmente, no importa el tipo de actividad que sea • El atributo fecha corresponde a la fecha en la que se realizó la actividad
Ejemplo • Dar una lista que contenga código de asignatura, código de carrera y cantidad de aprobados a partir del 01/12/2001 SELECTcod-as, cod-car, COUNT(*) FROMactividades WHERE fecha > to_date(‘01/12/2001’,’dd/mm/yyyy’) and aprobo= ‘S’ GROUP BYcod-as, cod-car;
Cláusula HAVING • La cláusula HAVING sirve para especificar condiciones sobre grupos • Ejemplo: Dar el número de fabricante y los promedios de precios a los cuales vendió, pero para los fabricantes con más de 3 ventas SELECT nroFab, avg(precio) FROM VENTAS GROUP BY nroFab HAVING count(*) > 3;
Sub-consultas en el FROM • Utilizar sub-consultas en el FROM es equivalente al uso de vistas • Ejemplo:Dar el máximo del promedio de ventas de cada fabricante SELECT MAX (promedio) FROM (SELECT AVG (precio) as promedio FROM ventas GROUP BY nroFab) as promedios
Cambios de formato • Por defecto existen funciones que permiten manipular los tipos de datos • Los manejadores también disponen de funciones específicas • Concatenación de string: Se utiliza el operador | | • Mayúsculas y minúsculas: upper(<atributo>), lower(<atributo>)
Material de consulta Tutorial de SQL • http://www.w3schools.com/sql/default.asp Tutorial interactivo de SQL • http://sqlzoo.net/ Documentación PostgreSQL • http://www.postgresql.org/docs/