Bases de Datos Relacionales III

Documentos relacionados
Informática Básica Práctica Tema 3 Ejercicios de SQL

Bases de Datos I Práctica 1 Ejercicios de SQL

Bases de Datos Ejercicios de SQL

Unidad. Lenguaje SQL. (Structured Query Language)

Ampliación de Bases de Datos Práctica 1: El lenguaje PL/SQL de Oracle Sesión 1: Introducción al PL/SQL

Ejercicios SQL - Select TutorialesNET Versión Revisión 1 25 de julio de 2015

Creación de Vistas. Copyright Oracle Corporation, All rights reserved.

Tutorial de SQL - El comando SELECT

Escribiendo sentencias básicas de SQL

Subconsultas Multi-Columna. Copyright Oracle Corporation, All rights reserved.

Escritura Básica de Sentencias SQL. Copyright Oracle Corporation, All rights reserved.

UNIDAD DE TRABAJO 2: BASES DE DATOS RELACIONALES

Datos Agregados por medio de Funciones de Grupo. Copyright Oracle Corporation, All rights reserved.

Constraints (Restricciones) Copyright Oracle Corporation, All rights reserved.

Tema 4. Manipulación de datos con SQL

Subconsultas. Copyright Oracle Corporation, All rights reserved.

3. El catálogo 26. Laboratorio de Bases de Datos

Introducción a SQL sobre Oracle

Practicas de BB. DD. ORACLE

Tema 2. Bases de Datos Relacionales

Manipulación de Datos. Copyright Oracle Corporation, All rights reserved.

Introducción al lenguaje SQL

Vistas en InformiX Sistemas de Bases de Datos II EMT CETP A/S Leonardo Carámbula

Universidade da Coruña Departamento de Computación. Ampliación de SQL. Luis A. González Ares.

MANUAL BÁSICO DEL LENGUAJE SQL

Desarrollo de Aplicaciones Informáticas

Instalación de oracle en GNU/Linux Debian o Ubuntu.

Dependiendo de las tareas, podemos clasificar las sentencias SQL en dos tipos:

CAPITULO II Base de datos. Tipos de base de datos. Comandos y consultas. Tipos de bases de datos Comandos y consultas O B J E T I V O S

Creación y Gestión de Tablas. Copyright Oracle Corporation, All rights reserved.

BASES DE DATOS (IG18 Semipresencial) El Modelo Relacional Algebra Relacional y SQL

1. Lenguaje de Definición de Datos. 2. Lenguaje de Manipulación de. Datos. M. C. Gustavo Alfonso Gutiérrez Carreón

Consultas SQL INNER JOIN

Diseño de bases de datos Práctica-1 Definición de datos

m046a Curso Consultando SQL Server 2005/2008 con Transact-SQL, 15 h

Introducción a SQL. Bloque III (Prácticas) Informática Básica - Curso 2010/2011

GONZALEZ VARGAS ANA KAREN GUTIERREZ MUNGUIA LUIS DANIEL TELLEZ ARCOS DIANA FATIMA PROBLEMA A RESOLVER

LENGUAJE DE CONSULTA ESTRUCTURADO (SQL)

Structured Query Language (SQL) Fundamentos de Bases de Datos InCo

Bases de Datos: Structured Query Language (SQL)

1. Introducción Tablas de referencia Expresiones 6

ÍNDICE INTRODUCCIÓN...17

Bases de Datos 2. Teórico

Guía de ejercicios de SQL Prof. Mauricio E. Fernández N. Semestre Agosto-Diciembre de 2012

4. Algebra relacional

ÍNDICE PRIMERA PARTE... 17

: COMPUTACIÓN E INFORMATICA : Ingeniería de Software Ingeniería de Redes y Comunicaciones : Administración de Bases de Datos I : T-INF127

BASES DE DATOS SQL MÁS S DE SQL (DML) OPERADOR UNION (L30) <SELECT1> UNION <SELECT2> UNION <SELECTN> Copyright 2006, 2007 Instituto Gala

Consultas con combinaciones

Curso Querying Microsoft SQL Server 2014 (20461)

SQL. Carlos A. Olarte BDI

Bases de Datos I. Cursada Clase 4: Álgebra relacional y de bolsas Información ausente Claves BASES DE DATOS I

FUNCIONES EN SQL SERVER

Base de Datos. Docente: Ing. Francisco Rodríguez BASE DATOS. Resultados. Internet. Requerimientos

8 SQL SERVER 2008 RA-MA

SQL Server FEMEPA SQL Server 2000

Ser capaces de realizar una consulta dentro de otra

