kleinerChemiker
Here to stay
|
SELECT [STRAIGHT_JOIN]
[SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
[SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] [HIGH_PRIORITY]
[DISTINCT | DISTINCTROW | ALL]
select_expression,...
[INTO {OUTFILE | DUMPFILE} 'file_name' export_options]
[FROM table_references
[WHERE where_definition]
[GROUP BY {unsigned_integer | col_name | formula} [ASC | DESC], ...
[HAVING where_definition]
[ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] ,...]
[LIMIT [offset,] rows]
[PROCEDURE procedure_name]
[FOR UPDATE | LOCK IN SHARE MODE]]
das ist ein ausschnitt aus der mysql doku. aber worin besteht nun der unterschied in where und having bzw. in group by und order by? bisher benutze ich eigentlich nur where und order by, aber mich würds interessieren wofür das andere zu benutzen ist, bzw. ob ich da nicht vielleicht eh was bisi falsch mach. tia MIK
|
Guest
Deleted User
|
"order by" sortiert nur die reihenfolge der rows bei der ausgabe
"group by" fasst dir bereiche zusammen - hilft zB beim zählen von records. beispiel:
select name, count(id) as anzahl from einwohner group by name bringt bei der entsprechenden anzahl an datensätzen mit name="huber", "müller" usw als ergebnis:
name anzahl huber 5 müller 2 reithofer 1
"where" und "having" unterscheidet sich nur im praktischen einsatz - in manchen fällen kannst kein "where" mehr machen, weil du schon datensätze gefiltert hast oder eine berechnete spalte hast, dann nimmst einfach das "having".
beispiel (im zusammenhang mit "group by"):
select name, count(id) as anzahl from einwohner group by name having anzahl > 1
bringt aus der gleichen tabelle wie oben
name anzahl huber 5 müller 2
und keinen reithofer, der hat ja kein "anzahl > 1"
|
atrox
in fairy dust... I trust!
|
man kann sich das so vorstellen, wie eine abfrage von der datenbank abgearbeitet wird:
a) datenbank erstellt das kartesische produkt aller tabellen (jedes element einer tabelle wird mit jedem element der anderen tabelle verknuepft; bsp: tab1 {a,b,c}, tab2 {1,2}, kartesisches produkt: {a1,a2,b1,b2,c1,c2} b) wähle alle datensätze, die der where klausel entsprechen, verwerfe alle anderen c) gruppiere anhand der group-klausel d) wähle anhand der having-klausel e) sortiere anhand der sort-by klausel
dadurch ist es zb möglich in der having-klausel auswahlen zu treffen, die erst durch das gruppieren entstanden sind.
(natürlich versucht die datenbank vorab zu optimieren und arbeitet daher ganz anders, weil das kartesische produkt zweier 1000 datensätze großer tabellen, bereits eine million einträge fassen würde)
|
kleinerChemiker
Here to stay
|
thx wieder was gelernt MIK
|