Projekt:2023/InstaHub: Unterschied zwischen den Versionen

keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 71: Zeile 71:
## Das zuletzt gepostete Photo.
## Das zuletzt gepostete Photo.
## Das vorletzte Photo.
## Das vorletzte Photo.
{{Aufgabe:End}}
=== Bedingungen ===
{{Aufgabe:Start}}
Mittels der <code>WHERE</code>-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 <code>TRUE</code> oder <code>FALSE</code>. Bedingungen können mit <code>AND</code> <code>OR</code> verknüpft, oder mit <code>NOT</code> negiert werden.
Lies im [https://de.wikibooks.org/wiki/Einf%C3%BChrung_in_SQL:_WHERE-Klausel_im_Detail Wikibook Einführung in SQL] den Abschnitt [https://de.wikibooks.org/wiki/Einf%C3%BChrung_in_SQL:_WHERE-Klausel_im_Detail WHERE-Klausel im Detail]. Studiere vor allem die Vergleichsoperatoren und die Schlüsselwörter <code>BETWEEN</code>, <code>LIKE</code> und <code>IS NULL</code>.
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 <code>#sonne</code>, <code>#strand</code> oder <code>#meer</code> enthalten.
# Alle Photos, deren URL <code>animals</code> enthält.
# Alle Photos, deren URL ''nicht'' <code>animals</code> enthä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.
{{Aufgabe:End}}
{{Aufgabe:Start}}
Lege dir auf einem Blatt ein Tabelle im unten gezeigten Format an. Trage links die bisher kennengelernten Schlüsselwörter ein und rechts daneben eine kurze Beschreibung der Funktion.
{| {{prettytable}}
! SQL-Befehl
! Bedeutung
|-
| SELECT
| Fragt Datensätze nach bestimmten Kriterien aus der Datenbank ab.
|}
{{Aufgabe:End}}
{{Aufgabe:Start}}
Eine mächtige Bedingung ist das <code>IN</code> 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 <code>IN</code> Befehl aufgebaut?
* <code>SELECT * FROM users WHERE city = "Frankfurt" OR city = "Berlin" OR city = "Leipzig" OR city = "München"</code>
* <code>SELECT * FROM users WHERE city IN ("Frankfurt","Berlin","Leipzig","München")</code>
* <code>SELECT FROM users WHERE city NOT IN ("Frankfurt","Berlin","Leipzig","München")</code>
{{Aufgabe:End}}
=== Funktionen ===
{{Aufgabe:Start}}
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:
<code>SELECT username,centimeters*10 FROM users</code>
Einen Überblick der wichtigsten Funktionen gibt es in der [[Befehlsreferenz SQL#Funktionen nutzen|Befehlsreferenz SQL]]. Analysiere mit deren Hilfe folgende Abfragen und notiere ihre Bedeutung, ohne sie vorher auszuführen. Prüfe dann deine Vermutung in InstaHub.
# <code>SELECT COUNT(*) FROM comments</code>
# <code>SELECT MIN(centimeters), MAX(centimeters),AVG(centimeters),ROUND(AVG(centimeters),2),ROUND(AVG(centimeters)),SUM(centimeters) FROM users</code>
# <code>SELECT centimeters+100,4+3,centimeters*2,id%2 FROM users</code>
# <code>SELECT UPPER(username),CONCAT(city,", ",country) FROM users</code>
# <code>SELECT CONCAT(name," aus ", city, " (",UPPER(LEFT(country,3)),")") FROM users</code>
# <code>SELECT DAY(created_at),MONTH(created_at),YEAR(created_at) FROM users ORDER BY created_at DESC LIMIT 1</code>
# <code>SELECT DAY(created_at),MONTH(created_at),YEAR(created_at) FROM users LIMIT 1 ORDER BY created_at DESC</code>
{{Aufgabe:End}}
{{Aufgabe:Start}}
Mit der Funktion <code>RAND()</code> können Zufallszahlen generiert werden.
<code>SELECT RAND()</code>
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 <code>ORDER BY</code> befehl benutzen:
<code>SELECT username FROM users ORDER BY RAND()</code>
Führe die Abfrage mehrmals aus und beobachte die Ergebnisse.
{{Aufgabe:End}}
{{Aufgabe:End}}


[[Kategorie:Projekte:2023/24]]
[[Kategorie:Projekte:2023/24]]