EXISTUJE
EXISTS je doslova pro kontrolu existence specifikovaných kritérií. V současném standardním SQL vám umožní specifikovat více než jedno kritérium pro porovnání – IE, pokud chcete vědět, kdy se col_a a col_b shodují – což je o něco silnější než klauzule IN. MySQL IN podporuje n-tice, ale syntaxe není přenosná, takže EXISTS je lepší volbou jak pro čitelnost, tak pro přenositelnost.
Další věc, kterou je třeba si uvědomit u EXISTS je, jak funguje - EXISTS vrací boolean a vrátí boolean při první shodě. Takže pokud máte co do činění s duplikáty/násobky, EXISTS bude rychlejší než IN nebo JOIN v závislosti na datech a potřebách.
IN
IN je syntaktický cukr pro klauzule OR. I když je to velmi vstřícné, existují problémy se zpracováním mnoha hodnot pro toto srovnání (severně od 1 000).
NE
Operátor NOT pouze obrátí logiku.
Poddotazy vs JOINy
Mantra „vždy používat spojení“ je chybná, protože spojení JOIN riskuje nafouknutí sady výsledků, pokud existuje více než jeden záznam potomka proti rodiči. Ano, můžete použít DISTINCT nebo GROUP BY, abyste se s tím vypořádali, ale je velmi pravděpodobné, že to poskytuje výkonnostní výhodu použití disku JOIN. Znáte svá data a to, co chcete od sady výsledků – to jsou klíče k psaní SQL, které funguje dobře.
Abychom zopakovali, že víte, kdy a proč vědět, co použít – LEFT JOIN IS NULL je nejrychlejší seznam vyloučení na MySQL pokud porovnávané sloupce NELZE NULL , jinak NOT IN/NOT EXISTS jsou lepší volby.
Reference:
- MySQL:LEFT JOIN/IS NULL, NOT IN, NOT EXISTS on nullable columns
- MySQL:LEFT JOIN/IS NULL, NOT IN, NOT EXISTS on NOT nullable columns