Bases de Datos. Práctica 7 WinRDBI. Consultas en cálculo relacional y SQL

Documentos relacionados
Bases de Datos Práctica 6 WinRDBI

Departamento de Lenguajes y Sistemas Informáticos

BASES DE DATOS I CONSULTA DE DATOS

Bases de Datos: Structured Query Language (SQL)

Sistemas de Datos Curso: Ernesto Chinkes. Subconsultas Stored Procedures - Triggers

Unidad III: Lenguaje de manipulación de datos (DML) 3.1 Inserción, eliminación y modificación de registros

6.1 Introducción. Fund. Bases de Datos Ing. Felipe Alanís González -ITD- 1

ÍNDICE PRIMERA PARTE... 17

Unidad. Lenguaje SQL. (Structured Query Language)

Bases de Datos 2. Teórico

Bases de Datos SQL - Ejemplos

SQL. Carlos A. Olarte BDI

Bases de Datos Relacionales

EJERCICIOS RESUELTOS

APÉNDICE SQL (Structures Query Language)

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

Consultas SQL INNER JOIN

Temario. Índices simples Árboles B Hashing

A.1. Definiciones de datos en SQL

FUNCIONES EN SQL SERVER

Ser capaces de realizar una consulta dentro de otra

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

3ra. Parte. Bases de Datos Relacionales

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

SQL (Structured Query Language)

CC BASES DE DATOS PRIMAVERA Clase 7: SQL (II) Aidan Hogan

SQL Server FEMEPA SQL Server 2000

S.Q.L. (Lenguaje de Consulta Estructurada) Consultas Avanzadas. Sistemas de Bases de Datos II - ITS EMT CETP

Computación Web (Curso 2015/2016)

Práctica 3: El lenguaje SQL (1ª parte). (4ª sesión)

SQL DML Select. Ges$ón y Modelación de Datos. María Constanza Pabón

Procesamiento y Optimización de Consultas

Ficheros y Bases de Datos Curso Ingeniería Técnica de Informática Primer Parcial. 1-Junio Nombre:

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

Tutorial de SQL - El comando SELECT

o SUM: suma los valores del campo que especifiquemos. Sólo se puede utilizar en columnas numéricas.

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

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

ÍNDICE. Introducción... Capítulo 1. Características, instalación, inicio y entorno de trabajo... 1

Práctica Consultas SQL DML

Aplicaciones de las vistas Concepto de vista Vistas en SQL Vistas en SQL.

Guía de ejercicios de SQL

Taller SQL - SUP. Introducción al Lenguaje SQL. Claúsula Where. Sentencia Select Sentencia Insert Sentencia Update Sentencia Delete

Temario. Índices simples Árboles B Hashing

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

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

Sql Basico. Seminar Introduction

Práctica A: Procedimientos para agrupar y resumir datos

Descriptor del curso. Nombre del curso: Haciendo consultas en SQL Server Descripción:

8 SQL SERVER 2008 RA-MA

Departamento de Lenguajes y Sistemas Informáticos E.T.S. Ingeniería Informática. Universidad de Sevilla. Bases de Datos SQL

