faecher:informatik:oberstufe:datenbanken:sql_abfrage:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
Letzte ÜberarbeitungBeide Seiten der Revision
faecher:informatik:oberstufe:datenbanken:sql_abfrage:start [04.11.2020 19:26] – [Datenbankimport] sbelfaecher:informatik:oberstufe:datenbanken:sql_abfrage:start [13.01.2022 08:29] – [Beispiele] sbel
Zeile 11: Zeile 11:
  
 <box 90% round #f4ffc3 #e7f5aa #e7f5aa #e7f5aa |**Aufgabe:** Anmeldung an mysql> <box 90% round #f4ffc3 #e7f5aa #e7f5aa #e7f5aa |**Aufgabe:** Anmeldung an mysql>
-  * Öffne mit deinem Browser das phpmyadmin Interface: http://db.q-gym.de/phpmyadmin+  * Öffne mit deinem Browser das phpmyadmin Interface: http://sql.q-gym.de/phpmyadmin
   * Infos zu Benutzern und Passwort bekommst du im Unterricht.   * Infos zu Benutzern und Passwort bekommst du im Unterricht.
 </box> </box>
  
 ===== Datenbankimport ===== ===== Datenbankimport =====
- 
-Wir arbeiten zunächst mit einer Beispieldatenbank, die ca. 20.000 automatisch erzeugte Namen und Adressen enthält. 
  
 <box 90% round #f4ffc3 #e7f5aa #e7f5aa #e7f5aa |**Aufgabe:** Import der Datenbank> <box 90% round #f4ffc3 #e7f5aa #e7f5aa #e7f5aa |**Aufgabe:** Import der Datenbank>
-  * Lade die Datei  {{ .:adressen_beispiel.sql.zip |}}auf deinen Computer herunter.+  * Lade die Datei  {{ .:adressen.sql.zip |}} auf deinen Computer herunter.
   * Importiere die Datei in deine Datenbank. Du musst dabei darauf achten, dass du **in der linken Spalte zuerst deine Datenbank auswählst**, andernfalls scheitert der Import mit einem Fehler, da keine neuen Datenbanken angelegt werden können.   * Importiere die Datei in deine Datenbank. Du musst dabei darauf achten, dass du **in der linken Spalte zuerst deine Datenbank auswählst**, andernfalls scheitert der Import mit einem Fehler, da keine neuen Datenbanken angelegt werden können.
 </box> </box>
  
-Du erhältst mehrere Tabellen: ''artikel'', ''bestellt'' und ''kunden'' in deiner Datenbank, in der bereits Daten enthalten sind.+Du erhältst eine Tabelle: ''adressen'' in deiner Datenbank, in der ca. 20.000 Datensätze enthalten sind
 + 
 +Klicke die Tabelle an und mache dich mit den gespeicherten Daten etwas vertraut.
  
 ===== Aufbau einer SQL Abfrage ===== ===== Aufbau einer SQL Abfrage =====
Zeile 31: Zeile 31:
  
 Eine Klausel für SQL-Abfragen ist im Wesentlichen folgendermaßen aufgebaut: Eine Klausel für SQL-Abfragen ist im Wesentlichen folgendermaßen aufgebaut:
 +<code sql>
   SELECT [DISTINCT] { spalten | * }   SELECT [DISTINCT] { spalten | * }
   FROM tabelle [alias] [,tabelle [alias]] ...   FROM tabelle [alias] [,tabelle [alias]] ...
Zeile 37: Zeile 37:
   [GROUP BY spalten [HAVING {bedingung}]]   [GROUP BY spalten [HAVING {bedingung}]]
   [ORDER BY spalten [ASC | DESC]];   [ORDER BY spalten [ASC | DESC]];