8 MICROSOFT SQL SERVER 2008 R2. CURSO PRÁCTICO RA-MA

6- Combinación de tablas

Temario. Índices simples Árboles B Hashing

Tema 7. Elaboración de consultas básicas de selección. Lenguajes de bases de datos. SQL básico 15/12/2011

Sql Basico. Seminar Introduction

Ing. Santiago C. Pérez Laura Noussan Lettry Carlos Campos

CONSULTAS MULTITABLAS SQL SERVER Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE

Capítulo 3: Álgebra Relacional

ÍNDICE INTRODUCCIÓN...13

Procedimientos almacenados en PL/SQL. Jonathan Medina Gómez Facultad de Ingeniería Universidad de Antioquia

Taller de Introducción a R 2. Manipulación de datos

Conceptos Avanzados de Programación en Internet

UNIDAD 8. Lenguaje SQL (Structured Query Language)

1.264 Tema 7. Introducción a SQL

Bases de Datos SQL 1 SQL. Jorge Pérez R. Universidad de Talca, II Semestre 2006

Manipulación de datos en SQL

EL LENGUAJE DE BASES DE DATOS SQL (DDL, DML, TRIGGERS Y STORE PROCEDURES)

SERVICIO NACIONAL DE APRENDIZAJE SENA

Base de datos I Facultad de Ingeniería. Escuela de computación.

BASES DE DATOS TEMA 4. SQL. UN LENGUAJE DE CONSULTA COMERCIAL PARA BASES DE DATOS RELACIONALES Contenidos generales

El Lenguaje SQL TEMA V. Grupo de Bas ses de Datos Avanzadas Univ. Carlo os III de Madrid. V.1 SQL como Lenguaje de Definición de Datos

Access SQL: DDL y DML. Una empresa de Ingeniería precisa una base de datos para la gestión de sus proyectos.

DML SQL II. Comparaciones con relaciones

S.Q.L. (Lenguaje de Consulta Estructurada)

Temario. Índices simples Árboles B Hashing

Conceptos Avanzados de Cursores Explícitos. Copyright Oracle Corporation, All rights reserved.

Álvaro Herrera Modelamiento Avanzado de Datos con PostgreSQL

LENGUAJE DE MANIPULACIÓN DE DATOS (DML) OPERADORES DE ÁLGEBRA RELACIONAL

SQL (DML) Carlos A. Olarte Gestión y Modelación de SQL Datos (DML)

Tema 4. SQL. Juan Ignacio Rodríguez de León

ÍNDICE. Introducción... Capítulo 1. Novedades de Access

Modulo I: Introducción Gestores de Bases De Datos

DISPARADORES EN SQL DISPARADORES EN SQL:1999 SINTAXIS GENERAL DE UN DISPARADOR EN SQL:1999 SINTAXIS GENERAL DE UN DISPARADOR EN SQL:1999

Sistemas de Datos Curso: Ernesto Chinkes. SQL Básico Algebra Relacional

select nombre from profesores where categoria='aso6';

XQuery. Un lenguaje de consulta para XML.

LENGUAJE SQL. En Mysql se utiliza un subconjunto de SQL (update, insert into, delete, select, truncate,etc).

UNIDAD 1.- PARTE 1 MANIPULACIÓN AVANZADA DE DATOS CON SQL. BASES DE DATOS PARA APLICACIONES. Xochitl Clemente Parra Armando Méndez Morales

OPTIMIZADOR ORACLE. 1. La meta: escoger el modo más eficiente de ejecutar una declaración S.Q.L. FILTER 2 NESTED LOOPS

Transcripción:

Introducción a la Computación Bases de Datos Relacionales III Esteban E. Mocskos (emocskos@dc.uba.ar) Facultad de Ciencias Exactas y Naturales, UBA CONICET 11/06/2013 E. Mocskos (UBA CONICET) Clase 15: Bases de Datos III 11/06/2013 1 / 16

Resumen La clase pasada vimos estos conceptos Clave foránea (Foreign Key) Distintos sabores de SELECT. Las consultas SQL tiene la siguiente forma: Forma general de una query SELECT FROM WHERE FROM: es una lista de nombres de tablas separadas por coma. WHERE: es una expresión de tipo Boolean, si da True se incluye el registro en el conjunto de salida. Si no hay, se lo toma como TRUE para todos los registros evaluados (se incluyen todos). SELECT: es una lista de nombres de campos separados por coma, son los campos que se incluyen en el resultado. Si se usa SELECT * se devuelven todos los campos. E. Mocskos (UBA CONICET) Clase 15: Bases de Datos III 11/06/2013 2 / 16

