inner - left right join sql server
¿Cuáles son los usos de Cross Join? (8)
Una unión cruzada realiza un producto cartesiano en las tuplas de los dos conjuntos.
SELECT *
FROM Table1
CROSS JOIN Table2
¿Qué circunstancias hacen que una operación SQL así sea particularmente útil?
Esta es una forma interesante de usar una combinación cruzada para crear un informe de tabla cruzada . Lo encontré en SQL for Smarties de Joe Celko , y lo he usado varias veces. Requiere un poco de configuración, pero ha valido la pena el tiempo invertido.
Genera datos para probar
Imagine que tiene una serie de consultas que desea emitir sobre una combinación específica de elementos y fechas (precios, disponibilidad, etc.). Puede cargar los elementos y fechas en tablas temporales separadas y hacer que sus consultas se unan a las tablas. Esto puede ser más conveniente que la alternativa de enumerar los elementos y las fechas en las cláusulas IN, especialmente dado que algunas bases de datos limitan el número de elementos en una cláusula IN.
La clave es "muéstrame todas las combinaciones posibles". Los he usado junto con otros campos calculados y los he ordenado / filtrado.
Por ejemplo, supongamos que está creando una aplicación de arbitraje (trading). Tienes vendedores que ofrecen productos a un precio y compradores que piden productos a un costo. Realice una combinación cruzada en la clave del producto (para hacer coincidir los posibles compradores y vendedores), calcule la diferencia entre costo y precio, luego clasifique desc. en esto para darle a usted (el intermediario) los intercambios más rentables para ejecutar. Casi siempre tendrás otros criterios de filtro delimitador, por supuesto.
Normalmente no va a querer un producto cartesiano completo para la mayoría de las consultas de bases de datos. Todo el poder de las bases de datos relacionales es que puede aplicar las restricciones que le puedan interesar para evitar robar filas innecesarias de la base de datos.
Supongo que un ejemplo inventado en el que podría querer es si tiene una tabla de empleados y una tabla de trabajos que necesitan hacer y desean ver todas las asignaciones posibles de un empleado a un trabajo.
Ok, probablemente esto no responda la pregunta, pero si es verdad (y ni siquiera estoy seguro de eso) es un poco divertido de la historia.
En los primeros días de Oracle, uno de los desarrolladores se dio cuenta de que necesitaba duplicar cada fila en la tabla (es posible que fuera una tabla de eventos y necesitaba cambiarla como "evento de inicio" y "evento final"). Se dio cuenta de que si tuviera una mesa con solo dos filas, podría hacer una combinación cruzada, seleccionando solo las columnas de las dos primeras, y obtendría exactamente lo que necesitaba. Así que creó una tabla simple, que naturalmente llamó "DUAL".
Más tarde, necesitaba hacer algo que solo podía hacerse seleccionando desde una tabla, aunque la acción en sí no tenía nada que ver con la tabla (tal vez olvidó su reloj y quería leer la hora mediante SELECT SYSDATE FROM .. .) Se dio cuenta de que todavía tenía su mesa DUAL por ahí, y la usó. Después de un tiempo, se cansó de ver el tiempo impreso dos veces, por lo que eventualmente borró una de las filas.
Otros en Oracle comenzaron a usar su tabla, y finalmente se decidió incluirla en la instalación estándar de Oracle.
Lo que explica por qué una tabla cuyo único significado es que tiene una fila tiene un nombre que significa "dos".
Si tiene una "cuadrícula" que desea completar completamente, como la información de tamaño y color para una prenda de vestir en particular:
select
size,
color
from
sizes CROSS JOIN colors
Tal vez desee una tabla que contenga una fila por cada minuto del día, y desea usarla para verificar que un procedimiento se haya ejecutado cada minuto, por lo que puede cruzar tres tablas:
select
hour,
minute
from
hours CROSS JOIN minutes
O bien, tiene un conjunto de especificaciones de informes estándar a las que desea postular todos los meses del año:
select
specId,
month
from
reports CROSS JOIN months
El problema con el mantenimiento de estas vistas es que, en la mayoría de los casos, no desea un producto completo, especialmente con respecto a la ropa. Puede agregar MINUS
lógica a la consulta para eliminar ciertas combinaciones que no lleva, pero puede que le resulte más fácil rellenar una tabla de otra manera y no usar un producto cartesiano.
Además, es posible que termine probando la combinación cruzada en tablas que tal vez tengan algunas filas más de lo que pensaba, o tal vez su cláusula WHERE
faltara parcial o completamente. En ese caso, su DBA le notificará de inmediato sobre la omisión. Por lo general, él o ella no serán felices.
Toma algo así como una tabla de dígitos, que tiene diez filas para los dígitos 0-9. Puede usar combinación cruzada en esa tabla varias veces para obtener un resultado que tenga tantas filas como necesite, con los resultados numerados apropiadamente. Esto tiene varios usos. Por ejemplo, puede combinarlo con una función datadd () para obtener un conjunto para cada día en un año determinado.