Concepto de vista. (con ciertas limitaciones). nivel físico) Una vista es una tabla virtual (no tiene una correspondencia a

SÍLABO. : Obligatorio : Ingeniería de Sistemas : IS0704. : VII Ciclo : 03 Teoría y 02 Práctica : 04 : Lenguaje de Programación II

Procesamiento de Consultas. Carlos A. Olarte BDII

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

Lenguaje de Consulta Estructurado S Q. Lenguaje de Consulta Estructurado. Wael Najjar /

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

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

SQL. Álgebra Relacional Selección y proyección Operaciones sobre conjuntos: unión, intersección, diferencia, producto Reunión natural

Base de datos Lenguaje SQL

Conceptos Avanzados de Bases de datos

select nombre from profesores where categoria='aso6';

Bases de Datos. Lenguajes relacionales

2.5.- El lenguaje estándar SQL

Lenguaje SQL. SQL Structured Query Languaje. Capacidades del Lenguaje. Estructura Básica de una consulta SQL

Práctica 3. Consultas SQL

Ficheros y Bases de Datos Curso Primer Parcial. 7 de FEBRERO de Nombre:

Diseño de Bases de Datos Bases de Datos Documentales Grao en Información e Documentación Curso 2013/2014

Bases de Datos Curso Grado en Ingeniería del Software Examen Junio. Nombre:

Procedimientos para agrupar y resumir datos

MANUAL BÁSICO DEL LENGUAJE SQL

Base de datos con información de Vuelos, Reservas y Aviones

El lenguaje SQL es un lenguaje estándar para el acceso y

BASES DE DATOS I. Algebra Relacional

Octavio Martínez de la Vega Cibiogem 30 de Julio de 2015

SQL. Orígenes y Evolución

ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMAS E INFORMÁTICA

Departamento de Lenguajes y Sistemas Informáticos Avda Reina Mercedes s/n Sevilla

DESCRIPCIÓN ESPECÍFICA NÚCLEO: Núcleo Sector Comercio y Servicios.

Consultas con combinaciones

SERVICIO NACIONAL DE APRENDIZAJE SENA

LENGUAJE DE MANIPULACIÓN DE DATOS (DML) CONSULTA DE DATOS

Práctica 3: El lenguaje SQL (1ª parte). Programa de prácticas: (5ª sesión). Lenguaje SQL: manipulación de datos (consulta y actualización):

BASES DE DATOS - SQL. Javier Enciso

ST31_Querying Microsoft SQL Server

Manipulación de datos en SQL

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

Octavio Mar6nez de la Vega Cibiogem 30 de Julio de 2015

SQL. Fundamentos de Bases de Datos. Concepción de Sistemas de Información Instituto de Computación Facultad de Ingeniería Universidad de la República

Sistemas de Bases de Datos II

EJERCICIOS SQL - TABLAS S, P Y SP


Diseño de bases de datos

SQL. Lenguaje de Consulta Estructurado. Curso básico de SQL (Leire Urcola Carrera)

Manual Práctico de SQL. ORIENTADO A SQL 7.0 Preparado por: Alvaro E. García alvaroegarcia@ubbi.com

SQL SERVER SQL Server 2005 permite tres tipos de operaciones con conjuntos: UNION, disponible en todas las versiones de SQL Server.

DML en SQL. Consultas sencillas usando el DML de SQL

Universidad Ricardo Palma

HOJA DE ASIGNATURA CON DESGLOSE DE UNIDADES TEMÁTICAS

Transcripción:

Departamento de Lenguajes y Sistemas Informáticos E.T.S. Ingeniería Informática. Universidad de Sevilla Avda Reina Mercedes s/n. 41012 Sevilla Tlf/Fax 954 557 139 E-mail lsi@lsi.us.es Web www.lsi.us.es Bases de Datos e.t.s. ingeniería informática Bases de Datos Práctica 7 WinRDBI Consultas en cálculo relacional y SQL Sevilla, abril 2009 V 2009.4.1

Indice 1 CÁLCULO RELACIONAL... 3 1.1 CÁLCULO RELACIONAL ORIENTADO A TUPLAS (CROT).... 4 1.2 EJERCICIOS EN CROT.... 4 1.3 CÁLCULO RELACIONAL ORIENTADO A DOMINIOS (CROD).... 5 1.4 EJERCICIOS EN CROD.... 5 2 SQL... 6 2.1 DIFERENCIAS CON SQL ACCESS.... 6 2.1.1 Join....6 2.1.2 TOP n...7 2.1.3 DISTINCT...7 2.1.4 Consultas anidadas....7 2.2 EJERCICIOS EN SQL... 8 SOLUCIÓN CROT.... 9 SOLUCIÓN CROD... 10 SOLUCIÓN SQL....11 Pág. 2 de 11

1 Cálculo relacional Desde la opción New Query del menú se selecciona el tipo de consulta. Consultas en CROT (.trc) Los nombres de variable (tuplas o dominios) deben empezar por una letra mayúscula. La equivalencia de escritura de los operadores lógicos y cuantificadores se indica en la siguiente tabla: Cálculo Relacional F G F and G F G F or G F not F F G not F or G x F (exists x)(f) ( ) / x ( F) not (exists x)(f) x ( F) (forall x)(f) Pág. 3 de 11

1.1 Cálculo relacional orientado a tuplas (CROT). Variable tupla A libre Variable tupla P Variable tupla A acotada 1.2 Ejercicios en CROT. Con la BD hobbies resolver las siguientes consultas: 1) Relación de hobbies 2) Lista de nombres de personas (Proyección) 3) Nombres de personas y sus aficiones (Join) 4) Personas a las que les gusta el Tenis 5) Personas a las que les gustan todos los hobbies 6) Personas a las que no les gusta nada Pág. 4 de 11

