Mysql
 sql >> Baza danych >  >> RDS >> Mysql

SQL:czy potrzebujemy JAKICHKOLWIEK/KTÓRYCH i WSZYSTKICH słów kluczowych?

Uważam, że WSZYSTKIE i WSZYSTKIE są bardzo przydatne, gdy nie tylko testujesz równość lub nierówność. Rozważ

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

jak użyłem mojej odpowiedzi na to pytanie .

ANY , ALL a ich negacje mogą znacznie uprościć kod, który w przeciwnym razie wymagałby nietrywialnych podzapytań lub CTE, a moim zdaniem są one znacznie niedostatecznie wykorzystywane.

Weź pod uwagę, że ANY będzie współpracować z każdym operatorem. Jest to bardzo przydatne z LIKE i ~ , ale będzie działać z tsquery, testami członkostwa w tablicy, testami kluczy hstore i innymi.

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

lub:

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

Bez ANY lub ALL prawdopodobnie będziesz musiał wyrazić je jako podzapytanie lub CTE przez VALUES lista z agregatem, aby uzyskać pojedynczy wynik. Jasne, możesz to zrobić, jeśli chcesz, ale pozostanę przy ANY .

Jest jedno prawdziwe zastrzeżenie:w starszych wersjach Pg, jeśli piszesz ANY( SELECT ... ) , prawie na pewno poprawi się wydajność dzięki EXISTS (SELECT 1 FROM ... WHERE ...) . Jeśli korzystasz z wersji, w której optymalizator włączy ANY (...) do przyłączenia, to nie musisz się martwić. W razie wątpliwości sprawdź EXPLAIN wyjście.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL - separator tysięcy

  2. Jak okresowo wykonywać kod PHP w sposób automatyczny?

  3. Mysql PDO maksymalna długość danych LONGBLOB podczas pobierania

  4. Zaawansowane pola agregacji sum

  5. WSTAW ... NA DUPLIKOWANY KLUCZ (nic nie rób)