![]() |
Datenbank: Firebird • Zugriff über: DBX
Unterschied zwischen WHERE und ON
Hallo,
ich würde gerne wissen, was der Unterschied zwischen der WHERE und der ON Klausel in einem SELECT Statement ist. Die beiden bewirken doch genau das gleiche. Und dann gibt es noch HAVING, das nur in Verbindung mit einer GROUP Klausel verwendet werden kann und eigentlich auch nichts anderes macht? |
Re: Unterschied zwischen WHERE und ON
[schlecht fundiertes Halbwissen]
Wenn ich mir recht erinnere hat der Holger Klemmt mal gesagt, das die ON-Bedingung intern letztendlich genauso wie eine inhaltlich gleiche WHERE-Bedingung gehandelt wird. Insofern: Kein Unterschied (imho). [/schlecht fundiertes Halbwissen] |
Re: Unterschied zwischen WHERE und ON
Hi!
Meinst du den Unterschied zwischen
SQL-Code:
und
SELECT *
FROM table1, table2 WHERE table1.id = table2.id
SQL-Code:
?
SELECT *
FROM table1 JOIN table2 ON table1.id = table2.id Falls ja, dann gibt es im Endeffekt (aufgrund des Anfrageoptimierers der das erste intern quasi in das 2. umwandelt) keinen Unterschied. Von der Sache her, ist der Unterschied aber riesig. Das erste macht ein Kreuzprodukt der beiden Tabellen und filtert dann nur die raus, die du eigentlich haben willst - im Zwischenschritt hast du also Unmengen Tupel, die du gar nicht willst. HAVING ist nochmal ne andere Baustelle. WHERE stellt Bedingungen an einzelne Tupel wohingegen HAVING Bedingungen an ganze Gruppen stellt (daher auch nur mit GROUP BY zu verwenden. Grüße, Frederic |
Re: Unterschied zwischen WHERE und ON
Das on ist Teil eines (expliziten) Joins. Das where schränkt die Ergebnismenge ein (wirkt, wie Frederic schon geschrieben hat, auf Satzebene) Das HAVING gehört zur Gruppierung
|
Re: Unterschied zwischen WHERE und ON
Hallo
bei der ON Kausel wird die Beziehung zweier Tabellen dagestellt die durch das JOIN festgelegt wurden. Man Könnte es auch in der WHERE Klausel definieren, das ist richtig. Aber durch diese Schreibweise wird das SQL besser strukturiert. So kann man genauer erkennen was die Datensicht in der Abfrage einschränkt (WHERE) und wie die Beziehungen der Relationen zu einander (ON) sind. Bei HAVING ist das ein bischen anders. Hier erfolgt die Einschränkung auf Basis von Aggregatfunktionen. Z.B. zum finden doppelter Datensätze
SQL-Code:
Das wäre so in einer WHERE Klausel nicht so einfach möglich.
SELECT NAME, VORNAME
FROM KUNDEN GROUP BY NAME, VORNAME HAVING COUNT(*) > 1 Aber wie heißt es so schön viele Wege führen nach Rom. Das gilt auch für SQL Abfragen Gruß Borwin |
Re: Unterschied zwischen WHERE und ON
[OT]
Zitat:
[/OT] |
Re: Unterschied zwischen WHERE und ON
Offenbar bist Du Dir Deiner Wirkung gar nicht bewusst :)
Das können nämlich nur wenige. |
Re: Unterschied zwischen WHERE und ON
Zitat:
|
Re: Unterschied zwischen WHERE und ON
Hallo,
Zitat:
dass im "1. Schritt" keine Unmenge an Tupeln vorhanden ist. Was du vielleicht meinst, ist, dass die DB's der Vorzeit ... ;) einen "angesagten" Join besser optimieren konnten als ein Where. Das ist aber lange her. Richtig ist einfach (wie schon gesagt), dass durch die explizite Join-Syntax die Abfrage strukturierter und damit besser lesbar ist (Joins stehen als Join da und nicht "versteckt" als Where). Heiko |
Re: Unterschied zwischen WHERE und ON
Hi!
Ich hatte doch oben geschrieben, dass der Anfrageoptimierer das wieder wettmacht und es behandelt wie einen JOIN. Aber von der Bedeutung des Hingeschriebenen ist es ein Kreuzprodukt aus dem nachher was rausgefiltert wird. Grüße, Frederic |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz