SUBCONSULTAS SUBCONSULTAS

Documentos relacionados
Práctica Obtener el código y el doble del precio de los artículos cuyo precio es inferior a 5 céntimos de euro.

FICHEROS Y BASES DE DATOS 2º ITIG 23/9/2000

Boletín de Problemas de la Asignatura II18 Bases de Datos. Ingeniería Informática Universitat Jaume I

select nombre from profesores where categoria='aso6';

EJERCICIOS RESUELTOS

FUNCIONES EN SQL SERVER

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

1. DML. Las subconsultas

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

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

LAS SUBCONSULTAS SQL SERVER Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE

EXISTS y NOT EXISTS. Empleados que no trabajan en el proyecto 527.

DML SQL II. Comparaciones con relaciones

SQL. Orígenes y Evolución

Práctica 1: Contenido

1. Dadas las tablas ALUM y NUEVOS, insertar en la tabla ALUM los nuevos alumnos.

Unidad. Lenguaje SQL. (Structured Query Language)

ÍNDICE INTRODUCCIÓN...13

ÍNDICE PRIMERA PARTE... 17

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

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

Tema 4. Manipulación de datos con SQL

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

ADMINISTRACION DE BASES DE DATOS EN ORACLE

Primer Parcial de Fundamentos de Base de Datos

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

CURSO DE SQL SERVER 2005

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

Prueba de evaluación Solución OCW VJ1220 Bases de datos

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

8 SQL SERVER 2008 RA-MA

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

BASES DE DATOS (IG18 Semipresencial) El Modelo Relacional Reglas de Integridad

Querying Microsoft SQL Server 2012

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

Sub consultas avanzadas

Entrarás a formar parte de nuestra bolsa de empleo a la que acuden las empresas en busca de nuestros alumnos.

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

BASES DE DATOS I CONSULTA DE DATOS

Guía de ejercicios de SQL

Curso SQL Nivel Avanzado 1. Miguel Jurado García

T12 Vistas y tablas temporales

BREVE INTRODUCCIÓN AL SQL Aplicación al Programa Escuela Última actualización: 17/10/2000

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

TEMA 4. EL MODELO RELACIONAL. 2. Estructura de datos relacional 3. Reglas de integridad 4. Lenguajes relacionales 5. Vistas

Subconsultas. Copyright Oracle Corporation, All rights reserved.

INSTITUTO DE EDUCACIÓN SUPERIOR TECNOLÓGICO IBEROTEC SEMESTRE ACADÉMICO: 2014-II SÍLABO

LENGUAJE DE CONSULTA ESTRUCTURADO (SQL)

SINTAXIS DE SQL-92. <definición de esquema >::= CREATE SCHEMA <cláusula de nombre de esquema> [ <elemento de esquema>... ]

SQL Server FEMEPA SQL Server 2000

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

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

MANUAL BÁSICO DEL LENGUAJE SQL

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

Práctica A: Trabajo con subconsultas

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

Bases de Datos: Structured Query Language (SQL)

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

MANUAL BÁSICO DEL LENGUAJE SQL

