php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 12.06.2011, 22:32  
Benutzer
 
Registriert seit: 24.12.2010
Beiträge: 68
PHP-Kenntnisse:
Anfänger
kaptainIglo befindet sich auf einem aufstrebenden Ast
Standard sql abfrage unterschied where, join

Kann mir jemand sagen in wiefern sich die beiden sql abfragen unterscheiden:

Code:
select a.eins, a.zwei, b.name
from a,b 
where a.id = b.id
Code:
select a.eins, a.zwei, b.name
from a
join b on a.id = b.id
kaptainIglo ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 12.06.2011, 22:54  
Erfahrener Benutzer
 
Registriert seit: 03.08.2010
Beiträge: 300
PHP-Kenntnisse:
Fortgeschritten
Asterixus sorgt für eine eindrucksvolle AtmosphäreAsterixus sorgt für eine eindrucksvolle Atmosphäre
Asterixus eine Nachricht über Skype™ schicken
Standard

Die Frage stelle ich mich auch. Ich weiß nur, dass bei mir die inner-join-Variante immer funktioniert und die where-Variante ab und zu zu unbekannten Spaltennamen führt.

Ich benutze nur noch inner-join.
Asterixus ist offline   Mit Zitat antworten
Alt 13.06.2011, 00:39  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Variante a) erstellt die Matrix a × b und schmeißt hinterher die Werte raus, die WHERE nicht abdeckt.
Variante b) prüft direkt beim Erstellen des Joins die ON-Bedingung ab.

Beide Aussage vor der Optimierung durch das DBMS. Technisch kann es sein, dass letztlich gar kein Unterschied mehr besteht.

Zitat:
und die where-Variante ab und zu zu unbekannten Spaltennamen führt.
Glaube ich ohne Beispiel erstmal nicht.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 13.06.2011, 00:57  
Benutzer
 
Registriert seit: 24.12.2010
Beiträge: 68
PHP-Kenntnisse:
Anfänger
kaptainIglo befindet sich auf einem aufstrebenden Ast
Standard

Danke für die Erläuterung. Ich habe nur die Info bekommen das die join variante schneller sein soll. So wie ich das rauslese ist das auch der Fall.
kaptainIglo ist offline   Mit Zitat antworten
Alt 13.06.2011, 01:37  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Es sind beides JOINs! Ansonsten würde ich es mit dem Manual halten:

Zitat:
The conditional_expr used with ON is any conditional expression of the form that can be used in a WHERE clause. Generally, you should use the ON clause for conditions that specify how to join tables, and the WHERE clause to restrict which rows you want in the result set.
http://www.google.com/search?q=sql+j...ient=firefox-a

> http://www.bennadel.com/blog/284-SQL...ERE-Clause.htm
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 13.06.2011, 02:10  
Erfahrener Benutzer
 
Benutzerbild von mermshaus
 
Registriert seit: 14.06.2009
Beiträge: 1.723
PHP-Kenntnisse:
Fortgeschritten
mermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz sein
Standard

Nach allem, was mir bisher begegnet ist, gilt die WHERE/equals-Syntax für Joins als „veraltet“ (frowned upon ).

- http://stackoverflow.com/questions/6...n-on-vs-equals
__________________
Blog | Buch | Kaloa
mermshaus ist offline   Mit Zitat antworten
Alt 13.06.2011, 16:20  
Erfahrener Benutzer
 
Registriert seit: 03.08.2010
Beiträge: 300
PHP-Kenntnisse:
Fortgeschritten
Asterixus sorgt für eine eindrucksvolle AtmosphäreAsterixus sorgt für eine eindrucksvolle Atmosphäre
Asterixus eine Nachricht über Skype™ schicken
Standard

Zitat:
Zitat von nikosch Beitrag anzeigen
Glaube ich ohne Beispiel erstmal nicht.
Da ich nie gefunden habe, woran es liegt, kann ich es leider nicht rekonstruieren. Habe das jedes Mal gelöscht, ich behalte ja nicht fehlerhaften Code.
Wenn ich mich recht erinnere waren immer mehr als zwei Tabellen im Spiel und es lag (teilweise) an der Reihenfolge der where-Klausel-Teile, denn wenn man die nur umdrehte, war alles ok.
Asterixus ist offline   Mit Zitat antworten
Alt 15.06.2011, 12:55  
Neuer Benutzer
 
