varias tablas relacionadas multitablas inner ejemplos consultas consultar consulta con complejas sql database join union

tablas - SQL-ÚNASE usando UNION ?? ¿UNIÓN usando JOIN?



inner join varias tablas (4)

¿Te refieres a algo como esto?

create table Test1 (TextField nvarchar(50), NumField int) create table Test2 (NumField int) create table Test3 (TextField nvarchar(50), NumField int) insert into Test1 values (''test1a'', 1) insert into Test1 values (''test1b'', 2) insert into Test2 values (1) insert into Test3 values (''test3a'', 4) insert into Test3 values (''test3b'', 5) select Test1.* from Test1 inner join Test2 on Test1.NumField = Test2.NumField union select * from Test3

(escrito en SQL Server 2008)

UNION funciona cuando ambas SELECT tienen el mismo número de columnas Y las columnas tienen los mismos tipos de datos (o al menos similares).
UNION no le importa si las dos SELECT seleccionan datos solo de una sola tabla, o si uno o ambos ya se JOIN en más de una tabla.

Me hicieron esta pregunta durante una de mis entrevistas. ¿Puedes unirte usando la palabra clave UNION? ¿Puedes hacer UNION usando la palabra clave JOIN?

Es decir: 1. ¿Debería obtener el mismo resultado que JOIN sin usar la palabra clave JOIN, pero usando la palabra clave UNION? 2. ¿Debería obtener el mismo resultado que UNION sin usar la palabra clave UNION, pero usando la palabra clave JOIN?

¿Me puede dar un ejemplo de cómo hacer esto si es posible?


Como esta es una pregunta de entrevista, están probando su comprensión de estas dos funciones.

La respuesta probable que esperan es "generalmente no, no se puede hacer esto mientras realizan acciones diferentes", y se explicaría esto con más detalle al afirmar que una unión agrega filas al final del conjunto de resultados, donde como unir agrega más columnas .

La única forma en que podría tener un trabajo de unión y unión es cuando las filas contienen datos de solo una de las dos fuentes:

SELECT A.AA, '''' AS BB FROM A UNION ALL SELECT '''' AS AA, B.BB FROM B

Es lo mismo que:

SELECT ISNULL(A.AA, '''') AS AA, ISNULL(B.BB, '''') AS BB FROM A FULL OUTER JOIN B ON 1=0

O para hacer esto con solo una columna donde los tipos coinciden:

SELECT A.AA AS TT FROM A UNION ALL SELECT B.BB AS TT FROM B

Es lo mismo que:

SELECT ISNULL(A.AA, B.AA) AS TT FROM A FULL OUTER JOIN B ON 1=0

Un caso en el que harías esto es si tienes datos generados en varias tablas pero quieres ver todos juntos, sin embargo, te aconsejaría usar un UNION en este caso en lugar de un FULL OUTER JOIN debido a que la consulta está haciendo lo que tú de otra manera esperaría


Creo que también depende de otras operaciones disponibles.

Si recuerdo bien, UNION se puede hacer usando una combinación FULL OUTER :

Table a (x, y) Table b (x, y) CREATE VIEW one AS SELECT a.x AS Lx , b.x AS Rx , a.y AS Ly , b.y AS Ry FROM a FULL OUTER JOIN b ON a.x = b.x AND a.y = b.y CREATE VIEW unionTheHardWay AS SELECT COALESCE(Lx, Rx) AS x , COALESCE(Ly, Ry) AS y FROM one


Una entrevista es el marco en el que establece sus productos. Recuerde: no responda preguntas;)

Piense en una conferencia de prensa: el vocero no busca contestar las preguntas difíciles de los periodistas para ponerse al corriente. Más bien, están buscando preguntas a las que ya tienen respuestas, ya que son la información que quieren lanzar (¡y nada más!)

Si enfrenté esta pregunta en una entrevista, la usaría para demostrar mi conocimiento del álgebra relacional porque eso es lo que habría ido a la entrevista con la intención de hacer; Estoy alerta para la pregunta "Hable de álgebra relacional aquí" y esta sería la pregunta.

En términos generales, JOIN es la contraparte de AND lógico, mientras que UNION es la contraparte de OR lógico. Por lo tanto, preguntas similares usando la lógica de la convención podrían ser, "¿Puedes hacerlo Y usando O?" y "¿Puedes hacerlo O usando AND?" La respuesta dependería de qué más podría usar, por ejemplo, NO podría ser útil;)

También me sentiría tentado a discutir las diferencias entre el conjunto de operadores primitivos, el conjunto de operadores necesarios para la integridad computacional y el conjunto de operadores y atajos necesarios para fines prácticos.

Intentar responder la pregunta directamente genera más preguntas. JOIN implica ''unión natural'' en álgebra relacional mientras que en SQL implica INNER JOIN . Si la pregunta se relaciona específicamente con SQL, ¿tiene que responder por todos los tipos de JOIN ? ¿Qué pasa con UNION JOIN ?

Para emplear un ejemplo, la combinación externa de SQL es famosa por ser UNION . Chris Date lo expresa mejor de lo que podría esperar:

La unión externa está expresamente diseñada para producir valores nulos en su resultado y, por lo tanto, debe evitarse, en general. Hablando en términos relativos, es una especie de matrimonio de escopeta: fuerza a las mesas a una especie de unión; sí, sí quiero decir unión, no unión, incluso cuando las tablas en cuestión no se ajustan a los requisitos habituales para la unión (véase el Capítulo 6). Lo hace, de hecho, rellenando una o ambas tablas con valores nulos antes de hacer la unión, por lo tanto, haciendo que se ajusten a los requisitos habituales después de todo. Pero no hay ninguna razón por la cual ese relleno no deba hacerse con los valores correctos en lugar de valores nulos

SQL and Relational Theory, 1ra Edición por CJ Date

Este sería un buen punto de discusión si "Odio los nulos" es algo que quería transmitir en la entrevista.

Estos son solo algunos pensamientos que vienen a la mente. El punto crucial es que, al hacer estas preguntas, el entrevistador le ofrece una sucursal. ¿Qué TÚ colgarás de él? ;)