Producto cartesiano La definición viene de la teoría de conjuntos. A B resulta en otro conjunto cuyos elementos son todos los pares ordenados que se forman tomando el primer elemento del primer conjunto, y el segundo elemento del segundo conjunto. Por ejemplo: A = {1, 2, 3, 4} y B = {a, b}, su producto cartesiano es: A B = {(1, a), (1, b), (2, a), (2, b), (3, a), (3, b), (4, a), (4, b)} El producto cartesiano también puede calcularse en SQL (en lenguaje de Base de Datos, se nota A.B): Producto cartesiano en SQL SELECT * FROM A, B E. Mocskos (UBA CONICET) Clase 15: Bases de Datos III 11/06/2013 3 / 16

Join El resultado obtenido al hacer el producto cartesiano puede ser bastante grande. Si A = n, B = m, entonces A B = n m. La combinación del producto cartesiano y la selección de una parte es común en las queries. Por este motivo, se crea una operación especial que se llama join. Hacer un join es filtrar del producto cartesiano, aquellos pares ordenados que cumplan con una condición particular (un predicado). Por ejemplo: A = {1, 2, 3, 4} y B = {a, b}, A B = {(1, a), (1, b), (2, a), (2, b), (3, a), (3, b), (4, a), (4, b)} Predicado: la primer coordenada sea mayor a 2. Producto cartesiano en SQL SELECT * FROM A, B WHERE A.field> 2 A diferencia de los conjuntos, las tablas tienen campos con nombre. E. Mocskos (UBA CONICET) Clase 15: Bases de Datos III 11/06/2013 4 / 16

Las tablas con las que estuvimos trabajando DEPT DEPTNO DNAME LOC 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON EMP EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 7369 SMITH CLERK 7902 17-DEC-90 4000 20 7499 ALLEN SALESMAN 7698 20-FEB-91 8000 2400 30 7521 WARD SALESMAN 7698 22-FEB-91 6250 2500 20 7566 JONES MANAGER 7839 02-APR-81 14875 20 7654 MARTIN SALESMAN 7698 28-SEP-91 6250 1400 20 7698 BLAKE MANAGER 7839 01-MAY-91 14250 20 7782 CLARK MANAGER 7839 09-JUN-91 12250 20 7788 SCOTT ANALYST 7566 09-DEC-92 15000 20 7839 KING PRESIDENT 17-NOV-91 25000 20 7844 TURNER SALESMAN 7698 09-SEP-91 7500 0 20 7876 ADAMS CLERK 7788 12-JAN-93 5500 20 7900 JAMES CLERK 7698 03-DEC-91 4750 20 7902 FORD ANALYST 7566 03-DEC-91 15000 20 7934 MILLER CLERK 7782 23-JAN-92 6500 20 E. Mocskos (UBA CONICET) Clase 15: Bases de Datos III 11/06/2013 5 / 16

Trabajando con un join Cómo haríamos una consulta que devuelva los empleados junto con el nombre del deptarmento en el que trabajan? Primer consulta con join SELECT * FROM DEPT, EMP WHERE EMP.DEPTNO=DEPT.DEPTNO Cuántos registros tiene el resultado? EMP.DEPT(EMP.DEPTNO=DEPT.DEPTNO) EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO DEPTNO DNAME LOC 7369 SMITH CLERK 7902 17-DEC-90 4000 20 20 RESEARCH DALLAS 7499 ALLEN SALESMAN 7698 20-FEB-91 8000 2400 30 30 SALES CHICAGO 7521 WARD SALESMAN 7698 22-FEB-91 6250 2500 20 20 RESEARCH DALLAS 7566 JONES MANAGER 7839 02-APR-81 14875 20 20 RESEARCH DALLAS 7654 MARTIN SALESMAN 7698 28-SEP-91 6250 1400 20 20 RESEARCH DALLAS 7698 BLAKE MANAGER 7839 01-MAY-91 14250 20 20 RESEARCH DALLAS 7782 CLARK MANAGER 7839 09-JUN-91 12250 20 20 RESEARCH DALLAS 7788 SCOTT ANALYST 7566 09-DEC-92 15000 20 20 RESEARCH DALLAS 7839 KING PRESIDENT 17-NOV-91 25000 20 20 RESEARCH DALLAS 7844 TURNER SALESMAN 7698 09-SEP-91 7500 0 20 20 RESEARCH DALLAS 7876 ADAMS CLERK 7788 12-JAN-93 5500 20 20 RESEARCH DALLAS 7900 JAMES CLERK 7698 03-DEC-91 4750 20 20 RESEARCH DALLAS 7902 FORD ANALYST 7566 03-DEC-91 15000 20 20 RESEARCH DALLAS 7934 MILLER CLERK 7782 23-JAN-92 6500 20 20 RESEARCH DALLAS Debería tener tantos como la tabla original EMP E. Mocskos (UBA CONICET) Clase 15: Bases de Datos III 11/06/2013 6 / 16