Registriert seit: 15.06.2011
Beiträge: 5
PHP-Kenntnisse:
Anfänger
jagr2510 ist in Verruf geraten
Standard

Also bei dem Script gibt es definitiv keinen Unterschied, auch die Performancefrage kann man sich bei dieser winzigen Abfrage sparen.
Der entscheidende Unterschied zwischen Where und einem Join ist dennoch die Performance, die aber erst bei größeren Abfragen zum tragen kommt.
Mit einem Join kann man eine Auswahl verfeinern.
So lässt man sich z.B. mit einem Left Join
nur die Daten der linken Tabelle im Join ausgeben.
Macht man also viele Joins über meherer Tabellen hat man dadurch schon Daten ausgesiebt, die nicht angefasst werden. Es werden nur noch ID's verglichen.
Dies gilt natürlich nicht für den INNER JOIN!
jagr2510 ist offline   Mit Zitat antworten
Alt 15.06.2011, 13:09  
fab
Erfahrener Benutzer
 
Benutzerbild von fab
 
Registriert seit: 28.07.2010
Beiträge: 2.308
PHP-Kenntnisse:
Fortgeschritten
fab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblick
Standard

Zitat:
Zitat von jagr2510 Beitrag anzeigen
So lässt man sich z.B. mit einem Left Join
nur die Daten der linken Tabelle im Join ausgeben.
Wie meinst du das denn? Bei einem LEFT JOIN werden zuerst die Daten aus der linken Tabelle anhand der WHERE Bedingung selektiert und dann jeweils die der rechten anhand der ON Bedingung. Daher nimmt man "a LEFT JOIN b" wenn b von a abhängig ist. Ausgegeben wird aber alles. Wenn du für die Spalten der rechten Tabelle NULL Werte hast, heißt das dass keine entsprechenden Datensätze vorhanden sind.
fab ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

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 an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Join Abfrage auf ODBC Datenbank da.eXecutoR PHP-Fortgeschrittene 15 05.05.2011 17:28
[Erledigt] SQL Abfrage escapen wooha PHP Einsteiger 3 18.04.2011 10:13
[Erledigt] SQL zweistufige Abfrage Elefterios Datenbanken 12 13.03.2011 15:23
[Erledigt] SQL WHERE ohne mehrere SQL Abfragen Soulstormer Datenbanken 10 01.03.2011 16:26
SQL Abfrage INNER JOIN etc. chr1s-eg Datenbanken 4 01.03.2011 13:37
Array aus SQL Abfrage zusammenbauen um es rekursiv abzuarbeiten litterauspirna PHP Einsteiger 7 01.02.2011 18:44
OUTER JOIN Abfrage, die evtl. keine Treffer zurückgeben könnte noop Datenbanken 1 27.01.2011 20:23
[Erledigt] Probleme mit Join Abfrage bei verschiedenen Werten KingOfDiamonds Datenbanken 3 30.11.2010 13:18
False Abfrage und SQL hängt sich auf marc77 Datenbanken 4 22.11.2010 14:57
[HILFE] Join Abfrage Funktioniert nicht. NeroS Datenbanken 5 06.02.2010 11:44
Problem mit LEFT JOIN UND WHERE trialgod Datenbanken 6 26.01.2010 13:25
[Erledigt] SQL Anweisung sadry PHP Tipps 2009 38 20.08.2009 11:28
Performance von INNER JOIN Abfrage erhöhen - Vorschläge? Timbob Datenbanken 8 05.03.2009 17:54
erweiterte abfrage - where DarkManX Datenbanken 2 02.02.2007 17:14

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
joins sql abfragen, where join, sql abfrage join, unterschied where join, sql unterschied where join, php sql join, sql join unterschiede, sql abfrage left join, unterschied join und whrer, unterschied where joins, join unterschied where, wann nimmt man where wann inner join? sql, join in sql abfragen, sql unterschiede join, sql abfragen untershied, sql join unterschied, sql abfragen differenz, sql abfragen ohne join, unterschied performance sql join where, differenz sql abfrage

Alle Zeitangaben in WEZ +2. Es ist jetzt 12:05 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum