sql >> Databáze >  >> RDS >> Oracle

Levé vnější spojení pomocí + přihlášení Oracle 11g

TableA LEFT OUTER JOIN TableB je ekvivalentní TableB RIGHT OUTER JOIN Table A .

V Oracle (+) označuje "volitelnou" tabulku v JOIN. Takže ve vašem prvním dotazu je to P LEFT OUTER JOIN S . Ve vašem druhém dotazu je to S RIGHT OUTER JOIN P . Funkčně jsou ekvivalentní.

V terminologii RIGHT nebo LEFT určují, která strana spojení má vždy záznam a druhá strana může být nulová. Takže v P LEFT OUTER JOIN S , P bude mít vždy záznam, protože je LEFT , ale S může být null.

Viz tento příklad z java2s.com pro další vysvětlení.

Abych to objasnil, myslím, že říkám, že na terminologii nezáleží, protože slouží pouze k vizualizaci. Důležité je, že rozumíte konceptu, jak to funguje.

VPRAVO vs. VLEVO

Viděl jsem určité nejasnosti ohledně toho, co je důležité při určování RIGHT vs LEFT v implicitní syntaxi spojení.

VNĚJŠÍ PŘIPOJENÍ VLEVO

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

PRAVÉ VNĚJŠÍ PŘIPOJENÍ

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

Vše, co jsem udělal, je zaměnit strany výrazů v klauzuli WHERE, ale stále jsou funkčně ekvivalentní. (Další informace o tom naleznete výše v mé odpovědi.) Umístění značky (+) určuje VPRAVO nebo VLEVO. (Konkrétně, pokud (+) je vpravo, je to LEVÝ JOIN. Pokud (+) je vlevo, je to RIGHT JOIN.)

Typy JOIN

Dva styly JOIN jsou implicitní JOINy a explicitní JOINy . Jsou to různé styly psaní JOINů, ale jsou funkčně ekvivalentní.

Viz tento dotaz SO .

Implicitní JOINy jednoduše uveďte všechny tabulky dohromady. Podmínky spojení jsou specifikovány v klauzuli WHERE.

Implicitní JOIN

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

Explicitní JOINy přidružit podmínky spojení k zahrnutí konkrétní tabulky namísto klauzule WHERE.

Explicitní JOIN

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

Tyto Implicitní JOINy ​​mohou být obtížněji čitelné a pochopitelné a mají také několik omezení, protože podmínky spojení jsou smíšené s jinými podmínkami WHERE. Jako takové jsou implicitní JOINy ​​obecně doporučovány ve prospěch explicitní syntaxe.



  1. Získejte VIEW ddl pomocí dotazu

  2. Zobrazení seznamu správců Django + ForeignKey =prázdný seznam změn

  3. Jak VLOŽIT záznam nebo AKTUALIZOVAT, pokud již existuje?

  4. Postgresql vynucuje jedinečnou obousměrnou kombinaci sloupců