Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Unterschied zwischen WHERE und ON (https://www.delphipraxis.net/151665-unterschied-zwischen-where-und.html)

idefix2 27. Mai 2010 11:28

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?

chaosben 27. Mai 2010 11:33

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]

fkerber 27. Mai 2010 11:45

Re: Unterschied zwischen WHERE und ON
 
Hi!

Meinst du den Unterschied zwischen

SQL-Code:
SELECT *
FROM table1, table2
WHERE table1.id = table2.id
und

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

mkinzler 27. Mai 2010 11:52

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

borwin 27. Mai 2010 11:57

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:
SELECT NAME, VORNAME
FROM KUNDEN
GROUP BY NAME, VORNAME
HAVING COUNT(*) > 1
Das wäre so in einer WHERE Klausel nicht so einfach möglich.

Aber wie heißt es so schön viele Wege führen nach Rom. Das gilt auch für SQL Abfragen

Gruß
Borwin

fkerber 27. Mai 2010 12:04

Re: Unterschied zwischen WHERE und ON
 
[OT]

Zitat:

Zitat von mkinzler
... (wirkt wie Frederic auf Satzebene) ...

Ich wirke auf Satzebene?! :lol:

[/OT]

idefix2 27. Mai 2010 12:12

Re: Unterschied zwischen WHERE und ON
 
Offenbar bist Du Dir Deiner Wirkung gar nicht bewusst :)
Das können nämlich nur wenige.

mkinzler 27. Mai 2010 12:22

Re: Unterschied zwischen WHERE und ON
 
Zitat:

Zitat von fkerber
[OT]

Zitat:

Zitat von mkinzler
... (wirkt wie Frederic auf Satzebene) ...

Ich wirke auf Satzebene?! :lol:

[/OT]

:oops: da habe ich einen Teil des Satzes nur in Gedanken formuliert und nicht getippt

hoika 27. Mai 2010 14:19

Re: Unterschied zwischen WHERE und ON
 
Hallo,

Zitat:

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.
Der Optimierer sorgt natürlich dafür,
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

fkerber 27. Mai 2010 14:32

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 22:12 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz