Zum Inhalt springen

SQL Handbuch


JayDeee

Empfohlene Beiträge

roger that.

Zwischen

... im Netz irgendwo ein SQL Handbuch ...
und
... eine gute quelle empfehlen ...
sehe ich zwar gravierende Unterschiede, aber hey, was soll's. ;)

Meine Lieblingsquellen:

Platz 1: Die Onlinehilfe des MS SQL Servers 2000

Klar strukturiert, umfangreich, und zu fast jeder Möglichkeit ein nachvollziehbares Beispiel. Schlicht ein Muster für eine perfekte Onlinehilfe.

Platz 2: Dr. Gordon Russell

Obwohl man sich hier registrieren muss, kann ich diese Seite nur empfehlen. Umfangreiche Tutorials, die kaum Fragen offen lassen, die gleichzeitig wie ein "Spiel" aufgebaut sind, da man sich für komplexere Bereiche erst "qualifizieren", alos einfachere "Levels" absolvieren muss. ("Spaß"&Arbeit nett kombiniert.)

Platz 3: der SQLcourse

Einfach genial: Einfach UND genial. ;) verständliche Erläuterungen, und Möglichkeiten zum Üben.

Platz 4: der SQLzoo

Hier fallen zwar die Erläuterungen eher kurz aus, aber dafür kann man sich mit Hilfe von niedlichen Aufgaben gleich mal selbst testen und so learning-by-doing intensiv betreiben.

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 6 Jahre später...

Hallo zusammen.

Der Thread ist zwar schon uralt, aber vielleicht kann mir ja trotzdem jemand helfen.

Bin auf der Suche nach einem SQL Tutorial dem Link von just_me auf die Seite von Dr. Gordon Russell gestoßen.

Habe nun das Problem, dass ich im 3. Tutorial des Öfteren an den gestellten Aufgaben scheitere.

Leider habe ich nirgendwo Lösungsvorschläge gefunden.

Hat sich vielleicht jemand mit diesem Tutorial auseinander gesetzt und hat Musterlösungen?

Grüße

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo NETter, danke für Dein Hilfsangebot.

Ich habe halt die Hoffnung, dass noch jemand einen Account hat und seine Lösungen ab dem 3. Tutorial Teil kurz zusammenfassen kann.

Ich möchte auf keinen Fall so unverschämt sein und alle Aufgaben hier rein stellen, aber vielleicht kannst Du mir zu den folgenden Aufgaben helfen.

Teilweise bekomme ich die Aufgaben mit "where" Bedingungen gelöst, allerdings nicht mit der "geforderten" JOIN Bedingung.

Zum Beispiel die Nr.1:

"List the full names of employees who have been on any Accounting course."

select distinct forenames, surname

from employee, empcourse, course

where course.courseno = empcourse.courseno

and empcourse.empno = employee.empno

and cname LIKE '%Accounting%'

;

Gibt die richtige Antwort, bekomme aber keine funktionierende JOIN Bedingung hin.

select distinct forenames, surname

from employee JOIN empcourse ON (employee.empno = empcourse.empno),

course JOIN empcourse ON (course.courseno = empcourse.courseno)

where cname LIKE '%Accounting%'

order by (surname)

;

Da sind die zwei Richtigen Namen dabei, allerdings auch 7 falsche.

Verstehe diese Join Sache noch nicht (und wie ich ein smilie eingebe verstehe ich irgendwie auch nicht.. )

Aufgabe 3:

List all employees by surname and forenames who have been on a course in 1988.

select distinct surname, forenames

from employee, empcourse, course

where employee.empno = empcourse.empno

and empcourse.courseno = course.courseno

and cdate between '01.Jan.1988' and '31.Dec.1988'

;

Wie müsste da eine JOIN Bedingung aussehen?

Aufgabe 4:

List in alphabetical order of department name then surname and then forename, the current position of all employees.

select position

from jobhistory, employee, department

where employee.depno = department.depno

and employee.empno = jobhistory.empno

and enddate IS NULL

order by dname asc, surname asc ,forenames asc

;

Da stimmt selbst diese Abfrage nicht. Und wie müsste eine JOIN Abfrage aussehen?

Du siehst, Fragen über Fragen. Das Problem ist halt, dass man sich da komplett eindenken und die Tutorial Tabellen durchschauen müsste, denn ich glaube nicht, dass Du Dich nach den Jahren noch daran erinnern kannst.

Aber vielleicht erkennt der Profi den Fehler auch so...

Ich bedanke mich auf jeden Fall schon mal im Voraus!

Grüße

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

hier mal die Antwort für die Aufgabe 3.1:


select DISTINCT(surname), forenames from employee

inner join empcourse on employee.empno = empcourse.empno

inner join course on empcourse.courseno = course.courseno

WHERE course.cname LIKE '%Accounting%';

Aufgabe 3.3:

select DISTINCT(surname), forenames from employee

inner join empcourse on employee.empno = empcourse.empno

inner join course on empcourse.courseno = course.courseno

WHERE 

(course.cdate >= to_date( '01.01.1988','DD.MM.YYYY'))

AND 

(course.cdate <= to_date( '31.12.1988','DD.MM.YYYY'));

und hier auch noch Aufgabe 3.4:

select department.dname, employee.surname, employee.forenames , jobhistory.position 

from employee INNER JOIN department

ON employee.depno = department.depno 

INNER JOIN jobhistory

ON employee.empno = jobhistory.empno

WHERE jobhistory.enddate IS NULL 

ORDER BY department.dname,

employee.surname,

employee.forenames;

aber bitte nicht einfach als gegeben hinnehmen sondern mit Joins auseinander setzen :-)

Hoffe das hilft Dir weiter :-)

gruß,

Thomas

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

erstmal das Wichtigste!

:) <-- findest Du beim Erstellen der Nachricht auf der rechten Seite im Menü Smileys :)

Ne, jetzt im Ernst...

Ich habe gesehen, dass Du Joins mit einem "," trennst.

Dein SQL:


select distinct forenames, surname

from employee JOIN empcourse ON (employee.empno = empcourse.empno),

course JOIN empcourse ON (course.courseno = empcourse.courseno)

where cname LIKE '%Accounting%'

order by (surname)

Mein SQL:

select DISTINCT(surname), forenames from employee

inner join empcourse on employee.empno = empcourse.empno

inner join course on empcourse.courseno = course.courseno

WHERE course.cname LIKE '%Accounting%';

Auch mehrere Joins werden ohne Komma hintereinander geschrieben. Wenn man jetzt vom einfachen Join (INNER JOIN) ausgeht, so werden aus beiden abgefragten Tabellen die Zeilen zurück gegeben die ein Gegenstück in der zweiten Tabelle besitzen. Beispiel: Tabelle: Mitarbeiter Felder: maid (PK), vorname, nachname, abtid Tabelle: Abteilung Felder: abtid (PK), abtname Daten der Tabelle Mitarbeiter: 1; Max; Mustermann; 2; 2; Bill; Gates; 1; 3; Peter; Meier; 2; Daten der Tabelle Abteilung: 2; Abteilung2; 3; Abteilung3; Also mal einen INNER JOIN:

select Mitarbeiter.*, Abteilung.* from

Mitarbeiter inner join Abteilung

ON Mitarbeiter.abtid = Abteilung.abtid;

Als Ergebnis würdest Du ungefähr folgendes erhalten: Max; Mustermann; 2; 2; Abteilung2; Peter; Meier; 2; 2; Abteilung2 Bill Gates taucht nicht auf weil es in der "verjointen" Tabelle Abteilung keine Abteilung mit der Nummer 1 gibt. Ebenso taucht Abteilung 3 nicht auf weil es keinen Mitarbeiter gibt der einen Eintrag für Abteilung 3 besitzt. Jetzt mal eben über drei Tabellen****************************** Die Anforderung hat sich geändert und ein Mitarbeiter muss nun mehreren Abteilungen zugeordnet werden können. Also ändern wir den Aufbau der DB wie folgt: Tabelle: Mitarbeiter Felder: maid (PK), vorname, nachname Tabelle: Abteilung Felder: abtid (PK), abtname Tabelle: Mitarbeiter_Abteilung Felder: maid, abtid So können wir jeden Mitarbeiter beliebig vielen Abteilungen zuordnen. Aber jetzt müssen auch drei Tabellen abgefragt werden um an Daten aus Mitarbeiter und Abteilungen zu kommen. Erster Inner Join:

select * from Mitarbeiter inner join Mitarbeiter_Abteilung

on Mitarbeiter.maid = Mitarbeiter_Abteilung.maid

--Aus diesem Join ergibt sich nun eine Rückgabe (wie oben gesehen)

--diese Rückgabe kannst Du einfach mit einer weiteren Tabelle verjoinen :-)

inner join Abteilung

on Mitarbeiter_Abteilung.abtid = Abteilung.abtid

So erhältst Du alle Felder aus den drei Tabellen die einen Bezug zueinander haben. Das Select * ersetzt du dann einfach durch die Felder die du auch benötigst.

Hoffe alle Klarheiten beseitigt zu haben :-)

Gruß,

Thomas

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...