sql - bases de datos 2 - tecnologo de informatica · 2016. 4. 20. · structured query language...

99
SQL Bases de Datos 2 - Tecnologo de Informatica BD2 - SQL

Upload: others

Post on 10-Aug-2021

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

SQLBases de Datos 2 - Tecnologo de Informatica

BD2 - SQL

Page 2: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

Outline

1 Structured Query Language (SQL)Introducción y características

2 SQL como Data Definition LanguageConceptos básicos, Tabla baseTabla virtual, Vista MaterializadaTipos de datosRestricciones, Acciones por violación, Valores pordefecto

3 SQL como Data Manipulation LanguageTablas concatenadas (INNER/OUTER JOIN)Valores NULLConsultas anidadas y comparación deconjuntos/multiconjuntosFunciones de agregación y agrupamiento de tuplasConstructor CASE y consultas recursivas

BD2 - SQL

Page 3: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

Outline

1 Structured Query Language (SQL)Introducción y características

2 SQL como Data Definition LanguageConceptos básicos, Tabla baseTabla virtual, Vista MaterializadaTipos de datosRestricciones, Acciones por violación, Valores pordefecto

3 SQL como Data Manipulation LanguageTablas concatenadas (INNER/OUTER JOIN)Valores NULLConsultas anidadas y comparación deconjuntos/multiconjuntosFunciones de agregación y agrupamiento de tuplasConstructor CASE y consultas recursivas

BD2 - SQL

Page 4: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

Outline

1 Structured Query Language (SQL)Introducción y características

2 SQL como Data Definition LanguageConceptos básicos, Tabla baseTabla virtual, Vista MaterializadaTipos de datosRestricciones, Acciones por violación, Valores pordefecto

3 SQL como Data Manipulation LanguageTablas concatenadas (INNER/OUTER JOIN)Valores NULLConsultas anidadas y comparación deconjuntos/multiconjuntosFunciones de agregación y agrupamiento de tuplasConstructor CASE y consultas recursivas

BD2 - SQL

Page 5: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

Structured Query Language (SQL)Historia

SQL significa Lenguaje de consulta estructurado(Sructured Query Language). Originalmente llamadoSEQUEL (Sructured English QUEry Language).En 1986 el Instituto nacional americano de normalización(ANSI, American National Standards Institute) y laOrganización internacional para la normalización (ISO,International Standards Organization) estandarizaron unaprimer versión denominada SQL-86 (o SQL1).Luego le siguieron las versiones SQL-92 (o SQL2), el másampliamente conocido SQL-99 (o SQL3), lasactualizaciones SQL:2003 y SQL:2006 que incorporaronfuncionalidades de XML, SQL:2008 y la última estableSQL:2011.Comenzando con SQL-99, el standard se divide en laespecificación de un nucleo y extensiones.

BD2 - SQL

Page 6: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

Structured Query Language (SQL)Características de SQL Standard

Opera sobre multiconjuntos de tuplas:No elimina automáticamente tuplas repetidas.El mismo lenguaje puede ser usado:

En forma interactiva (Ej.: consola)Embebido en un lenguaje de programación

ISO/IEC 9075-2:2011

BD2 - SQL

Page 7: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

Structured Query Language (SQL)Características de SQL Standard

Su poder de expresión incluye el álgebra relacional y laextiende.Se identifican dos sublenguajes:

DDL (Data Definition Language):Permite crear, modificar y eliminar objetos de la base.EJ.: CREATE, ALTER, DROP

DML (Data Manipulation Language):Permite crear, modificar, eliminar y recuperar datos.EJ.: INSERT, UPDATE, DELETE, SELECT

BD2 - SQL

Page 8: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

Outline

1 Structured Query Language (SQL)Introducción y características

2 SQL como Data Definition LanguageConceptos básicos, Tabla baseTabla virtual, Vista MaterializadaTipos de datosRestricciones, Acciones por violación, Valores pordefecto

3 SQL como Data Manipulation LanguageTablas concatenadas (INNER/OUTER JOIN)Valores NULLConsultas anidadas y comparación deconjuntos/multiconjuntosFunciones de agregación y agrupamiento de tuplasConstructor CASE y consultas recursivas

BD2 - SQL

Page 9: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

Outline

1 Structured Query Language (SQL)Introducción y características

2 SQL como Data Definition LanguageConceptos básicos, Tabla baseTabla virtual, Vista MaterializadaTipos de datosRestricciones, Acciones por violación, Valores pordefecto

3 SQL como Data Manipulation LanguageTablas concatenadas (INNER/OUTER JOIN)Valores NULLConsultas anidadas y comparación deconjuntos/multiconjuntosFunciones de agregación y agrupamiento de tuplasConstructor CASE y consultas recursivas

BD2 - SQL

Page 10: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DDLData Definition Language

DDL permite especificar información acerca de relaciones,incluyendo:

El esquema de cada relación.El dominio de valores asociado a cada atributo.Restricciones de integridad.Más adelante veremos que también otra información comoser:

El conjunto de índices a mantener para cada relación.Información sobre seguridad y autorización para cadarelación.Estructura del almacenamiento físico en disco de cadarelación.

BD2 - SQL

Page 11: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DDL - Tabla¿Qué es una tabla?

SQL utiliza los términos tabla (table), fila (row) y columna(column) para los términos relación, tupla y atributo delmodelo relacional formal, respectivamente.Una tabla es conjunto de valores organizados encolumnas y filas.Es la representación de una relación pero no sonestrictamente equivalentes.

BD2 - SQL

Page 12: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DDL - TablaOperaciones sobre tablas

CREATE TABLECrea una nueva tabla de la base.Parámetros:

Nombre de la tablaNombre de cada columnaTipo de datos de cada columnaRestricciones de clave primaria y clave foránea sobre otrastablas

Los atributos se considerarán ordenados en la secuenciaen que se especifiquen.

ALTER TABLEModifica una tabla existente

DROP TABLEElimina la definición de la tabla (y los datos almacenadosen ella si existen)

BD2 - SQL

Page 13: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DDL - TablaEjemplo

Figura : Esq. base de datos relacional Empresa

BD2 - SQL

Page 14: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DDL - TablaEjemplo