Un poco de detalle Qué pasó con los departamentos BOSTON y NEW YORK? No aparecen en ningún registro del resultado. Por qué? Procedimiento de join crear una tabla temporaria T foreach t A do foreach u B do if predicado(t u) then insertar t u en T fi od od devolver T En este caso t u corresponde a crear un nuevo registro en base a la concatenación de los registros t y u. E. Mocskos (UBA CONICET) Clase 15: Bases de Datos III 11/06/2013 7 / 16

Cambiemos levemente el problema DEPT DEPTNO DNAME LOC 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON EMP EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 7521 WARD SALESMAN 7698 22-FEB-91 6250 2500 20 7566 JONES MANAGER 7839 02-APR-81 14875 7654 MARTIN SALESMAN 7698 28-SEP-91 6250 1400 7698 BLAKE MANAGER 7839 01-MAY-91 14250 20 7782 CLARK MANAGER 7839 09-JUN-91 12250 7788 SCOTT ANALYST 7566 09-DEC-92 15000 20 7839 KING PRESIDENT 17-NOV-91 25000 20 7844 TURNER SALESMAN 7698 09-SEP-91 7500 0 20 7876 ADAMS CLERK 7788 12-JAN-93 5500 20 7900 JAMES CLERK 7698 03-DEC-91 4750 E. Mocskos (UBA CONICET) Clase 15: Bases de Datos III 11/06/2013 8 / 16

Qué pasaría en este caso? Supongamos que al quitar los registros (solo por comodidad) no rompí ninguna de las restricciones existentes. Ejecutemos la siguiente consulta: Misma consulta que antes SELECT * FROM DEPT, EMP WHERE EMP.DEPTNO=DEPT.DEPTNO Cuántos registros devuelve? EMP.DEPT(EMP.DEPTNO=DEPT.DEPTNO) EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO DEPTNO DNAME LOC 7521 WARD SALESMAN 7698 22-FEB-91 6250 2500 20 20 RESEARCH DALLAS 7698 BLAKE MANAGER 7839 01-MAY-91 14250 20 20 RESEARCH DALLAS 7788 SCOTT ANALYST 7566 09-DEC-92 15000 20 20 RESEARCH DALLAS 7839 KING PRESIDENT 17-NOV-91 25000 20 20 RESEARCH DALLAS 7844 TURNER SALESMAN 7698 09-SEP-91 7500 0 20 20 RESEARCH DALLAS 7876 ADAMS CLERK 7788 12-JAN-93 5500 20 20 RESEARCH DALLAS Solo quedan aquellos que evalúa a TRUE el predicado o propiedad, aquellos que no tiene contraparte, se descartan. E. Mocskos (UBA CONICET) Clase 15: Bases de Datos III 11/06/2013 9 / 16

Otra forma de expresar la misma consulta Esto se llama impĺıcita: SELECT * FROM DEPT, EMP WHERE EMP.DEPTNO=DEPT.DEPTNO Esta se llama forma expĺıcita: SELECT * FROM DEPT JOIN EMP ON EMP.DEPTNO=DEPT.DEPTNO Las dos dan el mismo resultado. E. Mocskos (UBA CONICET) Clase 15: Bases de Datos III 11/06/2013 10 / 16

Más formas de hacer joins Natural join: SELECT * FROM DEPT NATURAL JOIN EMP. Es una manera corta de hacer un join por igualdad entre las columnas cuyos nombres coinciden en las dos tablas (en el caso particular del ejemplo, se compara DEPTNO en las dos tablas). Outer join: a diferencia del join que vimos hasta ahora, no se descarta los registros que no tiene contraparte en la otra tabla, se dejan en el resultado y se completa la información faltanto con NULL. Se usa la sintaxis expĺıcita. Hay tres tipos: left outer joins: se dejan todos los registros de la tabla de izquierda. right outer joins: idem anterior, pero se dejan todos los de la tabla de la derecha full outer joins: adivinen... E. Mocskos (UBA CONICET) Clase 15: Bases de Datos III 11/06/2013 11 / 16

