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

Forskel synlighed i underforespørgsel join og hvor

I

FROM working_place wp 
JOIN working_place_worker wpw ON ... 
WHERE ...

ON klausul henviser kun til de to tabeller, der deltager i joinforbindelsen, nemlig wp og wpw . Navne fra den ydre forespørgsel er ikke synlige for den.

WHERE klausul (og dens fætter HAVING er den måde, hvorpå den ydre forespørgsel er korreleret til underforespørgslen. Navne fra den ydre forespørgsel er synlig for den.

For at gøre det nemt at huske,

  • ON handler om JOIN, hvordan to tabeller relaterer sig til at danne en række (eller rækker)
  • HVOR handler om udvælgelseskriterierne, testen rækkerne skal bestå

Mens SQL-parseren tillader bogstaver (som ikke er kolonnenavne) i ON-sætningen, trækker den linjen ved referencer til kolonner uden for joinforbindelsen. Du kunne betragte dette som en tjeneste, der beskytter mod fejl.

I dit tilfælde er wo tabellen er ikke en del af JOIN , og bliver afvist. Det er del af hele forespørgslen og genkendes af WHERE .




  1. Dynamisk oprettet SQL vs parametre i SQL Server

  2. Sådan ændres eksisterende tabeller til tilføjelse af tidszone

  3. INSERT INTO eller OPDATERING med to betingelser

  4. Databasedesign:3 typer brugere, separat eller én tabel?