BD2 - SQL

Page 15: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DDL - TablaEjemplo

PRODS(#p, Nombre, Peso, Desc)Contiene todos los productos.

FABS(#f, Nombre, Departamento)Contiene los fabricantes de productos.

VENTAS(#f, #p, Precio)Indica qué fabricante vende qué producto y a que precio.

BD2 - SQL

Page 16: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DDL - TablaEjemplo

Creo la tabla PRODS

CREATE TABLE PRODS(#p integer NOT NULL,Nombre character varying(50),CONSTRAINT prods_pk PRIMARY KEY (#p));

Agrego la columna “Peso” a la tabla PRODS.

ALTER TABLE PRODSADD Peso double precision;

Modifico la especificación de la columna “Peso”.

ALTER TABLE PRODS ALTER COLUMN PesoSET DEFAULT ’0’;

BD2 - SQL

Page 17: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

Outline

1 Structured Query Language (SQL)Introducción y características

2 SQL como Data Definition LanguageConceptos básicos, Tabla baseTabla virtual, Vista MaterializadaTipos de datosRestricciones, Acciones por violación, Valores pordefecto

3 SQL como Data Manipulation LanguageTablas concatenadas (INNER/OUTER JOIN)Valores NULLConsultas anidadas y comparación deconjuntos/multiconjuntosFunciones de agregación y agrupamiento de tuplasConstructor CASE y consultas recursivas

BD2 - SQL

Page 18: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DDL - Vista¿Qué es una vista?

Una vista es una tabla virtual que se basa en el resultadode una consulta.Sus atributos son atributos de tablas o de otras vistas.Pueden usarse en consultas como si fueran tablas.La vista se supone que está siempre actualizada.

Es responsabilidad del DBMS y no del usuario asegurarsede mantener actualizada la vista.

BD2 - SQL

Page 19: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DDL - VistaOperaciones sobre vistas

CREATE VIEWCrea una vista.

ALTER VIEWModifica una vista.

DROP VIEWElimina la vista.

BD2 - SQL

Page 20: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DDL - VistaEjemplo

Quiero ofrecer una vista sobre la tabla PRODS en la queno aparezca el peso.

CREATE VIEW PRODS2 AS (SELECT #p, NombreFROM PRODS )

. . . devuelve sólo el código y nombre de cada producto.Quiero una vista más amigable que la relaciónTRABAJA_EN.

CREATE VIEW TRABAJA_EN1 AS (SELECT Nombre, Apellido1, NombreProyecto, HorasFROM EMPLEADO, PROYECTO, TRABAJA_ENWHERE DniEmpleado = Dni AND NumProy =

NumProyecto)

BD2 - SQL

Page 21: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DDL - Vista MaterializadaImplementación de vistas

Materializar una vista implica la creación física de unatabla de vista temporal cuando la vista es consultada porprimera vez1y se mantiene en la suposición de que seharán otras consultas en la vista.Para actualizar éstas vistas se aplican estrategias deactualización incremental.

Immediate update. Actualiza la vista tan pronto las tablasbase cambian.Lazy update. Actualiza la vista cuando la consulta de lavista lo requiere.Periodic update. Actualiza la vista periodicamente

1El comportamiento por defecto para la materialización de vistas puedevariar según el DBMS

BD2 - SQL

Page 22: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DDL - Vista Materializada

CREATE MATERIALIZED VIEW nombre AS . . .

Si bien la sintaxis básica se respeta, puede variar la formade especificar opciones según el DBMS.Distintos DBMS implementan y ofrecen distintasestrategias de actualzación automáticas.Generalmente, una actualización (mediante sentenciaUPDATE) de vista es factible cuando sólo unaactualización posible en las relaciones base puede lograrel efecto de actualización deseado en la vista.

BD2 - SQL

Page 23: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

Outline

1 Structured Query Language (SQL)Introducción y características

2 SQL como Data Definition LanguageConceptos básicos, Tabla baseTabla virtual, Vista MaterializadaTipos de datosRestricciones, Acciones por violación, Valores pordefecto

3 SQL como Data Manipulation LanguageTablas concatenadas (INNER/OUTER JOIN)Valores NULLConsultas anidadas y comparación deconjuntos/multiconjuntosFunciones de agregación y agrupamiento de tuplasConstructor CASE y consultas recursivas

BD2 - SQL

Page 24: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DDL - Tipos de datos

Los tipos de datos básicos disponibles para atributos son:Numérico: INTEGER, SMALLINT2, FLOAT(n), REAL1,DOUBLE PRECISION1, DECIMAL, NUMERIC(p,d).Cadenas de caracteres (character-string): CHAR(n),VARCHAR(n), CLOB.Cadenas de bit (bit-string): BIT(n), BIT VARYING(n), BLOBBoolean, puede tomar valores TRUE, FALSE, NULL(UNKNOW)Fecha y hora: TIME, DATE, TIMESTAMP.

Se pueden crear tipos y dominios: TYPE, DOMAIN.

2la presicón dependende de la maquinaBD2 - SQL

Page 25: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DDL - Tipos de datosUser-defined TYPEs

CREATE TYPE se utiliza para crear tipos definidos por elusuario.

CREATE TYPE TDni AS NUMERIC(7,0)

CREATE TABLEEMPLEADO (Dni TDni,SuperDni TDni,...)

BD2 - SQL

Page 26: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DDL - Tipos de datosDOMAIN

CREATE DOMAIN, incluido en SQL-92, permite creardominios definidos por el usuario.

CREATE DOMAIN Nombre CHAR(20) NOT NULL

TYPEs y DOMAINs son similares. DOMAIN puede tenerespecificadas restricciones.

CREATE DOMAIN color VARCHAR(8) CONSTRAINTcolores_permitidos CHECK (VALUE IN(’rojo’, ’verde’,’azul’));

BD2 - SQL

Page 27: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DDL - Tipos de datosTipos Large-Object

Objetos grandes (fotos, videos, pdf, etc.) se almacenancomo Large OBject :blob binary large object: El objeto es una colección de datos

binarios cuya interpretación la realiza una aplicaciónexterna al sistema de base de datos.

clob character large object: El objeto es una gran colección decaracteres.

Cuando una el resultado de una consulta es un LOB, seretorna un puntero en lugar del objeto en si.

BD2 - SQL

Page 28: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

Outline

1 Structured Query Language (SQL)Introducción y características

2 SQL como Data Definition LanguageConceptos básicos, Tabla baseTabla virtual, Vista MaterializadaTipos de datosRestricciones, Acciones por violación, Valores pordefecto

3 SQL como Data Manipulation LanguageTablas concatenadas (INNER/OUTER JOIN)Valores NULLConsultas anidadas y comparación deconjuntos/multiconjuntosFunciones de agregación y agrupamiento de tuplasConstructor CASE y consultas recursivas

BD2 - SQL

Page 29: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DDL - RestriccionesPrimary Key, Foreign Key, Check

PRIMARY KEYEspecifica uno o más atributos que constituyen la claveprincipal de una relación.

FOREIGN KEYEspecifica una restricción de integridad referencial.Acciones por violación: rechazo, SET NULL, CASCADE ySET DEFAULT (deben aplicarse con ON DELETE u ONUPDATE).

CONSTRAINTNombrar restricciones.

CHECKRestricciones que se aplican individualmente a cada tupla.

UNIQUEEspecifica calves (secundarias) alternativas.

BD2 - SQL

Page 30: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DDL - Acciones por violación / Valor por defectoEjemplo Elmasri ed7 fig. 6.2

CREATE TABLE EMPLEADO( ... ,Dno INT NOT NULL DEFAULT 1,CONSTRAINT EMPPK PRIMARY KEY (Dni),CONSTRAINT EMPSUPERFK FOREIGN KEY (SuperDni)

REFERENCES EMPLEADO(Dni) ON DELETE SET NULL ONUPDATE CASCADE,

CONSTRAINT EMPDEPTFK FOREIGN KEY(Dno) REFERENCESDEPARTAMENTO(NumeroDpto) ON DELETE SET DEFAULTON UPDATE CASCADE)

La restricción EMPSUPERFK actualiza SuperDni con valorNULL si se borra la túpla de su supervisor.Si en una sentencia INSERT no se indica el atributo Dno,se carga con valor 1.

BD2 - SQL

Page 31: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DDL - Acciones por violación / Valor por defectoEjemplo Elmasri ed7 fig. 6.2

CREATE TABLE LOCALIZACIONES_DPTO( ... ,PRIMARY KEY (NumeroDpto, UbicacionDpto),FOREIGN KEY (NumeroDpto) REFERENCES

DEPARTAMENTO(NumeroDpto) ON DELETE CASCADE ONUPDATE CASCADE)

Se borrará la túpla si en la tabla DEPARTAMENTO seborra la túpla del departamento NumeroDpto.Si en una túpla de la tabla DEPARTAMENTO se actualizael valor de NumeroDpto, también se actualizará en todatúpla de LOCALIZACIONES_DPTO que haga referencia adicha túpla (mismo valor de NumeroDpto).

BD2 - SQL

Page 32: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

Outline

1 Structured Query Language (SQL)Introducción y características

2 SQL como Data Definition LanguageConceptos básicos, Tabla baseTabla virtual, Vista MaterializadaTipos de datosRestricciones, Acciones por violación, Valores pordefecto

3 SQL como Data Manipulation LanguageTablas concatenadas (INNER/OUTER JOIN)Valores NULLConsultas anidadas y comparación deconjuntos/multiconjuntosFunciones de agregación y agrupamiento de tuplasConstructor CASE y consultas recursivas

BD2 - SQL

Page 33: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DMLData Manipulation Language

Permite crear, modificar, eliminar y recuperar datos:INSERT

Agrega tuplas a una tabla.UPDATE

Cambia tuplas de una tabla.DELETE

Borra tuplas de una tabla.SELECT

Recupera datos.

BD2 - SQL

Page 34: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - INSERTEjemplo

Insertar una nueva venta del producto 530 a precio 15000,para el fabricante 25.

INSERT INTO VENTASVALUES (25, 530, 15000);

¿Por qué funciona?Otra forma es especificar explicitamente los nombres delos atributos que corresponda con cada valor de lasentencia.

INSERT INTO VENTAS(#p, #f, Precio)VALUES (530, 25, 15000);

Atributos no especificados tomaran su valor por defecto(DEFAULT) o NULL.

BD2 - SQL

Page 35: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - INSERTEjemplo

Insertar una nueva venta del producto 530 a precio 15000,para el fabricante 25.

INSERT INTO VENTASVALUES (25, 530, 15000);

¿Por qué funciona?Otra forma es especificar explicitamente los nombres delos atributos que corresponda con cada valor de lasentencia.

INSERT INTO VENTAS(#p, #f, Precio)VALUES (530, 25, 15000);

Atributos no especificados tomaran su valor por defecto(DEFAULT) o NULL.

BD2 - SQL

Page 36: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - INSERTEjemplo

Tabla que contiene nombre, apellido y salario de losempleados que trabajan en el departamento nro 5.

CREATE DEP5_EMPS (Nombre char(50),Apellido char(50) ,Salario float);

¿Cómo podría realizar la carga inicial de esta tabla?

INSERT INTO DEP5_EMPS( Nombre, Apellido, Salario )SELECT Nombre, Apellido1, SueldoFROM EMPLEADOWHERE Dno=5;

Asumo mismo tipo/dominio de atributos.

BD2 - SQL

Page 37: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - DELETEBorrar tuplas

La sentencia DELETE remueve tuplas de una relación.Puede incluir la cláusula WHERE que se utiliza paraseleccionar las tuplas a borrar.Sólo permite borrar tuplas de una relacón a la vez.Dependiendo de la cláusula WHERE, puede borrarse cero,una o más túplas con una misma sentencia DELETE.La ausencia de la cláusula WHERE indica que todas lastuplas de la relación serán borradas.

BD2 - SQL

Page 38: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - DELETEEjemplo

Borrar los empleados con Dni 321 (Dni es clave, entoncesse borrará una tupla o ninguna).

DELETE FROM EMPLEADO WHERE Dni=321

Borrar los empleados con apellido Ochoa.

DELETE FROM EMPLEADOWHERE Apellido1=’Ochoa’ OR Apellido2=’Ochoa’

Borrar los empleados del departamento 5.

DELETE FROM EMPLEADO WHERE Dno=5

Borrar todos los empleados (ausencia del WHERE).

DELETE FROM EMPLEADO

BD2 - SQL

Page 39: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - UPDATEActualizar tuplas

La sentencia UPDATE se utiliza para modificar valores deatributos de una o más tuplas.Puede incluir la cláusula WHERE para seleccionar lastuplas a actualizar.Sólo permite actualizar tuplas de una relacón pero. . .

Si se actualiza el valor de una clave primaria podríapropagarse a los valores foreign keys de tuplas en otrasrelaciones (ver previo ejemplo con ON UPDATECASCADE).

Dependiendo de la cláusula WHERE, puede actualizarseel/los atributo/os de cero, una o más túplas con una mismasentencia UPDATE.La ausencia de la cláusula WHERE indica que todas lastuplas de la relación serán actualizadas.

BD2 - SQL

Page 40: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - UPDATE, DELETEEjemplo

Incrementar el precio del producto número 530 en un10 %.

UPDATE VENTASSET Precio = Precio ∗ 1.1WHERE #p = 530;

Incrementar el precio de todo producto en un 2 %.

UPDATE VENTASSET Precio = Precio ∗ 1.02;

Borrar toda la información de ventas con precio mayor a$50000.

DELETE FROM VENTASWHERE Precio = 50000;

BD2 - SQL

Page 41: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - Recuperación de datos

Sentencia SQL que nos permite recuperar información dela base de datos.

SELECT <lista de atributos>FROM <lista de tablas>WHERE <condicion>GROUP BY <expresion>HAVING <expresion>ORDER BY <expresion>;

donde:<lista de atributos> lista de los atributos cuyos valores seránrecuperados por la consulta.<lista de tablas> es una lista de las relaciones necesariaspara procesar la consulta.<condicion> es una expresión condicional (booleana) queidentifica las tuplas que la consulta recuperará (es unperdicado).<expresion> más adelante veremos la expresión de cadacláusula.

BD2 - SQL

Page 42: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - Recuperación de datosSELECT

La cláusula SELECT lista los atributos que queremos queaparezcan en el resultado de la consulta.

¿Encuentra una equivalencia en Álgebra Relacional de lacláusula SELECT?Corresponde a la operación de proyección del álgebrarelacional.

Ejemplo:SELECT Nombre, Apellido1, Apellido2 FROM EMPLEADO

Nota: nombres SQL son case insensitive, ej.:Apellido1 ≡ APELLIDO1 ≡ apellido1.

BD2 - SQL

Page 43: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - Recuperación de datosSELECT

La cláusula SELECT lista los atributos que queremos queaparezcan en el resultado de la consulta.

¿Encuentra una equivalencia en Álgebra Relacional de lacláusula SELECT?Corresponde a la operación de proyección del álgebrarelacional.

Ejemplo:SELECT Nombre, Apellido1, Apellido2 FROM EMPLEADO

Nota: nombres SQL son case insensitive, ej.:Apellido1 ≡ APELLIDO1 ≡ apellido1.

BD2 - SQL

Page 44: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - Recuperación de datosFiltrado de repetidos

SQL permíte que una tabla (relación) tenga dos o mástuplas idénticas en todos sus valores de atributo.Por tanto, en general, una tabla SQL no es un conjunto detuplas. Es un multiconjunto (o bolsa).Algunas relaciones SQL están restringidas a ser conjuntosporque se ha declarado una restricción de clave o porquese ha utilizado la keyword DISTINCT en la cláusulaSELECT.

BD2 - SQL

Page 45: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - Filtrado de repetidosRazones para no eliminar automáticamente tuplas repetidas

La eliminación de duplicados es una operación muycostosa.El usuario puede querer ver las tuplas duplicadas en elresultado de una consulta.Al aplicar una función de agregación a las tuplas, en lamayoría de los casos no queremos eliminar los duplicados(veremos más adelante).

BD2 - SQL

Page 46: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - Filtrado de repetidosEjemplo

Dar los #p de los productos vendidos, filtrando losrepetidos.

SELECT DISTINCT #pFROM VENTAS

Dar los precios a los que se vende cada producto.

SELECT DISTINCT #p, PrecioFROM VENTAS

La cláusula DISTINCT filtra tuplas repetidas.

BD2 - SQL

Page 47: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - SELECT* y expresiones aritméticas

Un asterisco en SELECT denota “todos los atributos” delesquema resultado.

SELECT ∗ FROM VENTAS;

. . . es equivalente a:

SELECT #f, #p, Precio FROM VENTAS;

La cláusula también puede contener expresionesaritméticas que involucren los operadores +, -, * y /, yoperen sobre constantes o atributos de túplas.La siguiente consulta retorna el nombre del Empleado y eltotal de salarios que percibe en el año.

SELECT Nombre, Salario ∗ 12 FROM EMPLEADO;

BD2 - SQL

Page 48: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - WHERE

La cláusula where especifica condiciones que el resultadodebe cumplir.

Corresponde al predicado de la operación de selección delálgebra relacional.

Las comparaciones sobre el resultado pueden sercombinadas utilizando conectores lógicos: AND, OR yNOT.Las comparaciones también pueden aplicarse sobreresultados de expresiones aritméticas.

BD2 - SQL

Page 49: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - WHEREOperadores de comparación

Operadores de comparación aplicables en las condiciones dela cláusula WHERE:

=, >, >=, <, <=, <>BETWEEN m AND nEntre m y n (inclusive)IN(lista)Se encuentra en la listaLIKESe ajusta a un patrón.IS [NOT] NULLEs/No es valor nulo (veremos ejemplos más adelante)

BD2 - SQL

Page 50: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - Recuperación de datosEjemplo

Dar el precio al que vende el producto 7 el fabricante 2.

SELECT PrecioFROM VENTASWHERE #f = 2 and #p = 7;

Dar el número de los fabricantes que vendieron elproducto 4 a menos de $100.

SELECT #fFROM VENTASWHERE Precio < 100 and #p = 4;

¿Qué expresión utilizaría en álgebra relacional?

BD2 - SQL

Page 51: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - Recuperación de datosFROM

La cláusula FROM lista las relaciones involucradas en laconsulta.

Corresponde con la operación producto cartesiano delálgebra relacional.

Ejemplo: Obtener el producto cartesiano de las ventas, losfabricantes y los productos.

SELECT ∗FROM VENTAS, PRODS

genera todo posible par venta-producto, con todos losatributos de ambas relaciones.

BD2 - SQL

Page 52: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - Tablas como conjuntosUNION, EXCEPT, INTERSECT

SQL incorpora las operaciones del álgebra relacional.Únion de conjuntos: UNIONDiferencia de conjuntos: EXCEPT (MINUS)Intersección de conjuntos: INTERSECT

Las relaciones resultantes de estas operaciones sonconjuntos de tuplas.Precondición: se aplican a las relaciones compatibles conla unión.

Mismos atributosy aparecen en el mismo orden en ambas relaciones.

BD2 - SQL

Page 53: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - UNIONEjemplos

Dar los #f que son de Montevideo o que venden algúnproducto a precio mayor que $500.

SELECT #f FROM FABSWHERE departamento=’Montevideo’UNIONSELECT #f FROM VENTASWHERE Precio > 500;

La UNION elimina tuplas repetidas.

BD2 - SQL

Page 54: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - Diferencia (EXCEPT, MINUS)Ejemplos

Dar los #f que no venden ningún producto.

SELECT #f FROM FABSEXCEPTSELECT #f FROM VENTAS;

Hay otras alternativas.

SELECT #f FROM FABSWHERE #f NOT IN ( SELECT #f FROM VENTAS );

BD2 - SQL

Page 55: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - Tablas como multiconjuntoUNION ALL, EXCEPT ALL, INTERSECT ALL

SQL también dispone de las operaciones multiconjuntocorrespondientes, que van seguidas por la palabra claveALL

UNION ALL, EXCEPT ALL, INTERSECT ALL.

Sus resultados son multiconjuntos. Es decir, losduplicados no se eliminan.

BD2 - SQL

Page 56: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - UNION ALL, EXCEPT ALL, INTERSECT ALLEjemplos

R

Aa1a2a2a3

S

Aa1a2a4a5

R UNION ALL S

Aa1a1a2a2a2a3a4a5

R EXCEPT ALL S

Aa2a3

R INTERSECT ALL S

Aa1a2

BD2 - SQL

Page 57: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - Orden de tuplasORDER BY

Dar los #p de los productos fabricados, pero ordenados enforma ascendente.

SELECT #pFROM VENTASORDER BY #p ASC;

La cláusula ORDER BY permite indicar el campo por elcual se ordena el resultado.Se indica el orden ascendente o descendente (ASC oDESC)

BD2 - SQL

Page 58: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - Resolver ambiguedades de nombreRenombre de atributos, Alias, Referencia explícita

Dar los nombres de fabricantes y los nombres de losproductos que venden.

SELECT Nombre, NombreFROM VENTAS, FABS, PRODSWHERE VENTAS.#f=FABS.#f AND VENTAS.#p=PRODS.#p

Una forma de resolver la ambiguedad es indicar la tablaexplícitamente.

SELECT FABS.Nombre, PRODS.NombreFROM VENTAS, FABS, PRODSWHERE VENTAS.#f=FABS.#f AND

VENTAS.#p=PRODS.#p

BD2 - SQL

Page 59: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - Resolver ambiguedades de nombreRenombre de atributos, Alias, Referencia explícita

Dar los nombres de fabricantes y los nombres de losproductos que venden.

SELECT Nombre, NombreFROM VENTAS, FABS, PRODSWHERE VENTAS.#f=FABS.#f AND VENTAS.#p=PRODS.#p

Una forma de resolver la ambiguedad es indicar la tablaexplícitamente.

SELECT FABS.Nombre, PRODS.NombreFROM VENTAS, FABS, PRODSWHERE VENTAS.#f=FABS.#f AND

VENTAS.#p=PRODS.#p

BD2 - SQL

Page 60: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - Alias y Renombre de atributosEjemplo

También se puede asignar un alias a las tablas.En este ejemplo se asignan diferentes alias a la “misma”tabla.

SELECT E.Apellido1, S.Apellido1FROM EMPLEADO AS E, EMPLEADO AS SWHERE E.SuperDni=S.Dni;

La sentencias AS permite renombrar los atributos.

SELECT E.Ap1, S.Apellido1FROM EMPLEADO AS E(Nombre, Ap1, Ap2, ..., SsDni,

Dno), EMPLEADO AS SWHERE E.SsDni=S.Dni;

BD2 - SQL

Page 61: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

Outline

1 Structured Query Language (SQL)Introducción y características

2 SQL como Data Definition LanguageConceptos básicos, Tabla baseTabla virtual, Vista MaterializadaTipos de datosRestricciones, Acciones por violación, Valores pordefecto

3 SQL como Data Manipulation LanguageTablas concatenadas (INNER/OUTER JOIN)Valores NULLConsultas anidadas y comparación deconjuntos/multiconjuntosFunciones de agregación y agrupamiento de tuplasConstructor CASE y consultas recursivas

BD2 - SQL

Page 62: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - INNER JOINTablas concatenadas y concatenación interna

El concepto de tabla concatenada (o relaciónconcatenada) se incorporó a SQL para poder especificaruna tabla como resultado de una operación deconcatenación en la cláusula from de una consulta.Esta estructura es más fácil que mezclar todas lascondiciones de selección y concatenación en la cláusulaWHERE.El tipo predeterminado de concatenación en una tablaconcatenada es una concatenación interna

La tupla se incluye en el resultado si en la otra relaciónexiste una tupla coincidente.

BD2 - SQL

Page 63: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - INNER JOINEjemplo - Imponiendo la igualdad

Dar los nombres de los fabricantes y los productos quevenden.

SELECT Nombre, #pFROM VENTAS, FABSWHERE VENTAS.#f = FABS.#f;

Dar los nombres de fabricantes y los productos quevenden, tales que el precio es $100.

SELECT Nombre, #pFROM VENTAS, FABSWHERE VENTAS.#f = FABS.#f AND Precio = 100;

BD2 - SQL

Page 64: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - INNER JOINEjemplo - Utilizando operador JOIN

SELECT Nombre, #pFROM (VENTAS JOIN FABS ON VENTAS.#f=FABS.#f)

SELECT Nombre, #pFROM (VENTAS JOIN FABS ON VENTAS.#f=FABS.#f)WHERE Precio = 100;

En lugar de imponer la igualdad utilizo el operador JOINpara resolver las consultas previas.

BD2 - SQL

Page 65: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - INNER JOINEjemplo - Utilizando operador JOIN

SELECT Nombre, #pFROM (VENTAS JOIN FABS ON VENTAS.#f=FABS.#f)

SELECT Nombre, #pFROM (VENTAS JOIN FABS ON VENTAS.#f=FABS.#f)WHERE Precio = 100;

En lugar de imponer la igualdad utilizo el operador JOINpara resolver las consultas previas.

BD2 - SQL

Page 66: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - NATURAL JOINEjemplo

SELECT Nombre, #pFROM (VENTAS NATURAL JOIN FABS)

SELECT Nombre, #pFROM (VENTAS NATURAL JOIN FABS)WHERE Precio = 100;

No se especifica condición de concatenación alguna.Se crea una condición EQUIJOIN implícita para cada parde atributos con el mismo nombre (ejemplo el atributo #f).

BD2 - SQL

Page 67: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - NATURAL JOINEjemplo

SELECT Nombre, #pFROM (VENTAS NATURAL JOIN FABS)

SELECT Nombre, #pFROM (VENTAS NATURAL JOIN FABS)WHERE Precio = 100;

No se especifica condición de concatenación alguna.Se crea una condición EQUIJOIN implícita para cada parde atributos con el mismo nombre (ejemplo el atributo #f).

BD2 - SQL

Page 68: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - NATURAL JOIN

Apareceran en el resultad las túplas con el mismo valorpara todos los atributos comunes, y se conservará solouna copia para cada columna en común.Hay que tener cuidado: atributos con el mismo nombre yque no tienen relación pueden ser comparadosincorrectamente.Ejemplo: ¿qué recupera esta consulta?

SELECT ∗FROM FABS NATURAL JOIN PRODS

BD2 - SQL

Page 69: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - OUTER JOINConcatenación externa, LEFT, RIGHT y FULL

Es una extensión de la operación join que evita perdida deinformación.Agrega al resultado del join las túplas de una relación queno coincide con la otra ralación.Usa valores NULL para rellenar.

BD2 - SQL

Page 70: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - OUTER JOINConcatenación externa, LEFT, RIGHT y FULL

Obtener para cada empleado su apellido y el de susupervisor.

SELECT E.Apellido1, S.Apellido1FROM (EMPLEADO AS E JOIN EMPLEADO AS S ON

E.SuperDni=S.Dni);

Ahora quiero que se incluyan todos los empleados. Estoes, tengan o no supervisor.

SELECT E.Apellido1, S.Apellido1FROM (EMPLEADO AS E LEFT OUTER JOIN

EMPLEADO AS S ON E.SuperDni=S.Dni);

BD2 - SQL

Page 71: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - OUTER JOINConcatenación externa, LEFT, RIGHT y FULL

Obtener para cada empleado su apellido y el de susupervisor.

SELECT E.Apellido1, S.Apellido1FROM (EMPLEADO AS E JOIN EMPLEADO AS S ON

E.SuperDni=S.Dni);

Ahora quiero que se incluyan todos los empleados. Estoes, tengan o no supervisor.

SELECT E.Apellido1, S.Apellido1FROM (EMPLEADO AS E LEFT OUTER JOIN

EMPLEADO AS S ON E.SuperDni=S.Dni);

BD2 - SQL

Page 72: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - OUTER JOINConcatenación externa, LEFT, RIGHT y FULL

Obtener para cada empleado su apellido y el de susupervisor.

SELECT E.Apellido1, S.Apellido1FROM (EMPLEADO AS E JOIN EMPLEADO AS S ON

E.SuperDni=S.Dni);

Ahora quiero que se incluyan todos los empleados. Estoes, tengan o no supervisor.

SELECT E.Apellido1, S.Apellido1FROM (EMPLEADO AS E LEFT OUTER JOIN

EMPLEADO AS S ON E.SuperDni=S.Dni);

BD2 - SQL

Page 73: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - OUTER JOINConcatenación externa, LEFT, RIGHT y FULL

Sea la concatenación entre las tablas T1 y T2,“...T1 <operador_concatenacion> T2...”

Si <operador_concatenacion>:LEFT JOIN se agrega, para cada tupla de T1 que nosatisface la condición de JOIN con NINGUNA de T2, unafila con NULOS (NULLs) en las columnas de T2.RIGHT JOIN análogo al LEFT pero se incluyen todos losde T2FULL JOIN equivale a la unión del LEFT y RIGHT.

BD2 - SQL

Page 74: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - CROSS JOINProducto cartesiano

La keyword CROSS JOIN es utilizada para especificar laoperación Producto Cartesiano.Como vimos en álgebra relacional, este genera todas lasposibles combinaciones de tuplas.Se debe utilizar con cuidado.

BD2 - SQL

Page 75: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

Outline

1 Structured Query Language (SQL)Introducción y características

2 SQL como Data Definition LanguageConceptos básicos, Tabla baseTabla virtual, Vista MaterializadaTipos de datosRestricciones, Acciones por violación, Valores pordefecto

3 SQL como Data Manipulation LanguageTablas concatenadas (INNER/OUTER JOIN)Valores NULLConsultas anidadas y comparación deconjuntos/multiconjuntosFunciones de agregación y agrupamiento de tuplasConstructor CASE y consultas recursivas

BD2 - SQL

Page 76: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - Valores NULLComparaciones con valores NULL y Lógica de tres valores

El valor NULL tiene una de tres interpretaciones:Valor desconocido (Unknown). Existe, pero no se conoce.Valor no disponible. Existe, pero no se especifíca apropósito.Atributo no aplicable. No definido para esta tupla.

El resultado de cualquier operación aritmética queinvolucre un valor NULL es NULL.Cuando se compara un atributo con valor NULL, elresultado se considera desconocido (podría ser TRUE opodría ser FALSE).SQL usa una “Lógica de tres valores” cuyos valores sonTRUE, FALSE y UNKNOWN.

BD2 - SQL

Page 77: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - Valores NULLLógica de tres valores

Figura : Logica de tres valores

BD2 - SQL

Page 78: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - Valores NULLEs o no es

SQL permite chequear en una consulta si un valor es nulo.Predicados: IS NULL, IS NOT NULLEjemplo:

Devolver los nombres de los fabricantes de los que no seconoce el departamento donde trabajan.

SELECT NombreFROM FABSWHERE departamento IS NULL;

Nombre y apellidos de los empleados que no tienen unsupervisor.

SELECT Nombre, Apellido1, Apellido2FROM EMPLEADOWHERE SuperDni IS NULL;

BD2 - SQL

Page 79: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

Outline

1 Structured Query Language (SQL)Introducción y características

2 SQL como Data Definition LanguageConceptos básicos, Tabla baseTabla virtual, Vista MaterializadaTipos de datosRestricciones, Acciones por violación, Valores pordefecto

3 SQL como Data Manipulation LanguageTablas concatenadas (INNER/OUTER JOIN)Valores NULLConsultas anidadas y comparación deconjuntos/multiconjuntosFunciones de agregación y agrupamiento de tuplasConstructor CASE y consultas recursivas

BD2 - SQL

Page 80: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - Consultas anidadasConsulta anidada y consulta externa

Permiten obtener valores existentes en la base de datospara usarlos después en una comparación.Son bloques competos select-from-where que puedenaparecer dentro de la cláusula WHERE o SELECT u otras.Se le llama consulta externa (outer query) a la consultadonde se anidan éstas consultas.

BD2 - SQL

Page 81: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - Consultas anidadasEjemplos

Dar los nombres de los fabricantes que venden productosque también son vendidos por el fabricante número 1.

SELECT f.NombreFROM FABS f, VENTAS vWHERE f.#f = v.#f AND f.#f <> 1 AND v.#p IN ( SELECT

#p FROM VENTAS WHERE VENTAS.#f=1 )

BD2 - SQL

Page 82: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - Comparación de conjuntos/multiconjuntosIN, ANY, ALL

Los operadores/keywords IN, ANY, ALL permiten comprarcon conjuntos o multiconjuntos.En el ejemplo anterior se introduce el operador decomparación IN que compara un valor con un conjunto (omulticonjunto) de valores V y se evalúa TRUE si v es unode los elementos de V.El keyword ANY (o SOME) se puede combinar conoperadores: =, >, >=, <, <= y <>.

Ej. = ANY se comporta igual que el operador IN.El keyword ALL también puede combinarse con dichosoperadores.

Ej. > ALL retornará TRUE si el valor v es mayor que todoslos valores del conjunto o multiconjunto.

BD2 - SQL

Page 83: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - EXISTS y UNIQUE

EXISTS y UNIQUE son funciones booleanas que retornanTRUE o FALSE.EXISTS

Se utiliza para chequear si el resultado de una consultaanidada es vacio o no.Retorna TRUE si dicho resultado contiene al menos unatupla.

UNIQUE( Q )Retorna TRUE si no hay tuplas duplicadas en el resultadode la consulta Q.Puede ser utilizada para probar si el resultado de unaconsulta anidada es un conjunto (no contiene duplicados) oes un multiconjunto (existen duplicados).

BD2 - SQL

Page 84: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

Outline

1 Structured Query Language (SQL)Introducción y características

2 SQL como Data Definition LanguageConceptos básicos, Tabla baseTabla virtual, Vista MaterializadaTipos de datosRestricciones, Acciones por violación, Valores pordefecto

3 SQL como Data Manipulation LanguageTablas concatenadas (INNER/OUTER JOIN)Valores NULLConsultas anidadas y comparación deconjuntos/multiconjuntosFunciones de agregación y agrupamiento de tuplasConstructor CASE y consultas recursivas

BD2 - SQL

Page 85: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - Funciones de agregaciónCOUNT, SUM, MIN, MAX, AVG, RANK

Nos permiten resumir información de varias tuplas en unsimple tupla.Por tanto, aplican sobre conjutos de tuplas, no sobretuplas individuales.Ej.: Obtener la suma de sueldos de todos los empleados,el sueldo más bajo, el más alto y calcular el sueldopromedio.

SELECT SUM (Sueldo), MAX (Sueldo), MIN (Sueldo),AVG (Sueldo)

FROM EMPLEADO;

Ej.: Total de fabricantes.

SELECT COUNT(∗) FROM FABS;

BD2 - SQL

Page 86: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - Funciones de agregaciónCOUNT

Número de empleados (cuenta el número de túplas).

SELECT COUNT(∗) FROM EMPLEADO;

Número de empleados que tienen un supervisor (ignoraNULLs).

SELECT COUNT(SuperDni) FROM EMPLEADO;

Número de empleados que son supervisores.

SELECT COUNT( DISTINCT SuperDni ) FROMEMPLEADO;

BD2 - SQL

Page 87: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - Funciones de agregaciónRANK

Ranking se realiza en combinación con un especificaciónde orden.

SELECT Dni, RANK() OVER (ORDER BY horas desc)AS dedicacion

FROM TRABAJA_EN;

Una cláusula ORDER BY extra se necesita para ordenar elresultado en función del ranking.

SELECT Dni, NumProy, RANK() OVER (ORDER BYhoras desc) AS Dedicacion

FROM TRABAJA_ENORDER BY Dedicacion;

¿De qué otra forma se puede implementar?

BD2 - SQL

Page 88: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - Funciones de agregaciónRANK

Se pueden especificar varias cláusulas rank en una mismacláusula SELECT.El ranking se realiza lueg de aplicar la cláusula GROUPBY.SQL:1999 permite que el usuario especifique si rankearlos NULLs al final (last) o primeros (first).

SELECT Dni, RANK() OVER (ORDER BY horas descNULLS LAST) AS dedicacion

FROM TRABAJA_EN;

Puede utilizarse para encontrar los top-n.Es más general que la cláusula LIMIT que soporta muchasbases de datos.

BD2 - SQL

Page 89: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - Agrupamiento de tuplasGROUP BY

En ciertas situaciones se quiere aplicar funciones deagregación a subgrupos de tuplas en una relación, dondelos subgrupos se confeccionan en base a algunos valoresde atributos.Ejemplo:

Dar, para cada fabricante, la cantidad de productos quevende.

Esto implica:Tomar cada grupo de tuplas en VENTAS correspondiente aun fabricante.Contar la cantidad de tuplas en el grupo.

Para realizar esta operación es necesaria la cláusulaGROUP BY.

BD2 - SQL

Page 90: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - Agrupamiento de tuplasGROUP BY

Es una cláusula más que se agrega al bloqueselect-from-where.

SELECT #f, COUNT(∗)FROM VENTASGROUP BY #f;

¿Cómo funciona?Particiona las ventas en subconjuntos o grupos de tuplasdonde cada grupo corresponde a un fabricante distinto.De cada grupo devuelve el #f del fabricante y la cantidadde tuplas de dicho grupo.

BD2 - SQL

Page 91: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - Agrupamiento de tuplasGROUP BY

En una sentencia SQL que tiene cláusula GROUP BY, lasexpresiones en el SELECT pueden ser sólo:

Atributos presentes en la cláusula GROUP BY.Funciones de agregación sobre atributos.Expresiones aritméticas que utilicen los anteriores.

El agrupamiento se realiza después de aplicar el WHERE.O sea, sobre las tuplas que cumplen la condición.Si existen NULL en el atributo de agrupamiento, se crea ungrupo separado para todas las tuplas con valor NULL endicho atributo.Otro ejemplo:

Empleados agrupados por su fecha de nacimiento.

SELECT FechaNac, COUNT(∗)FROM EMPLEADOGROUP BY FechaNac;

BD2 - SQL

Page 92: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - Agrupamiento de tuplasHAVING

A veces interesa recuperar información de grupos quecumplen cierta condición.Con la cláusula HAVING se pueden especificarcondiciones sobre los grupos.La condición trabaja sobre información resumida delgrupo.Ejemplo:

Dar los nombres de fabricantes que hicieron más de 5ventas sobre productos con #p mayor que 2, junto con eltotal de precio vendido.

SELECT #f, Nombre, SUM(Precio)FROM FABS, VENTASWHERE FABS.#f = VENTAS.#f AND #p > 2GROUP BY #f, NombreHAVING count(∗) > 5;

BD2 - SQL

Page 93: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

Outline

1 Structured Query Language (SQL)Introducción y características

2 SQL como Data Definition LanguageConceptos básicos, Tabla baseTabla virtual, Vista MaterializadaTipos de datosRestricciones, Acciones por violación, Valores pordefecto

3 SQL como Data Manipulation LanguageTablas concatenadas (INNER/OUTER JOIN)Valores NULLConsultas anidadas y comparación deconjuntos/multiconjuntosFunciones de agregación y agrupamiento de tuplasConstructor CASE y consultas recursivas

BD2 - SQL

Page 94: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - Constructor CASE

El constructor CASE suele utilizarse cuando un valorpuede ser diferente según ciertas condiciones.Puede ser utilizado ya sea al recuperar, insertar oactualizar tuplas.Ejemplo:

Aumentamos el sueldo de los empleados según eldepartamento donde trabajan.

UPDATE EMPLEADOSET Sueldo =CASEWHEN Dno=5 THEN Sueldo+2000WHEN Dno=4 THEN Sueldo+1500WHEN Dno=1 THEN Sueldo+3000ELSE Sueldo+500;

BD2 - SQL

Page 95: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - Consultas recursivasWITH [RECURSIVE]

Las consultas WITH, también llamadas Common TableExpressions (CTEs), a grandes rasgos permiten dividirconsultas complicadas en consultas más simples y fácilesde interpretar.Estructura:

WITH RECURSIVE <cte_nombre> (columna, ...) AS (<termino_no_recursivo>UNION ALL<termino_recursivo>)SELECT ... FROM <cte_nombre>;

BD2 - SQL

Page 96: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - Consultas recursivasEjemplo

Un ejemplo de relación recursiva entre tuplas del mismotipo es la relación entre un empleado y un supervisor.En álgebra relacional vimos que no podiamos recuperartodos los supervisados directa e indirectamente porOchoa.

BD2 - SQL

Page 97: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - Consultas recursivasEjemplo - cláusula WITH

WITH RECURSIVE EMP_SUP( EmpDni, SupDni ) AS (SELECT Dni, SuperDniFROM EMPLEADOWHERE SuperDni IN ( SELECT Dni FROM EMPLEADO

WHERE Nombre=’Eduardo’ AND Apellido1=’Ochoa’ )UNIONSELECT E.Dni, E.SuperDniFROM EMPLEADO AS E, EMP_SUP AS SWHERE S.EmpDni = E.SuperDni)SELECT ∗ FROM EMP_SUP;

BD2 - SQL

Page 98: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - Consultas recursivasWITH [RECURSIVE]

Sin recursión, un programa no-recursivo y no-iterativo solopuede realizar un número fijo de JOINs de la relaciónEMPLEADO consigo misma.Esto solo nos podría dar un número fijo de niveles desupervisores.Dada una consulta no-recursiva, podemos construir unabase de datos con más niveles de supervisión en loscuales la consulta no va a funcionar.Alternativamente: tendríamos que escribir unprocedimiento para iterar tantas veces como seanecesario.

BD2 - SQL

Page 99: SQL - Bases de Datos 2 - Tecnologo de Informatica · 2016. 4. 20. · Structured Query Language (SQL) Historia SQL significa Lenguaje de consulta estructurado (Sructured Query Language)

DML - Consultas recursivasEjemplo - cláusula CONNECT BY de Oracle

SELECT Dni, SuperDniFROM EMPLEADOCONNECT BY PRIOR Dni = SuperDniSTART WITH SuperDni IN ( SELECT Dni FROM

EMPLEADO WHERE Nombre=’Eduardo’ ANDApellido1=’Ochoa’ )

BD2 - SQL