AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Unterschied zwischen WHERE und ON
Thema durchsuchen
Ansicht
Themen-Optionen

Unterschied zwischen WHERE und ON

Ein Thema von idefix2 · begonnen am 27. Mai 2010 · letzter Beitrag vom 27. Mai 2010
Antwort Antwort
Seite 1 von 2  1 2      
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#1

Unterschied zwischen WHERE und ON

  Alt 27. Mai 2010, 11:28
Datenbank: Firebird • Zugriff über: DBX
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?
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Unterschied zwischen WHERE und ON

  Alt 27. Mai 2010, 11:33
[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]
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#3

Re: Unterschied zwischen WHERE und ON

  Alt 27. Mai 2010, 11:45
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
Frederic Kerber
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Unterschied zwischen WHERE und ON

  Alt 27. Mai 2010, 11:52
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
Markus Kinzler
  Mit Zitat antworten Zitat
borwin

Registriert seit: 14. Sep 2006
Ort: Rostock
72 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Unterschied zwischen WHERE und ON

  Alt 27. Mai 2010, 11:57
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
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#6

Re: Unterschied zwischen WHERE und ON

  Alt 27. Mai 2010, 12:04
[OT]

Zitat von mkinzler:
... (wirkt wie Frederic auf Satzebene) ...
Ich wirke auf Satzebene?!

[/OT]
Frederic Kerber
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#7

Re: Unterschied zwischen WHERE und ON

  Alt 27. Mai 2010, 12:12
Offenbar bist Du Dir Deiner Wirkung gar nicht bewusst
Das können nämlich nur wenige.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Unterschied zwischen WHERE und ON

  Alt 27. Mai 2010, 12:22
Zitat von fkerber:
[OT]

Zitat von mkinzler:
... (wirkt wie Frederic auf Satzebene) ...
Ich wirke auf Satzebene?!

[/OT]
da habe ich einen Teil des Satzes nur in Gedanken formuliert und nicht getippt
Markus Kinzler
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Unterschied zwischen WHERE und ON

  Alt 27. Mai 2010, 14:19
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
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#10

Re: Unterschied zwischen WHERE und ON

  Alt 27. Mai 2010, 14:32
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
Frederic Kerber
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:54 Uhr.
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