sql >> Database teknologi >  >> RDS >> Oracle

Venstre Ydre Forbind med +-tegn på Oracle 11g

TableA LEFT OUTER JOIN TableB svarer til TableB RIGHT OUTER JOIN Table A .

I Oracle, (+) angiver den "valgfri" tabel i JOIN. Så i din første forespørgsel er det en P LEFT OUTER JOIN S . I din anden forespørgsel er det S RIGHT OUTER JOIN P . De er funktionelt ækvivalente.

I terminologien angiver RIGHT eller LEFT, hvilken side af joinforbindelsen altid har en post, og den anden side kan være nul. Så i en P LEFT OUTER JOIN S , P vil altid have en post, fordi den er til LEFT , men S kunne være nul.

Se dette eksempel fra java2s.com for yderligere forklaring.

For at præcisere, tror jeg, jeg siger, at terminologi ikke betyder noget, da det kun er der for at hjælpe med at visualisere. Det vigtige er, at du forstår konceptet om, hvordan det fungerer.

HØJRE vs. VENSTRE

Jeg har oplevet en vis forvirring om, hvad der betyder noget for at bestemme RIGHT vs LEFT i implicit joinsyntaks.

VENSTRE YDRE JOIN

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

HØJRE YDRE JOIN

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

Alt, hvad jeg gjorde, var at bytte sider af vilkårene i WHERE-klausulen, men de er stadig funktionelt ækvivalente. (Se højere oppe i mit svar for mere info om det.) Placeringen af ​​(+) bestemmer HØJRE eller VENSTRE. (Specielt hvis (+) er til højre, er det en LEFT JOIN. Hvis (+) er til venstre, er det en RIGHT JOIN.)

Typer af JOIN

De to typer JOIN er implicitte JOINs og eksplicitte JOINs . De er forskellige stilarter til at skrive JOINs, men de er funktionelt ækvivalente.

Se dette SO-spørgsmål .

Implicitte JOINs blot liste alle tabeller sammen. Sammenkædningsbetingelserne er specificeret i en WHERE-sætning.

Implicit JOIN

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

Eksplicitte JOINs tilknyt joinbetingelser med en specifik tabels inklusion i stedet for i en WHERE-sætning.

Eksplicit JOIN

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

Disse implicitte JOINs kan være sværere at læse og forstå, og de har også et par begrænsninger, da joinbetingelserne er blandet i andre WHERE-forhold. Som sådan frarådes implicitte JOINs generelt til fordel for eksplicit syntaks.



  1. E-mail-parsing og -behandlingsarkitektur

  2. Er PHP's null-værdi ikke lig med MySQL's null-værdi?

  3. Hvordan vælger jeg kun en del af en enorm binær (fil)?

  4. SQL:transformer rækker til kolonner i MySQL (SELECT-sætning)