Bases de Datos 1

31
BASES DE DATOS 1 Teórico: Structured Query Language

description

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. - PowerPoint PPT Presentation

Transcript of Bases de Datos 1

Page 1: Bases de Datos 1

BASES DE DATOS 1Teórico: Structured Query Language

Page 2: Bases de Datos 1

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:

o SQL-89o SQL-92o SQL-1999o SQL-2003o SQL-2006o SQL-2008o SQL-2011

Page 3: Bases de Datos 1

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)

Page 4: Bases de Datos 1

DATA DEFINITION LANGUAGE (DDL) Permite crear, modificar y eliminar objetos de

la base de datos:

Tablaso 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

Vistaso Una vista es una tabla virtual basada en el resultado de

una consulta. Pueden usarse en consultas como si fueran tablas

Usuarios

Page 5: Bases de Datos 1

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

Page 6: Bases de Datos 1

EJEMPLO Sistema de Información relativo a hospitales:

HOSPITALES(codHosp, nomHosp, direccion)MEDICOS(ciMed, nomMed, especialidad)PACIENTES(ciPac, nomPac, fchNac, sexo)

Page 7: Bases de Datos 1

EJEMPLOCreo la tabla hospitales:

CREATE TABLE hospitales(codHosp integer NOT NULL,nomHosp character varying(40),direccion character varying(20)

);

ALTER TABLE hospitalesadd constraint hospitales_pkey PRIMARY KEY (codHosp);

Page 8: Bases de Datos 1

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 VIEW hospitalesSinDir AS (SELECT codHosp, nomHosp FROM hospitales );

ALTER VIEW Modifica una vista

DROP VIEW Elimina una vista

Page 9: Bases de Datos 1

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’) WHERE codHosp = 1;

Page 10: Bases de Datos 1

DML DELETE

Borra tuplas de una tabla Ejemplo:

DELETE hospitales WHERE nomHosp = ‘Maciel’;

SELECT Recupera datos Ejemplo:

SELECT direccion FROM hospitales WHERE nomHosp = ‘Maciel’;

Page 11: Bases de Datos 1

RECUPERACIÓN DE DATOS Sintaxis:

SELECT A1, …, An FROM R1, …, Rm WHERE C;

donde: A1, …, An son nombres de atributos. También se puede

utilizar (*) R1, …, Rm son nombres de tablas C es una condición booleana

Page 12: Bases de Datos 1

CLÁUSULA ORDER BY La cláusula ORDER BY permite ordenar el

resultado ascendentemente o descendentemente (ASC ó DESC)

Ejemplo: Devolver los códigos de los hospitales ordenados ascendentemente

SELECT codHosp FROM hospitales ORDER BY codHosp ASC;

Page 13: Bases de Datos 1

CLÁUSULA DISTINCT La cláusula DISTINCT permite filtrar tuplas

repetidas

Ejemplo: Devolver las especialidades, sin repetir, de los médicos

SELECT DISTINCT especialidad FROM medicos;

Page 14: Bases de Datos 1

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

Page 15: Bases de Datos 1

EJEMPLO PERSONAS(ci, nombre, apellido, fchNac, lugarNac) TECNOLOGOS(ci, fchTitulo)

Obtener los nombres y apellidos de los Tecnólogos:

SELECT nombre, apellido FROM (personas JOIN tecnologos ON personas.ci = tecnologos.ci);

Page 16: Bases de Datos 1

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

Page 17: Bases de Datos 1

ALIAS Ejemplo: Devolver las parejas de cédulas de

identidad de las personas que tienen igual nombre pero distinto apellido

SELECT p1.ci, p2.ciFROM personas p1, personas p2WHERE p1.nombre = p2.nombre and p1.apellido <> p2.apellido;

Page 18: Bases de Datos 1

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 as nomFab, productos.nombre as nomProd FROM ventas, fabricantes, productos WHERE ventas.nroFab = fabricantes.nroFab and ventas.nroProd = productos.nroProd;

Page 19: Bases de Datos 1

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

Page 20: Bases de Datos 1

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);

Page 21: Bases de Datos 1

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: (+, *, /)

Page 22: Bases de Datos 1

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

Page 23: Bases de Datos 1

CONSULTAS ANIDADAS Las consultas anidadas son consultas dentro de la cláusula WHERE de

otra consulta

Sintaxis:

SELECT A1, …, AnFROM R1, …, RmWHERE Aj, …, Ak <op_comp>

(SELECT B1, …, Bk FROM S1, …, Sm WHERE C);

donde <op-comp> puede ser:

IN= ANY> ANY= ALL> ALL

Page 24: Bases de Datos 1

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 and v1.nroProd = 15 AND NOT EXISTS (SELECT * FROM ventas v2 WHERE v2.nroFab = f1.nroFab and v2.nroProd <> 15);

Page 25: Bases de Datos 1

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

Page 26: Bases de Datos 1

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

Page 27: Bases de Datos 1

EJEMPLO Dar una lista que contenga código de

asignatura, código de carrera y cantidad de aprobados a partir del 01/12/2001

SELECT cod-as, cod-car, COUNT(*) FROM actividades WHERE fecha > to_date(‘01/12/2001’,’dd/mm/yyyy’) and aprobo = ‘S’ GROUP BY cod-as, cod-car;

Page 28: Bases de Datos 1

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;

Page 29: Bases de Datos 1

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

Page 30: Bases de Datos 1

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>)

Page 31: Bases de Datos 1

MATERIAL DE CONSULTATutorial de SQL

http://www.w3schools.com/sql/default.asp

Tutorial interactivo de SQL http://sqlzoo.net/

Documentación PostgreSQL http://www.postgresql.org/docs/