¿Cómo combino resultados de varias tablas SQL (pista: hay tres formas)
Muchas veces, en una base de datos relacional, la información que desea mostrar en su consulta está en más de una mesa. Esto plantea la pregunta «¿Cómo se combinan los resultados de más de una tabla?»
Todos los ejemplos de esta lección se basan en Microsoft SQL Server Management Studio y la base de datos AdventureWorks2012. Puede comenzar a usar estos herramientas que utilizan mi Guía Introducción a SQL Server.
¿Cuáles son las formas en que puedo combinar los resultados de más de una consulta?
SQL no sería un lenguaje muy útil si no No proporciona un medio sencillo para combinar los resultados de más de una consulta. Afortunadamente, hay tres formas principales de combinar datos de varias tablas. Las repasaremos brevemente aquí y proporcionaremos vínculos a artículos más detallados.
Tres formas principales de combinar datos
Los datos de las tablas de bases de datos relacionales se organizan en filas y columnas. Mientras investigamos formas de combinar datos, tenga en cuenta que el resultado final será agregue más columnas a un resultado, tal vez de otra tabla relacionada, o filas, tomando un conjunto de filas de dos o más tablas s.
Cuando la mayoría de las personas aprenden a combinar datos sobre los que aprenden:
- JOIN: puede usar joins para combinar columnas de una o más consultas en un resultado.
- UNION: use Unions y otros operadores de conjuntos para combinar filas de una o más consultas en un resultado.
- Subconsultas: a veces llamadas consultas anidadas, se pueden usar para realizar una búsqueda separada en la base de datos mostró que los resultados se pueden usar en otra consulta.
Uniones
Me gusta pensar en uniones como el pegamento que vuelve a unir la base de datos. Las bases de datos relacionales generalmente se normalizan para facilitar el mantenimiento de los datos y mejorar el rendimiento, pero el resultado final es que la información se separa en muchas tablas. Puede utilizar Joins para volver a combinar esa información en un formato más legible por humanos. Los datos se recombinan haciendo coincidir columnas de cada tabla.
En todos los casos, las combinaciones requieren dos ingredientes principales: dos tablas y una condición de combinación. Las tablas son lo que usaremos para extraer las filas y columnas y la condición de unión es cómo pretendemos hacer coincidir las columnas entre tablas.
Ejemplo JOIN
SELECT Person.FirstName, Person.LastName, PersonPhone.PhoneNumber FROM Person.Person INNER JOIN Person.PersonPhone ON Person.BusinessEntityID = PersonPhone.BusinessEntityID
Hay dos tipos principales de combinaciones. Inner Joins y Outer Joins.
Inner Joins solo devuelve una fila resultante si la condición de combinación coincide en ambas tablas. Las combinaciones internas se utilizan principalmente para hacer coincidir la clave principal de una tabla con una clave externa en otra.
El segundo tipo de combinación es una combinación externa. Las combinaciones externas siempre devuelven al menos una fila de la tabla principal, denominada tabla izquierda o derecha, y valores nulos en las columnas correspondientes de la columna que no coincide. Las combinaciones externas son útiles para encontrar datos que no coinciden.
Es importante tener en cuenta que las combinaciones pueden devolver más filas de las que existen en cualquier tabla combinada. Las combinaciones devuelven combinaciones de coincidencias. Si une dos tablas, una que contiene 5 filas y la otra 10, el resultado puede contener entre 0 y 50 filas, según la condición de la combinación.
Uniones
Una UNIÓN es se utiliza para combinar las filas de dos o más consultas en un resultado. La Unión se denomina operador de conjunto.
Hay algunas condiciones especiales que deben ocurrir para que una unión funcione. Primero, cada consulta debe tener el mismo número de columnas. En segundo lugar, los tipos de datos de estas columnas deben ser compatibles. En términos generales, cada consulta debe devolver el mismo número y tipo de columnas.
Un ejemplo práctico de unión es cuando dos tablas contienen números de pieza y desea crear una lista combinada para un catálogo. Puede elegir que el resultado final sea una lista única para la consulta combinada o, si usa UNION ALL, devolver todas las filas de cada tabla.
Ejemplo de UNION
SELECT C.NameFROM Production.ProductCategory AS CUNIONSELECT S.NameFROM Production.ProductSubcategory AS S
Además de Union, hay un par de operadores de conjuntos útiles:
- INTERSECT: puede usar esto para devolver solo filas que son comunes entre dos tablas.
- EXCEPTO: puede usar esto para devolver filas que existen en una tabla, pero que no se encuentran en otra.
A medida que avanza para aprender más SQL, encontrará que puede usar uniones para escribir declaraciones equivalentes para Intersect y Except, pero no hay equivalentes para Union.
Subconsultas
Las subconsultas a veces se denominan consultas anidadas. Son consultas definidas dentro de otras consultas. Las subconsultas pueden resultar confusas. Creo que mucho de esto se debe al hecho de que se pueden usar en muchos lugares en una declaración de selección de SQL, ¡y para varios propósitos!
Por ejemplo, aquí hay algunas áreas en las que puede ver una subconsulta:
- Cláusula SELECT: se utiliza para devolver un valor. Por ejemplo, si está consultando una tabla de ventas, puede incluir las ventas totales devolviendo una suma de todas las ventas desde una subconsulta.
- Cláusula WHERE: las subconsultas se pueden utilizar en la cláusula where en las comparaciones. Puede configurar una comparación para comparar las ventas con el promedio general. El promedio general se obtendría de una subconsulta. También puede utilizar subconsultas en operadores de membresía como IN. En lugar de codificar la cláusula in, puede usar una subconsulta para hacerla más dinámica.
- Cláusula HAVING: se incluye un valor único de una subconsulta en las comparaciones de la cláusula HAVING.
Ejemplo de subconsulta
SELECT SalesOrderID, LineTotal, (SELECT AVG(LineTotal) FROM Sales.SalesOrderDetail) AS AverageLineTotalFROM Sales.SalesOrderDetail
Cuando se usa en cláusulas de selección y operadores de comparación como igual, mayor que y menor que , una subconsulta solo puede devolver una fila. Si se usa junto con un operador de membresía, como IN, está bien que la consulta devuelva una o más filas.