sql >> Database teknologi >  >> RDS >> Mysql

Left Join udkonkurrerer Inner Join?

Hvis du tror, ​​at implementeringen af ​​LEFT JOIN er INNER JOIN + mere arbejde, så er dette resultat forvirrende. Hvad hvis implementeringen af ​​INNER JOIN er (LEFT JOIN + filtrering)? Ah, det er klart nu.

I forespørgselsplanerne er den eneste forskel denne:brugere... ekstra:ved at bruge hvor . Det betyder filtrering. Der er et ekstra filtreringstrin i forespørgslen med den indre joinforbindelse.

Dette er en anden form for filtrering, end der typisk bruges i en where-klausul. Det er nemt at oprette et indeks på A for at understøtte denne filtreringshandling.

SELECT *
FROM A
WHERE A.ID = 3

Overvej denne forespørgsel:

SELECT *
FROM A
  LEFT JOIN B
  ON A.ID = B.ID
WHERE B.ID is not null

Denne forespørgsel svarer til indre joinforbindelse. Der er intet indeks på B, der vil hjælpe med denne filtreringshandling. Årsagen er, at where-klausulen angiver en betingelse for resultatet af joinforbindelsen i stedet for en betingelse for B.



  1. Der opstod en netværksrelateret eller instansspecifik fejl under oprettelse af en forbindelse til SQL Server

  2. Sekventielle gennemløbshastigheder og feeds

  3. Udførelse af rekursive lagrede procedurer i MYSQL for at få hierarkiske data

  4. Hvordan inkluderes det samlede antal returnerede rækker i resultatsættet fra SELECT T-SQL-kommandoen?