1.3 Cálculo relacional orientado a dominios (CROD). Se utilizará el CROD By-Name ya que el posicional obliga a conocer la posición de cada atributo en el esquema de la relación. Consultas en CROD (.dbn) Variable dominio Px libre Variable tupla Ix acotada Variable dominio Px libre 1.4 Ejercicios en CROD. Con la BD hobbies resolver las siguientes consultas: 1) Personas 2) Personas con idpersona igual a 2 3) Personas con idpersona mayor que 2 4) Personas a las que les gusta el cine 5) Personas a las que no les gusta ningún hobby 6) Personas a las que les gustan todos los hobbies Pág. 5 de 11

2 SQL Desde la opción New Query del menú se selecciona SQL. 2.1 Diferencias con SQL Access. 2.1.1 Join. Hay dos formas de hacer el join en : a) Join natural Ej. SELECT persona, hobby FROM (personas NATURAL JOIN aficiones); b) Join natural RPC Ej. SELECT persona, hobby FROM personas P, aficiones A WHERE A.idPersona=P.idPersona; En Access, la consulta anterior sería: a) Join natural Ej. SELECT persona, hobby FROM (personas AS P JOIN aficiones AS A) ON (A.idPersona=P.idPersona); b) Join natural RPC (igual que ) Ej. SELECT persona, hobby FROM personas P, aficiones A WHERE A.idPersona=P.idPersona; Pág. 6 de 11

2.1.2 TOP n. No está permitido en SQL 2.1.3 DISTINCT En Access no es posible utilizar la cláusula DISTINCT dentro de la función count( ), será necesario hacer SELECT FROM (SELECT.. ) Así por ej. la consulta contar el número de aficiones distintas (hobbies) que hay en la tabla de aficiones quedaría: a) En SQL : SELECT count(distinct hobby) FROM aficiones; b) En SQL Access: SELECT count(*)from (SELECT hobby FROM aficiones GROUP BY hobby) ; 2.1.4 Consultas anidadas. No están permitidas en SQL Así por ej. la consulta persona con el máximo número de aficiones se podría resolver en SQL Access de dos formas: a) SELECT TOP 1 persona, count(*) AS na FROM personas AS P INNER JOIN aficiones AS A ON A.idPersona=P.idPersona GROUP BY persona ORDER BY 2 DESC; b) SELECT persona AS na FROM personas AS P INNER JOIN aficiones AS A ON A.idPersona=P.idPersona GROUP BY persona HAVING count(*) = (SELECT MAX(na) FROM (SELECT persona, count(*) AS na FROM personas AS P INNER JOIN aficiones AS A ON A.idPersona=P.idPersona GROUP BY persona)); En SQL WinRDBI sería necesario hacerlo en varios pasos: cuentaaficionesdecadauno:=select persona,count(*) as na from (personas natural join aficiones) group by persona order by 2 desc; maximoaficiones:=select max(na) maxaf from cuentaaficionesdecadauno; campeon:=select persona from cuentaaficionesdecadauno where na = (select maxaf from maximoaficiones); Pág. 7 de 11

2.2 Ejercicios en SQL. Con la BD hobbies resolver las siguientes consultas: 1) Relación de hobbies 2) Aficiones de cada persona. Ejemplos de join 3) Personas a las que no les gusta ningún hobby 4) Personas a las que les gustan todos los hobbies 5) Personas aficionadas al Tenis 6) Número de aficiones 7) Número de aficiones distintas 8) Número de aficiones de cada uno 9) Número máximo de aficiones que tiene alguien 10) Persona con el número máximo de aficiones 11) Personas que tienen más de una afición Pág. 8 de 11

