(Wahrscheinlich) einfache Frage zu SQL und Datenbank :)

DoctorCox

Kabelverknoter(in)
Hallo,
folgendes: ich schreibe bald ne Info-Klausur zum Thema Datenbanken und SQLAbfragen. Datenbanken (Normalisierung, Relation, Bestandteile etc sind eigentlich recht klar) und SQL. Bei SQL hab ich noch kleinere Probleme, bei denen ich eure Hilfe bräcuhte. Ich krieg zwar einfache Abfragen in der Art: SELECT(Attribut) FROM(Tabelle) WHERE(einfache Bedingungen, wie größer, kleiner, gleich, etc.) hin hab aber bei kompliziertere noch Probleme... Deshalb hier mal die Frage, ob mir hier jmd erklären könnte, wie bspw. folgende Abfrage abläuft?


SELECT Name, Vorname FROM Schüler WHERE SNR IN ( SELECT SNR FROM Kurslisten ,Kurse WHERE Fach='Mathematik' or Fach='Informatik');


Hinweis dazu: Es gibt 5 Tabellen (Kurse, Kurslisten, Lehrer, Schüler, Tutoren), deren verbindung eigentlich kalr sein sollte? Wenn nicht schreib ich dir auch noch hier rein :)
Außerdem noch eine Frage zu DB: ich werd aus Wikipedia was "Kardinalität" angeht nicht schlau... Ich meine wir hätten im Unterricht gesagt, das wäre einfach die Beziehungen, wie z.B. 1 zu 1, 1 zu n, ...
Gruß und Danke schonmal :)
 
Achja, Bin jetzt erstmal weg (auf ne Schulaufführung :) ), also bitte nicht wundern, wenn erstmal keine Reaktion von mir kommt:D Meld' mich heute Abend nochmal wieder, wenn ich zurück bin :)
Gruß Cox
 
Das ist ne Subquery. Du bekommst in der hinteren Abfrage eine Liste von SNRs von Schülern, die für Mathe oder Info angemeldet(?) sind (in Kurs oder Kursliste - die werden gejoint). Die vordere Query liefert dann den vollen Namen zu diesen SNRs.
 
bingo88 schrieb:
Das ist ne Subquery. Du bekommst in der hinteren Abfrage eine Liste von SNRs von Schülern, die für Mathe oder Info angemeldet(?) sind (in Kurs oder Kursliste - die werden gejoint). Die vordere Query liefert dann den vollen Namen zu diesen SNRs.

Sign.
 
Was die Kardinalität angeht: Gibt unterschiedliche Kardinalitäten. Zum einen gibts die Kardinalität der Beziehung also 1 zu n oder 1 zu 1 etc. Zum anderen gibts die Kardinalität der Spalten/Zeilen einer Tabelle. Die ist wichtig wenn du ne Abfrage optimieren willst. Hat eine Spalte eine hohe Kardinalität hat sie viele unterschiedliche Werte, hat sie eine niedrige sind die möglichen Werte sehr gering.
Beispiel für niedrige Kardinalität: Tabelle Kursliste - Spalte Bestanden hat 2 mögliche Werte Ja und Nein. Bei ner durchschnittlichen Verteilung der Ergebnisse kriegste also x/2 zurück als Ergebnis wenn du nach bestanden = ja suchst.
Beispiel für hohe Kardinalität: Tabelle Schüler - Spalte Vorname hat meinetwegen 50 unterschiedliche Werte. Also kriegst du bei einer durchschnittlichen Verteilung der Ergebnisse x/50 Zeilen zurück.
Also wenn man optimiert arbeitet man natürlich zuerst die Kriterien ab, die eine hohe Kardinalität haben um die Ergebnismenge auf der man arbeitet so stark wie möglich zu reduzieren...
 
Zurück