Projekt:2024/InstaHub: Unterschied zwischen den Versionen
Ngb (Diskussion | Beiträge) |
Ngb (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
| (6 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 4: | Zeile 4: | ||
|Schuljahr=2024/25 | |Schuljahr=2024/25 | ||
}} | }} | ||
{{Kasten|[[# | {{Kasten|[[#Datenmanipulation|'''Zur aktuellen Aufgabe springen''']]|class=text-center}} | ||
== Projekt InstaHub == | == Projekt InstaHub == | ||
| Zeile 95: | Zeile 95: | ||
{{Aufgabe:Start}} | {{Aufgabe:Start}} | ||
Dokumentiert die bisher kennengelernten Schlüsselwörter mit einer kurzen Beschreibung der Funktion in der [https://git.ngb.schule/IF-LK-2024/wissenslandkarte/wiki/SQL Wissenslandkarte]. Legt dazu gemeinsam [https://markdown-syntax.de/Syntax-GFM/Tabellen/ eine Tabelle] an. | |||
<code><pre> | <code><pre> | ||
| Zeile 156: | Zeile 156: | ||
</pre> | </pre> | ||
Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und | Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und beschreibe mit eigenen Worten, welche Datensätze abgefragt werden. | ||
Teste dann folgende Abfrage und erkläre die Fehlermeldung: | Teste dann folgende Abfrage und erkläre die Fehlermeldung: | ||
| Zeile 185: | Zeile 185: | ||
</pre> | </pre> | ||
Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und | Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und beschreibe mit eigenen Worten, welche Datensätze abgefragt werden. | ||
Probiere dann die folgenden beiden Abfragen aus und vergleiche ihre Ergebnisse. Was ändert das Schlüsselwort <code>ALL</code>? | Probiere dann die folgenden beiden Abfragen aus und vergleiche ihre Ergebnisse. Was ändert das Schlüsselwort <code>ALL</code>? | ||
| Zeile 207: | Zeile 207: | ||
{{Aufgabe:End}} | {{Aufgabe:End}} | ||
=== Verschachtelte Abfragen === | === Verschachtelte Abfragen === | ||
| Zeile 218: | Zeile 217: | ||
FROM users | FROM users | ||
WHERE created_at > "2017-09-22" | WHERE created_at > "2017-09-22" | ||
) | ) AS subquery | ||
WHERE LENGTH(username) = 5 | WHERE LENGTH(username) = 5 | ||
</pre> | </pre> | ||
{{Aufgabe:End}} | {{Aufgabe:End}} | ||
| Zeile 304: | Zeile 246: | ||
{{Aufgabe:End}} | {{Aufgabe:End}} | ||
=== Datenbanken modellieren === | === Datenbanken modellieren === | ||
| Zeile 314: | Zeile 255: | ||
Bei SQL werden Abfragen mit einem Semikolon beendet. Für einzelne Abfragen kann das Schlusszeichen allerdings weggelassen werden. Möächte man allerdings mehrere Abfragen hintereinander ausführen, dann wird das Semikolon wichtig. | Bei SQL werden Abfragen mit einem Semikolon beendet. Für einzelne Abfragen kann das Schlusszeichen allerdings weggelassen werden. Möächte man allerdings mehrere Abfragen hintereinander ausführen, dann wird das Semikolon wichtig. | ||
{{Info:End}} | {{Info:End}} | ||
[[Kategorie:Projekte:2021/22]] | [[Kategorie:Projekte:2021/22]] | ||
Aktuelle Version vom 13. Februar 2025, 22:15 Uhr
Seite zum Projekt InstaHub des Informatik LK im Schuljahr 2024/25.
Projekt InstaHub
Erstelle dir einen Zugang zu InstaHub. Das Video zeigt dir, wie du vorgehen musst: https://youtu.be/6DnmVjtF3UU
Grundlagen von Datenabfragen
Benutze in InstaHub die Suchfunktion (Datenbanksymbol -> Suche), um die folgenden Abfragen zu stellen. Setze dabei den Haken bei "Zeige SQL" und vergleiche die SQL-Abfrage mit der Suchmaske und der Ergebnistabelle. Notiere dir wichtige Befehle.
- Alle Nutzer.
- Alle männlichen / alle weiblichen Nutzer.
- Alle Nutzer, die sich nach dem 23.09.2017 registriert haben.
- Alle Nutzer aus München.
- Alle Nutzer sortiert nach Geburtstag.
- Nutzernamen und Passwort aller Nutzer.
- Nutzernamen und Passwort aller Nutzer, die kleiner als 1,60 Meter sind.
- Alle Männer, die größer als 1,80 Meter sind, sortiert nach Datum der Registrierung.
- Alle Frauen, deren Nutzername die Ziffern
45enthält.
Benutze in InstaHub die SQL Abfragefunktion (Datenbanksymbol -> SQL), um SQL-Abfragen für die folgenden Informationen zu erstellen. Nutze dazu die Befehlsreferenz SQL im Wiki als Hilfe.
- Alle Photos.
- Alle Photos des Nutzers mit der ID
42. - Alle Photos, sortiert nach Erstellungsdatum.
- Die ID des Nutzers und die URL aller Photos.
- Alle Photos, deren Beschreibung die Zeichenkette
#sonneenthält.
Denk dir weitere Abfragen aus, mit der du die Syntax des SELECT-Befehls ausprobieren kannst.
Abfragen einschränken und sortieren
SELECT Abfragen lassen sich mit den Schlüsselwörtern LIMIT, OFFSET, ORDER BY und DISTINCT weiter präzisieren.
- Führe die Abfragen aus und analysiere die Funktion und Syntax der
LIMITundOFFSETSchlüsselwörter.SELECT * FROM users LIMIT 5SELECT * FROM users LIMIT 10SELECT * FROM users LIMIT 5 OFFSET 5
- Führe die Abfragen aus und analysiere die Funktion und Syntax des
ORDER BYSchlüsselwortes.SELECT id,username,centimeters FROM usersSELECT id,username,centimeters FROM users ORDER BY idSELECT id,username,centimeters FROM users ORDER BY usernameSELECT id,username,centimeters FROM users ORDER BY centimetersSELECT id,username,centimeters FROM users ORDER BY centimeters ASCSELECT id,username,centimeters FROM users ORDER BY centimeters DESC
- Führe die Abfragen aus und analysiere die Funktion und Syntax des
DISTINCTSchlüsselwortes.SELECT city FROM usersSELECT DISTINCT city FROM users
- Kombiniere nun die neuen Schlüsselwörter miteinander und entwickele Abfragen zu folgenden Datensätzen:
- Die fünf größten männlichen Nutzer.
- Die acht kleinsten weiblichen Nutzer, beginnend ab der Drittkleinsten.
- 15 unterschiedliche aufsteigend sortierte Namen.
- Das zuletzt gepostete Photo.
- Das vorletzte Photo.
Bedingungen
Mittels der WHERE-Klausel lassen sich Datensätze gezielt auf bestimmte Bedingungen einschränken. Jedes Datenfeld hat einen festgelegten Datentyp (im Wesentlichen Zahl, Text und Datum). Je nach Datentyp lassen sich unterschiedliche Bedingungen nutzen. Bedingungen sind entweder TRUE oder FALSE. Bedingungen können mit AND OR verknüpft, oder mit NOT negiert werden.
Lies im Wikibook Einführung in SQL den Abschnitt WHERE-Klausel im Detail. Studiere vor allem die Vergleichsoperatoren und die Schlüsselwörter BETWEEN, LIKE und IS NULL.
Entwirf dann Abfragen für folgende Datensätze:
- Alle Kommentare, die zwischen 2018-09-21 07:57:19 und 2018-09-21 09:57:19 erstellt wurden.
- Zehn Photos, deren Beschreibung
#sonne,#strandoder#meerenthalten. - Alle Photos, deren URL
animalsenthält. - Alle Photos, deren URL nicht
animalsenthält. - Alle Nutzer, die aus Frankfurt oder Berlin kommen und zwischen 150 und 168 Zentimeter groß sind.
- Alle Nutzer, die keine Größe eingetragen haben.
Eine mächtige Bedingung ist das IN Schlüsselwort. Mit ihm kann ein Wert mit einer ganzen Liste von Werten verglichen werden. Der Operator prüft also, ob ein Wert in einer Liste vorkommt, oder nicht.
Betrachte beispielsweise folgende Abfragen und vergleiche sie miteinander. Was fragen sie ab und wie ist der IN Befehl aufgebaut?
SELECT * FROM users WHERE city = "Frankfurt" OR city = "Berlin" OR city = "Leipzig" OR city = "München"SELECT * FROM users WHERE city IN ("Frankfurt","Berlin","Leipzig","München")SELECT FROM users WHERE city NOT IN ("Frankfurt","Berlin","Leipzig","München")
Dokumentiert die bisher kennengelernten Schlüsselwörter mit einer kurzen Beschreibung der Funktion in der Wissenslandkarte. Legt dazu gemeinsam eine Tabelle an.
Schlüsselwort | Beschreibung
------------- | ------------
`SELECT` | Leitet eine Abfrage zur Auswahl von Daten ein. ...
... | ...
Das Erstellen von Tabellen in Markdown ist recht sperrig. Daher ist es sinnvoll ein Werkzeug wie den Markdown Tablegenerator zu verwenden.
Funktionen
SQL bietet auch Möglichkeiten, die abgefragten Datensätze durch die Anwendung von Rechenoperationen und Funktionen zu transformieren.
Um zum Beispiel die Größe der Nutzer nicht in Zentimetern, sondern in Millimetern abzufragen, könnte die Abfrage so lauten:
SELECT username,centimeters*10 FROM users
Einen Überblick der wichtigsten Funktionen gibt es in der Befehlsreferenz SQL. Analysiere mit deren Hilfe folgende Abfragen und notiere ihre Bedeutung, ohne sie vorher auszuführen. Prüfe dann deine Vermutung in InstaHub.
SELECT COUNT(*) FROM commentsSELECT MIN(centimeters), MAX(centimeters),AVG(centimeters),ROUND(AVG(centimeters),2),ROUND(AVG(centimeters)),SUM(centimeters) FROM usersSELECT centimeters+100,4+3,centimeters*2,id%2 FROM usersSELECT UPPER(username),CONCAT(city,", ",country) FROM usersSELECT CONCAT(name," aus ", city, " (",UPPER(LEFT(country,3)),")") FROM usersSELECT DAY(created_at),MONTH(created_at),YEAR(created_at) FROM users ORDER BY created_at DESC LIMIT 1SELECT DAY(created_at),MONTH(created_at),YEAR(created_at) FROM users LIMIT 1 ORDER BY created_at DESC
Mit der Funktion RAND() können Zufallszahlen generiert werden.
SELECT RAND()
In der Regel wird sie nur selten benötigt, aber für einen Fall ist sie recht nützlich, denn man kann sie als Argument für den ORDER BY befehl benutzen:
SELECT username FROM users ORDER BY RAND()
Führe die Abfrage mehrmals aus und beobachte die Ergebnisse.
Tabellen verknüpfen - Teil I
Eine der wichtigsten Eigenschaften von relationalen Datenbanken ist die Verknüpfung der in den verschiedenen Tabellen gespeicherten Daten.
Das Ergebnis einer Abfrage ist eine Liste von Datensätzen. Da IN mit einer Liste vergleicht, kann das Ergebnis einer SELECT Abfrage als Argument für IN benutzt werden.
SELECT * FROM photos WHERE user_id IN ( SELECT id FROM users WHERE city = "Berlin" )
Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und beschreibe mit eigenen Worten, welche Datensätze abgefragt werden.
Teste dann folgende Abfrage und erkläre die Fehlermeldung:
SELECT * FROM photos WHERE user_id IN ( SELECT id,username FROM users WHERE city = "Berlin" )
Erstelle folgende Abfragen:
- Alle Kommentare zu Fotos, die vom Nutzer mit der ID
109erstellt wurden. - Alle Likes von Nutzern, die in München oder Berlin wohnen.
- Alle Likes zu Photos, die von Nutzern gepostet wurden, die in Mühldorf oder Biederitz wohnen.
In seltenen Fällen möchte man die Ergebnisse von zwei Abfragen zu einem Ergebnis zusammenfassen. Dazu müssen die Spalten der Abfragen aber genau übereinstimmen. Die Vereinigung von zwei Ergebnissen wird mit dem Schlüsselwort UNION erreicht.
SELECT id,username,city FROM users WHERE centimeters BETWEEN 180 AND 200 UNION SELECT id,username,city FROM users WHERE YEAR(birthday) = 2005
Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und beschreibe mit eigenen Worten, welche Datensätze abgefragt werden.
Probiere dann die folgenden beiden Abfragen aus und vergleiche ihre Ergebnisse. Was ändert das Schlüsselwort ALL?
SELECT city FROM users WHERE LEFT(city,1) = "W" UNION SELECT city FROM users WHERE LEFT(city,1) = "W"
SELECT city FROM users WHERE LEFT(city,1) = "W" UNION ALL SELECT city FROM users WHERE LEFT(city,1) = "W"
Erstelle dann folgende Abfragen mit Hilfe von UNION:
- Alle created_at und updated_at Felder (auch doppelte) aus den Tabellen photos, comments und likes, sortiert nach created_at.
- Alle Städtenamen, die mit "W" oder "R" beginnen.
Verschachtelte Abfragen
Hinter dem FROM Befehl haben wir bisher immer den Namen einer Tabelle geschrieben. SQL sucht in der Datenbank nach einer passenden Tabelle und durchsucht dessen Einträge nach den passenden Datensätzen. Im Allgemeinen erwartet SQL hinter FROM also eine Tabelle. Diese kann auch dynamisch mit einer weiteren Abfrage erstellt werden.
SELECT * FROM ( SELECT id,username,name FROM users WHERE created_at > "2017-09-22" ) AS subquery WHERE LENGTH(username) = 5
Datenauswertung
Bearbeite den Lernpfad SQL: Daten auswerten.
Datenmanipulation
Abfragesprachen wie SQL arbeiten nach dem CRUD-Prinzip: Create, Retrieve, Update, Delete
Bisher haben wir uns nur mit dem R befasst und Daten aus der Datenbank abgefragt. Die drei anderen Teile des Akronyms sind in SQL zum Glück weniger komplex.
Bearbeite den Lernpfad SQL: INSERT, DELETE und UPDATE.
Tabellen verknüpfen
Bearbeite den Lernpfad SQL: Tabellen verknüpfen.
SQL-Island
Begib dich auf die SQL-Island.
Datenbanken modellieren
Mehrere Abfagen hintereinander ausführen
Bei SQL werden Abfragen mit einem Semikolon beendet. Für einzelne Abfragen kann das Schlusszeichen allerdings weggelassen werden. Möächte man allerdings mehrere Abfragen hintereinander ausführen, dann wird das Semikolon wichtig.