FINDER
EXISTS er bogstaveligt talt til at kontrollere, om der findes specificerede kriterier. I den nuværende standard SQL vil det give dig mulighed for at specificere mere end ét kriterium til sammenligning - IE hvis du vil vide, hvornår col_a og col_b begge matcher - hvilket gør det lidt stærkere end IN-sætningen. MySQL IN understøtter tupler, men syntaksen er ikke bærbar, så EXISTS er et bedre valg både for læsbarhed og portabilitet.
Den anden ting, du skal være opmærksom på med EXISTS er, hvordan det fungerer - EXISTS returnerer en boolean og returnerer en boolean ved den første kamp. Så hvis du har med dubletter/multipletter at gøre, vil EXISTS være hurtigere at udføre end IN eller JOINs afhængigt af data og behov.
IN
IN er syntaktisk sukker for OR-klausuler. Selvom det er meget imødekommende, er der problemer med at håndtere mange værdier for den sammenligning (nord for 1.000).
IKKE
NOT-operatoren vender bare logikken om.
Underforespørgsler vs JOINs
Mantraet "brug altid joins" er mangelfuldt, fordi JOINs risikerer at puste resultatsættet op, hvis der er mere end én underordnet rekord mod en forælder. Ja, du kan bruge DISTINCT eller GROUP BY til at håndtere dette, men det er meget sandsynligt, at dette giver fordelene ved at bruge en JOIN-moot. Kend dine data, og hvad du ønsker for et resultatsæt - disse er nøglen til at skrive SQL, der fungerer godt.
For at gentage at vide hvornår og hvorfor man skal vide, hvad man skal bruge - LEFT JOIN IS NULL er den hurtigste ekskluderingsliste på MySQL hvis de sammenlignede kolonner IKKE er nullable , ellers er IKKE IN/IKKE FINDER bedre valg.
Reference:
- MySQL:LEFT JOIN/ER NULL, IKKE I, FINDER IKKE på nullbare kolonner
- MySQL:LEFT JOIN/ER NULL, IKKE I, FINDER IKKE på IKKE nullbare kolonner