SQL-99 Konformität...

Benutzeravatar
oren78
BSc Spammer
BSc Spammer
Beiträge: 1373
Registriert: 17. Nov 2006 17:47
Wohnort: Darmstadt

SQL-99 Konformität...

Beitrag von oren78 »

folgende frage...

dürfen wir folgende SQL funktionen verwenden...?

ucase()
lcase()
mid()
len()
round()
now()
format()
datediff()

etc. ??

ich wollte das zeugs mit dem SQL99 validator (link aus der webseite) checken bekam aber:

Code: Alles auswählen

Oops - We're sorry but there seems to be a problem!
 
Why not check back later? Or - pay a visit to www.mimer.com and see what's happening there.

If you're in a real hurry, send an e-mail to webmaster@mimer.com and we'll fix things ASAP.
EDIT:

nochwas wegen einem semikolon nach den kompletten sql-statement...ist dies pflicht oder optional ? hab im netz das hier gefunden..
Semicolon after SQL Statements?

Some database systems require a semicolon at the end of each SQL statement.

Semicolon is the standard way to separate each SQL statement in database systems that allow more than one SQL statement to be executed in the same call to the server.

We are using MS Access and SQL Server 2000 and we do not have to put a semicolon after each SQL statement, but some database programs force you to use it.
"Unter allen menschlichen Entdeckungen sollte die Entdeckung der Fehler die wichtigste sein.", Stanisław Jerzy Lec

n-finity
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 101
Registriert: 22. Dez 2006 15:38
Kontaktdaten:

Re: SQL-99 Konformität...

Beitrag von n-finity »

Da der SQL Validator noch immer außer Betrieb ist, schließe ich mich an diesen Thread mal an.

Übung 5, Aufgabe 2.16

Meine Lösung:

Code: Alles auswählen

SELECT leser.nachname, COUNT( exemplar.leser )
FROM exemplar
JOIN leser ON leser.id = exemplar.leser
GROUP BY leser.id

MuLo-Variante:

Code: Alles auswählen

SELECT L.Nachname, Anzahl
FROM Leser L,
(SELECT L.ID AS ID, COUNT(E.ISBN) AS Anzahl
FROM Exemplar E, Leser L
WHERE E.Leser = L.ID
GROUP BY L.ID) Temp
WHERE L.ID = Temp.ID;

Ist meine Variante auch okay? Meine Zweifel kommen aus der MuLo zu 2.15, wo explizit steht:
HINWEIS:
L.ID darf im SELECT-Statement auftauchen, da nach diesem Attribut gruppiert
wird. L.Nachname darf hier beispielsweise nicht verwendet werden, womit es deutlich
schwieriger wird, wenn man sich statt der ID den Nachnamen anzeigen lassen möchte.
Zuletzt geändert von n-finity am 6. Sep 2009 10:45, insgesamt 1-mal geändert.

Benutzeravatar
oren78
BSc Spammer
BSc Spammer
Beiträge: 1373
Registriert: 17. Nov 2006 17:47
Wohnort: Darmstadt

Re: SQL-99 Konformität...

Beitrag von oren78 »

deine variante ist meine meinung nach völlig in ordnung, die mulo drückt das selbe ja auch aus, aber eben etwas komplizierter ;-)
"Unter allen menschlichen Entdeckungen sollte die Entdeckung der Fehler die wichtigste sein.", Stanisław Jerzy Lec

n-finity
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 101
Registriert: 22. Dez 2006 15:38
Kontaktdaten:

Re: SQL-99 Konformität...

Beitrag von n-finity »

Ja, der Meinung bin ich auch. Verwirrt hat mich nur der (jetzt fett markierte ;)) Hinweis aus der MuLo, dass meine Variante eben nicht geht.

Nunja. Geht - und wird schon okay sein. :D

Steven
Kernelcompilierer
Kernelcompilierer
Beiträge: 425
Registriert: 2. Sep 2008 10:00
Wohnort: Frankfurt am Main

Re: SQL-99 Konformität...

Beitrag von Steven »

n-finity hat geschrieben:Meine Lösung:

Code: Alles auswählen