Realizar las siguientes consultas SPARQL a la dbpedia ( o

Base de Datos Oracle 10g: Introducción a SQL Código: D Duración: 5 días (40 horas)

A.1. Definiciones de datos en SQL

Tutorial de SQL - El comando SELECT

ST31_Querying Microsoft SQL Server

Grupo Kybele, Pág. 1

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

EJERCICIOS RESUELTOS Y COMENTADOS PARA EL APRENDIZAJE DE LA INSTRUCCIÓN SELECT

Bases de Datos SQL - Ejemplos

Bases de Datos 2. Teórico

APÉNDICE SQL (Structures Query Language)

ACERCA DE LOS AUTO RES... III AGRADECIMIENTOS... xi INTRODUCCION... Xl

Qué es una subconsulta?.

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

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

SQL (Structured Query Language)

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

Maestría en Bioinformática. Bases de Datos y Sistemas de Información SQL: SELECT. Ing. Alfonso Vicente, PMP

TRANSACT-SQL, DISEÑO Y PROGRAMACIÓN DE BASES DE DATOS EN SQL SERVER 2008

Universidad Ricardo Palma

ORACLE 10g. Descripción A QUIEN VA DIRIGIDO?

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

PROGRAMAS DE ESTUDIO FORMATO 7 INTRODUCCIÓN A SQL. Área de Formación Profesional

Consultas con combinaciones

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

Tema 4. Lenguajes de consulta comerciales

FORMACIÓN E-LEARNING. Curso de Lenguaje SQL para Oracle

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

Ejercicios Resueltos de SQL

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

2.4 Manipulación de datos

BASES DE DATOS. TEMA 7. SQL. EL LENGUAJE DE CONSULTA.

3 Consultas y subconsultas

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

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

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

SQL (Structured Query Language)- DML

MS_20461 Querying Microsoft SQL Server

Álgebra Relacional. Carlos A. Olarte BDI

Primer Parcial de Fundamentos de Base de Datos

1.264 Tema 8. SQL (cont.) ODBC

Transcripción:

SUBCONSULTAS Consulta SELECT que aparece dentro de otra consulta SELECT y que obtiene unos resultados intermedios que se utilizan para realizar una comparación en el WHERE o en el HAVING. select distinct c.nombre from clientes c, facturas f where c.codcli = f.codcli and f.dto = ( select max(dto) from facturas ); La subconsulta sólo devuelve un valor II18-Universitat Jaume I 1 SUBCONSULTAS select pr.nombre from pueblos pu, provincias pr where pu.codpro = pr.codpro group by pr.codpro, pr.nombre having count(*) > ( select 0.5 * max(count(*)) from pueblos p group by p.codpro ); La subconsulta sólo devuelve un valor II18-Universitat Jaume I 2

SUBCONSULTAS select pr.nombre from pueblos pu, provincias pr where pu.codpro = pr.codpro group by pr.codpro, pr.nombre having count(*) > all ( select 0.5 * count(*) from pueblos p group by p.codpro ); La subconsulta devuelve varios valores II18-Universitat Jaume I 3 OPERADORES IN Y EXISTS select codcli, nombre Conjunto from clientes independiente where codcli in ( select codcli de valores from facturas where iva = 16 ); select c.codcli, c.nombre Referencia externa from clientes c where exists ( select * from facturas f where f.codcli = c.codcli and iva = 16 ); II18-Universitat Jaume I 4

Cuándo son necesarias? select c.codcli, c.nombre from clientes c, facturas f where c.codcli = f.codcli and iva = 16 ); Seleccionar los clientes que en todas sus facturas tienen un IVA diferente del 16%... II18-Universitat Jaume I 5 OPERADORES IN Y EXISTS Conjunto select codcli, nombre independiente from clientes de valores where codcli not in ( select codcli from facturas where iva = 16 ); select c.codcli, c.nombre Referencia externa from clientes c where not exists ( select * from facturas f where f.codcli = c.codcli and iva = 16 ); II18-Universitat Jaume I 6

OPERADORES IN Y EXISTS select codcli, nombre from clientes where codcli in ( select codcli from facturas ) and codcli not in ( select codcli from facturas where iva = 16 ); Clientes con alguna factura y que en todas sus facturas tienen un IVA diferente de 16 II18-Universitat Jaume I 7 OPERADORES IN Y EXISTS Doble Negación select codcli, nombre from clientes where codcli not in ( select codcli from facturas where IVA = 10 ) and codcli in ( select codcli from facturas ); Clientes (con alguna factura) que en todas sus facturas tienen un IVA diferente de 10 8

Clientes que NO tienen ninguna factura con 16% de IVA. SELECT codcli FROM clientes MINUS SELECT codcli WHERE iva = 16; Incluye a los clientes que nunca han comprado II18-Universitat Jaume I 9 Clientes que NO tienen ninguna factura con 16% de IVA, pero han comprado alguna vez. SELECT distinct codcli MINUS SELECT codcli WHERE iva = 16; II18-Universitat Jaume I 10

NÚMERO de clientes que NO tienen ninguna factura con 16% de IVA, pero han comprado alguna vez. SELECT COUNT(distinct f1.codcli) f1 WHERE NOT EXISTS ( SELECT * f2 WHERE f2.codcli = f1.codcli AND f2.iva = 16 ); referencia externa II18-Universitat Jaume I 11 Número de clientes que NO tienen ninguna factura con 16% de IVA, pero han comprado alguna vez. sin referencia externa SELECT COUNT(distinct f.codcli) f WHERE f.codcli NOT IN ( SELECT codcli WHERE iva = 16 ); NOT IN es como decir < > ALL II18-Universitat Jaume I 12

