Consultas anidadas.

Slides:



Advertisements
Presentaciones similares
Consultas en Visual FoxPro
Advertisements

Base de Datos II.
Introducción Lenguaje de manipulación de datos (Data Manipulation Language) Permite a los usuarios llevar a cabo las tareas de consulta o manipulación.
integridad referencial
Repaso DBD!!! (Es ahora o nunca)
Unidad IV Objetivo de la Unidad:
SQL G r u p o
Maestría en Bioinformática Bases de Datos y Sistemas de Información Fundamentos de Matemática Ing. Alfonso Vicente, PMP
Teórico: Algebra Relacional
S.Q.L. (Lenguaje de Consulta Estructurada)
Base de Datos El lenguaje SQL.
Universidad del Cauca – FIET – Departamento de Sistemas CAPITULO 2 Restringiendo y Ordenando Datos.
OPERACIONES DE RECUPERACIÓN. WHERE ciudad =‘Las Palmas’; de los suministradores Obtener el código y la situación de Las Palmas SELECT sn, situacion FROM.
8. Procesamiento y optimización de consultas
SQL.
Lenguaje SQL (Structured Query Language)
Universidad del Cauca – FIET – Departamento de Sistemas CAPITULO 5 Agregando Datos Usando Funciones de Grupo.
Lenguajes Formales de Consulta
SQL Structured Query Language
SQL el Structured Query Language no es mas que un lenguaje estándar de comunicación con bases de datos.
SQL: Lenguaje de Interrogación Estructurado
Subconsultas Avanzadas
6 Copyright © 2010, Oracle y/o sus filiales. Todos los derechos reservados. Visualización de Datos de Varias Tablas Utilizando Uniones.
Componentes sintácticos
F Copyright © 2010, Oracle y/o sus filiales. Todos los derechos reservados. Sintaxis de Unión en Oracle.

Administración de Bases de Datos
Universidad del Cauca – FIET – Departamento de Sistemas CAPITULO 6 Subconsultas.
Dr. Mario Rossainz López Aplicaciones WEB Primavera 2015.
Universidad del Cauca – FIET – Departamento de Sistemas CAPITULO 11 Creando Vistas.
COMANDOS SQL.
COMANDOS DML DML son las siglas de Data Manipulation Language y se refiere a los comandos que permiten a un usuario manipular los datos en un repositorio,
Diseñando la arquitectura de aplicaciones empresariales. Acceso al SQL Server.- Autenticación de usuario:
SQL (Structured Query Language / Lenguaje de consulta estructurado)‏
IBD CLASE 15. SQL Lenguaje de Consultas Estruturado (SQL) ◦Lenguaje de trabajo estándard para modelo relacional ◦Componentes ◦DDL: Data Definition Language.
CAPITULO 4 Despliegue de Datos Desde Múltiples Tablas
CONSULTAS SENCILLAS A LA BASE DE DATOS
Base de Datos I. Es un lenguaje con el que los usuarios solicitan información de la BD. Estos lenguajes suelen ser de nivel superior que el de los lenguajes.
Tema 2: Base de datos relacionales
Consultas SQL (Base de Datos)
LENGUAJE SQL.
Bases de Datos Sql.
Universidad del Cauca – FIET – Departamento de Sistemas CAPITULO 14 Uso de Operadores de Conjuntos.
Expresiones algebraicas equivalentes
Más ejemplos en SQL Francisco Moreno. S sn snombre situacion ciudad S1 Salazar 20 Londres S2 Jaramillo 10 París S3 Bernal30 París S4 Caicedo 20 Londres.
Ingeniería de Sistemas y Modelamiento.
LENGUAJE ESTRUCTURADO DE CONSULTAS
Diseño de base de datos Tema 6 : LMD.
COMANDOS DML DML son las siglas de Data Manipulation Language y se refiere a los comandos que permiten a un usuario manipular los datos en un repositorio,
Tipos de Datos.
 La sentencia SELECT recupera todas las columnas o un subconjunto de ellas de una tabla. Esto afecta a todas las filas de la tabla, a menos que especifiquemos.