-  +</code>
 Argumente in eckigen Klammern sind dabei optional, die Schreibweise ''{ spalten | * }'' bedeutet eine der durch den ''|'' getrennte Möglichkeiten, also entweder eine Liste der zu wählenden Spalten oder das Sternchen für alle Spalten. Argumente in eckigen Klammern sind dabei optional, die Schreibweise ''{ spalten | * }'' bedeutet eine der durch den ''|'' getrennte Möglichkeiten, also entweder eine Liste der zu wählenden Spalten oder das Sternchen für alle Spalten.
  
 ==== Ausführungsreihenfolge ==== ==== Ausführungsreihenfolge ====
 +   
 +  SELECT (Spaltenauswahl bzw. Projektion) 
   FROM (Tabellenauswahl)   FROM (Tabellenauswahl)
   -> WHERE (Zeilenauswahl bzw. Selektion)    -> WHERE (Zeilenauswahl bzw. Selektion) 
   -> GROUP BY (Gruppierung)    -> GROUP BY (Gruppierung) 
   -> HAVING (Gruppenauswahl)    -> HAVING (Gruppenauswahl) 
-  -> SELECT (Spaltenauswahl bzw. Projektion)  
   -> ORDER BY (Sortierung)   -> ORDER BY (Sortierung)
      
Zeile 53: Zeile 53:
  
 Die SQL-Abfrage Die SQL-Abfrage
- +<code sql> 
-  SELECT * FROM artikel WHERE APreis>10 +  SELECT * FROM adressen WHERE Hausnummer 100 
- +</code> 
-liefert die Tabelle aller Artikel, die teurer als 10 Euro sind. Die Wildcard * steht für alle Tabellenspalten.+liefert eine Tabelle aller Datensätzebei denen die Hausnummer  größer als 100 ist. Die Wildcard nach dem ''SELECT'' Statement * steht für alle Tabellenspalten.
  
 Die Abfrage  Die Abfrage 
 <code sql> <code sql>
-  SELECT * FROM artikel WHERE ANr 100007+  SELECT * FROM adressen WHERE Id 10
 </code> </code>
  
-Ermittelt alle Artikel mit der Artikelnummer 100007.+Ermittelt den Datensatz mit der Id 10.
  
 <box 90% round #f4ffc3 #e7f5aa #e7f5aa #e7f5aa |**Aufgabe:** Abfragen> <box 90% round #f4ffc3 #e7f5aa #e7f5aa #e7f5aa |**Aufgabe:** Abfragen>
 Führe die beiden Beispielabfragen auf deiner Datenbank aus. Führe die beiden Beispielabfragen auf deiner Datenbank aus.
 </box> </box>
-==== Übung 1 ==== 
  
-Arbeite mit der {{.:sql_befehle_a.pdf|Befehlsübersicht A}} in der Tabelle ''artikel''. Filtere mit einer geeigneten SQL-Abfrage die folgenden Informationen aus der Tabelle heraus.+---- 
 +{{:aufgabe.png?nolink  |}} 
 +=== (A1) ===
  
 +Arbeite mit der {{.:sql_befehle_a.pdf|Befehlsübersicht A}} in der Tabelle ''adressen''. Filtere mit einer geeigneten SQL-Abfrage die folgenden Informationen aus der Tabelle heraus.
  
 +  - Alle Name, Vorname und Wohnort aller Datensätze.
 +  - Die Vor- und Nachnamen aller gespeicherten Adressen.
 +  - Alle Postleitzahlen und Orte, deren PLZ größer oder gleich 80000 ist.
 +  - Vor- und Nachname aller Personen, die im Postleitzahlbereich 4xxxx bis 6xxxx wohnen.
 +  - Alle Datensätze, mit den Nachnamen Maier, Mayer, Meier, Meyer oder Müller.
 +  - Alle Personen, die mit "Herr" angesprochen werden und älter als 80 Jahre sind.
 +  - Alle Einträge die neuer als 10 Jahre sind.
 +  - Alle Personen, die in einer Stadt wohnen, die ein "x" enthält.
 +  - Alle Einträge mit Vornamen, die mit "Am" beginnen.
 +  - Alle Personen mit einem Faxgerät und einem Mobiltelefon, deren Nachnamen ein "y" enthält.
 +  - Alle Personen, die jünger als 45 Jahre sind, in einem Ort wohnen der mit "A" beginnt und mehr als 3333 Bonuspunkte gesammelt haben.
  
