Mysql Query Ablauf?

Gast #5562277
Lesenswert?

Ich habe mal eine ziemlich gute Erklärung gefunden wie ein Mysql Query, 
hauptsächlich SELECT, im Detail abläuft.

Also was zuerst kommt, JOIN , ORDER BY, GROUP BY, Subqueries etc. und in 
welcher Reihenfolge mysql das abarbeitet.
Und vor allem das auch manchmal die Reihenfolge der Befehle wichtig ist.

Wenn ich mache
SELECT Count(Wohnsitze), name from Adresse
ist das was anderes als
SELECT name, Count(Wohnsitze) from Adresse

Gibt es dafür eventuelle gute Charts, die das erklären?
Was macht mysql in einer query zuerst, was danach, wie wird es 
zusammengesetzt, etc.
Gast #5562296
Lesenswert?

Roman schrieb:
> Abradolf L. schrieb:
>> Roman schrieb:
>>> Was macht mysql in einer query zuerst, was danach, wie wird es
>>> zusammengesetzt, etc.
>>
>> EXPLAIN
>
> Sagt mir jetzt nichts wirklich, wenn ich das davor schreibe.
> Schreibt mir dann auch nur rätselhafte Sachen hin.

https://dev.mysql.com/doc/refman/8.0/en/using-explain.html

Damit kriegst du den Ablaufplan und erfährst wie mysql eine konkrete 
Query aufteilt und ausführt.
#5567968
Lesenswert?

Roman schrieb:
> Ich habe mal eine ziemlich gute Erklärung gefunden wie ein Mysql Query,
> hauptsächlich SELECT, im Detail abläuft.
>
> Also was zuerst kommt, JOIN , ORDER BY, GROUP BY, Subqueries etc. und in
> welcher Reihenfolge mysql das abarbeitet.
> Und vor allem das auch manchmal die Reihenfolge der Befehle wichtig ist.
>
> Wenn ich mache
> SELECT Count(Wohnsitze), name from Adresse
> ist das was anderes als
> SELECT name, Count(Wohnsitze) from Adresse
>
> Gibt es dafür eventuelle gute Charts, die das erklären?
> Was macht mysql in einer query zuerst, was danach, wie wird es
> zusammengesetzt, etc.


Try this:
Simple is: select > attribute > from > table > where > condition.
complex is: select > attribute > from > table > join > left or right 
etc. > where > order by is last.
Beitrag #5568514 wurde von einem Moderator gelöscht.
Gast #5568654
Lesenswert?

Hi. je nachdem wie "Wohnsitze" angelegt ist ..
Die Count Funktion wird natürlich anders abgefrat als ein simples 
"Textfeld" (vermutlich varchar) wie Name.
Eine Funktion wie Count "arbeitet" dementsprechend mehr.

Nur eine Vermutung : Wenn im Textfeld "Wohnsitze" eh nur eine Steht, 
wird zwar die Funktion evaluiert, dürfte aber immer eine 1 zurückgegebn 
oder ?
Anders ist es, wenn das Feld als ENUM benutzt wird und dort eine 
Aufzählung der einzelnen Wohnsitze z.B. als Adress-Strings hinterlegt 
wird. Das wäre aber für sowas extrem unsauber, ENUMS nimmt man nur für 
kleine übersichtliche Aufzählungsarten ...

Dein o.g. Beispiel sollte am Ende eigneltich dasselbe Result-Set 
ergeben, aber in jeweils anderer Reihenfolge.

Gesetzt den Fall, du möchtest wirklich für ein und dieselbe PErson 
mehrere Wohnsitze verwalten, dann nimm mehr Tabellen :

In einer Tabelle WOhnsitze benutzt Du als Fremdschlüssel die ID deiner 
eineindeutigen Person und zählst die Wohnsitze einzeln auf.

Beispiel Tabelle Person :

person_id (int),
Name (varchar)
vorname (varchar)
gebdatum (date)
...

Tabelle Wohnsitz

person_id (fermdschlüssel aus tabelle Person,
Strasse
Hausnr
PLZ
Ort
erster_wohnsitz (bool ! Also True oder False, obs der 
erste/Hauptwohnsitz ist)

Dann kannst Du z.B.

SELECT * FROM PErson
JOIN wohnsitz ON Person.person_id=wohnsitz.person_id
WHERE Person.Name = "Müller"

Alles inclusive der 3 Wohnsitze mit Hauptwohnsitz von Herrn Müller 
anzeigen.

HEY BEVOR JEMAND MECKERT : ALLES NUR PSEUDOCODE ZUR VERANSCHAULICHUNG 
!!!

Hab ich nur fürs Prinzip hier mal hingepinnt, wer Snytax-Fehler findet 
darf sie behalten !

Gruß
#5569001
Lesenswert?

@ 50c (Gast)

>Jens G. schrieb:
>> Warum soll das was unterschiedliches im Zugriffsplan der DB bewirken
>> (auser daß die Spalten miteinander vertauscht ausgegeben werden).

>...weil in einem möglichen vorhandenen Index die Reihenfolge der Spalten
>eine Rolle spielen könnte!

Die Reihenfolge in der resultierenden Selectlist ist aber nicht abhängig 
von der Spaltenreiehnfolge im Index, da solch eine mögliche 
Übereinstimmung der Reiehenfolge ohnehin ein zufälliger Spezialfall 
wäre, und das Umswitchen der Reihenfolge sowieso on the fly passiert.
Beitrag #5786708 wurde von einem Moderator gelöscht.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren