faecher:informatik:oberstufe:datenbanken:sql_abfrage:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
faecher:informatik:oberstufe:datenbanken:sql_abfrage:start [04.11.2020 21:30] – [Beispiele] sbelfaecher:informatik:oberstufe:datenbanken:sql_abfrage:start [16.01.2024 11:42] (aktuell) – [Beispiele] Frank Schiebel
Zeile 10: Zeile 10:
 Wir haben ein zentrales DBMS zur Benutzung durch die Schülerinnen und Schüler eingerichtet: Wir haben ein zentrales DBMS zur Benutzung durch die Schülerinnen und Schüler eingerichtet:
  
-<box 90% round #f4ffc3 #e7f5aa #e7f5aa #e7f5aa |**Aufgabe:** Anmeldung an mysql> +<tabs> 
-  * Öffne mit deinem Browser das phpmyadmin Interface: http://db.q-gym.de/phpmyadmin +  * [[#infbw|info-bw Datenbank Server]] 
-  * Infos zu Benutzern und Passwort bekommst du im Unterricht. +  * [[#kmg|KMG Friedrichshafen]] 
-</box> +<pane id="kmg">  
 +  <box 90% round #f4ffc3 #e7f5aa #e7f5aa #e7f5aa |**Aufgabe:** Anmeldung an mysql> 
 +    * Öffne mit deinem Browser das phpmyadmin Interface: https://dbms.kmg-fn.de 
 +    * Infos zu Benutzern und Passwort bekommst du im Unterricht. 
 +  </box> 
 +</pane> 
 +<pane id="infbw">  
 +  <box 90% round #f4ffc3 #e7f5aa #e7f5aa #e7f5aa |**Aufgabe:** Anmeldung an mysql> 
 +    * Öffne mit deinem Browser das phpmyadmin Interface: https://sql.info-bw.de 
 +    * Infos zu Benutzern und Passwort bekommst du im Unterricht/in der Fortbildung
 +  </box> 
 +</pane> 
 +</tabs>
 ===== Datenbankimport ===== ===== Datenbankimport =====
  
Zeile 41: Zeile 52:
  
 ==== 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 60: Zeile 71:
 Die Abfrage  Die Abfrage 
 <code sql> <code sql>
-  SELECT * FROM artikel WHERE Id = 10+  SELECT * FROM adressen WHERE Id = 10
 </code> </code>
  
Zeile 75: Zeile 86:
 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. 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 Datensätze mit Name, Vorname und Wohnort.+  - Alle Name, Vorname und Wohnort aller Datensätze.
   - Die Vor- und Nachnamen aller gespeicherten Adressen.   - Die Vor- und Nachnamen aller gespeicherten Adressen.
   - Alle Postleitzahlen und Orte, deren PLZ größer oder gleich 80000 ist.   - Alle Postleitzahlen und Orte, deren PLZ größer oder gleich 80000 ist.
Zeile 91: Zeile 102:
 === (A2) === === (A2) ===
  
-Denke dir mindestens 10 weitere Kriterien für die Filterung von Adressen aus, notiere diese und erstelle eine passende SQL Abfrage.+Denke dir mindestens weitere Kriterien für die Filterung von Adressen aus, notiere diese und erstelle eine passende SQL Abfrage.
  
 ---- ----
Zeile 105: Zeile 116:
   - Alle Personen, die mehr als 15 offene Rechnungen haben.   - Alle Personen, die mehr als 15 offene Rechnungen haben.
   - Die Anzahl der Personen, die mehr als 10 offene Rechnungen haben.   - Die Anzahl der Personen, die mehr als 10 offene Rechnungen haben.
-  - Die Anzahl der Personen, die mehr als 19 offene Rechungen haben und kein Guthaben auf ihrem Konto. +  - Die Anzahl der Personen, die mehr als 19 offene Rechnungen haben und kein Guthaben auf ihrem Konto. 
-  - Alle Vornamen, Nachnamen,, Wohnorte und Kontostände bei denen der Kontostand mehr als 50EUR beträgt, aufsteigend Sortiert nach dem Kontostand. +  - Alle Vornamen, Nachnamen,, Wohnorte und Kontostände bei denen der Kontostand mehr als 50EUR beträgt, aufsteigend Sortiert nach dem Kontostand und nach dem Nachnamen 
-  - Alle Postleitzzahlen in der Datenbank+  - Alle Postleitzahlen in der Datenbank
   - Alle Geburtsdaten, die in der Datenbank vorkommen, ohne die Datensätze, bei deinen kein Geburtsdatum angegeben ist   - Alle Geburtsdaten, die in der Datenbank vorkommen, ohne die Datensätze, bei deinen kein Geburtsdatum angegeben ist
   - Den Datensatz mit dem höchsten Kontostand   - Den Datensatz mit dem höchsten Kontostand
   - Die durchschnittliche Zahl der Bonuspunkte aller Personen aus Aachen die am Bonusproramm teilnehmen.   - Die durchschnittliche Zahl der Bonuspunkte aller Personen aus Aachen die am Bonusproramm teilnehmen.
 +  - Die durchschnittliche Zahl der offenen Rechungen aller Personen, die jünger als 35 Jahre sind und nicht am Bonusprogramm teilnehmen.
  
 ---- ----
 {{:aufgabe.png?nolink  |}} {{:aufgabe.png?nolink  |}}
-=== (A4) Bonus ===+=== (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. Möglicherweise ist hier eine kleine Recherche von nöten.
  
   - Eine Liste aller Mailprovider   - Eine Liste aller Mailprovider
 +  - Eine Liste aller Vorwahlen
 +
 +++++ Lösungshinweis I |
 +Man muss den Inhalt einer Tabellenzelle aufteilen. Das geht zum Beispiel mit SELECT SUBSTRING_INDEX, Infos dazu z.B. dort:
 +https://www.w3schools.com/sql/func_mysql_substring_index.asp
 +
 +<WRAP center round box 90%>
 +**Hinweis**: Wir werden später sehen, dass ein solches Vorgehen eigentlich vermieden werden sollte - man möchte für gewöhnlich die Informationen so in der Tabelle ablegen, dass man die Inhalte nicht manipulieren muss, um an die Informationen zu gelangen.
 +</WRAP>
 +
 +++++
 +
 +++++ Lösungshinweis II |
 +
 +Für die Maildomains sieht de Lösung so aus:
 +<code sql>
 +SELECT DISTINCT SUBSTRING_INDEX(EMail, "@", -1) FROM adressen; 
 +</code>
 +
 +Die Lösung für die Vorwahlen kannst du sicher selbst finden.
 +++++
 +==== Material ====
 +
 +{{simplefilelist>:faecher:informatik:oberstufe:datenbanken:sql_abfrage:*}}
 +
 +
  • faecher/informatik/oberstufe/datenbanken/sql_abfrage/start.1604521845.txt.gz
  • Zuletzt geändert: 04.11.2020 21:30
  • von sbel