sql >> Databasteknik >  >> RDS >> Oracle

Vänster Yttre Join med hjälp av + logga in Oracle 11g

TableA LEFT OUTER JOIN TableB motsvarar TableB RIGHT OUTER JOIN Table A .

I Oracle, (+) anger den "valfria" tabellen i JOIN. Så i din första fråga är det en P LEFT OUTER JOIN S . I din andra fråga är det S RIGHT OUTER JOIN P . De är funktionellt likvärdiga.

I terminologin anger RIGHT eller LEFT vilken sida av kopplingen som alltid har en post, och den andra sidan kan vara null. Så i en P LEFT OUTER JOIN S , P kommer alltid att ha en post eftersom den är till LEFT , men S kan vara null.

Se det här exemplet från java2s.com för ytterligare förklaring.

För att förtydliga, antar jag att jag säger att terminologin inte spelar någon roll, eftersom den bara är till för att visualisera. Det som är viktigt är att du förstår hur det fungerar.

HÖGER vs VÄNSTER

Jag har sett en viss förvirring om vad som är viktigt för att bestämma RIGHT vs LEFT i implicit syntax för koppling.

VÄNSTER YTTRE JOIN

SELECT *
FROM A, B
WHERE A.column = B.column(+)

HÖGER YTTRE JOIN

SELECT *
FROM A, B
WHERE B.column(+) = A.column

Allt jag gjorde var att byta sida av termerna i WHERE-satsen, men de är fortfarande funktionellt likvärdiga. (Se högre upp i mitt svar för mer information om det.) Placeringen av (+) bestämmer HÖGER eller VÄNSTER. (Särskilt om (+) är till höger, det är en LEFT JOIN. Om (+) är till vänster, det är en RIGHT JOIN.)

Typer av JOIN

De två stilarna för JOIN är implicita JOINs och explicita JOINs . De är olika sätt att skriva JOIN, men de är funktionellt likvärdiga.

Se denna SO-fråga .

Implicita JOINs lista helt enkelt alla tabeller tillsammans. Anslutningsvillkoren specificeras i en WHERE-sats.

Implicit JOIN

SELECT *
FROM A, B
WHERE A.column = B.column(+)

Explicita JOINs associera sammanfogningsvillkor med en specifik tabells inkludering istället för i en WHERE-sats.

Explicit JOIN

SELECT *
FROM A
LEFT OUTER JOIN B ON A.column = B.column

Dessa implicita JOINs kan vara svårare att läsa och förstå, och de har också några begränsningar eftersom anslutningsvillkoren är blandade i andra WHERE-förhållanden. Som sådan rekommenderas i allmänhet implicita JOINs till förmån för explicit syntax.



  1. Finns det något sätt att få information om aktuell session från gv$session i Oracle?

  2. Wordpress Sök i seriell metadata med anpassad fråga

  3. Hur man formaterar negativa tal med vinkelparenteser i Oracle

  4. skapa flera användare för en c#.net winform-applikation med sql server express