Solución CROT. % 1) Relación de hobbies qcrot1:={ H.hobby hobbies(h)}; % 2) Lista de nombres de personas (Proyección) qcrot2:= { P.persona personas(p)}; % 3) Nombres de personas y sus aficiones (Join) qcrot3:= { P.persona,A.hobby personas(p) and aficiones(a) and A.idPersona = A.idPersona}; % 4) Personas a las que les gusta el Tenis qcrot4:= { P.persona,A.hobby personas(p) and aficiones(a) and A.idPersona = A.idPersona and A.hobby='Tenis'}; % 5) Personas a las que les gustan todos los hobbies qcrot5_1:= { P.persona personas(p) and (forall H)(not hobbies(h) or (exists A) ( aficiones(a) and A.hobby = H.hobby and P.idPersona = A.idPersona ) ) }; qcrot5_2:= { P.persona personas(p) and not (exists H)( hobbies(h) and not (exists A) ( aficiones(a) and A.hobby = H.hobby and P.idPersona = A.idPersona ) ) }; % 6) Personas a las que no les gusta nada qcrot6:= { P.persona personas(p) and not (exists A)( aficiones(a) and P.idPersona = A.idPersona ) }; Pág. 9 de 11

% 1) Personas qcd1(person:px)<-personas(persona:px); Solución CROD. % 2) Personas con idpersona igual a 2 qcd2(person:px)<-personas(persona:px, idpersona:2); % 3) Personas con idpersona mayor que 2 qcd3(person:px)<-(exists Ix)(personas(persona:Px, idpersona:ix) and Ix>2); % 4) Personas a las que les gusta el cine qcd4(person:px)<-(exists Ix)(personas(persona:Px, idpersona:ix ) and (aficiones(idpersona :Ix, hobby:'cine'))); % 5) Personas a las que no les gusta ningún hobby qcd5(person:px)<-(exists Ix)(personas(persona:Px, idpersona:ix ) and not (aficiones(idpersona :Ix))); % 6) Personas a las que les gustan todos los hobby qcd6a(person:px)<-(exists Ix)(personas(persona:Px, idpersona:ix ) and (forall Hx)(not hobbies(hobby:hx) or aficiones(idpersona :Ix, hobby:hx))); qcd6b(person:px)<-(exists Ix)(personas(persona:Px, idpersona:ix ) and not (exists Hx)(hobbies(hobby:Hx) and not aficiones(idpersona :Ix, hobby:hx))); Pág. 10 de 11

% 1) Relación de hobbies relacionhobbies:=select * from hobbies; Solución SQL. % 2) Aficiones de cada persona. Ejemplos de join joinnatural:= select persona,hobby from (personas natural join aficiones); joinnaturalcomorpc:= select persona,hobby from personas P, aficiones A where A.idPersona=P.idPersona; % 3) Personas a las que no les gusta ningún hobby personassinhobbies:=select persona from personas P where not exists (select * from aficiones A where A.idPersona=P.idPersona); % 4) Personas a las que les gustan todos los hobbies personasaqgustatodo:= select P.persona from personas P where not exists (select * from hobbies H where not exists (select * from aficiones A where A.hobby = H.hobby and A.idPersona=P.idPersona)); % 5) Personas aficionadas al Tenis personasqgustatenis_1:= select persona from personas P where exists (select * from aficiones A where A.idPersona = P.idPersona and A.hobby = 'Tenis'); personasqgustatenis_2:= select persona from (personas natural join aficiones) where hobby = 'Tenis'; % 6) Número de aficiones cuentaaficiones:= select count(*) from aficiones; % 7) Número de aficiones distintas cuentaaficionesdist:= select count(distinct hobby) from aficiones; % 8) Número de aficiones de cada uno cuentaaficionesdecadauno:=select persona,count(*) as na from (personas natural join aficiones) group by persona order by 2 desc; % 9) Número máximo de aficiones que tiene alguien maximoaficiones:=select max(na) maxaf from cuentaaficionesdecadauno; % 10) Persona con el número máximo de aficiones campeon:=select persona from cuentaaficionesdecadauno where na = (select maxaf from maximoaficiones); % 11) Personas que tienen más de una afición quientienemasdeunaaficion:=select persona,count(*) as na from (personas natural join aficiones) group by persona having count(*)>1; Pág. 11 de 11