-  Alle Artikel mit Artikelnummer, Namen und Preis. +---- 
-  Alle Namen der Bücher. +{{:aufgabe.png?nolink  |}} 
-  Artikelnummer, Name und Preis aller Bücher, von denen mehr als 30 am Lager sind. +=== (A2) ===
-  - Artikelnummer, Name und Preis aller Bücher, von denen mehr als 30 und weniger als 90 am Lager sind. +
-  - Alle Bücher, in denen es um CSS geht +
-  - Alle Informationen zum Buch mit den Cover-Bild ''82724415.jpg'' +
-  - Alle Informationen zu allen Büchern, die weniger als 15EUR kosten+
  
 +Denke dir mindestens 10 weitere Kriterien für die Filterung von Adressen aus, notiere diese und erstelle eine passende SQL Abfrage.
  
-Arbeite jetzt mit {{.:sql_befehle_b.pdf|Befehlsübersicht B}} in der Tabelle ''artikel''.+---- 
 +{{:aufgabe.png?nolink  |}} 
 +=== (A3) === 
 +Arbeite jetzt mit {{.:sql_befehle_b.pdf|Befehlsübersicht B}} in der Tabelle ''adressen''.
 Man kann mit den Werten, die von einer ''SELECT''-Abfrage zurückgegeben werden auch rechnen (lassen): Man kann mit den Werten, die von einer ''SELECT''-Abfrage zurückgegeben werden auch rechnen (lassen):
  
Zeile 90: Zeile 103:
 Filtere mit einer geeigneten SQL-Abfrage die folgenden Informationen aus der Tabelle heraus. Filtere mit einer geeigneten SQL-Abfrage die folgenden Informationen aus der Tabelle heraus.
  
-  - Artikel mit ArtikelnummerNamen und Preis ausaufsteigend sortiert nach Artikelnummer+  - Alle Personendie mehr als 15 offene Rechnungen haben. 
-  - Alle Artikel mit NummerNamealtem Preis und neuem Preis auswobei der neue Preis dem um eins erhöhten alten Preis entspricht. +  - Die Anzahl der Personendie mehr als 10 offene Rechnungen haben. 
-  - Gib die Tabelle aus, die alle verschiedenen Preise der Artikel absteigend sortiert enthält. +  - Die Anzahl der Personen, die mehr als 19 offene Rechnungen haben und kein Guthaben auf ihrem Konto
-  - Gib die Tabelle mit dem Namen der Artikel aus, deren Preis genau 1,00 Euro beträgt und deren Bestand genau 70 Stück umfasst+  - Alle VornamenNachnamen,, Wohnorte und Kontostände bei denen der Kontostand mehr als 50EUR beträgt, aufsteigend Sortiert nach dem Kontostand und nach dem Nachnamen 
-  - Gib die verschiedenen Preiskategorien der Artikel ausin deren Namen „datenbank“ vorkommt+  - Alle Postleitzahlen in der Datenbank 
-  Gib Titel und Preis mit Mehrwertsteuer aus.+  - Alle Geburtsdaten, die in der Datenbank vorkommen, ohne die Datensätze, bei deinen kein Geburtsdatum angegeben ist 
 +  - Den Datensatz mit dem höchsten Kontostand 
 +  - Die durchschnittliche Zahl der Bonuspunkte aller Personen aus Aachen die am Bonusproramm teilnehmen
 +  - Die durchschnittliche Zahl der offenen Rechungen aller Personendie jünger als 35 Jahre sind und nicht am Bonusprogramm teilnehmen
 + 
 +---- 
 +{{:aufgabe.png?nolink  |}} 
 +=== (A4) === 
 + 
 +Überlege dir 5 weitere verschachtelte Abfragen mit mehreren Kriterien, welche die Befehle aus Blatt B verwenden. 
 + 
 +---- 
 +{{:aufgabe.png?nolink  |}} 
 +=== (Bonus) === 
 + 
 +Möglicherweise ist hier eine kleine Recherche von nöten. 
 + 
 +  - Eine Liste aller Mailprovider 
 +  - Eine Liste aller Vorwahlen 
 + 
 + 
 +==== Material ==== 
 + 
 +{{simplefilelist>:faecher:informatik:oberstufe:datenbanken:sql_abfrage:*}}