Aggregations Las funciones de agregación (Aggregation functions) son funciones definidas de un conjunto o multiconjunto (que admite repetición) a un único valor. Ejemplo: min({42, 57, 5, 13, 27})= 5. La función mínimo toma un conjunto de valores y devuelve el mínimo de todos ellos (va de un conjunto a un único valor). Las funciones de agregación se utilizan para extraer información a partir de un conjunto de valores o registros. En la terminología de base de datos, se las conoce como funciones de grupo (group functions). En este caso, la función toma como entrada el conjunto de valores de una columnas (o un subconjunto de una columna) y devuelve un único valor. Los principales usos son: estadísticas, análisis de datos, generación de reportes. En el standard SQL-92 se definen cinco funciones principales de agregación: COUNT, SUM, AVG, MAX, MIN. Algunos DBMS tienen otras adicionales: CORRELATION, STDDEV, VARIANCE, FIRST, LAST. Puede haber más, hay que mirar la documentación del motor utilizado. E. Mocskos (UBA CONICET) Clase 15: Bases de Datos III 11/06/2013 12 / 16

Cómo funciona la agregación Algunas funciones de agregación son sensibles a tener duplicados: SUM, COUNT, AVG Algunos no son sensibles a duplicados: MIN, MAX Hay que tener a mano el uso de DISTINCT para evitarse problemas. Ejemplo de uso de agrecición SELECT MAX(SAL), AVG(SAL) FROM EMP Restricciones de las queries con funciones de agregación: No se pueden anidar. Las funciones de agregación no pueden usarse en el WHERE: WHERE SUM(A)>200 no funciona! En este tipo de consultas, no se pueden agregar otras columnas que no sean funciones de agregación: SELECT SAL, MGR, AVG(SAL) FROM EMP no funciona! E. Mocskos (UBA CONICET) Clase 15: Bases de Datos III 11/06/2013 13 / 16

GROUP BY GROUP BY se usa para construir particiones de los registros de una tabla (subconjuntos disjuntos, intersección vacía entre ellos). Las funciones de agregación puede aplicarse, entonces a las particiones individualmente, logrando tener resultados parciales. Ejemplo de uso de GROUP BY SELECT JOB, MAX(SAL), AVG(SAL) FROM EMP GROUP BY JOB De esta manera, se pueden obtener los datos por tipo de salario (se agrupan los registros que tienen igual JOB). Por como esta definido el GROUP BY, necesariamente tiene que tener un atributo que es único para cada partición de los registros (en nuestro ejemplo es JOB). Esto atributos pueden agregarse al SELECT E. Mocskos (UBA CONICET) Clase 15: Bases de Datos III 11/06/2013 14 / 16

HAVING Vimos que las funciones de agregación no pueden usarse en el WHERE. Si queres filtrar alguna de las particiones que devuelve el GROUP BY, Cómo podríamos hacer? Se puede combinar GROUP BY con HAVING para quedarse solo con aquellas particiones que cumplan con alguna condición. Por ejemplo, nos podemos quedar con los que tengan promedio de salario superior a 10000: Ejemplo de uso de GROUP BY filtrado con HAVING SELECT JOB, MAX(SAL), AVG(SAL) FROM EMP GROUP BY JOB HAVING AVG(SAL)>10000 La condición del HAVING solo puede incluir a las funciones de agregación y a los atributos que definen las particiones del GROUP BY. E. Mocskos (UBA CONICET) Clase 15: Bases de Datos III 11/06/2013 15 / 16

Tarea Usando las tablas EMP y DEPT que definos durante las clase pasadas, hacer: 1 Modificar el esquema de base de datos usando SQLite Studio para modelar el sueldo bruto mensual de cada empleado. Seleccionar los atributos y las modificaciones necesarias al esquema anterior. 2 Llenar La tabla nueva con información de prueba (una cantidad de registros razonables) que incluya las sueldos de al menos cuatro empleados durante los años 2005, 2006, 2007 y 2008. 3 Hacer una consulta que devuelva el mayor de los sueldos de todos los tiempos. 4 Hacer una consulta que devuelva el promedio histórico de sueldos para los vendedores. 5 Hacer una consulta que devuelva todos los sueldos en un período dado para un departamento dado. 6 Hacer una consulta que devuelva el salario máximo, el mínimo y el promedio agrupado por Departamento (deberá mostrar el nombre de departamento en el resultado de la consulta). 7 Hacer una consulta que devuelva el salario máximo, el mínimo y el promedio agrupado por tipo de trabajo, pero solo si el sueldo promedio del grupo es mayor al promedio general de la empresa. E. Mocskos (UBA CONICET) Clase 15: Bases de Datos III 11/06/2013 16 / 16