Consultas SQL. SQL SQL es un lenguaje de consulta estructurado (Structured Query Languague). Se utiliza para: Eliminar Modificar Consultar La base de.
ACCESS BD ( Base De Datos) SGBD ( Sistema De Gestion Base De Datos)
JOIN EN MYSQL Bueno en esta presentación mostrare cosas acerca de los usos de la sentencia JOIN en mysql , mediante esta presentación planeo mostrar los.
MSSQL SERVER CURSO BÁSICO 1. CONCEPTOS BASICOS DE SQL. DESCRIPCIÓN DEL CURSO. Sesión 3: Índices Uso, Creación, Tipos, Eliminación LENGUAJE DE CONSULTAS.
Marzo de 2010Dos Ideas - La visión de Sistemas desde el Desarrollo SQL en PL/SQL Conceptos básicos.
SQL es el lenguaje de comunicación entre el programa cliente y programa servidor; Oracle es un programa servidor, en el que está la base de datos propiamente.
Bases de Datos SQL.
Después de completar esta lección, debe ser capaz de:  Crear registro definidos por el usuario.  Crear un registro con el atributo %ROWTYPE.  Crear.
Modelo entidad-relación extendido EER L.I. José de Jesús Eduardo Barrientos Avalos.
INTEGRACION DE LAS TECNOLOGIAS DE LA INFORMACION Y COMUNICACION Implementación de base de datos (Lenguaje de manipulación de datos) Ing. Linda Masias Morales.
Bases de datos II Universidad del Cauca Ing. Wilson Ortega.
Structure Query Languaje SQL. Introducción a SQL El lenguaje de consulta estructurado (SQL) es un lenguaje de base de datos normalizado, utilizado por.
Copyright  Oracle Corporation, All rights reserved. 2 Restricción y ordenación de datos.
DLM Transact SQL Sesión II Recuperación de información.
Querys a bases de datos con MS ACCESS. DEFINAMOS LOS TERMINOS: DML=Lenguaje de manipulación de datos Las sentencias DML permiten generar consultas para.
DML Transact SQL Sesión VI Trabajando con subconsultas.
DML Transact SQL Sesión V Consultando múltiples tablas.
Selección Condicionada de Filas Uso de la cláusula WHERE La cláusula WHERE restringe las columnas que retorna una consulta según la condición que se imponga.
Copyright  Oracle Corporation, All rights reserved. 6 Subconsultas.
Transcripción de la presentación:

Consultas anidadas

2.4 Manipulación de datos: SQL-92 Consultas anidadas Es una consulta SELECT completa, dentro de cláusula WHERE de otra consulta (consulta exterior) Obtiene valores de la BD que se usan en la condición de otra consulta, para obtener otros datos * Números de los proyectos en que participa el empleado de apellido ‘Silva’, sea como trabajador o como gerente del departamento que controla el proyecto SELECT DISTINCT numerop FROM PROYECTO WHERE numerop IN ( SELECT nump FROM Trabaja_en, Empleado WHERE nsse=nss AND apellido=‘Silva’ ) OR numerop IN ( SELECT numerop FROM Proyecto, Departamento, Empleado WHERE numd=númerod AND nssdire=nss AND apellido=‘Silva’ ) ; Es posible tener varios niveles de consultas anidadas Tema 2. Modelo relacional de datos

2.4 Manipulación de datos: SQL-92 Consultas anidadas (2): comparar conjuntos Operador IN (otro uso del mismo operador) t IN S indica si la fila t pertenece al conjunto de filas S (subconsulta) * Nombre y dirección de los empleados que trabajan en algún proyecto. SELECT nombre, dirección FROM Empleado WHERE nss IN ( SELECT nsse FROM TRABAJA_EN ); * Números de seguridad social de aquellos empleados que trabajan en algún proyecto en el que trabaje el empleado ‘José B. Silva’, de forma que ambos tengan la misma combinación (proyecto, horas); es decir, todo empleado que trabaje las mismas horas que ‘José B. Silva’, en cada proyecto en el que trabajen ambos. El nss de ‘José B. Silva’ es ‘123456789’. SELECT DISTINCT nsse FROM Trabaja_en WHERE (númp, horas) IN ( SELECT númp, horas FROM Trabaja_en WHERE nsse=‘123456789’); Tema 2. Modelo relacional de datos

¿”Mejor” con DISTINCT en la subconsulta? 2.4 Manipulación de datos: SQL-92 Consultas anidadas (3): comparar conjuntos Operador ANY o SOME (otro uso del mismo operador) t <op> ANY S o t <op> SOME S,, <op>  { , , , , ,  } Compara una fila t con las filas resultado de una consulta anidada S Devuelve TRUE si alguna fila e de S cumple que t <op> e Operador ALL (otro uso del mismo operador) t <op> ALL S,, <op>  { , , , , ,  } Compara una fila t con filas resultado de una consulta anidada S Devuelve TRUE si para toda fila e de S se cumple que t <op> e * Nombres y apellidos de los empleados cuyo salario es menor que el de todos los empleados del departamento 5 SELECT nombre, apellido FROM Empleado WHERE salario < ALL ( SELECT salario FROM Empleado WHERE nd=5 ); El DISTINCT en la subconsulta reduciría el número de filas resultado de la misma, por lo que compararía menos veces el valor de salario. Sin embargo DISTINCT es costoso de ejecutar. ¿”Mejor” con DISTINCT en la subconsulta? Tema 2. Modelo relacional de datos

