Si entiendo correctamente, cada RIGHT JOIN
:
SELECT Persons.*, Orders.*
FROM Orders
RIGHT JOIN Persons ON Orders.PersonID = Persons.ID
se puede expresar como LEFT JOIN
:
SELECT Persons.*, Orders.*
FROM Persons
LEFT JOIN Orders ON Persons.ID = Orders.PersonID
Mi opinión personal es que la intención de la declaración:
- Primero consigue el
Persons
- Luego expanda / repita
Persons
según sea necesario para que coincida con elOrders
se expresa mejor por el orden de Persons LEFT JOIN Orders
que por el orden inverso Orders RIGHT JOIN Persons
(y nunca uso RIGHT JOIN
como resultado).
¿Hay alguna situación en la que RIGHT JOIN
se prefiera a? ¿O hay casos de uso en los que se RIGHT JOIN
puede hacer algo que LEFT JOIN
no se puede hacer?
database-design
sql
relational-database
Zev Spitz
fuente
fuente
RIGHT JOIN
se recomienda o es más común. Si esa es su premisa, es incorrecta. No puedo pensar en una vez que haya visto la combinación correcta utilizada en código ni en ejemplos. EsJOIN
oLEFT OUTER JOIN
. En casos raros, puede ver aFULL OUTER JOIN
.Respuestas:
Eso depende de qué requisito esté tratando de cumplir.
No es lo mismo decir: "dame a todas las personas y sus órdenes correspondientes" que "quiero todas las órdenes con sus personas correspondientes" , especialmente si vas a usar
is null
para traer filas sin correspondencia correspondiente. Eso es lo que yo llamo la "tabla dominante", que es la tabla de la que quiero obtener filas, independientemente de que no haya una fila correspondiente en el otro lado de la unión.Mira estas imágenes y notarás que no son lo mismo:
La fuente de la imagen es este excelente artículo .
Pero tiene razón en que ambos requisitos se pueden cumplir con cualquier combinación simplemente invirtiendo el orden de las tablas en la combinación.
Pero supongo que para las personas occidentales acostumbradas a escribir de izquierda a derecha, es más natural usar combinaciones de izquierda sobre combinaciones de derecha , ya que vemos que queremos que las combinaciones estén en la misma dirección o en el mismo orden que las
select
columnas ed.Entonces, una posible razón para preferir una unión correcta es porque en su cultura escribe de derecha a izquierda (como en los sistemas de escritura árabe o hebreo) y tiende a pensar de esa manera, lo que significa que tal vez en su cerebro la información textual fluya de derecha a izquierda .
Algunos lingüistas piensan que su idioma influye en su forma de pensar: https://www.edge.org/conversation/lera_boroditsky-how-does-our-language-shape-the-way-we-think
fuente
LEFT JOIN
más natural.No hay nada (que yo sepa) que se pueda hacer con una unión derecha que no se pueda hacer con una unión izquierda. Pero a veces la sintaxis con combinaciones izquierdas es más fea. Digamos que tiene las siguientes tablas:
Supongamos que necesita obtener una lista de todas las personas en su base de datos y cualquier pedido que tengan con detalles especiales de pedido (diremos que no todos los pedidos tienen detalles especiales de pedido). Por lo tanto, normalmente haría una unión izquierda de personas a pedidos. Pero luego debes unirte en detalles de pedidos especiales. Si usa una unión interna allí, la unión de la izquierda de las personas a las órdenes se convertirá efectivamente en una unión interna. IE: esto es lo que quieres hacer pero no funciona (excluirá a cualquiera que no tenga un pedido especial):
Entonces podrías reescribirlo así:
No es exactamente claro (suponiendo que no haya comentarios), pero hace el trabajo. Si esto es algo más que un hecho único (es decir, algo que alguien va a tener que volver y mantener algún día), usar una unión correcta podría aclarar cuál era la intención.
Lo cual es un poco más sucinto y claro (pero solo si quien lo está leyendo entiende bien se une). Tenga en cuenta que esto se puede escribir con combinaciones izquierdas, pero requiere una combinación anidada (con la que probablemente menos personas estén familiarizadas que las combinaciones correctas).
En este punto, es una opción de lo que está más claro y lo que la mayoría de la gente entenderá (¿sabrías cómo googlear esa sintaxis si no supieras que se llama una unión anidada?).
En resumen, no necesita estrictamente las combinaciones correctas, pero podrían facilitar su lectura.
fuente
SELECT p.*, o.*, d.* FROM Persons p LEFT JOIN Orders o ON o.CustomerID = p.ID LEFT JOIN SpecialOrders d ON o.Id = d.OrderID
.Pude ver un RIGHT JOIN siendo usado para replicación / fusión. Digamos que tengo dos tablas A y B. A está a la izquierda y B está a la derecha. Digamos que quería replicar datos entre estas dos tablas para hacerlas equivalentes.
Si quisiera mostrar todos los datos que estaban en A pero no en B, sería una unión IZQUIERDA. Si quisiera mostrar todos los datos en B que no estaban en A, se uniría DERECHO.
Por lo tanto, a veces IZQUIERDA y DERECHA resultan útiles al combinar y replicar datos para mantener las cosas en perspectiva.
Aparte de eso, no veo otra razón para usar una combinación DERECHA ya que todas las combinaciones DERECHA se pueden convertir en combinaciones IZQUIERDA o viceversa, todas las combinaciones IZQUIERDA se pueden convertir en combinaciones DERECHA dependiendo de cómo se ordenan o visualizan las tablas. Por lo tanto, sería una cuestión de preferencia en otros casos.
Aquí hay un buen enlace para visualizar las Uniones SQL.
http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins
fuente
la unión izquierda no es el opuesto de la unión derecha, verifique el siguiente caso que da resultados diferentes
las tablas b anc c están siempre unidas internamente, pero en la primera a se deja unida a las demás y en la segunda a se une a la derecha
la unión izquierda no devuelve filas mientras que la unión derecha devuelve una fila
fuente
Nunca hay ninguna razón para preferir
RIGHT JOIN
, yLEFT JOIN
es mucho más claro:ya que le permite ver de inmediato qué tabla se está consultando. Mientras que con
RIGHT JOIN
:La primera tabla se escribe después de
JOIN
.En mi experiencia, nunca he visto a
RIGHT JOIN
.fuente
RIGHT JOIN
? .