Número de clientes que NO tienen ninguna factura con 16% de IVA, pero han comprado alguna vez. SELECT COUNT(distinct f1.codcli) f1 WHERE 16 <> ALL ( SELECT NVL(f2.iva,0) f2 WHERE f2.codcli = f1.codcli); referencia externa otra vez II18-Universitat Jaume I 13 Todas estas sentencias consideran los clientes repetidamente: tantas veces como facturas tengan. Para mejorarlas debemos buscar sentencias equivalentes que consideren cada cliente una sola vez. II18-Universitat Jaume I 14

Esta es la primera versión que vimos: select codcli, nombre from clientes where codcli in ( select codcli from facturas ) and codcli not in ( select codcli from facturas where iva = 16 ); II18-Universitat Jaume I 15 Aprovechamos la sentencia que usa MINUS: SELECT COUNT(*) FROM clientes WHERE codcli IN ( SELECT codcli MINUS SELECT codcli WHERE iva = 16 ); II18-Universitat Jaume I 16

Aprovechamos el conocimiento: el IVA máximo es 16, si el máximo IVA pagado por un cliente es menor que 16 entonces nunca ha pagado el 16. SELECT COUNT(COUNT(*)) GROUP BY codcli HAVING MAX(NVL(iva,0)) < 16; II18-Universitat Jaume I 17 Otra consulta: Número de clientes que en todas sus facturas tienen un 16% de IVA. SELECT COUNT(*) FROM clientes WHERE codcli NOT IN ( SELECT codcli WHERE NVL(iva, 0) <> 16 ) AND codcli IN ( SELECT codcli ); II18-Universitat Jaume I 18

Número de clientes que en todas sus facturas tienen un 16% de IVA. SELECT COUNT(*) FROM clientes c WHERE 16 = ALL ( SELECT NVL(f.iva,0) f WHERE f.codcli = c.codcli ) AND codcli IN ( SELECT codcli ); II18-Universitat Jaume I 19 Número de clientes que en todas sus facturas tienen un 16% de IVA. SELECT COUNT(COUNT(*)) GROUP BY codcli HAVING MAX(NVL(iva,0))= 16 AND MIN(NVL(iva,0))= 16; II18-Universitat Jaume I 20

Número de clientes que en todas sus facturas tienen un 16% de IVA. SELECT COUNT(*) FROM clientes c WHERE codcli IN ( SELECT codcli WHERE iva = 16 MINUS SELECT codcli WHERE NVL(iva,0) <> 16 ); II18-Universitat Jaume I 21 Fecha de la factura con mayor importe. Sé cómo sacar el importe más grande: SELECT MAX(SUM(cant*precio)) FROM lineas_fac GROUP BY codfac; Puedo hacer una restricción sobre las facturas y quedarme con la que tiene este mismo importe... II18-Universitat Jaume I 22

... el cálculo del importe máximo será una subconsulta: SELECT f.fecha FROM lineas_fac l, facturas f WHERE l.codfac = f.codfac GROUP BY f.codfac, f.fecha HAVING SUM(l.cant*l.precio) = ( SELECT MAX(SUM(cant*precio)) FROM lineas_fac GROUP BY codfac ); II18-Universitat Jaume I 23 Fecha de la factura con mayor importe. Algunos SGBD no permiten usar MAX(COUNT(*)): SELECT f.fecha FROM lineas_fac l, facturas f WHERE l.codfac = f.codfac GROUP BY f.codfac, f.fecha HAVING SUM(l.cant*l.precio) >= ALL ( SELECT SUM(cant*precio) FROM lineas_fac GROUP BY codfac ); II18-Universitat Jaume I 24

Cuál de todas las versiones es más eficiente? Habría que probarlo... o ser un experto! El uso de subconsultas suele ser menos eficiente, pero no siempre ha de ser así. CONCLUSIÓN: hay que ser capaces de encontrar sentencias equivalentes. II18-Universitat Jaume I 25