2.4 Manipulación de datos: SQL-92 Consultas anidadas (4): columnas ambiguas Coincidencia de nombres de columnas en las consultas exterior y anidada  Ambigüedad * Nombre y apellidos de cada empleado con familiares de igual nombre y sexo que él SELECT nombre, apellido FROM Empleado WHERE nss IN ( SELECT nsse FROM Familiar WHERE nsse=nss AND nombre_familiar=nombre AND sexo=sexo );  ¿cómo evitar esta ambigüedad? Regla: Una columna no calificada se refiere a la tabla declarada en la consulta anidada más interior Si en una consulta anidada es necesario usar columnas de tablas declaradas en una consulta exterior  calificar SELECT nombre, apellido FROM Empleado E WHERE nss=nsse AND nombre_familiar=nombre AND sexo= E.sexo ); Tema 2. Modelo relacional de datos

2.4 Manipulación de datos: SQL-92 Consultas anidadas (5): correlación Una consulta exterior y otra anidada están correlacionadas si una condición de la anidada contiene columnas de una tabla declarada en la consulta exterior SELECT nombre, apellido FROM Empleado WHERE nss IN ( SELECT nsse FROM Familiar WHERE nss=nsse AND sexo=‘F’ ); La consulta anidada se evalúa una vez para cada fila (o combinación de filas) de la consulta exterior Evalúa la consulta anidada para cada fila de EMPLEADO, Si el valor de nss de la fila EMPLEADO está en el resultado de la consulta anidada, selecciona la fila EMPLEADO para el resultado final Una consulta anidada que use el operador = o IN siempre puede expresarse como una reunión (join) SELECT E.nombre, E.apellido FROM Empleado, Familiar D WHERE nss=nsse AND D.sexo=‘F’; Tema 2. Modelo relacional de datos

2.4 Manipulación de datos: SQL-92 Consultas anidadas (6): EXISTS Operador EXISTS (S): comprobación de tablas vacías Devuelve TRUE si la tabla S contiene al menos una fila Devuelve FALSE si S es una tabla vacía (sin filas) S suele ser una consulta anidada correlacionada * Nombre y apellido de cada empleado con familiares de igual nombre y sexo que él SELECT E.nombre, E.apellido FROM Empleado E WHERE EXISTS ( SELECT * FROM Familiar WHERE nsse=nss AND nombre_familiar=nombre AND sexo=E.sexo ); * Nombres de empleados sin familiares SELECT nombre, apellido FROM Empleado E WHERE NOT EXISTS (SELECT * FROM Familiar WHERE nsse=nss); EXISTS suele implicar una consulta anidada correlacionada que PUEDE EVITARSE utilizando el operador IN. La consulta resulta así más eficiente, por no contener una correlación. Tema 2. Modelo relacional de datos

2.4 Manipulación de datos: SQL-92 Consultas anidadas (y 7): UNIQUE Operador UNIQUE (S): Comprobación de filas duplicadas Devuelve TRUE si NO hay filas repetidas en S S suele ser una consulta anidada correlacionada * Nombres y apellidos de los empleados que trabajan en un único proyecto SELECT nombre, apellido FROM Empleado WHERE UNIQUE ( SELECT nsse FROM Trabaja_en WHERE nsse = nss ); * Nombres, apellidos y salario de los empleados con un solo familiar SELECT nombre, apellido, salario FROM Empleado WHERE UNIQUE ( SELECT * FROM Familiar WHERE nsse = nss ); Oracle no implementa el operador UNIQUE. *************************************************** Un aspecto interesante que incorpora ORACLE y del cual no se menciona nada en el estándar es el siguiente: VISTAS EN LÍNEA Una vista en línea es una subconsulta (un SELECT…) en la cláusula FROM de otra consulta. No es una subconsulta anidada puesto que no aparece dentro de la cláusula WHERE (sino en la FROM) de la consulta exterior. Ejemplos: 1. La siguiente sentencia muestra los datos de los empleados que cobran el máximo salario en cada departamento: SELECT nd, nombred, nss, nombre, apellido, salario FROM (SELECT nd, MAX(salario) AS max_sal FROM Empleado GROUP BY nd), Empleado WHERE max_sal = salario; 2. La siguiente sentencia calcula el número de empleados y la suma de los salarios de los mismos para cada departamento, mostrando dichos datos como el % del total de empleados y de la suma total de los salarios de los empleados de todos los departamentos: SELECT A.numerod “Departamento”, A.num_emp / B.total_emp “%_Empleados”, A.sal_sum / B.total_sal “%_Salario” FROM (SELECT numerod, COUNT(*) AS num_emp, SUM(salario) AS sal_sum FROM Empleado GROUP BY numerod) A, (SELECT COUNT(*) total_emp, SUM(salario) total_sal FROM employees) B; Tema 2. Modelo relacional de datos