SELECT leser.nachname, COUNT( exemplar.leser )
FROM exemplar
JOIN leser ON leser.id = exemplar.leser
GROUP BY leser.id
Das geht nicht. Die Musterlösung hat hier vollkommen recht! Wenn du Aggregatfunktionen verwendest, darfst du außerhalb nur die Attribute verwenden, nach denen du auch gruppierst. Diese allgemeine Regel ist nötig, da die Ausgabespalten sonst nicht zwingend eindeutige Werte besitzen. Beispiel: Tabelle A mit den Spalten Name, Gehalt erhält {("Peter", 100), ("Karl", 100"), (Maria, 105)}. Wenn du jetzt nach Gehalt gruppierst und den Namen ausgeben willst, welcher Name soll für das Gehalt 100 angezeigt werden? Um solche Fälle auszuschließen, darfst du den Namen hier nicht selektieren, wenn du nur nach Gehalt gruppierst.

Der Vollständigkeit halber noch die Meinung eines MS SQL Server 2008 Enterprise Edition zu deiner oben angegebenen Lösung:

Code: Alles auswählen

Column 'Leser.Nachname' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

n-finity
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 101
Registriert: 22. Dez 2006 15:38
Kontaktdaten:

Re: SQL-99 Konformität...

Beitrag von n-finity »

interessant. bei mir (xampp lite, mysql) funktioniert das tadellos.

aber danke... ich werds dann wohl doch lieber komplizierter machen.

Benutzeravatar
Diablo
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 210
Registriert: 6. Sep 2008 17:43
Wohnort: Kreis Offenbach

Re: SQL-99 Konformität...

Beitrag von Diablo »

Warum darf ich nciht nach leser id und nachname groupieren ???

Code: Alles auswählen

SELECT leser.nachname, COUNT( exemplar.leser )
FROM exemplar
JOIN leser ON leser.id = exemplar.leser
GROUP BY leser.id, leser.nachname
Weil zu der Leserid gehört ja ein Leser mit vor und Nachnamen ... d.h. Nachname sollte immer gleich sein passen mit Id ... ODER ??

Steven
Kernelcompilierer
Kernelcompilierer
Beiträge: 425
Registriert: 2. Sep 2008 10:00
Wohnort: Frankfurt am Main

Re: SQL-99 Konformität...

Beitrag von Steven »

Ich sehe keinen Grund, warum das nicht gehen soll. Nach mehreren Spalten zu gruppieren ist möglich, egal, ob du diese anschließend selektierst oder nicht.

s_n
Windoof-User
Windoof-User
Beiträge: 37
Registriert: 24. Aug 2009 16:43
Wohnort: Darmstadt
Kontaktdaten:

Re: SQL-99 Konformität...

Beitrag von s_n »

Dann gibts aber Probleme, wenn es 2 unterschiedliche Leser mit gleichen Nachnamen gibt.

The One and Only Markus
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 169
Registriert: 10. Nov 2005 19:28
Wohnort: Darmstadt

Re: SQL-99 Konformität...

Beitrag von The One and Only Markus »

Leute der SQL-99 Validator funktioniert! Ihr müsst nur den Haken bei "Yes, save my SQL statement(s)." wegmachen!

n-finity
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 101
Registriert: 22. Dez 2006 15:38
Kontaktdaten:

Re: SQL-99 Konformität...

Beitrag von n-finity »

Danke für den Hinweis!

Der Validator liefert:

Result:
Conforms to Core SQL-99

Aber naja.. ich merks mir einfach für die Klausur und geb ggf. ne Erklärung dazu ab - oder schreib einfach (wenn ichs hinkrieg) die kompliziertere Variante.

Benutzeravatar
Diablo
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 210
Registriert: 6. Sep 2008 17:43
Wohnort: Kreis Offenbach

Re: SQL-99 Konformität...

Beitrag von Diablo »

Genau das ist meine Frage. Eigentlich sollte "Er" doch nach ID und Nachname Groupieren also setzt er nur die als Gruppe zusammen wo Nachname und ID immer gleich sind.

Das heisst es kann einen Herrn Peffni mit der ID 123 geben und einen Herrn Peffni mit der ID 321 sind aber zwei verschiedene Groupierungen da beides gleich sein müsste...
Wenn ich lustig bin kann ich ja auch einfach ein Select * auf eine Relation machen und nach allen Groupieren ... würde mir nur ncihts bringen da ich dann die gleiche Relation raus bekommen würde ...

Oder ich könnte nach vor und nachnamen Groupieren und dann z.B. nen count noch machen und wüsste so wie oft der gleiche vor und nachname vorkommt ...

Antworten

Zurück zu „Archiv“