sql >> Databáze >  >> RDS >> Mysql

SQL:potřebujeme NĚJAKÉ/NĚKTERÉ a VŠECHNA klíčová slova?

ANY and ALL považuji za velmi užitečné, když netestujete pouze rovnost nebo nerovnost. Zvažte

'blah' LIKE ANY (ARRAY['%lah', '%fah', '%dah']);

jak byla použita moje odpověď na tuto otázku .

ANY , ALL a jejich negace mohou značně zjednodušit kód, který by jinak vyžadoval netriviální poddotazy nebo CTE, a podle mého názoru jsou výrazně málo využívány.

Zvažte, že ANY bude spolupracovat s jakýmkoli operátorem. S LIKE je to velmi praktické a ~ , ale bude fungovat s tsquery, testy členství v poli, testy klíčů hstore a další.

'a => 1, e => 2'::hstore ? ANY (ARRAY['a', 'b', 'c', 'd'])

nebo:

'a => 1, b => 2'::hstore ? ALL (ARRAY['a', 'b'])

Bez ANY nebo ALL pravděpodobně byste je museli vyjádřit jako dílčí dotaz nebo CTE přes VALUES seznam s agregací pro vytvoření jediného výsledku. Jistě, můžete to udělat, pokud chcete, ale já se budu držet ANY .

Je zde jedna skutečná námitka:Na starších verzích Pg, pokud píšete ANY( SELECT ... ) , téměř jistě na tom budete lépe z hlediska výkonu s EXISTS (SELECT 1 FROM ... WHERE ...) . Pokud používáte verzi, kde se optimalizátor změní na ANY (...) do připojení, pak se nemusíte bát. V případě pochybností zkontrolujte EXPLAIN výstup.



  1. V databázi jsou symboly jako  a tak dále, co dělat?

  2. Příklady JSON_VALUE() v SQL Server (T-SQL)

  3. Podivné chování skupiny v dotazu, které je třeba optimalizovat

  4. Jak zruším nebo vytvořím databázi z clojure.java.jdbc?