Inforis AG Beckenhofstrasse 16 8006 Zürich www.inforis.ch SQL Hands-On Workshop 2010 EB Zürich Ergänzende Unterlagen SQL Hands-On Workshop 2010 EB Zürich Ergänzende Unterlagen und Übungen 1. Abfragen mit einer Tabelle (Unterlagen Herdt; Kap. 7) Serie A Anzahl Datensätze A1. Erstellen Sie eine Abfrage Q01_Namensliste, die Vorname, Nachname und Ort jeder Adresse anzeigt (in dieser Reihenfolge, aber nach Nachname und Vorname sortiert). 191 A2. Erstellen Sie eine Abfrage Q02_AusserhalbZuerich, die alle Adressen auswählt, die nicht in Zürich liegen. 184 A4. Erstellen Sie eine Abfrage Q04_Ortschaften, die eine Liste sämtlicher Ortschaften ausgibt, aus denen Kursteilnehmer oder Kursleiter kommen. 68 A5. Erstellen Sie eine Abfrage Q05_PLZZwischen8000Und8999, die alle Adressen auswählt, deren Postleitzahl zwischen 8000 und 8999 liegt. 54 A6. Erstellen Sie eine Abfrage Q06_Meierei, die alle Adressen auswählt, deren Nachname Meier, Maier, Meyer oder Mayer lautet. 14 A7. Erstellen Sie eine Abfrage Q07_NachnameMitM, die alle Adressen auswählt, deren Nachname mit einem M anfängt. 30 A8. Erstellen Sie eine Abfrage Q08_NachnameMitVokal, die alle Adressen auswählt, deren Nachname mit einem Vokal beginnt. 29 A9. Sie haben den Namen einer Kursteilnehmerin vergessen – Sie wissen nur noch, dass der südländisch klingende Nachname einen Apostroph (') enthält. Erstellen Sie eine Abfrage Q09_Apostroph, mit deren Hilfe Sie den Namen der Kursteilnehmerin herausfinden können. A10. Sie haben den Namen eines Kursteilnehmers vergessen – Sie wissen nur noch, dass der Nachname mit ammann aufhört. Erstellen Sie eine Abfrage Q10_ammann, mit deren Hilfe Sie den gesuchten Kursteilnehmer finden können. A11. Und Sie sind so vergesslich, dass Sie noch einen dritten Namen vergessen haben, irgend etwas mit hau oder hauen oder so... – metallisch klingend. Finden Sie den Namen mit Hilfe einer Abfrage Q11_Hauruck heraus. M:\11_Schul\EB_Zuerich\2010_Q3_SQL_HandsOnWorkshop\20100720_Funktionen_und_SQLAufgaben.doc Werner Müntener, Inforis AG 3, aber nur eine Frau 7, aber nur ein "Nicht Ammann" 3, aber nur 2 eindeutig metallisch Seite 1 / 10 Inforis AG Beckenhofstrasse 16 8006 Zürich www.inforis.ch SQL Hands-On Workshop 2010 EB Zürich Ergänzende Unterlagen 2. Nützliche Auswahl von MS SQL Server Funktionen Aggregatsfunktionen Funktion und Parameter Beispiel -- Anzahl: SELECT COUNT(*) FROM T02_Kurs -- Oder: SELECT COUNT(KNr) FROM T02_Kurs -- Summierung: SELECT SUM(KKost) FROM T02_Kurs -- Minimum: SELECT MIN(KKost) FROM T02_Kurs -- Maximum: SELECT MAX(KKost) FROM T02_Kurs -- Durchschnitt: SELECT AVG(KKost) FROM T02_Kurs -- Standardabweichung: SELECT STDEV(KKost) FROM T02_Kurs Systemfunktionen Funktion und Parameter Beispiel -- Nullwert umwandeln: SELECT ISNULL(Vorname, 'KEIN VORNAME') FROM T01_Person -- Datentyp konvertieren: SELECT CONVERT(datetime, '2007-05-11', 102) -- Test ob Datum: SELECT ISDATE('2007-05-11') -- oder: SELECT ISDATE('2007-02-31') -- Test ob Zahl: SELECT ISNUMERIC('123.456') -- oder: SELECT ISNUMERIC('123.456 kg') M:\11_Schul\EB_Zuerich\2010_Q3_SQL_HandsOnWorkshop\20100720_Funktionen_und_SQLAufgaben.doc Werner Müntener, Inforis AG Seite 2 / 10 Inforis AG Beckenhofstrasse 16 8006 Zürich www.inforis.ch Funktion und Parameter SQL Hands-On Workshop 2010 EB Zürich Ergänzende Unterlagen Beispiel -- OS Login: SELECT SYSTEM_USER -- DB User: SELECT CURRENT_USER -- Maschinenname: SELECT HOST_NAME() -- Session ID: SELECT HOST_ID() Zeichenfolgefunktionen Funktion und Parameter Beispiel -- Anzahl Zeichen: SELECT LEN('123') -- Erster Fundort: SELECT CHARINDEX('XX', 'asXXdf', 1) -- Erster Fundort (Muster): SELECT PATINDEX('%Xd%', 'aXsXdf') -- Linker Teil: SELECT LEFT('Otto', 3) -- Rechter Teil: SELECT Right('Otto', 3) -- Teil einer Zeichenfolge: SELECT SUBSTRING('Otto', 2, 2) -- Leerzeichen links entfernen: SELECT LTRIM(' Otto') -- Leerzeichen rechts entfernen: SELECT LTRIM('Otto ') M:\11_Schul\EB_Zuerich\2010_Q3_SQL_HandsOnWorkshop\20100720_Funktionen_und_SQLAufgaben.doc Werner Müntener, Inforis AG Seite 3 / 10 Inforis AG Beckenhofstrasse 16 8006 Zürich www.inforis.ch Funktion und Parameter SQL Hands-On Workshop 2010 EB Zürich Ergänzende Unterlagen Beispiel -- Zahl in Text mit fixer Länge umwandeln: SELECT STR(1.2345, 10, 2) -- In Grossbuchstaben: SELECT UPPER('otto') -- In Kleinbuchstaben: SELECT LOWER('OTTO') -- ASCII Code: SELECT ASCII('A') -- Zeichen aus ASCII Code: SELECT CHAR(65) Datums- und Uhrzeitfunktionen Funktion und Parameter Beispiel -- Systemdatum: SELECT GETDATE() -- Nur Jahr: SELECT YEAR(GETDATE()) -- Nur Monat: SELECT MONTH(GETDATE()) -- Nur Tag: SELECT DAY(GETDATE()) -- Irgendein Datumsteil (Zahl): SELECT DATEPART(hh, GETDATE()) -- Irgendein Datumsteil (Text): SELECT DATENAME(mm, GETDATE()) M:\11_Schul\EB_Zuerich\2010_Q3_SQL_HandsOnWorkshop\20100720_Funktionen_und_SQLAufgaben.doc Werner Müntener, Inforis AG Seite 4 / 10 Inforis AG Beckenhofstrasse 16 8006 Zürich www.inforis.ch Funktion und Parameter SQL Hands-On Workshop 2010 EB Zürich Ergänzende Unterlagen Beispiel -- Einheit zu Datum addieren: SELECT DATEADD(dd, 7, GETDATE()) -- Anzahl Einheiten zwischen Datum: SELECT DATEDIFF(dd, '2007-01-01', GETDATE()) M:\11_Schul\EB_Zuerich\2010_Q3_SQL_HandsOnWorkshop\20100720_Funktionen_und_SQLAufgaben.doc Werner Müntener, Inforis AG Seite 5 / 10 Inforis AG Beckenhofstrasse 16 8006 Zürich www.inforis.ch SQL Hands-On Workshop 2010 EB Zürich Ergänzende Unterlagen 3. Abfragen mit mehreren Tabellen (Herdt: Kap. 10) Verknüpfungen bei Abfragen mit mehreren Tabellen Bestellungen BestNr Bestellpositionen BestDat 1 2 3 4 5 6 BestNr 01.05.01 02.06.01 02.06.01 04.06.01 05.06.01 07.06.01 ArtNr 1 1 2 2 5 6 6 Artikel Anzahl 1 4 1 3 2 1 2 ArtNr ArtBez 1 2 1 3 1 5 2 1 2 3 4 Festplatte 11 GB, SCSI Festplatte 18 GB, IDE Monitor EIZO T563 Pentium III, 800 MHz Aufgabe: Ziehen Sie mit einem Stift die entsprechenden Verbindungen zwischen einander zugeordneten Zeilen in den Tabellen auf der vorherigen Seite. Was "gehört zusammen"? BestNr BestDat Bestellung 1: 1 01.05.01 1 01.05.01 Bestellung 3: 3 02.06.01 ... Bestellung 6: 6 07.06.01 6 07.06.01 BestNr ArtNr Anzahl ArtNr ArtBez 1 1 1 4 1 2 1 Festplatte 11 GB, SCSI 4 Pentium III, 800 MHz 2 1 1 1 Festplatte 11 GB, SCSI 6 6 1 2 5 2 1 Festplatte 11 GB, SCSI 2 Festplatte 18 GB, IDE Wieso das? Weil man über die Spalte 'BestNr' (Fremdschlüssel) in der Tabelle Bestellpositionen herausfindet, welches die dazugehörige Bestellung ist (die mit der gleichen BestNr in der Tabelle Bestellungen). Und weil man über die Spalte 'ArtNr' (Fremdschlüssel) in der Tabelle Bestellpositionen herausfindet, welches der dazugehörige Artikel ist (der mit der gleichen ArtNr in der Tabelle Artikel). Diese Verknüpfung von den drei Tabellen muss einer Abfrage zuerst 'mitgeteilt' werden: ... FROM ... Bestellungen AS b INNER JOIN Bestellpositionen AS p ON b.BestNr=p.BestNr INNER JOIN Artikel AS a ON a.ArtNr=b.ArtNr M:\11_Schul\EB_Zuerich\2010_Q3_SQL_HandsOnWorkshop\20100720_Funktionen_und_SQLAufgaben.doc Werner Müntener, Inforis AG Seite 6 / 10 Inforis AG Beckenhofstrasse 16 8006 Zürich www.inforis.ch SQL Hands-On Workshop 2010 EB Zürich Ergänzende Unterlagen Aufgaben: Versuchen Sie mittels Abfragen die folgenden Fragen zu beantworten. Beachten Sie, dass rechts neben jeder Aufgabenstellung die Anzahl Datensätze (Zeilen) für die richtige Lösung angegeben ist. Serie B Anzahl Datensätze B1. Wie heissen die KursteilnehmerInnen, die sich am 8.8.2002 angemeldet haben? __________________________________________________________ 4 Datensätze B2. Wie lauten die Kursnummern der Kurse, die von TeilnehmerInnen aus Amriswil besucht werden? __________________________________________________________ 4 Datensätze B3. Wer leitet den Kurs mit Kursnummer 5? __________________________________________________________ 1 Datensatz B4. Wieviel kostet der Kurs Datenbank: Aufbau? __________________________________________________________ 4 Datensätze B5. Wer aus Kreuzlingen besucht den Kurs Datenbank: Einführung? __________________________________________________________ B6. Bei wem besucht Frau Erika Müller Kurse? __________________________________________________________ B7. Welches ist die Nummer des meist besuchten Kurstyps? Wie viele Teilnehmer besuchen ihn? Wie lautet seine Bezeichnung? __________________________________________________________ M:\11_Schul\EB_Zuerich\2010_Q3_SQL_HandsOnWorkshop\20100720_Funktionen_und_SQLAufgaben.doc Werner Müntener, Inforis AG 1 Datensatz 2 Datensätze 1 Datensatz (Verwenden von Gruppierungen) (5 Datensätze ohne Top 1) Seite 7 / 10 Inforis AG Beckenhofstrasse 16 8006 Zürich www.inforis.ch SQL Hands-On Workshop 2010 EB Zürich Ergänzende Unterlagen Serie C Anzahl Datensätze C1. Erstellen Sie eine Abfrage "Q01_KursteilnehmerEinesKurses", die Vor- und Nachname aller KursteilnehmerInnen von Kursnummer 8 ausgibt. C2. Erstellen Sie eine Abfrage "Q02_KurseVonFrauIseli", die alle Kurse (KNr) ausgibt, die von Frau Jaqueline Iseli-Widmer besucht werden. 2 C3. Erstellen Sie eine Abfrage "Q03_KurseOhneTeilnehmerInnen ", die alle Kurse (KNr) ausgibt, die von niemandem besucht werden. 1 C4. Erstellen Sie eine Abfrage "Q04_RolfsOhneKurse", die alle Personen mit Vorname "Rolf" ausgibt, die keinen Kurs besuchen. 5 C5. Erstellen Sie eine Abfrage "Q05_PersonenMitMehrfachteilnahmen", die alle Personen ausgibt, die mehr als einen Kurs belegen. C6. Wie heissen die Personen, die genau 3 Kurse belegen? C7. Erstellen Sie eine Abfrage "Q07_AnzTeilnehmerInnenProKurs", die für alle Kurse angibt, wie viele Personen daran teilnehmen. C8. Erstellen Sie eine Abfrage "Q08_unbezahlteAnmeldungen", die angibt, wie viele Kursteilnahmen noch unbezahlt sind. C9. Erstellen Sie eine Abfrage "Q09_ausstehendeZahlungenTotal", die den Gesamtbetrag der ausstehenden Zahlungen ausgibt. 11 19 1 13 124 1 C10. Erstellen Sie eine Abfrage "Q10_TeamTeachingKurse", die alle Kurse ausgibt, die von mehr als einem Kursleiter oder einer Kursleiterin geleitet werden. 1 C11. Erstellen Sie eine Abfrage "Q11_lernendeLehrerInnen", die alle Personen ausgibt, die sowohl Kurse leiten als auch Kurse besuchen. 2 C12. Wie lauten die AHV Nummern aller KursleiterInnen, die den Kurs "Datenbank: Aufbau" unterrichten? 3 M:\11_Schul\EB_Zuerich\2010_Q3_SQL_HandsOnWorkshop\20100720_Funktionen_und_SQLAufgaben.doc Werner Müntener, Inforis AG Seite 8 / 10 Inforis AG Beckenhofstrasse 16 8006 Zürich www.inforis.ch SQL Hands-On Workshop 2010 EB Zürich Ergänzende Unterlagen Serie D: MiniPars D1. Über welche Felder in T30 werden T01 und T02 miteinander 'verbunden'? Welches sind die 'Brückenköpfe'? _________________________________________________________________________ D3. Wie viele verschiedene Airlines gibt es? _______________________________________________________________________ D4. Welche Airlines fliegen nach New York Kennedy ? _______________________________________________________________________ D5. Wieviel kostet die teuerste Buchung? _______________________________________________________________________ D6. Wieviel kosten alle Buchungen zusammen? _______________________________________________________________________ D7. Wieviel kosten alle Buchungen im Durchschnitt (Tip: wie Aufgabe 6. Was müssen Sie verwenden an Stelle von Summe)? _______________________________________________________________________ D8. Welcher Passagier fliegt am häufigsten? _______________________________________________________________________ D9. Summieren Sie die Flugpreise pro Passagier. Welche drei Passagiere zahlen am meisten? _______________________________________________________________________ D10. Erstellen Sie eine Abfrage, aus der Sie die Anzahl freier Sitze für jeden Flug und die prozentuale Auslastung entnehmen können. _______________________________________________________________________ D11. Welches ist der Durchschnitt der prozentualen Auslastung? _______________________________________________________________________ D12. Wer fliegt mit Air France nach Frankreich oder nach Belgien? _______________________________________________________________________ D13. Welche Personen zahlen mehr als 3'000.- Fr.? _______________________________________________________________________ D14. Wieviel kosten deren Tickets insgesamt? _______________________________________________________________________ D15. Aktualisierungsabfrage: Erhöhen Sie alle Preise um 6.4% in der Reservationstabelle (Erstellen Sie zuerst eine Sicherungskopie der Tabelle). _______________________________________________________________________ D16. Löschabfrage: Löschen Sie alle Buchungen zwischen 1. bis 20. Febr. 2001 (Erstellen Sie zuerst eine Sicherungskopie der Tabelle). _______________________________________________________________________ D17. Tabellenerstellungsabfrage: Erstellen Sie eine neue Tabelle von allen Passagieren (Adressen), die mit dem Flug AZ 143 am 10. Juni 2001 nach Rom geflogen sind. _______________________________________________________________________ M:\11_Schul\EB_Zuerich\2010_Q3_SQL_HandsOnWorkshop\20100720_Funktionen_und_SQLAufgaben.doc Werner Müntener, Inforis AG Seite 9 / 10 Inforis AG Beckenhofstrasse 16 8006 Zürich www.inforis.ch SQL Hands-On Workshop 2010 EB Zürich Ergänzende Unterlagen 4. Datenbank Diagramme Datenbank KUTAdmin: Datenbank Bestell Datenbank MiniPars M:\11_Schul\EB_Zuerich\2010_Q3_SQL_HandsOnWorkshop\20100720_Funktionen_und_SQLAufgaben.doc Werner Müntener, Inforis AG Seite 10 / 10