sql >> Database >  >> RDS >> Sqlserver

JOINs filteren:WHERE vs. ON

De link @Gratzy verstrekt is nuttig

Het onderscheid tussen voorwaarden in de ON-clausule en de WHERE-clausule is zeker een grijze.

Voor INNER JOINS zijn ze equivalent. Voor OUTER JOINS heb je gelijk dat de WHERE-clausule conceptueel wordt toegepast nadat de ON-voorwaarde is geëvalueerd.

Maar in veel gevallen zit het verschil meer in opzet dan in functionaliteit. Er is vaak een semantisch verschil tussen de ON-voorwaarden en de WHERE-clausule.

Oudere versies van SQL Server hebben bijvoorbeeld de ON-syntaxis echt geïmplementeerd met behulp van voorwaarden in de WHERE-clausule, met een *= of =* syntaxis om LEFT- of RIGHT-joins te impliceren (wat in sommige gevallen leidde tot vreemd subtiel verschillende resultaten van de LEFT- en RIGHT JOIN-equivalenten)

Over het algemeen is mijn advies om altijd de juiste sleutelvelden in de ON-clausule te gebruiken om records samen te voegen op basis van de logica van hoe de records met elkaar omgaan. Gebruik de WHERE-component om filtervoorwaarden toe te passen die deze resultatenset geleidelijk beperken.




  1. Oplossing voor het invoegen van intentiesloten in MySQL

  2. MySql met de juiste syntaxis voor de over-clausule

  3. MYSQL - SELECTEER gegevens uit dynamische tabelnamen

  4. SqlDataAdapter gebruiken om een ​​rij in te voegen