Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

EXISTS vs JOIN i użycie klauzuli EXISTS

EXISTS służy do zwracania wartości logicznej, JOIN zwraca całą inną tabelę

EXISTS służy tylko do sprawdzania, czy podzapytanie zwraca wyniki i powoduje zwarcia, gdy tylko to zrobi. JOIN służy do rozszerzenia zestawu wyników poprzez połączenie go z dodatkowymi polami z innej tabeli, do której istnieje relacja.

W twoim przykładzie zapytania są semantycznie równoważne.

Ogólnie użyj EXISTS kiedy:

  • Nie musisz zwracać danych z powiązanej tabeli
  • Masz duplikaty w powiązanej tabeli (JOIN może powodować zduplikowane wiersze, jeśli wartości się powtarzają)
  • Chcesz sprawdzić istnienie (użyj zamiast LEFT OUTER JOIN...NULL warunek)

Jeśli masz odpowiednie indeksy, w większości przypadków EXISTS będzie działać identycznie jak JOIN . Wyjątkiem są bardzo skomplikowane podzapytania, w których zwykle szybciej jest użyć EXISTS .

Jeśli Twój JOIN klucz nie jest indeksowany, może być szybciej użyć EXISTS ale musisz przeprowadzić test pod kątem konkretnych okoliczności.

JOIN składnia jest łatwiejsza do odczytania i bardziej przejrzysta.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak ustawić opcję maxrecursion dla CTE wewnątrz funkcji Table-Valued-Function?

  2. jak znaleźć rozmiar wiersza w tabeli

  3. Po usunięciu kaskady dla tabeli samoodnoszącej się

  4. TODATETIMEOFFSET() Przykłady w SQL Server

  5. Jak naprawić „Tylko jedno wyrażenie można określić na liście wyboru…” w SQL Server