sql >> Database >  >> RDS >> Oracle

Left Outer Join met + teken in Oracle 11g

TableA LEFT OUTER JOIN TableB is gelijk aan TableB RIGHT OUTER JOIN Table A .

In Oracle, (+) geeft de "optionele" tabel in de JOIN aan. Dus in je eerste zoekopdracht is het een P LEFT OUTER JOIN S . In uw tweede zoekopdracht is het S RIGHT OUTER JOIN P . Ze zijn functioneel equivalent.

In de terminologie specificeren RECHTS of LINKS welke kant van de join altijd een record heeft en de andere kant kan nul zijn. Dus in een P LEFT OUTER JOIN S , P zal altijd een record hebben omdat het aan de LEFT staat , maar S kan nul zijn.

Zie dit voorbeeld van java2s.com voor aanvullende uitleg.

Ter verduidelijking, ik denk dat ik zeg dat terminologie er niet toe doet, omdat het er alleen is om te helpen visualiseren. Het gaat erom dat je het concept begrijpt van hoe het werkt.

RECHTS versus LINKS

Ik heb enige verwarring gezien over wat belangrijk is bij het bepalen van RECHTS versus LINKS in de impliciete join-syntaxis.

LINKER BUITENSTE JOIN

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

RECHTS BUITENSTE JOIN

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

Het enige wat ik deed is de zijkanten van de termen in de WHERE-clausule verwisselen, maar ze zijn nog steeds functioneel equivalent. (Zie hoger in mijn antwoord voor meer info daarover.) De plaatsing van de (+) bepaalt RECHTS of LINKS. (Met name als de (+) is aan de rechterkant, het is een LEFT JOIN. Als (+) is aan de linkerkant, het is een RECHTS JOIN.)

Soorten JOIN

De twee stijlen van JOIN zijn impliciete JOINs en expliciete JOINs . Het zijn verschillende schrijfstijlen voor JOIN's, maar ze zijn functioneel equivalent.

Zie deze SO-vraag .

Impliciete JOINs lijst gewoon alle tabellen bij elkaar op. De voorwaarden voor deelname worden gespecificeerd in een WHERE-clausule.

Impliciete JOIN

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

Expliciete JOINs koppel voorwaarden voor samenvoegen aan de opname van een specifieke tabel in plaats van in een WHERE-clausule.

Expliciete JOIN

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

Deze impliciete JOIN's kunnen moeilijker te lezen en te begrijpen zijn, en ze hebben ook enkele beperkingen omdat de join-voorwaarden worden gemengd in andere WHERE-voorwaarden. Als zodanig worden impliciete JOIN's over het algemeen afgeraden ten gunste van expliciete syntaxis.



  1. kan ik array verplaatsen van php naar javascript ophalen uit mysql-database?

  2. Hoe kan ik (Mijn)SQL-statements controleren op syntactische correctheid?

  3. Een kolom met een standaardwaarde toevoegen aan een bestaande tabel in SQL Server

  4. Wat is in Django 1.9 de conventie voor het gebruik van JSONField (native postgres jsonb)?