<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>http://ngb.schule/hgwiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ngb</id>
	<title>Informatik-Box - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="http://ngb.schule/hgwiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ngb"/>
	<link rel="alternate" type="text/html" href="http://ngb.schule/wiki/Spezial:Beitr%C3%A4ge/Ngb"/>
	<updated>2026-05-10T14:45:16Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.38.2</generator>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Projekt:2024/InstaHub&amp;diff=9990</id>
		<title>Projekt:2024/InstaHub</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Projekt:2024/InstaHub&amp;diff=9990"/>
		<updated>2025-02-13T20:15:02Z</updated>

		<summary type="html">&lt;p&gt;Ngb: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Projektseite&lt;br /&gt;
|Projekt=InstaHub&lt;br /&gt;
|Kurs=Informatik LK&lt;br /&gt;
|Schuljahr=2024/25&lt;br /&gt;
}}&lt;br /&gt;
{{Kasten|[[#Datenmanipulation|&#039;&#039;&#039;Zur aktuellen Aufgabe springen&#039;&#039;&#039;]]|class=text-center}}&lt;br /&gt;
&lt;br /&gt;
== Projekt InstaHub ==&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Erstelle dir einen Zugang zu InstaHub. Das Video zeigt dir, wie du vorgehen musst: https://youtu.be/6DnmVjtF3UU&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Grundlagen von Datenabfragen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Benutze in InstaHub die Suchfunktion (Datenbanksymbol -&amp;gt; Suche), um die folgenden Abfragen zu stellen. Setze dabei den Haken bei &amp;quot;Zeige SQL&amp;quot; und vergleiche die SQL-Abfrage mit der Suchmaske und der Ergebnistabelle. Notiere dir wichtige Befehle.&lt;br /&gt;
&lt;br /&gt;
# Alle Nutzer.&lt;br /&gt;
# Alle männlichen / alle weiblichen Nutzer.&lt;br /&gt;
# Alle Nutzer, die sich nach dem 23.09.2017 registriert haben.&lt;br /&gt;
# Alle Nutzer aus München.&lt;br /&gt;
# Alle Nutzer sortiert nach Geburtstag.&lt;br /&gt;
# Nutzernamen und Passwort aller Nutzer.&lt;br /&gt;
# Nutzernamen und Passwort aller Nutzer, die kleiner als 1,60 Meter sind.&lt;br /&gt;
# Alle Männer, die größer als 1,80 Meter sind, sortiert nach Datum der Registrierung.&lt;br /&gt;
# Alle Frauen, deren Nutzername die Ziffern &amp;lt;code&amp;gt;45&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Benutze in InstaHub die SQL Abfragefunktion (Datenbanksymbol -&amp;gt; SQL), um SQL-Abfragen für die folgenden Informationen zu erstellen. Nutze dazu die [[Befehlsreferenz SQL]] im Wiki als Hilfe.&lt;br /&gt;
&lt;br /&gt;
# Alle Photos.&lt;br /&gt;
# Alle Photos des Nutzers mit der ID &amp;lt;code&amp;gt;42&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Alle Photos, sortiert nach Erstellungsdatum.&lt;br /&gt;
# Die ID des Nutzers und die URL aller Photos.&lt;br /&gt;
# Alle Photos, deren Beschreibung die Zeichenkette &amp;lt;code&amp;gt;#sonne&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
&lt;br /&gt;
Denk dir weitere Abfragen aus, mit der du die Syntax des &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt;-Befehls ausprobieren kannst.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Abfragen einschränken und sortieren ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; Abfragen lassen sich mit den Schlüsselwörtern &amp;lt;code&amp;gt;LIMIT&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;OFFSET&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;DISTINCT&amp;lt;/code&amp;gt; weiter präzisieren. &lt;br /&gt;
&lt;br /&gt;
# Führe die Abfragen aus und analysiere die Funktion und Syntax der &amp;lt;code&amp;gt;LIMIT&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;OFFSET&amp;lt;/code&amp;gt; Schlüsselwörter.&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT * FROM users LIMIT 5&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT * FROM users LIMIT 10&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT * FROM users LIMIT 5 OFFSET 5&amp;lt;/code&amp;gt;&lt;br /&gt;
# Führe die Abfragen aus und analysiere die Funktion und Syntax des &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; Schlüsselwortes.&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY id&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY username&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY centimeters &amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY centimeters ASC&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY centimeters DESC&amp;lt;/code&amp;gt;&lt;br /&gt;
# Führe die Abfragen aus und analysiere die Funktion und Syntax des &amp;lt;code&amp;gt;DISTINCT&amp;lt;/code&amp;gt; Schlüsselwortes.&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT city FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT DISTINCT city FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# Kombiniere nun die neuen Schlüsselwörter miteinander und entwickele Abfragen zu folgenden Datensätzen:&lt;br /&gt;
## Die fünf größten männlichen Nutzer.&lt;br /&gt;
## Die acht kleinsten weiblichen Nutzer, beginnend ab der Drittkleinsten.&lt;br /&gt;
## 15 unterschiedliche aufsteigend sortierte Namen.&lt;br /&gt;
## Das zuletzt gepostete Photo.&lt;br /&gt;
## Das vorletzte Photo.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Bedingungen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Mittels der &amp;lt;code&amp;gt;WHERE&amp;lt;/code&amp;gt;-Klausel lassen sich Datensätze gezielt auf bestimmte Bedingungen einschränken. Jedes Datenfeld hat einen festgelegten Datentyp (im Wesentlichen &#039;&#039;Zahl&#039;&#039;, &#039;&#039;Text&#039;&#039; und &#039;&#039;Datum&#039;&#039;). Je nach Datentyp lassen sich unterschiedliche Bedingungen nutzen. Bedingungen sind entweder &amp;lt;code&amp;gt;TRUE&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;FALSE&amp;lt;/code&amp;gt;. Bedingungen können mit &amp;lt;code&amp;gt;AND&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;OR&amp;lt;/code&amp;gt; verknüpft, oder mit &amp;lt;code&amp;gt;NOT&amp;lt;/code&amp;gt; negiert werden. &lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;BETWEEN&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;IS NULL&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Entwirf dann Abfragen für folgende Datensätze:&lt;br /&gt;
&lt;br /&gt;
# Alle Kommentare, die zwischen 2018-09-21 07:57:19 und 2018-09-21 09:57:19 erstellt wurden. &lt;br /&gt;
# Zehn Photos, deren Beschreibung &amp;lt;code&amp;gt;#sonne&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;#strand&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;#meer&amp;lt;/code&amp;gt; enthalten.&lt;br /&gt;
# Alle Photos, deren URL &amp;lt;code&amp;gt;animals&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
# Alle Photos, deren URL &#039;&#039;nicht&#039;&#039; &amp;lt;code&amp;gt;animals&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
# Alle Nutzer, die aus Frankfurt oder Berlin kommen und zwischen 150 und 168 Zentimeter groß sind. &lt;br /&gt;
# Alle Nutzer, die keine Größe eingetragen haben.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Eine mächtige Bedingung ist das &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; Schlüsselwort. Mit ihm kann ein Wert mit einer ganzen &#039;&#039;Liste&#039;&#039; von Werten verglichen werden. Der Operator prüft also, ob ein Wert in einer Liste vorkommt, oder nicht.&lt;br /&gt;
&lt;br /&gt;
Betrachte beispielsweise folgende Abfragen und vergleiche sie miteinander. Was fragen sie ab und wie ist der &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; Befehl aufgebaut?&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;SELECT * FROM users WHERE city = &amp;quot;Frankfurt&amp;quot; OR city = &amp;quot;Berlin&amp;quot; OR city = &amp;quot;Leipzig&amp;quot; OR city = &amp;quot;München&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;SELECT * FROM users WHERE city IN (&amp;quot;Frankfurt&amp;quot;,&amp;quot;Berlin&amp;quot;,&amp;quot;Leipzig&amp;quot;,&amp;quot;München&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;SELECT FROM users WHERE city NOT IN (&amp;quot;Frankfurt&amp;quot;,&amp;quot;Berlin&amp;quot;,&amp;quot;Leipzig&amp;quot;,&amp;quot;München&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
Schlüsselwort | Beschreibung&lt;br /&gt;
------------- | ------------&lt;br /&gt;
`SELECT`      | Leitet eine Abfrage zur Auswahl von Daten ein. ...&lt;br /&gt;
...           | ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Erstellen von Tabellen in Markdown ist recht sperrig. Daher ist es sinnvoll ein Werkzeug wie den [https://www.tablesgenerator.com/markdown_tables Markdown Tablegenerator] zu verwenden.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Funktionen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
SQL bietet auch Möglichkeiten, die abgefragten Datensätze durch die Anwendung von Rechenoperationen und Funktionen zu &#039;&#039;transformieren&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Um zum Beispiel die Größe der Nutzer nicht in Zentimetern, sondern in Millimetern abzufragen, könnte die Abfrage so lauten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT username,centimeters*10 FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT COUNT(*) FROM comments&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT MIN(centimeters), MAX(centimeters),AVG(centimeters),ROUND(AVG(centimeters),2),ROUND(AVG(centimeters)),SUM(centimeters) FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT centimeters+100,4+3,centimeters*2,id%2 FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT UPPER(username),CONCAT(city,&amp;quot;, &amp;quot;,country) FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT CONCAT(name,&amp;quot; aus &amp;quot;, city, &amp;quot; (&amp;quot;,UPPER(LEFT(country,3)),&amp;quot;)&amp;quot;) FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT DAY(created_at),MONTH(created_at),YEAR(created_at) FROM users ORDER BY created_at DESC LIMIT 1&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT DAY(created_at),MONTH(created_at),YEAR(created_at) FROM users LIMIT 1 ORDER BY created_at DESC&amp;lt;/code&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Mit der Funktion &amp;lt;code&amp;gt;RAND()&amp;lt;/code&amp;gt; können Zufallszahlen generiert werden. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT RAND()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; befehl benutzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT username FROM users ORDER BY RAND()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Führe die Abfrage mehrmals aus und beobachte die Ergebnisse.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Tabellen verknüpfen - Teil I ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Eine der wichtigsten Eigenschaften von relationalen Datenbanken ist die Verknüpfung der in den verschiedenen Tabellen gespeicherten Daten.&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis einer Abfrage ist eine Liste von Datensätzen. Da &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; mit einer Liste vergleicht, kann das Ergebnis einer &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; Abfrage als Argument für &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; benutzt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * &lt;br /&gt;
FROM photos &lt;br /&gt;
WHERE user_id IN (&lt;br /&gt;
  SELECT id&lt;br /&gt;
  FROM users&lt;br /&gt;
  WHERE city = &amp;quot;Berlin&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und beschreibe mit eigenen Worten, welche Datensätze abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
Teste dann folgende Abfrage und erkläre die Fehlermeldung:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * &lt;br /&gt;
FROM photos &lt;br /&gt;
WHERE user_id IN (&lt;br /&gt;
  SELECT id,username&lt;br /&gt;
  FROM users&lt;br /&gt;
  WHERE city = &amp;quot;Berlin&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erstelle folgende Abfragen:&lt;br /&gt;
&lt;br /&gt;
# Alle Kommentare zu Fotos, die vom Nutzer mit der ID &amp;lt;code&amp;gt;109&amp;lt;/code&amp;gt; erstellt wurden.&lt;br /&gt;
# Alle Likes von Nutzern, die in München oder Berlin wohnen.&lt;br /&gt;
# Alle Likes zu Photos, die von Nutzern gepostet wurden, die in Mühldorf oder Biederitz wohnen.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
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 &#039;&#039;Vereinigung&#039;&#039; von zwei Ergebnissen wird mit dem Schlüsselwort &amp;lt;code&amp;gt;UNION&amp;lt;/code&amp;gt; erreicht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT id,username,city FROM users WHERE centimeters BETWEEN 180 AND 200&lt;br /&gt;
UNION&lt;br /&gt;
SELECT id,username,city FROM users WHERE YEAR(birthday) = 2005&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und beschreibe mit eigenen Worten, welche Datensätze abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
Probiere dann die folgenden beiden Abfragen aus und vergleiche ihre Ergebnisse. Was ändert das Schlüsselwort &amp;lt;code&amp;gt;ALL&amp;lt;/code&amp;gt;?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
UNION&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
UNION ALL&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erstelle dann folgende Abfragen mit Hilfe von &amp;lt;code&amp;gt;UNION&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
# Alle created_at und updated_at Felder (auch doppelte) aus den Tabellen photos, comments und likes, sortiert nach created_at.&lt;br /&gt;
# Alle Städtenamen, die mit &amp;quot;W&amp;quot; oder &amp;quot;R&amp;quot; beginnen.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Verschachtelte Abfragen ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Hinter dem &amp;lt;code&amp;gt;FROM&amp;lt;/code&amp;gt; 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 &amp;lt;code&amp;gt;FROM&amp;lt;/code&amp;gt; also eine Tabelle. Diese kann auch dynamisch mit einer weiteren Abfrage erstellt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * FROM (&lt;br /&gt;
  SELECT id,username,name&lt;br /&gt;
  FROM users&lt;br /&gt;
  WHERE created_at &amp;gt; &amp;quot;2017-09-22&amp;quot;&lt;br /&gt;
) AS subquery&lt;br /&gt;
WHERE LENGTH(username) = 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Datenauswertung ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Bearbeite den [https://lernpfad.ch/pfad/0osdqmncydgc Lernpfad SQL: Daten auswerten].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Datenmanipulation ===&lt;br /&gt;
Abfragesprachen wie SQL arbeiten nach dem [[wikipedia:CRUD|CRUD]]-Prinzip: &#039;&#039;&#039;C&#039;&#039;&#039;reate, &#039;&#039;&#039;R&#039;&#039;&#039;etrieve, &#039;&#039;&#039;U&#039;&#039;&#039;pdate, &#039;&#039;&#039;D&#039;&#039;&#039;elete&lt;br /&gt;
&lt;br /&gt;
Bisher haben wir uns nur mit dem &#039;&#039;&#039;R&#039;&#039;&#039; befasst und Daten aus der Datenbank abgefragt. Die drei anderen Teile des Akronyms sind in SQL zum Glück weniger komplex.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Bearbeite den [https://lernpfad.ch/pfad/43folj7iwnkc Lernpfad SQL:  INSERT, DELETE und UPDATE].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Tabellen verknüpfen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Bearbeite den [https://lernpfad.ch/pfad/emmr5jvq0bgu Lernpfad SQL:  Tabellen verknüpfen].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== SQL-Island ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Begib dich auf die [[SQL-Island]].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Datenbanken modellieren ===&lt;br /&gt;
&lt;br /&gt;
[https://erdplus.com/standalone ERDPlus]&lt;br /&gt;
&lt;br /&gt;
=== Mehrere Abfagen hintereinander ausführen ===&lt;br /&gt;
&lt;br /&gt;
{{Info:Start}}&lt;br /&gt;
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.&lt;br /&gt;
{{Info:End}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte:2021/22]]&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Projekt:2024/InstaHub&amp;diff=9989</id>
		<title>Projekt:2024/InstaHub</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Projekt:2024/InstaHub&amp;diff=9989"/>
		<updated>2025-01-31T08:02:03Z</updated>

		<summary type="html">&lt;p&gt;Ngb: /* Verschachtelte Abfragen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Projektseite&lt;br /&gt;
|Projekt=InstaHub&lt;br /&gt;
|Kurs=Informatik LK&lt;br /&gt;
|Schuljahr=2024/25&lt;br /&gt;
}}&lt;br /&gt;
{{Kasten|[[#Tabellen verknüpfen - Teil I|&#039;&#039;&#039;Zur aktuellen Aufgabe springen&#039;&#039;&#039;]]|class=text-center}}&lt;br /&gt;
&lt;br /&gt;
== Projekt InstaHub ==&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Erstelle dir einen Zugang zu InstaHub. Das Video zeigt dir, wie du vorgehen musst: https://youtu.be/6DnmVjtF3UU&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Grundlagen von Datenabfragen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Benutze in InstaHub die Suchfunktion (Datenbanksymbol -&amp;gt; Suche), um die folgenden Abfragen zu stellen. Setze dabei den Haken bei &amp;quot;Zeige SQL&amp;quot; und vergleiche die SQL-Abfrage mit der Suchmaske und der Ergebnistabelle. Notiere dir wichtige Befehle.&lt;br /&gt;
&lt;br /&gt;
# Alle Nutzer.&lt;br /&gt;
# Alle männlichen / alle weiblichen Nutzer.&lt;br /&gt;
# Alle Nutzer, die sich nach dem 23.09.2017 registriert haben.&lt;br /&gt;
# Alle Nutzer aus München.&lt;br /&gt;
# Alle Nutzer sortiert nach Geburtstag.&lt;br /&gt;
# Nutzernamen und Passwort aller Nutzer.&lt;br /&gt;
# Nutzernamen und Passwort aller Nutzer, die kleiner als 1,60 Meter sind.&lt;br /&gt;
# Alle Männer, die größer als 1,80 Meter sind, sortiert nach Datum der Registrierung.&lt;br /&gt;
# Alle Frauen, deren Nutzername die Ziffern &amp;lt;code&amp;gt;45&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Benutze in InstaHub die SQL Abfragefunktion (Datenbanksymbol -&amp;gt; SQL), um SQL-Abfragen für die folgenden Informationen zu erstellen. Nutze dazu die [[Befehlsreferenz SQL]] im Wiki als Hilfe.&lt;br /&gt;
&lt;br /&gt;
# Alle Photos.&lt;br /&gt;
# Alle Photos des Nutzers mit der ID &amp;lt;code&amp;gt;42&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Alle Photos, sortiert nach Erstellungsdatum.&lt;br /&gt;
# Die ID des Nutzers und die URL aller Photos.&lt;br /&gt;
# Alle Photos, deren Beschreibung die Zeichenkette &amp;lt;code&amp;gt;#sonne&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
&lt;br /&gt;
Denk dir weitere Abfragen aus, mit der du die Syntax des &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt;-Befehls ausprobieren kannst.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Abfragen einschränken und sortieren ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; Abfragen lassen sich mit den Schlüsselwörtern &amp;lt;code&amp;gt;LIMIT&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;OFFSET&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;DISTINCT&amp;lt;/code&amp;gt; weiter präzisieren. &lt;br /&gt;
&lt;br /&gt;
# Führe die Abfragen aus und analysiere die Funktion und Syntax der &amp;lt;code&amp;gt;LIMIT&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;OFFSET&amp;lt;/code&amp;gt; Schlüsselwörter.&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT * FROM users LIMIT 5&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT * FROM users LIMIT 10&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT * FROM users LIMIT 5 OFFSET 5&amp;lt;/code&amp;gt;&lt;br /&gt;
# Führe die Abfragen aus und analysiere die Funktion und Syntax des &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; Schlüsselwortes.&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY id&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY username&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY centimeters &amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY centimeters ASC&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY centimeters DESC&amp;lt;/code&amp;gt;&lt;br /&gt;
# Führe die Abfragen aus und analysiere die Funktion und Syntax des &amp;lt;code&amp;gt;DISTINCT&amp;lt;/code&amp;gt; Schlüsselwortes.&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT city FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT DISTINCT city FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# Kombiniere nun die neuen Schlüsselwörter miteinander und entwickele Abfragen zu folgenden Datensätzen:&lt;br /&gt;
## Die fünf größten männlichen Nutzer.&lt;br /&gt;
## Die acht kleinsten weiblichen Nutzer, beginnend ab der Drittkleinsten.&lt;br /&gt;
## 15 unterschiedliche aufsteigend sortierte Namen.&lt;br /&gt;
## Das zuletzt gepostete Photo.&lt;br /&gt;
## Das vorletzte Photo.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Bedingungen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Mittels der &amp;lt;code&amp;gt;WHERE&amp;lt;/code&amp;gt;-Klausel lassen sich Datensätze gezielt auf bestimmte Bedingungen einschränken. Jedes Datenfeld hat einen festgelegten Datentyp (im Wesentlichen &#039;&#039;Zahl&#039;&#039;, &#039;&#039;Text&#039;&#039; und &#039;&#039;Datum&#039;&#039;). Je nach Datentyp lassen sich unterschiedliche Bedingungen nutzen. Bedingungen sind entweder &amp;lt;code&amp;gt;TRUE&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;FALSE&amp;lt;/code&amp;gt;. Bedingungen können mit &amp;lt;code&amp;gt;AND&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;OR&amp;lt;/code&amp;gt; verknüpft, oder mit &amp;lt;code&amp;gt;NOT&amp;lt;/code&amp;gt; negiert werden. &lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;BETWEEN&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;IS NULL&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Entwirf dann Abfragen für folgende Datensätze:&lt;br /&gt;
&lt;br /&gt;
# Alle Kommentare, die zwischen 2018-09-21 07:57:19 und 2018-09-21 09:57:19 erstellt wurden. &lt;br /&gt;
# Zehn Photos, deren Beschreibung &amp;lt;code&amp;gt;#sonne&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;#strand&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;#meer&amp;lt;/code&amp;gt; enthalten.&lt;br /&gt;
# Alle Photos, deren URL &amp;lt;code&amp;gt;animals&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
# Alle Photos, deren URL &#039;&#039;nicht&#039;&#039; &amp;lt;code&amp;gt;animals&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
# Alle Nutzer, die aus Frankfurt oder Berlin kommen und zwischen 150 und 168 Zentimeter groß sind. &lt;br /&gt;
# Alle Nutzer, die keine Größe eingetragen haben.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Eine mächtige Bedingung ist das &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; Schlüsselwort. Mit ihm kann ein Wert mit einer ganzen &#039;&#039;Liste&#039;&#039; von Werten verglichen werden. Der Operator prüft also, ob ein Wert in einer Liste vorkommt, oder nicht.&lt;br /&gt;
&lt;br /&gt;
Betrachte beispielsweise folgende Abfragen und vergleiche sie miteinander. Was fragen sie ab und wie ist der &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; Befehl aufgebaut?&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;SELECT * FROM users WHERE city = &amp;quot;Frankfurt&amp;quot; OR city = &amp;quot;Berlin&amp;quot; OR city = &amp;quot;Leipzig&amp;quot; OR city = &amp;quot;München&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;SELECT * FROM users WHERE city IN (&amp;quot;Frankfurt&amp;quot;,&amp;quot;Berlin&amp;quot;,&amp;quot;Leipzig&amp;quot;,&amp;quot;München&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;SELECT FROM users WHERE city NOT IN (&amp;quot;Frankfurt&amp;quot;,&amp;quot;Berlin&amp;quot;,&amp;quot;Leipzig&amp;quot;,&amp;quot;München&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
Schlüsselwort | Beschreibung&lt;br /&gt;
------------- | ------------&lt;br /&gt;
`SELECT`      | Leitet eine Abfrage zur Auswahl von Daten ein. ...&lt;br /&gt;
...           | ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Erstellen von Tabellen in Markdown ist recht sperrig. Daher ist es sinnvoll ein Werkzeug wie den [https://www.tablesgenerator.com/markdown_tables Markdown Tablegenerator] zu verwenden.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Funktionen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
SQL bietet auch Möglichkeiten, die abgefragten Datensätze durch die Anwendung von Rechenoperationen und Funktionen zu &#039;&#039;transformieren&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Um zum Beispiel die Größe der Nutzer nicht in Zentimetern, sondern in Millimetern abzufragen, könnte die Abfrage so lauten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT username,centimeters*10 FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT COUNT(*) FROM comments&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT MIN(centimeters), MAX(centimeters),AVG(centimeters),ROUND(AVG(centimeters),2),ROUND(AVG(centimeters)),SUM(centimeters) FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT centimeters+100,4+3,centimeters*2,id%2 FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT UPPER(username),CONCAT(city,&amp;quot;, &amp;quot;,country) FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT CONCAT(name,&amp;quot; aus &amp;quot;, city, &amp;quot; (&amp;quot;,UPPER(LEFT(country,3)),&amp;quot;)&amp;quot;) FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT DAY(created_at),MONTH(created_at),YEAR(created_at) FROM users ORDER BY created_at DESC LIMIT 1&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT DAY(created_at),MONTH(created_at),YEAR(created_at) FROM users LIMIT 1 ORDER BY created_at DESC&amp;lt;/code&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Mit der Funktion &amp;lt;code&amp;gt;RAND()&amp;lt;/code&amp;gt; können Zufallszahlen generiert werden. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT RAND()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; befehl benutzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT username FROM users ORDER BY RAND()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Führe die Abfrage mehrmals aus und beobachte die Ergebnisse.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Tabellen verknüpfen - Teil I ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Eine der wichtigsten Eigenschaften von relationalen Datenbanken ist die Verknüpfung der in den verschiedenen Tabellen gespeicherten Daten.&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis einer Abfrage ist eine Liste von Datensätzen. Da &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; mit einer Liste vergleicht, kann das Ergebnis einer &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; Abfrage als Argument für &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; benutzt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * &lt;br /&gt;
FROM photos &lt;br /&gt;
WHERE user_id IN (&lt;br /&gt;
  SELECT id&lt;br /&gt;
  FROM users&lt;br /&gt;
  WHERE city = &amp;quot;Berlin&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und beschreibe mit eigenen Worten, welche Datensätze abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
Teste dann folgende Abfrage und erkläre die Fehlermeldung:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * &lt;br /&gt;
FROM photos &lt;br /&gt;
WHERE user_id IN (&lt;br /&gt;
  SELECT id,username&lt;br /&gt;
  FROM users&lt;br /&gt;
  WHERE city = &amp;quot;Berlin&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erstelle folgende Abfragen:&lt;br /&gt;
&lt;br /&gt;
# Alle Kommentare zu Fotos, die vom Nutzer mit der ID &amp;lt;code&amp;gt;109&amp;lt;/code&amp;gt; erstellt wurden.&lt;br /&gt;
# Alle Likes von Nutzern, die in München oder Berlin wohnen.&lt;br /&gt;
# Alle Likes zu Photos, die von Nutzern gepostet wurden, die in Mühldorf oder Biederitz wohnen.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
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 &#039;&#039;Vereinigung&#039;&#039; von zwei Ergebnissen wird mit dem Schlüsselwort &amp;lt;code&amp;gt;UNION&amp;lt;/code&amp;gt; erreicht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT id,username,city FROM users WHERE centimeters BETWEEN 180 AND 200&lt;br /&gt;
UNION&lt;br /&gt;
SELECT id,username,city FROM users WHERE YEAR(birthday) = 2005&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und beschreibe mit eigenen Worten, welche Datensätze abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
Probiere dann die folgenden beiden Abfragen aus und vergleiche ihre Ergebnisse. Was ändert das Schlüsselwort &amp;lt;code&amp;gt;ALL&amp;lt;/code&amp;gt;?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
UNION&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
UNION ALL&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erstelle dann folgende Abfragen mit Hilfe von &amp;lt;code&amp;gt;UNION&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
# Alle created_at und updated_at Felder (auch doppelte) aus den Tabellen photos, comments und likes, sortiert nach created_at.&lt;br /&gt;
# Alle Städtenamen, die mit &amp;quot;W&amp;quot; oder &amp;quot;R&amp;quot; beginnen.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Verschachtelte Abfragen ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Hinter dem &amp;lt;code&amp;gt;FROM&amp;lt;/code&amp;gt; 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 &amp;lt;code&amp;gt;FROM&amp;lt;/code&amp;gt; also eine Tabelle. Diese kann auch dynamisch mit einer weiteren Abfrage erstellt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * FROM (&lt;br /&gt;
  SELECT id,username,name&lt;br /&gt;
  FROM users&lt;br /&gt;
  WHERE created_at &amp;gt; &amp;quot;2017-09-22&amp;quot;&lt;br /&gt;
) AS subquery&lt;br /&gt;
WHERE LENGTH(username) = 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Datenauswertung ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Bearbeite den [https://lernpfad.ch/pfad/0osdqmncydgc Lernpfad SQL: Daten auswerten].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Datenmanipulation ===&lt;br /&gt;
Abfragesprachen wie SQL arbeiten nach dem [[wikipedia:CRUD|CRUD]]-Prinzip: &#039;&#039;&#039;C&#039;&#039;&#039;reate, &#039;&#039;&#039;R&#039;&#039;&#039;etrieve, &#039;&#039;&#039;U&#039;&#039;&#039;pdate, &#039;&#039;&#039;D&#039;&#039;&#039;elete&lt;br /&gt;
&lt;br /&gt;
Bisher haben wir uns nur mit dem &#039;&#039;&#039;R&#039;&#039;&#039; befasst und Daten aus der Datenbank abgefragt. Die drei anderen Teile des Akronyms sind in SQL zum Glück weniger komplex.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Bearbeite den [https://lernpfad.ch/pfad/43folj7iwnkc Lernpfad SQL:  INSERT, DELETE und UPDATE].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Tabellen verknüpfen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Bearbeite den [https://lernpfad.ch/pfad/emmr5jvq0bgu Lernpfad SQL:  Tabellen verknüpfen].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== SQL-Island ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Begib dich auf die [[SQL-Island]].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Datenbanken modellieren ===&lt;br /&gt;
&lt;br /&gt;
[https://erdplus.com/standalone ERDPlus]&lt;br /&gt;
&lt;br /&gt;
=== Mehrere Abfagen hintereinander ausführen ===&lt;br /&gt;
&lt;br /&gt;
{{Info:Start}}&lt;br /&gt;
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.&lt;br /&gt;
{{Info:End}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte:2021/22]]&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Korrektur_einer_Klassenarbeit&amp;diff=9988</id>
		<title>Korrektur einer Klassenarbeit</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Korrektur_einer_Klassenarbeit&amp;diff=9988"/>
		<updated>2025-01-29T08:26:48Z</updated>

		<summary type="html">&lt;p&gt;Ngb: /* G: Geraden, Punkte, Koordinaten, Symmetrie */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Kasten|&amp;lt;center&amp;gt;{{Farbig|&#039;&#039;&#039;Mache die Verbesserung Deiner Klassenarbeit mit Köpfchen und lerne aus Deinen Fehlern!&#039;&#039;&#039;|#FFF}}&amp;lt;/center&amp;gt;|Farbe={{Farbe:Helmholtz}}}}&lt;br /&gt;
&lt;br /&gt;
{{Kurzlink|korrektur}}&lt;br /&gt;
&lt;br /&gt;
== Korrekturzeichen ==&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
! Abkürzung !! Erklärung&lt;br /&gt;
|-&lt;br /&gt;
| 🙂 || Du hast die komplette Aufgabe ohne Fehler gelöst.&lt;br /&gt;
|-&lt;br /&gt;
| ✓ || Diese Teilaufgabe hast Du richtig gelöst.&lt;br /&gt;
|-&lt;br /&gt;
| (✓) || &amp;quot;Folgerichtig&amp;quot;: Du hast irgendwo in der Aufgabe einen Fehler gemacht, aber dann mit diesem falschen Ergebnis korrekt weiter gerechnet. &lt;br /&gt;
|-&lt;br /&gt;
| {{Inline|fehler.png|Fehler}} oder &amp;lt;span style=&amp;quot;color: #FF00FF&amp;quot;&amp;gt;___&amp;lt;/span&amp;gt; || Hier hast Du etwas falsch gemacht.&lt;br /&gt;
|-&lt;br /&gt;
| {{Inline|lupe.png|Lupe}} || Diesen Fehler solltest Du Dir noch einmal anschauen!&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color: #FF00FF&amp;quot;&amp;gt;f&amp;lt;/span&amp;gt;  || In dieser Teilaufgabe hast Du einen Fehler gemacht.&lt;br /&gt;
|-&lt;br /&gt;
| s.o. || &amp;quot;Wiederholungsfehler&amp;quot;: Du hast denselben Fehler weiter oben in der Aufgabe schon einmal gemacht.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Verbesserung ==&lt;br /&gt;
&lt;br /&gt;
{{Info:Start|Icon=lupe.png|Farbe=#00FF00}}&lt;br /&gt;
&#039;&#039;&#039;Fehler, die ich Dir am Rand mit einer grünen Lupe markiert habe, sind besonders wichtig, denn hier kannst Du viel lernen.&#039;&#039;&#039; Es sind zumeist Fehler, die Du häufig machst oder die für das Verständnis eines Themas entscheidend sind.&lt;br /&gt;
&lt;br /&gt;
Diese Fehler solltest Du mit besonderer Aufmerksamkeit korrigieren. Du kannst dazu so vorgehen:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Schlage das Thema nach&#039;&#039;&#039;&lt;br /&gt;
#* in den im Unterricht verwendeten Materialien&lt;br /&gt;
#* oder in dem von mir im Feedback angegebenen Material (siehe [[#Material zum Naschschlagen|Liste häufig vorgeschlagener Materialien]] unten).&lt;br /&gt;
# &#039;&#039;&#039;Lerne&#039;&#039;&#039; oder wiederhole das Thema.&lt;br /&gt;
# &#039;&#039;&#039;Verbessere und sichere die Inhalte schriftlich&#039;&#039;&#039;&lt;br /&gt;
#* Korrigiere den markierten Fehler in der Aufgabe und schreibe die Aufgabe korrekt auf.&lt;br /&gt;
#* Überlege Dir &#039;&#039;&#039;zwei weitere Aufgaben&#039;&#039;&#039;, die zum Fehler passen, löse sie und notiere sie ebenfalls.&lt;br /&gt;
{{Info:End}}&lt;br /&gt;
&lt;br /&gt;
== Material zum Nachschlagen ==&lt;br /&gt;
&lt;br /&gt;
=== M: Mathematische Grundlagen ===&lt;br /&gt;
* &#039;&#039;&#039;M0&#039;&#039;&#039; Kopfrechnen: [https://mathe.aufgabenfuchs.de/kopfrechnen/addieren.shtml Addieren], [https://mathe.aufgabenfuchs.de/kopfrechnen/subtrahieren.shtml Subtrahieren], [https://mathe.aufgabenfuchs.de/kopfrechnen/multiplizieren.shtml Multiplizieren], [https://mathe.aufgabenfuchs.de/kopfrechnen/dividieren.shtml Dividieren]&lt;br /&gt;
* &#039;&#039;&#039;M1&#039;&#039;&#039; [https://easy-schule.de/grundrechenarten/#grundrechenarten-uebersicht Grundbegriffe der Grundrechenarten]&lt;br /&gt;
* &#039;&#039;&#039;M2&#039;&#039;&#039; [https://mathegym.de/mathe/natuerliche-zahlen-runden/aufgabe/90 Zahlen runden]&lt;br /&gt;
* &#039;&#039;&#039;M3&#039;&#039;&#039; Umkehraufgaben bilden&lt;br /&gt;
* &#039;&#039;&#039;M4&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Längen umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Längen rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M5&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Gewichte umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Gewichten rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M6&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Geld umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Geld rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M7&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Zeitangaben umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Zeitangaben rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M8&#039;&#039;&#039; [https://www.yout-ube.com/watch?v=KR0tK27u_uA {{Inline|video.png}} Sachaufgaben lösen in 5 Schritten]&lt;br /&gt;
&lt;br /&gt;
=== G: Geraden, Punkte, Koordinaten, Symmetrie ===&lt;br /&gt;
* &#039;&#039;&#039;G1&#039;&#039;&#039; [https://www.yout-ube.com/watch?v=vxCh6xw_TmI {{Inline|video.png}} Das Geodreieck benutzen]&lt;br /&gt;
* &#039;&#039;&#039;G2&#039;&#039;&#039; [https://www.yout-ube.com/watch?v=jXYE4SGmZ6o {{Inline|video.png}} Prallel / Senkrecht prüfen]&lt;br /&gt;
* &#039;&#039;&#039;G3&#039;&#039;&#039; [https://www.yout-ube.com/watch?v=cow12kIPyrI {{Inline|video.png}} Prallele / Senkrechte zeichnen], [https://friedrich-schiller-grundschule.de/wp-content/uploads/2023/12/Parallele-und-Senkrechte.pdf Aufgabenblatt]&lt;br /&gt;
* &#039;&#039;&#039;G4&#039;&#039;&#039; [https://www.yout-ube.com/watch?v=8OFxqdQBAAA {{Inline|video.png}} Abstände Punkt-Punkt, Punkt-Gerade, Gerade-Gerade]&lt;br /&gt;
* &#039;&#039;&#039;G5&#039;&#039;&#039; [https://www.yout-ube.com/watch?v=IskeB6jMUXM {{Inline|video.png}} Koordinatensystem], [https://mathe.aufgabenfuchs.de/flaeche/koordinatensystem.shtml Aufgaben zum Koordinatensystem]&lt;br /&gt;
* &#039;&#039;&#039;G6&#039;&#039;&#039; [https://www.yout-ube.com/watch?v=2eTVZ_OIKZg {{Inline|video.png}} Was ist Achsensymmetrie], [https://www.yout-ube.com/watch?v=RbDv5ue-Lpg {{Inline|video.png}} Achsenspiegelung]&lt;br /&gt;
* &#039;&#039;&#039;G7&#039;&#039;&#039; [https://www.yout-ube.com/watch?v=Q6kw5bnbCr8 {{Inline|video.png}} Was ist Punktsymmetrie], [https://www.yout-ube.com/watch?v=VQ2ZbqxDpp0 {{Inline|video.png}} Punktspiegelung]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Vielen Dank an [https://herr-kalt.de Herrn Kalt] für seine [https://herr-kalt.de/orga-unterricht/korrekturzeichen  Vorlage zu dieser Wiki-Seite].&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Korrektur_einer_Klassenarbeit&amp;diff=9987</id>
		<title>Korrektur einer Klassenarbeit</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Korrektur_einer_Klassenarbeit&amp;diff=9987"/>
		<updated>2025-01-29T08:25:49Z</updated>

		<summary type="html">&lt;p&gt;Ngb: /* Material zum Nachschlagen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Kasten|&amp;lt;center&amp;gt;{{Farbig|&#039;&#039;&#039;Mache die Verbesserung Deiner Klassenarbeit mit Köpfchen und lerne aus Deinen Fehlern!&#039;&#039;&#039;|#FFF}}&amp;lt;/center&amp;gt;|Farbe={{Farbe:Helmholtz}}}}&lt;br /&gt;
&lt;br /&gt;
{{Kurzlink|korrektur}}&lt;br /&gt;
&lt;br /&gt;
== Korrekturzeichen ==&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
! Abkürzung !! Erklärung&lt;br /&gt;
|-&lt;br /&gt;
| 🙂 || Du hast die komplette Aufgabe ohne Fehler gelöst.&lt;br /&gt;
|-&lt;br /&gt;
| ✓ || Diese Teilaufgabe hast Du richtig gelöst.&lt;br /&gt;
|-&lt;br /&gt;
| (✓) || &amp;quot;Folgerichtig&amp;quot;: Du hast irgendwo in der Aufgabe einen Fehler gemacht, aber dann mit diesem falschen Ergebnis korrekt weiter gerechnet. &lt;br /&gt;
|-&lt;br /&gt;
| {{Inline|fehler.png|Fehler}} oder &amp;lt;span style=&amp;quot;color: #FF00FF&amp;quot;&amp;gt;___&amp;lt;/span&amp;gt; || Hier hast Du etwas falsch gemacht.&lt;br /&gt;
|-&lt;br /&gt;
| {{Inline|lupe.png|Lupe}} || Diesen Fehler solltest Du Dir noch einmal anschauen!&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color: #FF00FF&amp;quot;&amp;gt;f&amp;lt;/span&amp;gt;  || In dieser Teilaufgabe hast Du einen Fehler gemacht.&lt;br /&gt;
|-&lt;br /&gt;
| s.o. || &amp;quot;Wiederholungsfehler&amp;quot;: Du hast denselben Fehler weiter oben in der Aufgabe schon einmal gemacht.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Verbesserung ==&lt;br /&gt;
&lt;br /&gt;
{{Info:Start|Icon=lupe.png|Farbe=#00FF00}}&lt;br /&gt;
&#039;&#039;&#039;Fehler, die ich Dir am Rand mit einer grünen Lupe markiert habe, sind besonders wichtig, denn hier kannst Du viel lernen.&#039;&#039;&#039; Es sind zumeist Fehler, die Du häufig machst oder die für das Verständnis eines Themas entscheidend sind.&lt;br /&gt;
&lt;br /&gt;
Diese Fehler solltest Du mit besonderer Aufmerksamkeit korrigieren. Du kannst dazu so vorgehen:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Schlage das Thema nach&#039;&#039;&#039;&lt;br /&gt;
#* in den im Unterricht verwendeten Materialien&lt;br /&gt;
#* oder in dem von mir im Feedback angegebenen Material (siehe [[#Material zum Naschschlagen|Liste häufig vorgeschlagener Materialien]] unten).&lt;br /&gt;
# &#039;&#039;&#039;Lerne&#039;&#039;&#039; oder wiederhole das Thema.&lt;br /&gt;
# &#039;&#039;&#039;Verbessere und sichere die Inhalte schriftlich&#039;&#039;&#039;&lt;br /&gt;
#* Korrigiere den markierten Fehler in der Aufgabe und schreibe die Aufgabe korrekt auf.&lt;br /&gt;
#* Überlege Dir &#039;&#039;&#039;zwei weitere Aufgaben&#039;&#039;&#039;, die zum Fehler passen, löse sie und notiere sie ebenfalls.&lt;br /&gt;
{{Info:End}}&lt;br /&gt;
&lt;br /&gt;
== Material zum Nachschlagen ==&lt;br /&gt;
&lt;br /&gt;
=== M: Mathematische Grundlagen ===&lt;br /&gt;
* &#039;&#039;&#039;M0&#039;&#039;&#039; Kopfrechnen: [https://mathe.aufgabenfuchs.de/kopfrechnen/addieren.shtml Addieren], [https://mathe.aufgabenfuchs.de/kopfrechnen/subtrahieren.shtml Subtrahieren], [https://mathe.aufgabenfuchs.de/kopfrechnen/multiplizieren.shtml Multiplizieren], [https://mathe.aufgabenfuchs.de/kopfrechnen/dividieren.shtml Dividieren]&lt;br /&gt;
* &#039;&#039;&#039;M1&#039;&#039;&#039; [https://easy-schule.de/grundrechenarten/#grundrechenarten-uebersicht Grundbegriffe der Grundrechenarten]&lt;br /&gt;
* &#039;&#039;&#039;M2&#039;&#039;&#039; [https://mathegym.de/mathe/natuerliche-zahlen-runden/aufgabe/90 Zahlen runden]&lt;br /&gt;
* &#039;&#039;&#039;M3&#039;&#039;&#039; Umkehraufgaben bilden&lt;br /&gt;
* &#039;&#039;&#039;M4&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Längen umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Längen rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M5&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Gewichte umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Gewichten rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M6&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Geld umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Geld rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M7&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Zeitangaben umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Zeitangaben rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M8&#039;&#039;&#039; [https://www.yout-ube.com/watch?v=KR0tK27u_uA {{Inline|video.png}} Sachaufgaben lösen in 5 Schritten]&lt;br /&gt;
&lt;br /&gt;
=== G: Geraden, Punkte, Koordinaten, Symmetrie ===&lt;br /&gt;
* &#039;&#039;&#039;G1&#039;&#039;&#039; [https://www.yout-ube.com/watch?v=vxCh6xw_TmI {{Inline|video.png}} Das Geodreieck benutzen]&lt;br /&gt;
* &#039;&#039;&#039;G2&#039;&#039;&#039; [https://www.yout-ube.com/watch?v=jXYE4SGmZ6o {{Inline|video.png}} Prallel / Senkrecht prüfen]&lt;br /&gt;
* &#039;&#039;&#039;G3&#039;&#039;&#039; [https://www.yout-ube.com/watch?v=cow12kIPyrI {{Inline|video.png}} Prallele / Senkrechte zeichnen], [https://friedrich-schiller-grundschule.de/wp-content/uploads/2023/12/Parallele-und-Senkrechte.pdf Aufgabenblatt]&lt;br /&gt;
* &#039;&#039;&#039;G4&#039;&#039;&#039; [https://www.yout-ube.com/watch?v=8OFxqdQBAAA {{Inline|video.png}} Abstände Punkt-Punkt, Punkt-Gerade, Gerade-Gerade]&lt;br /&gt;
* &#039;&#039;&#039;G5&#039;&#039;&#039; [https://www.yout-ube.com/watch?v=IskeB6jMUXM {{Inline|video.png}} Koordinatensystem]&lt;br /&gt;
* &#039;&#039;&#039;G6&#039;&#039;&#039; [https://www.yout-ube.com/watch?v=2eTVZ_OIKZg {{Inline|video.png}} Was ist Achsensymmetrie], [https://www.yout-ube.com/watch?v=RbDv5ue-Lpg {{Inline|video.png}} Achsenspiegelung]&lt;br /&gt;
* &#039;&#039;&#039;G7&#039;&#039;&#039; [https://www.yout-ube.com/watch?v=Q6kw5bnbCr8 {{Inline|video.png}} Was ist Punktsymmetrie], [https://www.yout-ube.com/watch?v=VQ2ZbqxDpp0 {{Inline|video.png}} Punktspiegelung]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Vielen Dank an [https://herr-kalt.de Herrn Kalt] für seine [https://herr-kalt.de/orga-unterricht/korrekturzeichen  Vorlage zu dieser Wiki-Seite].&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Korrektur_einer_Klassenarbeit&amp;diff=9986</id>
		<title>Korrektur einer Klassenarbeit</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Korrektur_einer_Klassenarbeit&amp;diff=9986"/>
		<updated>2025-01-28T20:57:34Z</updated>

		<summary type="html">&lt;p&gt;Ngb: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Kasten|&amp;lt;center&amp;gt;{{Farbig|&#039;&#039;&#039;Mache die Verbesserung Deiner Klassenarbeit mit Köpfchen und lerne aus Deinen Fehlern!&#039;&#039;&#039;|#FFF}}&amp;lt;/center&amp;gt;|Farbe={{Farbe:Helmholtz}}}}&lt;br /&gt;
&lt;br /&gt;
{{Kurzlink|korrektur}}&lt;br /&gt;
&lt;br /&gt;
== Korrekturzeichen ==&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
! Abkürzung !! Erklärung&lt;br /&gt;
|-&lt;br /&gt;
| 🙂 || Du hast die komplette Aufgabe ohne Fehler gelöst.&lt;br /&gt;
|-&lt;br /&gt;
| ✓ || Diese Teilaufgabe hast Du richtig gelöst.&lt;br /&gt;
|-&lt;br /&gt;
| (✓) || &amp;quot;Folgerichtig&amp;quot;: Du hast irgendwo in der Aufgabe einen Fehler gemacht, aber dann mit diesem falschen Ergebnis korrekt weiter gerechnet. &lt;br /&gt;
|-&lt;br /&gt;
| {{Inline|fehler.png|Fehler}} oder &amp;lt;span style=&amp;quot;color: #FF00FF&amp;quot;&amp;gt;___&amp;lt;/span&amp;gt; || Hier hast Du etwas falsch gemacht.&lt;br /&gt;
|-&lt;br /&gt;
| {{Inline|lupe.png|Lupe}} || Diesen Fehler solltest Du Dir noch einmal anschauen!&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color: #FF00FF&amp;quot;&amp;gt;f&amp;lt;/span&amp;gt;  || In dieser Teilaufgabe hast Du einen Fehler gemacht.&lt;br /&gt;
|-&lt;br /&gt;
| s.o. || &amp;quot;Wiederholungsfehler&amp;quot;: Du hast denselben Fehler weiter oben in der Aufgabe schon einmal gemacht.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Verbesserung ==&lt;br /&gt;
&lt;br /&gt;
{{Info:Start|Icon=lupe.png|Farbe=#00FF00}}&lt;br /&gt;
&#039;&#039;&#039;Fehler, die ich Dir am Rand mit einer grünen Lupe markiert habe, sind besonders wichtig, denn hier kannst Du viel lernen.&#039;&#039;&#039; Es sind zumeist Fehler, die Du häufig machst oder die für das Verständnis eines Themas entscheidend sind.&lt;br /&gt;
&lt;br /&gt;
Diese Fehler solltest Du mit besonderer Aufmerksamkeit korrigieren. Du kannst dazu so vorgehen:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Schlage das Thema nach&#039;&#039;&#039;&lt;br /&gt;
#* in den im Unterricht verwendeten Materialien&lt;br /&gt;
#* oder in dem von mir im Feedback angegebenen Material (siehe [[#Material zum Naschschlagen|Liste häufig vorgeschlagener Materialien]] unten).&lt;br /&gt;
# &#039;&#039;&#039;Lerne&#039;&#039;&#039; oder wiederhole das Thema.&lt;br /&gt;
# &#039;&#039;&#039;Verbessere und sichere die Inhalte schriftlich&#039;&#039;&#039;&lt;br /&gt;
#* Korrigiere den markierten Fehler in der Aufgabe und schreibe die Aufgabe korrekt auf.&lt;br /&gt;
#* Überlege Dir &#039;&#039;&#039;zwei weitere Aufgaben&#039;&#039;&#039;, die zum Fehler passen, löse sie und notiere sie ebenfalls.&lt;br /&gt;
{{Info:End}}&lt;br /&gt;
&lt;br /&gt;
== Material zum Nachschlagen ==&lt;br /&gt;
&lt;br /&gt;
=== M: Mathematische Grundlagen ===&lt;br /&gt;
* &#039;&#039;&#039;M0&#039;&#039;&#039; Kopfrechnen: [https://mathe.aufgabenfuchs.de/kopfrechnen/addieren.shtml Addieren], [https://mathe.aufgabenfuchs.de/kopfrechnen/subtrahieren.shtml Subtrahieren], [https://mathe.aufgabenfuchs.de/kopfrechnen/multiplizieren.shtml Multiplizieren], [https://mathe.aufgabenfuchs.de/kopfrechnen/dividieren.shtml Dividieren]&lt;br /&gt;
* &#039;&#039;&#039;M1&#039;&#039;&#039; [https://easy-schule.de/grundrechenarten/#grundrechenarten-uebersicht Grundbegriffe der Grundrechenarten]&lt;br /&gt;
* &#039;&#039;&#039;M2&#039;&#039;&#039; [https://mathegym.de/mathe/natuerliche-zahlen-runden/aufgabe/90 Zahlen runden]&lt;br /&gt;
* &#039;&#039;&#039;M3&#039;&#039;&#039; Umkehraufgaben bilden&lt;br /&gt;
* &#039;&#039;&#039;M4&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Längen umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Längen rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M5&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Gewichte umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Gewichten rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M6&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Geld umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Geld rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M7&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Zeitangaben umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Zeitangaben rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M8&#039;&#039;&#039; [https://www.yout-ube.com/watch?v=KR0tK27u_uA {{Inline|video.png}} Sachaufgaben lösen in 5 Schritten]&lt;br /&gt;
&lt;br /&gt;
=== G: Geraden, Punkte, Koordinaten, Symmetrie ===&lt;br /&gt;
* &#039;&#039;&#039;G1&#039;&#039;&#039; [https://www.yout-ube.com/watch?v=vxCh6xw_TmI {{Inline|video.png}} Das Geodreieck benutzen]&lt;br /&gt;
* &#039;&#039;&#039;G2&#039;&#039;&#039; [https://www.yout-ube.com/watch?v=jXYE4SGmZ6o {{Inline|video.png}} Prallel / Senkrecht prüfen]&lt;br /&gt;
* &#039;&#039;&#039;G3&#039;&#039;&#039; [https://www.yout-ube.com/watch?v=cow12kIPyrI {{Inline|video.png}} Prallele / Senkrechte zeichnen], [https://friedrich-schiller-grundschule.de/wp-content/uploads/2023/12/Parallele-und-Senkrechte.pdf Aufgabenblatt]&lt;br /&gt;
* &#039;&#039;&#039;G4&#039;&#039;&#039; [https://www.yout-ube.com/watch?v=8OFxqdQBAAA {{Inline|video.png}} Abstände Punkt-Punkt, Punkt-Gerade, Gerade-Gerade]&lt;br /&gt;
* &#039;&#039;&#039;G5&#039;&#039;&#039; [https://www.yout-ube.com/watch?v=IskeB6jMUXM {{Inline|video.png}} Koordinatensystem]&lt;br /&gt;
* &#039;&#039;&#039;G6&#039;&#039;&#039; [https://www.you-tube.com/watch?v=2eTVZ_OIKZg {{Inline|video.png}} Was ist Achsensymmetrie], [https://www.you-tube.com/watch?v=RbDv5ue-Lpg {{Inline|video.png}} Achsenspiegelung]&lt;br /&gt;
* &#039;&#039;&#039;G7&#039;&#039;&#039; [https://www.youtube.com/watch?v=Q6kw5bnbCr8 {{Inline|video.png}} Was ist Punktsymmetrie], [https://www.yout-ube.com/watch?v=VQ2ZbqxDpp0 {{Inline|video.png}} Punktspiegelung]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Vielen Dank an [https://herr-kalt.de Herrn Kalt] für seine [https://herr-kalt.de/orga-unterricht/korrekturzeichen  Vorlage zu dieser Wiki-Seite].&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Korrektur_einer_Klassenarbeit&amp;diff=9985</id>
		<title>Korrektur einer Klassenarbeit</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Korrektur_einer_Klassenarbeit&amp;diff=9985"/>
		<updated>2025-01-28T20:57:05Z</updated>

		<summary type="html">&lt;p&gt;Ngb: /* G: Geraden, Punkte, Koordinaten, Symmetrie */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Kasten|&amp;lt;center&amp;gt;{{Farbig|&#039;&#039;&#039;Mache die Verbesserung Deiner Klassenarbeit mit Köpfchen und lerne aus Deinen Fehlern!&#039;&#039;&#039;|#FFF}}&amp;lt;/center&amp;gt;|Farbe={{Farbe:Helmholtz}}}}&lt;br /&gt;
&lt;br /&gt;
{{Kurzlink|korrektur}}&lt;br /&gt;
&lt;br /&gt;
== Korrekturzeichen ==&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
! Abkürzung !! Erklärung&lt;br /&gt;
|-&lt;br /&gt;
| 🙂 || Du hast die komplette Aufgabe ohne Fehler gelöst.&lt;br /&gt;
|-&lt;br /&gt;
| ✓ || Diese Teilaufgabe hast Du richtig gelöst.&lt;br /&gt;
|-&lt;br /&gt;
| (✓) || &amp;quot;Folgerichtig&amp;quot;: Du hast irgendwo in der Aufgabe einen Fehler gemacht, aber dann mit diesem falschen Ergebnis korrekt weiter gerechnet. &lt;br /&gt;
|-&lt;br /&gt;
| {{Inline|fehler.png|Fehler}} oder &amp;lt;span style=&amp;quot;color: #FF00FF&amp;quot;&amp;gt;___&amp;lt;/span&amp;gt; || Hier hast Du etwas falsch gemacht.&lt;br /&gt;
|-&lt;br /&gt;
| {{Inline|lupe.png|Lupe}} || Diesen Fehler solltest Du Dir noch einmal anschauen!&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color: #FF00FF&amp;quot;&amp;gt;f&amp;lt;/span&amp;gt;  || In dieser Teilaufgabe hast Du einen Fehler gemacht.&lt;br /&gt;
|-&lt;br /&gt;
| s.o. || &amp;quot;Wiederholungsfehler&amp;quot;: Du hast denselben Fehler weiter oben in der Aufgabe schon einmal gemacht.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Verbesserung ==&lt;br /&gt;
&lt;br /&gt;
{{Info:Start|Icon=lupe.png|Farbe=#00FF00}}&lt;br /&gt;
&#039;&#039;&#039;Fehler, die ich Dir am Rand mit einer grünen Lupe markiert habe, sind besonders wichtig, denn hier kannst Du viel lernen.&#039;&#039;&#039; Es sind zumeist Fehler, die Du häufig machst oder die für das Verständnis eines Themas entscheidend sind.&lt;br /&gt;
&lt;br /&gt;
Diese Fehler solltest Du mit besonderer Aufmerksamkeit korrigieren. Du kannst dazu so vorgehen:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Schlage das Thema nach&#039;&#039;&#039;&lt;br /&gt;
#* in den im Unterricht verwendeten Materialien&lt;br /&gt;
#* oder in dem von mir im Feedback angegebenen Material (siehe [[#Material zum Naschschlagen|Liste häufig vorgeschlagener Materialien]] unten).&lt;br /&gt;
# &#039;&#039;&#039;Lerne&#039;&#039;&#039; oder wiederhole das Thema.&lt;br /&gt;
# &#039;&#039;&#039;Verbessere und sichere die Inhalte schriftlich&#039;&#039;&#039;&lt;br /&gt;
#* Korrigiere den markierten Fehler in der Aufgabe und schreibe die Aufgabe korrekt auf.&lt;br /&gt;
#* Überlege Dir &#039;&#039;&#039;zwei weitere Aufgaben&#039;&#039;&#039;, die zum Fehler passen, löse sie und notiere sie ebenfalls.&lt;br /&gt;
{{Info:End}}&lt;br /&gt;
&lt;br /&gt;
== Material zum Nachschlagen ==&lt;br /&gt;
&lt;br /&gt;
=== M: Mathematische Grundlagen ===&lt;br /&gt;
* &#039;&#039;&#039;M0&#039;&#039;&#039; Kopfrechnen: [https://mathe.aufgabenfuchs.de/kopfrechnen/addieren.shtml Addieren], [https://mathe.aufgabenfuchs.de/kopfrechnen/subtrahieren.shtml Subtrahieren], [https://mathe.aufgabenfuchs.de/kopfrechnen/multiplizieren.shtml Multiplizieren], [https://mathe.aufgabenfuchs.de/kopfrechnen/dividieren.shtml Dividieren]&lt;br /&gt;
* &#039;&#039;&#039;M1&#039;&#039;&#039; [https://easy-schule.de/grundrechenarten/#grundrechenarten-uebersicht Grundbegriffe der Grundrechenarten]&lt;br /&gt;
* &#039;&#039;&#039;M2&#039;&#039;&#039; [https://mathegym.de/mathe/natuerliche-zahlen-runden/aufgabe/90 Zahlen runden]&lt;br /&gt;
* &#039;&#039;&#039;M3&#039;&#039;&#039; Umkehraufgaben bilden&lt;br /&gt;
* &#039;&#039;&#039;M4&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Längen umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Längen rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M5&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Gewichte umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Gewichten rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M6&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Geld umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Geld rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M7&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Zeitangaben umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Zeitangaben rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M8&#039;&#039;&#039; [https://www.yout-ube.com/watch?v=KR0tK27u_uA {{Inline|video.png}} Sachaufgaben lösen in 5 Schritten]&lt;br /&gt;
&lt;br /&gt;
=== G: Geraden, Punkte, Koordinaten, Symmetrie ===&lt;br /&gt;
* &#039;&#039;&#039;G1&#039;&#039;&#039; [https://www.yout-ube.com/watch?v=vxCh6xw_TmI {{Inline|video.png}} Das Geodreieck benutzen]&lt;br /&gt;
* &#039;&#039;&#039;G2&#039;&#039;&#039; [https://www.yout-ube.com/watch?v=jXYE4SGmZ6o {{Inline|video.png}} Prallel / Senkrecht prüfen]&lt;br /&gt;
* &#039;&#039;&#039;G3&#039;&#039;&#039; [https://www.yout-ube.com/watch?v=cow12kIPyrI {{Inline|video.png}} Prallele / Senkrechte zeichnen], [https://friedrich-schiller-grundschule.de/wp-content/uploads/2023/12/Parallele-und-Senkrechte.pdf Aufgabenblatt]&lt;br /&gt;
* &#039;&#039;&#039;G4&#039;&#039;&#039; [https://www.yout-ube.com/watch?v=8OFxqdQBAAA {{Inline|video.png}} Abstände Punkt-Punkt, Punkt-Gerade, Gerade-Gerade]&lt;br /&gt;
* &#039;&#039;&#039;G5&#039;&#039;&#039; [https://www.yout-ube.com/watch?v=IskeB6jMUXM {{Inline|video.png}} Koordinatensystem]&lt;br /&gt;
* &#039;&#039;&#039;G6&#039;&#039;&#039; [https://www.you-tube.com/watch?v=2eTVZ_OIKZg {{Inline|video.png}} Was ist Achsensymmetrie], [https://www.you-tube.com/watch?v=RbDv5ue-Lpg {{Inline|video.png}} Achsenspiegelung]&lt;br /&gt;
* [https://www.youtube.com/watch?v=Q6kw5bnbCr8 {{Inline|video.png}} Was ist Punktsymmetrie], [https://www.yout-ube.com/watch?v=VQ2ZbqxDpp0 {{Inline|video.png}} Punktspiegelung]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Vielen Dank an [https://herr-kalt.de Herrn Kalt] für seine [https://herr-kalt.de/orga-unterricht/korrekturzeichen  Vorlage zu dieser Wiki-Seite].&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Lernpfad:Einf%C3%BChrung_in_Processing/17&amp;diff=9984</id>
		<title>Lernpfad:Einführung in Processing/17</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Lernpfad:Einf%C3%BChrung_in_Processing/17&amp;diff=9984"/>
		<updated>2025-01-26T23:06:18Z</updated>

		<summary type="html">&lt;p&gt;Ngb: /* Übungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{NNameAnzeigen}}{{NNavigation}}&lt;br /&gt;
&lt;br /&gt;
Arrays (im Deutschen auch Felder genannt) erlauben es, Gruppen von Daten gleichen Typs in einer Variablen zu speichern. Bei der Initialisierung wird der Datentyp und die Anzahl der Werte (Größe des Arrays) festgelegt. Der Interpreter reserviert dann den nötigen Speicherplatz. Ein Integer-Array der Größe 3 belegt 96 Bit (3 x 32 Bit) plus 16 Bit für Statusinformationen (etwa die Größe des Arrays).&lt;br /&gt;
&lt;br /&gt;
== Deklaration ==&lt;br /&gt;
Ein neues Array kann mit dem Schlüsselwort &amp;lt;code&amp;gt;new&amp;lt;/code&amp;gt; erzeugt werden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// Deklaration eines Integer-Arrays der Größe 8&lt;br /&gt;
int[] zahlen = new int[8];&lt;br /&gt;
&lt;br /&gt;
// String-Array der Größe 11&lt;br /&gt;
String[] worte = new String[11];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sind die Elemente des Arrays fest und bekannt, dann kann eine &#039;&#039;Kurzform&#039;&#039; zur Deklaration genutzt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// Deklaration eines Integer-Arrays der Größe 4 mit den Werten 5,6,7 und 8&lt;br /&gt;
int[] zahlen = new int[]{5, 6, 7, 8};&lt;br /&gt;
&lt;br /&gt;
// String-Array der Größe 5&lt;br /&gt;
String[] worte = new String[]{&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;, &amp;quot;d&amp;quot;, &amp;quot;e&amp;quot;};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Soll das Array nicht in einer Variablen gespeichert werden, sondern zum Beispiel nur als Parameter in einem Methodenaufruf genutzt werden, dann kann diese Form genutzt werden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
taschenrechner.addiere(new int[]{5, 6, 7, 8});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Größe eines Arrays kann jederzeit über das &amp;lt;code&amp;gt;length&amp;lt;/code&amp;gt; Attribut abgefragt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
int[] zahlen = new int[7];&lt;br /&gt;
&lt;br /&gt;
zahlen.length; // 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Zugriffe und Zuweisungen ==&lt;br /&gt;
Der Zugriff auf die Elemente eines Arrays erfolgt über einen Index. Dabei bekommt das erste Element den Index 0, das Zweite den Index 1, und so weiter. In einem Array der Größe &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; hat das letzte Element also den Index &amp;lt;code&amp;gt;n-1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Schublade|Man könnte auch sagen, dass jedes Element in einem Array durch seinen Abstand zum ersten Element beschrieben ist.|Farbe={{Farbe:Info}}}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable text-center&amp;quot; style=&amp;quot;margin:0 auto;&amp;quot;&lt;br /&gt;
|+ Adressierung in einem Array mit Namen &amp;quot;feld&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Element&lt;br /&gt;
| 1 || 2 || 3 || ... || i || ... || n-1 || n&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || ... || i-1 || ... || n-2 || n-1&lt;br /&gt;
|-&lt;br /&gt;
! Zugriff&lt;br /&gt;
| feld[0] || feld[1] || feld[2] || ... || feld[i-1] || ... || feld[feld.length-2] || feld[feld.length-1]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Zuweisungen und Zugriffe erfolgen auch mit eckigen Klammern, wie bei der Deklaration.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
int[] zahlen = new int[8];&lt;br /&gt;
&lt;br /&gt;
zahlen[0] = 133; // Zuweisung zum ersten Element mit dem Index 0&lt;br /&gt;
zahlen[1] = 501; // Zuweisung zum zweiten Element mit dem Index 1&lt;br /&gt;
&lt;br /&gt;
zahlen[0] + zahlen[1]; // Zugriff auf die Elemente mit Index 0 und 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zugriffe mit Indizes außerhalb des gültigen Bereichs (also &amp;lt;code&amp;gt;i &amp;lt; 0&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;i &amp;gt; length&amp;lt;/code&amp;gt;) produzieren einen [https://docs.oracle.com/javase/7/docs/api/java/lang/ArrayIndexOutOfBoundsException.html Fehler].&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Notiere in der ersten Zeile jeder Tabelle die Werte, die nach Ausführung des gezeigten Quelltextes im Array gespeichert sind. Das Ergebnis jedes Schrittes dient als Ausgangssituation für den nächsten.&amp;lt;br /&amp;gt; Falls der Quelltext irgendwo einen Fehler enthält, dann wird der gesamte Code nicht ausgeführt (auch korrekte Zeilen nicht). Das Array ändert sich also nicht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
int[] zahlen = new int[6];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;0()&#039;&#039;&#039; || &#039;&#039;&#039;0()&#039;&#039;&#039; || &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
zahlen[4] = 4;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;0()&#039;&#039;&#039; || &#039;&#039;&#039;0()&#039;&#039;&#039; || &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;4()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
zahlen[5] = 5;&lt;br /&gt;
zahlen[6] = 6;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;0()&#039;&#039;&#039; || &#039;&#039;&#039;0()&#039;&#039;&#039; || &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;4()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
zahlen[2] = zahlen[4] + 6;&lt;br /&gt;
zahlen[1] = zahlen[2] - 1;&lt;br /&gt;
zahlen[0] = zahlen[1] - 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;8()&#039;&#039;&#039; || &#039;&#039;&#039;9()&#039;&#039;&#039; || &#039;&#039;&#039;10()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;4()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if( zahlen[3] == 0 &amp;amp;&amp;amp; zahlen[0] == 0 ) {&lt;br /&gt;
    zahlen[5] = zahlen[2] / 2;&lt;br /&gt;
} else {&lt;br /&gt;
    zahlen[5] = zahlen[0] + zahlen[3];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;8()&#039;&#039;&#039; || &#039;&#039;&#039;9()&#039;&#039;&#039; || &#039;&#039;&#039;10()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;4()&#039;&#039;&#039; ||  &#039;&#039;&#039;8()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
zahlen[3] = zahlen.length;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;8()&#039;&#039;&#039; || &#039;&#039;&#039;9()&#039;&#039;&#039; || &#039;&#039;&#039;10()&#039;&#039;&#039; ||  &#039;&#039;&#039;6()&#039;&#039;&#039; ||  &#039;&#039;&#039;4()&#039;&#039;&#039; ||  &#039;&#039;&#039;8()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
{{Lösung:Start}}&lt;br /&gt;
1.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 0 || 0 || 0 || 0 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
2.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 0 || 0 || 0 || 0 || 4 || 0&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
3. Das Array hat die Größe 6 und gültige Indizes für die Elemente sind &amp;lt;code&amp;gt;0,1,2,3,4,5&amp;lt;/code&amp;gt;. Die Zuweisung &amp;lt;code&amp;gt;zahlen[6] = 6&amp;lt;/code&amp;gt; erzeugt einen Fehler, da &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt; kein gültiger Index ist.&lt;br /&gt;
&lt;br /&gt;
4.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 8 || 9 || 10 || 0 || 4 || 0&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
5.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 8 || 9 || 10 || 0 || 4 || 8&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
6.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 8 || 9 || 10 || 6 || 4 || 8&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
{{Lösung:End}}&lt;br /&gt;
&lt;br /&gt;
== Über ein Array iterieren ==&lt;br /&gt;
Da man oft die Größe eines Arrays im Vorfeld nicht kennt, muss man häufig mit einer Zählschleife &#039;&#039;über das Array iterieren&#039;&#039;, um Aktionen auf oder mit den Elementen auszuführen. [[wikipedia:Iteration#Informatik|&#039;&#039;Iterieren&#039;&#039;]] bedeutet hier, auf die Elemente des Arrays vom ersten bis zum letzten Schritt für Schritt zuzugreifen (es zu &amp;quot;durchlaufen&amp;quot;). Dazu kann man jedes Schleifenkonstrukt benutzen, üblich ist aber eine Zählschleife, da sie direkt einen Zähler für den Index bereitstellt.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// Zählschleife von 0 bis zahlen.length&lt;br /&gt;
// Die Zählvariable i durchläuft alle Indizes des Arrays&lt;br /&gt;
// Das Attribut &amp;quot;length&amp;quot; eines Arrays enthält seine Größe&lt;br /&gt;
for( int i = 0; i &amp;lt; zahlen.length; i += 1 ) {&lt;br /&gt;
	System.out.println(zahlen[i]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Notiere in der ersten Zeile jeder Tabelle die Werte, die nach Ausführung des gezeigten Quelltextes im Array gespeichert sind. Das Ergebnis jedes Schrittes dient als Ausgangssituation für den nächsten.&amp;lt;br&amp;gt;Falls der Quelltext irgendwo einen Fehler enthält, dann wird der gesamte Code nicht ausgeführt (auch korrekte Zeilen nicht). Das Array ändert sich also nicht.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 8 || 9 || 10 || 6 || 4 || 8&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = 0; i &amp;lt; zahlen.length; i++ ) {&lt;br /&gt;
    zahlen[i] = 10 + zahlen[i];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;18()&#039;&#039;&#039; || &#039;&#039;&#039;19()&#039;&#039;&#039; || &#039;&#039;&#039;20()&#039;&#039;&#039; ||  &#039;&#039;&#039;16()&#039;&#039;&#039; ||  &#039;&#039;&#039;14()&#039;&#039;&#039; ||  &#039;&#039;&#039;18()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = 0; i &amp;lt; zahlen.length; i++ ) {&lt;br /&gt;
    zahlen[i] = 10 + i;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;10()&#039;&#039;&#039; || &#039;&#039;&#039;11()&#039;&#039;&#039; || &#039;&#039;&#039;12()&#039;&#039;&#039; ||  &#039;&#039;&#039;13()&#039;&#039;&#039; ||  &#039;&#039;&#039;14()&#039;&#039;&#039; ||  &#039;&#039;&#039;15()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = 0; i &amp;lt; zahlen.length; i++ ) {&lt;br /&gt;
    zahlen[i] = zahlen[2] + i;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;12()&#039;&#039;&#039; || &#039;&#039;&#039;13()&#039;&#039;&#039; || &#039;&#039;&#039;14()&#039;&#039;&#039; ||  &#039;&#039;&#039;17()&#039;&#039;&#039; ||  &#039;&#039;&#039;18()&#039;&#039;&#039; ||  &#039;&#039;&#039;19()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = zahlen.length; i &amp;gt; 0; i-- ) {&lt;br /&gt;
    zahlen[i-1] = zahlen[i];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;12()&#039;&#039;&#039; || &#039;&#039;&#039;13()&#039;&#039;&#039; || &#039;&#039;&#039;14()&#039;&#039;&#039; ||  &#039;&#039;&#039;17()&#039;&#039;&#039; ||  &#039;&#039;&#039;18()&#039;&#039;&#039; ||  &#039;&#039;&#039;19()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = 1; i &amp;lt; zahlen.length; i += 2 ) {&lt;br /&gt;
    zahlen[i] = zahlen[i-1];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;12()&#039;&#039;&#039; || &#039;&#039;&#039;12()&#039;&#039;&#039; || &#039;&#039;&#039;14()&#039;&#039;&#039; ||  &#039;&#039;&#039;14()&#039;&#039;&#039; ||  &#039;&#039;&#039;18()&#039;&#039;&#039; ||  &#039;&#039;&#039;18()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = zahlen.length-1; i &amp;gt; 0; i -= 1 ) {&lt;br /&gt;
    zahlen[i] = zahlen[i]/2;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;12()&#039;&#039;&#039; || &#039;&#039;&#039;6()&#039;&#039;&#039; || &#039;&#039;&#039;7()&#039;&#039;&#039; ||  &#039;&#039;&#039;7()&#039;&#039;&#039; ||  &#039;&#039;&#039;9()&#039;&#039;&#039; ||  &#039;&#039;&#039;9()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
{{Lösung:Start}}&lt;br /&gt;
1.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 18 || 19 || 20 || 16 || 14 || 18&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
2.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 10 || 11 || 12 || 13 || 14 || 15&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
3.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 12 || 13 || 14 || 17 || 18 || 19&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
4.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 12 || 13 || 14 || 17 || 18 || 19&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
5.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 12 || 12 || 14 || 14 || 18 || 18&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
6.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 12 || 6 || 7 || 7 || 9 || 9&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
{{Lösung:End}}&lt;br /&gt;
&lt;br /&gt;
== Übungen == &lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
# Erstelle in {{Processing}} einen &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;-Array namens&amp;lt;code&amp;gt;bar&amp;lt;/code&amp;gt; mit den Zahlen &amp;lt;code&amp;gt;2, 4, 6&amp;lt;/code&amp;gt; (in dieser Reihenfolge).&lt;br /&gt;
#: Multipliziere die ersten zwei Zahlen und speichere das Ergebnis in der dritten Zelle des Arrays ab. Du solltest also &amp;lt;code&amp;gt;{2, 4, 8}&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;bar&amp;lt;/code&amp;gt; haben. Schreibe &amp;lt;code&amp;gt;bar&amp;lt;/code&amp;gt; mit &amp;lt;code&amp;gt;println()&amp;lt;/code&amp;gt; auf die Konsole, um dies zu prüfen.&lt;br /&gt;
# Kopiere die folgende Zeile nach {{Processing}}:&lt;br /&gt;
#: &amp;lt;code&amp;gt;float[] zahlen = {50,80,140,150,180,225,270,350};&amp;lt;/code&amp;gt;&lt;br /&gt;
#: Gib den Inhalt des Arrays in einer Zählschleife einzeln mit &amp;lt;code&amp;gt;println()&amp;lt;/code&amp;gt; auf der Konsole aus.&lt;br /&gt;
# Verändere das Programm aus 2 so, dass die Zahlen nicht ausgegeben werden, sondern als &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;-Koordinate für Kreise verwendet werden. Die &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;-Koordinate bleibt fest auf &amp;lt;code&amp;gt;50&amp;lt;/code&amp;gt; gesetzt. Stelle die Zeichenfläche auf &amp;lt;code&amp;gt;400x400&amp;lt;/code&amp;gt; Pixel ein. &lt;br /&gt;
# Erweitere das Programm aus 3 so, dass nur jedes zweite Element im Array als &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;-Koordinate verwendet wird und das nachfolgende Element als &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;-Koordinate. (Der erste Kreis wird also bei &amp;lt;code&amp;gt;(50, 80)&amp;lt;/code&amp;gt; gezeichnet.)&lt;br /&gt;
&lt;br /&gt;
{{P5js|https://editor.p5js.org/Ngb/full/rH70PEMDz|height=400}}&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
{{Lösung:Start|Aufgabe 1}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
int[] bar = new int[3];&lt;br /&gt;
bar[0] = 2;&lt;br /&gt;
bar[1] = 4;&lt;br /&gt;
bar[2] = 6;&lt;br /&gt;
bar[2] = bar[0] + bar[1];&lt;br /&gt;
println(bar);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative Lösung:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
int[] bar = new int[]{2, 4, 6};&lt;br /&gt;
bar[2] = bar[0] + bar[1];&lt;br /&gt;
println(bar);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Lösung:End}}{{Lösung:Start|Aufgabe 2}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
float[] zahlen = {50,80,140,150,180,225,270,350};&lt;br /&gt;
for( int i = 0; i &amp;lt; zahlen.length; i++ ) {&lt;br /&gt;
  println(zahlen[i]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Lösung:End}}{{Lösung:Start|Aufgabe 3}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
float[] zahlen = {50,80,140,150,180,225,270,350};&lt;br /&gt;
&lt;br /&gt;
size(400, 400);&lt;br /&gt;
&lt;br /&gt;
for( int i = 0; i &amp;lt; zahlen.length; i++ ) {&lt;br /&gt;
  ellipse(zahlen[i], 50, 20, 20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Lösung:End}}{{Lösung:Start|Aufgabe 4}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
float[] zahlen = {50,80,140,150,180,225,270,350};&lt;br /&gt;
&lt;br /&gt;
size(400, 400);&lt;br /&gt;
&lt;br /&gt;
for( int i = 0; i &amp;lt; zahlen.length; i += 2 ) {&lt;br /&gt;
  ellipse(zahlen[i], zahlen[i+1], 20, 20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Lösung:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Simuliere Ballons (bunte Ellipsen), die vom unteren Bildschirmrand nach oben steigen. Die Koordinaten der Regentropfen werden (als &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt;) in zwei Arrays gespeichert (&amp;lt;code&amp;gt;xcoords&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;ycoords&amp;lt;/code&amp;gt;). Zeige zunächst 10 Ballons an. Sobald die Ballons den oberen Rand erreichen, &amp;quot;platzen&amp;quot; sie (werden nicht mehr angezeigt) und tauchen unten wieder auf (die x-Koordinate wird zufällig und die y-Koordinate wird auf den unteren Bildschirmrand gesetzt).&lt;br /&gt;
&lt;br /&gt;
Du kannst das Ballon-Programm auch selbst kreativ erweitern (zufällige Farben; unterschiedliche Geschwindigkeiten; ...).&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel mit einigen Erweiterungen könnte so aussehen:&lt;br /&gt;
{{P5js|https://editor.p5js.org/Ngb/full/MFsgYHL8X|height=500}}&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
{{Tipp:Start|Vorlage für das Ballon-Projekt}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// Der i-te Ballon befindet sich am Punkt&lt;br /&gt;
// (xCoords[i], yCoords[i]) &lt;br /&gt;
float[] xcoords = new float[10];&lt;br /&gt;
float[] ycoords = new float[10];&lt;br /&gt;
&lt;br /&gt;
// Diese Variablen könnten auch Arrays sein, damit die Ballons&lt;br /&gt;
// nicht alle in derselben Geschwindigkeit mit derselben Farbe&lt;br /&gt;
// angezeigt werden.&lt;br /&gt;
float speed = 3;&lt;br /&gt;
color clr = color(int(random(256)), int(random(256)), int(random(256)));&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  size(400, 500);&lt;br /&gt;
  &lt;br /&gt;
  // Initialisierung der Startpositionen&lt;br /&gt;
  for( int i = 0; i &amp;lt; xcoords.length; i++ ) {&lt;br /&gt;
    xcoords[i] = random(width - 20) + 10;  // innerhalb der Fensterbreite&lt;br /&gt;
    ycoords[i] = height + 10; // etwas unterhalb des Anzeigebereichs&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void draw() {&lt;br /&gt;
  // blauer Hintergrund (?)&lt;br /&gt;
  background(93, 160, 185);&lt;br /&gt;
  &lt;br /&gt;
  // Ballons zeichnen &lt;br /&gt;
  for( int i = 0; i &amp;lt; xcoords.length; i++ ) {&lt;br /&gt;
    ycoords[i] -= speed;&lt;br /&gt;
    fill(clr);&lt;br /&gt;
    ellipse(xcoords[i], ycoords[i], 20, 40);&lt;br /&gt;
    &lt;br /&gt;
    if( ycoords[i]+40 &amp;lt; 0 ) {&lt;br /&gt;
      // Falls Fensterbereich verlassen, neue Position unten setzen&lt;br /&gt;
      // Hinweis: Da die Initialisierung mit Zufallswerten mehrfach benötigt wird,  &lt;br /&gt;
      //          könnte sie in eine eigene Funktion &amp;quot;void initBalloon(int i)&amp;quot; &lt;br /&gt;
      //          ausgelagert werden.&lt;br /&gt;
      xcoords[i] = random(width - 20) + 10;  // innerhalb der Fensterbreite&lt;br /&gt;
      ycoords[i] = height + 10; // etwas unterhalb des Anzeigebereichs&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Tipp:End}}&lt;br /&gt;
{{Tipp:Start}}&lt;br /&gt;
Du kannst die nötigen Arrays in dieser Art erstellen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
float[] xcoords = new float[10];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nutze in &amp;lt;code&amp;gt;void setup()&amp;lt;/code&amp;gt; eine &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;-Schleife, um eine Variable &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; von &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; bis &amp;lt;code&amp;gt;xcoords.length&amp;lt;/code&amp;gt; laufen zu lassen. Setze im Schleifenrumpf in den beiden Arrays die initialen Koordinaten (z.B. Zufallswerte).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = 0; i &amp;lt; xcoords.length; i++ ) {&lt;br /&gt;
    xcoords[i] = random(0, width);&lt;br /&gt;
    ycoords[i] = height;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Verfahre in &amp;lt;code&amp;gt;void draw()&amp;lt;/code&amp;gt; ähnlich und nutze eine Zählschleife, um die Ballons zu zeichnen und die y-Koordinaten so zu verändern, dass die Ballons langsam nach oben steigen. Es ist hilfreich für das Zeichnen zunächst einen neuen Befehl zu erstellen und diesen in der Schleife mit den passenden Koordinaten aufzurufen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
void ballon(int x, int y, int size) {&lt;br /&gt;
  // zeichne hier den Ballon&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Tipp:End}}{{Tipp:Start|Tipps zu Erweiterungen}}&lt;br /&gt;
Hübschere Zufallsfarben lassen sich einfacher in einem anderen Farbraum als RGB erstellen. Schaut euch den HLS Farbraum und den [https://processing.org/reference/colorMode_.html colorMode()]-Befehl an.&lt;br /&gt;
&lt;br /&gt;
Damit sich die Ballons leicht hin-und-her bewegen, könnt ihr die Sinus- oder Cosinus-Funktion benutzen. Als Eingabe nutzt ihr den [https://processing.org/reference/millis_.html millis()]-Befehl, der die Laufzeit des Programms in Miilisekunden angibt.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
sin(millis() / 350.0);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Tipp:End}}&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
{{Lösung:Start|Eine mögliche Lösung}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
float[] xcoords = new float[10];&lt;br /&gt;
float[] ycoords = new float[10];&lt;br /&gt;
float[] speeds = new float[10];&lt;br /&gt;
color[] colors = new color[10];&lt;br /&gt;
float[] deltas = new float[10];&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  size(400, 500);&lt;br /&gt;
  &lt;br /&gt;
  for( int i = 0; i &amp;lt; xcoords.length; i++ ) {&lt;br /&gt;
    xcoords[i] = random(width);&lt;br /&gt;
    ycoords[i] = height + 10;&lt;br /&gt;
    speeds[i] = random(1, 4);&lt;br /&gt;
    colors[i] = color(int(random(256)), int(random(256)), int(random(256)));&lt;br /&gt;
    deltas[i] = random(1000);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void draw() {&lt;br /&gt;
  background(93, 160, 185);&lt;br /&gt;
  &lt;br /&gt;
  for( int i = 0; i &amp;lt; xcoords.length; i++ ) {&lt;br /&gt;
    float xd = sin(deltas[i] + millis()/350.0) * speeds[i];&lt;br /&gt;
    ycoords[i] -= speeds[i];&lt;br /&gt;
    fill(colors[i]);&lt;br /&gt;
    ellipse(xcoords[i] + xd, ycoords[i], 20, 40);&lt;br /&gt;
    &lt;br /&gt;
    if( ycoords[i]+40 &amp;lt; 0 ) {&lt;br /&gt;
      xcoords[i] = random(width);&lt;br /&gt;
      ycoords[i] = height;&lt;br /&gt;
      speeds[i] = random(1, 4);&lt;br /&gt;
      colors[i] = color(int(random(256)), int(random(256)), int(random(256)));&lt;br /&gt;
      deltas[i] = random(1000);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Lösung:End}}&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Lernpfad:Einf%C3%BChrung_in_Processing/17&amp;diff=9983</id>
		<title>Lernpfad:Einführung in Processing/17</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Lernpfad:Einf%C3%BChrung_in_Processing/17&amp;diff=9983"/>
		<updated>2025-01-26T23:04:54Z</updated>

		<summary type="html">&lt;p&gt;Ngb: /* Übungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{NNameAnzeigen}}{{NNavigation}}&lt;br /&gt;
&lt;br /&gt;
Arrays (im Deutschen auch Felder genannt) erlauben es, Gruppen von Daten gleichen Typs in einer Variablen zu speichern. Bei der Initialisierung wird der Datentyp und die Anzahl der Werte (Größe des Arrays) festgelegt. Der Interpreter reserviert dann den nötigen Speicherplatz. Ein Integer-Array der Größe 3 belegt 96 Bit (3 x 32 Bit) plus 16 Bit für Statusinformationen (etwa die Größe des Arrays).&lt;br /&gt;
&lt;br /&gt;
== Deklaration ==&lt;br /&gt;
Ein neues Array kann mit dem Schlüsselwort &amp;lt;code&amp;gt;new&amp;lt;/code&amp;gt; erzeugt werden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// Deklaration eines Integer-Arrays der Größe 8&lt;br /&gt;
int[] zahlen = new int[8];&lt;br /&gt;
&lt;br /&gt;
// String-Array der Größe 11&lt;br /&gt;
String[] worte = new String[11];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sind die Elemente des Arrays fest und bekannt, dann kann eine &#039;&#039;Kurzform&#039;&#039; zur Deklaration genutzt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// Deklaration eines Integer-Arrays der Größe 4 mit den Werten 5,6,7 und 8&lt;br /&gt;
int[] zahlen = new int[]{5, 6, 7, 8};&lt;br /&gt;
&lt;br /&gt;
// String-Array der Größe 5&lt;br /&gt;
String[] worte = new String[]{&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;, &amp;quot;d&amp;quot;, &amp;quot;e&amp;quot;};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Soll das Array nicht in einer Variablen gespeichert werden, sondern zum Beispiel nur als Parameter in einem Methodenaufruf genutzt werden, dann kann diese Form genutzt werden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
taschenrechner.addiere(new int[]{5, 6, 7, 8});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Größe eines Arrays kann jederzeit über das &amp;lt;code&amp;gt;length&amp;lt;/code&amp;gt; Attribut abgefragt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
int[] zahlen = new int[7];&lt;br /&gt;
&lt;br /&gt;
zahlen.length; // 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Zugriffe und Zuweisungen ==&lt;br /&gt;
Der Zugriff auf die Elemente eines Arrays erfolgt über einen Index. Dabei bekommt das erste Element den Index 0, das Zweite den Index 1, und so weiter. In einem Array der Größe &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; hat das letzte Element also den Index &amp;lt;code&amp;gt;n-1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Schublade|Man könnte auch sagen, dass jedes Element in einem Array durch seinen Abstand zum ersten Element beschrieben ist.|Farbe={{Farbe:Info}}}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable text-center&amp;quot; style=&amp;quot;margin:0 auto;&amp;quot;&lt;br /&gt;
|+ Adressierung in einem Array mit Namen &amp;quot;feld&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Element&lt;br /&gt;
| 1 || 2 || 3 || ... || i || ... || n-1 || n&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || ... || i-1 || ... || n-2 || n-1&lt;br /&gt;
|-&lt;br /&gt;
! Zugriff&lt;br /&gt;
| feld[0] || feld[1] || feld[2] || ... || feld[i-1] || ... || feld[feld.length-2] || feld[feld.length-1]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Zuweisungen und Zugriffe erfolgen auch mit eckigen Klammern, wie bei der Deklaration.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
int[] zahlen = new int[8];&lt;br /&gt;
&lt;br /&gt;
zahlen[0] = 133; // Zuweisung zum ersten Element mit dem Index 0&lt;br /&gt;
zahlen[1] = 501; // Zuweisung zum zweiten Element mit dem Index 1&lt;br /&gt;
&lt;br /&gt;
zahlen[0] + zahlen[1]; // Zugriff auf die Elemente mit Index 0 und 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zugriffe mit Indizes außerhalb des gültigen Bereichs (also &amp;lt;code&amp;gt;i &amp;lt; 0&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;i &amp;gt; length&amp;lt;/code&amp;gt;) produzieren einen [https://docs.oracle.com/javase/7/docs/api/java/lang/ArrayIndexOutOfBoundsException.html Fehler].&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Notiere in der ersten Zeile jeder Tabelle die Werte, die nach Ausführung des gezeigten Quelltextes im Array gespeichert sind. Das Ergebnis jedes Schrittes dient als Ausgangssituation für den nächsten.&amp;lt;br /&amp;gt; Falls der Quelltext irgendwo einen Fehler enthält, dann wird der gesamte Code nicht ausgeführt (auch korrekte Zeilen nicht). Das Array ändert sich also nicht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
int[] zahlen = new int[6];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;0()&#039;&#039;&#039; || &#039;&#039;&#039;0()&#039;&#039;&#039; || &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
zahlen[4] = 4;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;0()&#039;&#039;&#039; || &#039;&#039;&#039;0()&#039;&#039;&#039; || &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;4()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
zahlen[5] = 5;&lt;br /&gt;
zahlen[6] = 6;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;0()&#039;&#039;&#039; || &#039;&#039;&#039;0()&#039;&#039;&#039; || &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;4()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
zahlen[2] = zahlen[4] + 6;&lt;br /&gt;
zahlen[1] = zahlen[2] - 1;&lt;br /&gt;
zahlen[0] = zahlen[1] - 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;8()&#039;&#039;&#039; || &#039;&#039;&#039;9()&#039;&#039;&#039; || &#039;&#039;&#039;10()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;4()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if( zahlen[3] == 0 &amp;amp;&amp;amp; zahlen[0] == 0 ) {&lt;br /&gt;
    zahlen[5] = zahlen[2] / 2;&lt;br /&gt;
} else {&lt;br /&gt;
    zahlen[5] = zahlen[0] + zahlen[3];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;8()&#039;&#039;&#039; || &#039;&#039;&#039;9()&#039;&#039;&#039; || &#039;&#039;&#039;10()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;4()&#039;&#039;&#039; ||  &#039;&#039;&#039;8()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
zahlen[3] = zahlen.length;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;8()&#039;&#039;&#039; || &#039;&#039;&#039;9()&#039;&#039;&#039; || &#039;&#039;&#039;10()&#039;&#039;&#039; ||  &#039;&#039;&#039;6()&#039;&#039;&#039; ||  &#039;&#039;&#039;4()&#039;&#039;&#039; ||  &#039;&#039;&#039;8()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
{{Lösung:Start}}&lt;br /&gt;
1.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 0 || 0 || 0 || 0 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
2.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 0 || 0 || 0 || 0 || 4 || 0&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
3. Das Array hat die Größe 6 und gültige Indizes für die Elemente sind &amp;lt;code&amp;gt;0,1,2,3,4,5&amp;lt;/code&amp;gt;. Die Zuweisung &amp;lt;code&amp;gt;zahlen[6] = 6&amp;lt;/code&amp;gt; erzeugt einen Fehler, da &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt; kein gültiger Index ist.&lt;br /&gt;
&lt;br /&gt;
4.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 8 || 9 || 10 || 0 || 4 || 0&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
5.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 8 || 9 || 10 || 0 || 4 || 8&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
6.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 8 || 9 || 10 || 6 || 4 || 8&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
{{Lösung:End}}&lt;br /&gt;
&lt;br /&gt;
== Über ein Array iterieren ==&lt;br /&gt;
Da man oft die Größe eines Arrays im Vorfeld nicht kennt, muss man häufig mit einer Zählschleife &#039;&#039;über das Array iterieren&#039;&#039;, um Aktionen auf oder mit den Elementen auszuführen. [[wikipedia:Iteration#Informatik|&#039;&#039;Iterieren&#039;&#039;]] bedeutet hier, auf die Elemente des Arrays vom ersten bis zum letzten Schritt für Schritt zuzugreifen (es zu &amp;quot;durchlaufen&amp;quot;). Dazu kann man jedes Schleifenkonstrukt benutzen, üblich ist aber eine Zählschleife, da sie direkt einen Zähler für den Index bereitstellt.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// Zählschleife von 0 bis zahlen.length&lt;br /&gt;
// Die Zählvariable i durchläuft alle Indizes des Arrays&lt;br /&gt;
// Das Attribut &amp;quot;length&amp;quot; eines Arrays enthält seine Größe&lt;br /&gt;
for( int i = 0; i &amp;lt; zahlen.length; i += 1 ) {&lt;br /&gt;
	System.out.println(zahlen[i]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Notiere in der ersten Zeile jeder Tabelle die Werte, die nach Ausführung des gezeigten Quelltextes im Array gespeichert sind. Das Ergebnis jedes Schrittes dient als Ausgangssituation für den nächsten.&amp;lt;br&amp;gt;Falls der Quelltext irgendwo einen Fehler enthält, dann wird der gesamte Code nicht ausgeführt (auch korrekte Zeilen nicht). Das Array ändert sich also nicht.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 8 || 9 || 10 || 6 || 4 || 8&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = 0; i &amp;lt; zahlen.length; i++ ) {&lt;br /&gt;
    zahlen[i] = 10 + zahlen[i];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;18()&#039;&#039;&#039; || &#039;&#039;&#039;19()&#039;&#039;&#039; || &#039;&#039;&#039;20()&#039;&#039;&#039; ||  &#039;&#039;&#039;16()&#039;&#039;&#039; ||  &#039;&#039;&#039;14()&#039;&#039;&#039; ||  &#039;&#039;&#039;18()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = 0; i &amp;lt; zahlen.length; i++ ) {&lt;br /&gt;
    zahlen[i] = 10 + i;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;10()&#039;&#039;&#039; || &#039;&#039;&#039;11()&#039;&#039;&#039; || &#039;&#039;&#039;12()&#039;&#039;&#039; ||  &#039;&#039;&#039;13()&#039;&#039;&#039; ||  &#039;&#039;&#039;14()&#039;&#039;&#039; ||  &#039;&#039;&#039;15()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = 0; i &amp;lt; zahlen.length; i++ ) {&lt;br /&gt;
    zahlen[i] = zahlen[2] + i;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;12()&#039;&#039;&#039; || &#039;&#039;&#039;13()&#039;&#039;&#039; || &#039;&#039;&#039;14()&#039;&#039;&#039; ||  &#039;&#039;&#039;17()&#039;&#039;&#039; ||  &#039;&#039;&#039;18()&#039;&#039;&#039; ||  &#039;&#039;&#039;19()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = zahlen.length; i &amp;gt; 0; i-- ) {&lt;br /&gt;
    zahlen[i-1] = zahlen[i];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;12()&#039;&#039;&#039; || &#039;&#039;&#039;13()&#039;&#039;&#039; || &#039;&#039;&#039;14()&#039;&#039;&#039; ||  &#039;&#039;&#039;17()&#039;&#039;&#039; ||  &#039;&#039;&#039;18()&#039;&#039;&#039; ||  &#039;&#039;&#039;19()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = 1; i &amp;lt; zahlen.length; i += 2 ) {&lt;br /&gt;
    zahlen[i] = zahlen[i-1];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;12()&#039;&#039;&#039; || &#039;&#039;&#039;12()&#039;&#039;&#039; || &#039;&#039;&#039;14()&#039;&#039;&#039; ||  &#039;&#039;&#039;14()&#039;&#039;&#039; ||  &#039;&#039;&#039;18()&#039;&#039;&#039; ||  &#039;&#039;&#039;18()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = zahlen.length-1; i &amp;gt; 0; i -= 1 ) {&lt;br /&gt;
    zahlen[i] = zahlen[i]/2;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;12()&#039;&#039;&#039; || &#039;&#039;&#039;6()&#039;&#039;&#039; || &#039;&#039;&#039;7()&#039;&#039;&#039; ||  &#039;&#039;&#039;7()&#039;&#039;&#039; ||  &#039;&#039;&#039;9()&#039;&#039;&#039; ||  &#039;&#039;&#039;9()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
{{Lösung:Start}}&lt;br /&gt;
1.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 18 || 19 || 20 || 16 || 14 || 18&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
2.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 10 || 11 || 12 || 13 || 14 || 15&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
3.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 12 || 13 || 14 || 17 || 18 || 19&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
4.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 12 || 13 || 14 || 17 || 18 || 19&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
5.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 12 || 12 || 14 || 14 || 18 || 18&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
6.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 12 || 6 || 7 || 7 || 9 || 9&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
{{Lösung:End}}&lt;br /&gt;
&lt;br /&gt;
== Übungen == &lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
# Erstelle in {{Processing}} einen &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;-Array namens&amp;lt;code&amp;gt;bar&amp;lt;/code&amp;gt; mit den Zahlen &amp;lt;code&amp;gt;2, 4, 6&amp;lt;/code&amp;gt; (in dieser Reihenfolge).&lt;br /&gt;
#: Multipliziere die ersten zwei Zahlen und speichere das Ergebnis in der dritten Zelle des Arrays ab. Du solltest also &amp;lt;code&amp;gt;{2, 4, 8}&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;bar&amp;lt;/code&amp;gt; haben. Schreibe &amp;lt;code&amp;gt;bar&amp;lt;/code&amp;gt; mit &amp;lt;code&amp;gt;println()&amp;lt;/code&amp;gt; auf die Konsole, um dies zu prüfen.&lt;br /&gt;
# Kopiere die folgende Zeile nach {{Processing}}:&lt;br /&gt;
#: &amp;lt;code&amp;gt;float[] zahlen = {50,80,140,150,180,225,270,350};&amp;lt;/code&amp;gt;&lt;br /&gt;
#: Gib den Inhalt des Arrays in einer Zählschleife einzeln mit &amp;lt;code&amp;gt;println()&amp;lt;/code&amp;gt; auf der Konsole aus.&lt;br /&gt;
# Verändere das Programm aus 2 so, dass die Zahlen nicht ausgegeben werden, sondern als &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;-Koordinate für Kreise verwendet werden. Die &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;-Koordinate bleibt fest auf &amp;lt;code&amp;gt;50&amp;lt;/code&amp;gt; gesetzt. Stelle die Zeichenfläche auf &amp;lt;code&amp;gt;400x400&amp;lt;/code&amp;gt; Pixel ein. &lt;br /&gt;
# Erweitere das Programm aus 3 so, dass nur jedes zweite Element im Array als &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;-Koordinate verwendet wird und das nachfolgende Element als &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;-Koordinate. (Der erste Kreis wird also bei &amp;lt;code&amp;gt;(50, 80)&amp;lt;/code&amp;gt; gezeichnet.)&lt;br /&gt;
&lt;br /&gt;
{{P5js|https://editor.p5js.org/Ngb/full/rH70PEMDz|height=400}}&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
{{Lösung:Start|Aufgabe 1}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
int[] bar = new int[3];&lt;br /&gt;
bar[0] = 2;&lt;br /&gt;
bar[1] = 4;&lt;br /&gt;
bar[2] = 6;&lt;br /&gt;
bar[2] = bar[0] + bar[1];&lt;br /&gt;
println(bar);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative Lösung:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
int[] bar = new int[]{2, 4, 6};&lt;br /&gt;
bar[2] = bar[0] + bar[1];&lt;br /&gt;
println(bar);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Lösung:End}}{{Lösung:Start|Aufgabe 2}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
float[] zahlen = {50,80,140,150,180,225,270,350};&lt;br /&gt;
for( int i = 0; i &amp;lt; zahlen.length; i++ ) {&lt;br /&gt;
  println(zahlen[i]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Lösung:End}}{{Lösung:Start|Aufgabe 3}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
float[] zahlen = {50,80,140,150,180,225,270,350};&lt;br /&gt;
&lt;br /&gt;
size(400, 400);&lt;br /&gt;
&lt;br /&gt;
for( int i = 0; i &amp;lt; zahlen.length; i++ ) {&lt;br /&gt;
  ellipse(zahlen[i], 50, 20, 20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Lösung:End}}{{Lösung:Start|Aufgabe 4}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
float[] zahlen = {50,80,140,150,180,225,270,350};&lt;br /&gt;
&lt;br /&gt;
size(400, 400);&lt;br /&gt;
&lt;br /&gt;
for( int i = 0; i &amp;lt; zahlen.length; i += 2 ) {&lt;br /&gt;
  ellipse(zahlen[i], zahlen[i+1], 20, 20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Lösung:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Simuliere Ballons (bunte Ellipsen), die vom unteren Bildschirmrand nach oben steigen. Die Koordinaten der Regentropfen werden (als &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt;) in zwei Arrays gespeichert (&amp;lt;code&amp;gt;xcoords&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;ycoords&amp;lt;/code&amp;gt;). Zeige zunächst 10 Ballons an. Sobald die Ballons den oberen Rand erreichen, &amp;quot;platzen&amp;quot; sie (werden nicht mehr angezeigt) und tauchen unten wieder auf (die x-Koordinate wird zufällig und die y-Koordinate wird auf den unteren Bildschirmrand gesetzt).&lt;br /&gt;
&lt;br /&gt;
Du kannst das Ballon-Programm auch selbst kreativ erweitern (zufällige Farben; unterschiedliche Geschwindigkeiten; ...).&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel mit einigen Erweiterungen könnte so aussehen:&lt;br /&gt;
{{P5js|https://editor.p5js.org/Ngb/full/MFsgYHL8X|height=500}}&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
{{Tipp:Start|Vorlage für das Ballon-Projekt}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// Der i-te Ballon befindet sich am Punkt&lt;br /&gt;
// (xCoords[i], yCoords[i]) &lt;br /&gt;
float[] xcoords = new float[10];&lt;br /&gt;
float[] ycoords = new float[10];&lt;br /&gt;
&lt;br /&gt;
// Diese Variablen könnten auch Arrays sein, damit die Ballons&lt;br /&gt;
// nicht alle in derselben Geschwindigkeit mit derselben Farbe&lt;br /&gt;
// angezeigt werden.&lt;br /&gt;
float speed = 3;&lt;br /&gt;
color clr = color(int(random(256)), int(random(256)), int(random(256)));&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  size(400, 500);&lt;br /&gt;
  &lt;br /&gt;
  // Initialisierung der Startpositionen&lt;br /&gt;
  for( int i = 0; i &amp;lt; xcoords.length; i++ ) {&lt;br /&gt;
    xcoords[i] = random(width - 20) + 10;  // innerhalb der Fensterbreite&lt;br /&gt;
    ycoords[i] = height + 10; // etwas unterhalb des Anzeigebereichs&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void draw() {&lt;br /&gt;
  // blauer Hintergrund (?)&lt;br /&gt;
  background(93, 160, 185);&lt;br /&gt;
  &lt;br /&gt;
  // Ballons zeichnen &lt;br /&gt;
  for( int i = 0; i &amp;lt; xcoords.length; i++ ) {&lt;br /&gt;
    ycoords[i] -= speed;&lt;br /&gt;
    fill(clr);&lt;br /&gt;
    ellipse(xcoords[i], ycoords[i], 20, 40);&lt;br /&gt;
    &lt;br /&gt;
    if( ycoords[i]+40 &amp;lt; 0 ) {&lt;br /&gt;
      // Falls Fensterbereich verlassen, neue Position unten setzen&lt;br /&gt;
      // Hinweis: Da die Initialisierung mit Zufallswerten mehrfach benötigt wird,  &lt;br /&gt;
      //          könnte sie in eine eigene Funktion &amp;quot;void initBalloon(int i)&amp;quot; &lt;br /&gt;
      //          ausgelagert werden.&lt;br /&gt;
      xcoords[i] = random(width - 20) + 10;  // innerhalb der Fensterbreite&lt;br /&gt;
      ycoords[i] = height + 10; // etwas unterhalb des Anzeigebereichs&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Tipp:End}}&lt;br /&gt;
{{Tipp:Start}}&lt;br /&gt;
Du kannst die nötigen Arrays in dieser Art erstellen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
float[] xcoords = new float[10];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nutze in &amp;lt;code&amp;gt;void setup()&amp;lt;/code&amp;gt; eine &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;-Schleife, um eine Variable &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; von &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; bis &amp;lt;code&amp;gt;xcoords.length&amp;lt;/code&amp;gt; laufen zu lassen. Setze im Schleifenrumpf in den beiden Arrays die initialen Koordinaten (z.B. Zufallswerte).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = 0; i &amp;lt; xcoords.length; i++ ) {&lt;br /&gt;
    xcoords[i] = random(0, width);&lt;br /&gt;
    ycoords[i] = height;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Verfahre in &amp;lt;code&amp;gt;void draw()&amp;lt;/code&amp;gt; ähnlich und nutze eine Zählschleife, um die Ballons zu zeichnen und die y-Koordinaten so zu verändern, dass die Ballons langsam nach oben steigen. Es ist hilfreich für das Zeichnen zunächst einen neuen Befehl zu erstellen und diesen in der Schleife mit den passenden Koordinaten aufzurufen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
void ballon(int x, int y, int size) {&lt;br /&gt;
  // zeichne hier den Ballon&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Tipp:End}}{{Tipp:Start|Tipps zu Erweiterungen}}&lt;br /&gt;
Hübschere Zufallsfarben lassen sich einfacher in einem anderen Farbraum als RGB erstellen. Schaut euch den HLS Farbraum und den [https://processing.org/reference/colorMode_.html colorMode()]-Befehl an.&lt;br /&gt;
&lt;br /&gt;
Damit sich die Ballons leicht hin-und-her bewegen, könnt ihr die Sinus- oder Cosinus-Funktion benutzen. Als Eingabe nutzt ihr den [https://processing.org/reference/millis_.html millis()]-Befehl, der die Laufzeit des Programms in Miilisekunden angibt.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
sin(millis() / 350.0);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Tipp:End}}{{Lösung:Start|Eine mögliche Lösung}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
float[] xcoords = new float[10];&lt;br /&gt;
float[] ycoords = new float[10];&lt;br /&gt;
float[] speeds = new float[10];&lt;br /&gt;
color[] colors = new color[10];&lt;br /&gt;
float[] deltas = new float[10];&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  size(400, 500);&lt;br /&gt;
  &lt;br /&gt;
  for( int i = 0; i &amp;lt; xcoords.length; i++ ) {&lt;br /&gt;
    xcoords[i] = random(width);&lt;br /&gt;
    ycoords[i] = height + 10;&lt;br /&gt;
    speeds[i] = random(1, 4);&lt;br /&gt;
    colors[i] = color(int(random(256)), int(random(256)), int(random(256)));&lt;br /&gt;
    deltas[i] = random(1000);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void draw() {&lt;br /&gt;
  background(93, 160, 185);&lt;br /&gt;
  &lt;br /&gt;
  for( int i = 0; i &amp;lt; xcoords.length; i++ ) {&lt;br /&gt;
    float xd = sin(deltas[i] + millis()/350.0) * speeds[i];&lt;br /&gt;
    ycoords[i] -= speeds[i];&lt;br /&gt;
    fill(colors[i]);&lt;br /&gt;
    ellipse(xcoords[i] + xd, ycoords[i], 20, 40);&lt;br /&gt;
    &lt;br /&gt;
    if( ycoords[i]+40 &amp;lt; 0 ) {&lt;br /&gt;
      xcoords[i] = random(width);&lt;br /&gt;
      ycoords[i] = height;&lt;br /&gt;
      speeds[i] = random(1, 4);&lt;br /&gt;
      colors[i] = color(int(random(256)), int(random(256)), int(random(256)));&lt;br /&gt;
      deltas[i] = random(1000);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Lösung:End}}&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Lernpfad:Einf%C3%BChrung_in_Processing/17&amp;diff=9982</id>
		<title>Lernpfad:Einführung in Processing/17</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Lernpfad:Einf%C3%BChrung_in_Processing/17&amp;diff=9982"/>
		<updated>2025-01-26T23:03:10Z</updated>

		<summary type="html">&lt;p&gt;Ngb: /* Übungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{NNameAnzeigen}}{{NNavigation}}&lt;br /&gt;
&lt;br /&gt;
Arrays (im Deutschen auch Felder genannt) erlauben es, Gruppen von Daten gleichen Typs in einer Variablen zu speichern. Bei der Initialisierung wird der Datentyp und die Anzahl der Werte (Größe des Arrays) festgelegt. Der Interpreter reserviert dann den nötigen Speicherplatz. Ein Integer-Array der Größe 3 belegt 96 Bit (3 x 32 Bit) plus 16 Bit für Statusinformationen (etwa die Größe des Arrays).&lt;br /&gt;
&lt;br /&gt;
== Deklaration ==&lt;br /&gt;
Ein neues Array kann mit dem Schlüsselwort &amp;lt;code&amp;gt;new&amp;lt;/code&amp;gt; erzeugt werden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// Deklaration eines Integer-Arrays der Größe 8&lt;br /&gt;
int[] zahlen = new int[8];&lt;br /&gt;
&lt;br /&gt;
// String-Array der Größe 11&lt;br /&gt;
String[] worte = new String[11];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sind die Elemente des Arrays fest und bekannt, dann kann eine &#039;&#039;Kurzform&#039;&#039; zur Deklaration genutzt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// Deklaration eines Integer-Arrays der Größe 4 mit den Werten 5,6,7 und 8&lt;br /&gt;
int[] zahlen = new int[]{5, 6, 7, 8};&lt;br /&gt;
&lt;br /&gt;
// String-Array der Größe 5&lt;br /&gt;
String[] worte = new String[]{&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;, &amp;quot;d&amp;quot;, &amp;quot;e&amp;quot;};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Soll das Array nicht in einer Variablen gespeichert werden, sondern zum Beispiel nur als Parameter in einem Methodenaufruf genutzt werden, dann kann diese Form genutzt werden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
taschenrechner.addiere(new int[]{5, 6, 7, 8});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Größe eines Arrays kann jederzeit über das &amp;lt;code&amp;gt;length&amp;lt;/code&amp;gt; Attribut abgefragt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
int[] zahlen = new int[7];&lt;br /&gt;
&lt;br /&gt;
zahlen.length; // 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Zugriffe und Zuweisungen ==&lt;br /&gt;
Der Zugriff auf die Elemente eines Arrays erfolgt über einen Index. Dabei bekommt das erste Element den Index 0, das Zweite den Index 1, und so weiter. In einem Array der Größe &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; hat das letzte Element also den Index &amp;lt;code&amp;gt;n-1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Schublade|Man könnte auch sagen, dass jedes Element in einem Array durch seinen Abstand zum ersten Element beschrieben ist.|Farbe={{Farbe:Info}}}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable text-center&amp;quot; style=&amp;quot;margin:0 auto;&amp;quot;&lt;br /&gt;
|+ Adressierung in einem Array mit Namen &amp;quot;feld&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Element&lt;br /&gt;
| 1 || 2 || 3 || ... || i || ... || n-1 || n&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || ... || i-1 || ... || n-2 || n-1&lt;br /&gt;
|-&lt;br /&gt;
! Zugriff&lt;br /&gt;
| feld[0] || feld[1] || feld[2] || ... || feld[i-1] || ... || feld[feld.length-2] || feld[feld.length-1]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Zuweisungen und Zugriffe erfolgen auch mit eckigen Klammern, wie bei der Deklaration.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
int[] zahlen = new int[8];&lt;br /&gt;
&lt;br /&gt;
zahlen[0] = 133; // Zuweisung zum ersten Element mit dem Index 0&lt;br /&gt;
zahlen[1] = 501; // Zuweisung zum zweiten Element mit dem Index 1&lt;br /&gt;
&lt;br /&gt;
zahlen[0] + zahlen[1]; // Zugriff auf die Elemente mit Index 0 und 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zugriffe mit Indizes außerhalb des gültigen Bereichs (also &amp;lt;code&amp;gt;i &amp;lt; 0&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;i &amp;gt; length&amp;lt;/code&amp;gt;) produzieren einen [https://docs.oracle.com/javase/7/docs/api/java/lang/ArrayIndexOutOfBoundsException.html Fehler].&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Notiere in der ersten Zeile jeder Tabelle die Werte, die nach Ausführung des gezeigten Quelltextes im Array gespeichert sind. Das Ergebnis jedes Schrittes dient als Ausgangssituation für den nächsten.&amp;lt;br /&amp;gt; Falls der Quelltext irgendwo einen Fehler enthält, dann wird der gesamte Code nicht ausgeführt (auch korrekte Zeilen nicht). Das Array ändert sich also nicht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
int[] zahlen = new int[6];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;0()&#039;&#039;&#039; || &#039;&#039;&#039;0()&#039;&#039;&#039; || &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
zahlen[4] = 4;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;0()&#039;&#039;&#039; || &#039;&#039;&#039;0()&#039;&#039;&#039; || &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;4()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
zahlen[5] = 5;&lt;br /&gt;
zahlen[6] = 6;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;0()&#039;&#039;&#039; || &#039;&#039;&#039;0()&#039;&#039;&#039; || &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;4()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
zahlen[2] = zahlen[4] + 6;&lt;br /&gt;
zahlen[1] = zahlen[2] - 1;&lt;br /&gt;
zahlen[0] = zahlen[1] - 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;8()&#039;&#039;&#039; || &#039;&#039;&#039;9()&#039;&#039;&#039; || &#039;&#039;&#039;10()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;4()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if( zahlen[3] == 0 &amp;amp;&amp;amp; zahlen[0] == 0 ) {&lt;br /&gt;
    zahlen[5] = zahlen[2] / 2;&lt;br /&gt;
} else {&lt;br /&gt;
    zahlen[5] = zahlen[0] + zahlen[3];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;8()&#039;&#039;&#039; || &#039;&#039;&#039;9()&#039;&#039;&#039; || &#039;&#039;&#039;10()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;4()&#039;&#039;&#039; ||  &#039;&#039;&#039;8()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
zahlen[3] = zahlen.length;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;8()&#039;&#039;&#039; || &#039;&#039;&#039;9()&#039;&#039;&#039; || &#039;&#039;&#039;10()&#039;&#039;&#039; ||  &#039;&#039;&#039;6()&#039;&#039;&#039; ||  &#039;&#039;&#039;4()&#039;&#039;&#039; ||  &#039;&#039;&#039;8()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
{{Lösung:Start}}&lt;br /&gt;
1.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 0 || 0 || 0 || 0 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
2.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 0 || 0 || 0 || 0 || 4 || 0&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
3. Das Array hat die Größe 6 und gültige Indizes für die Elemente sind &amp;lt;code&amp;gt;0,1,2,3,4,5&amp;lt;/code&amp;gt;. Die Zuweisung &amp;lt;code&amp;gt;zahlen[6] = 6&amp;lt;/code&amp;gt; erzeugt einen Fehler, da &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt; kein gültiger Index ist.&lt;br /&gt;
&lt;br /&gt;
4.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 8 || 9 || 10 || 0 || 4 || 0&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
5.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 8 || 9 || 10 || 0 || 4 || 8&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
6.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 8 || 9 || 10 || 6 || 4 || 8&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
{{Lösung:End}}&lt;br /&gt;
&lt;br /&gt;
== Über ein Array iterieren ==&lt;br /&gt;
Da man oft die Größe eines Arrays im Vorfeld nicht kennt, muss man häufig mit einer Zählschleife &#039;&#039;über das Array iterieren&#039;&#039;, um Aktionen auf oder mit den Elementen auszuführen. [[wikipedia:Iteration#Informatik|&#039;&#039;Iterieren&#039;&#039;]] bedeutet hier, auf die Elemente des Arrays vom ersten bis zum letzten Schritt für Schritt zuzugreifen (es zu &amp;quot;durchlaufen&amp;quot;). Dazu kann man jedes Schleifenkonstrukt benutzen, üblich ist aber eine Zählschleife, da sie direkt einen Zähler für den Index bereitstellt.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// Zählschleife von 0 bis zahlen.length&lt;br /&gt;
// Die Zählvariable i durchläuft alle Indizes des Arrays&lt;br /&gt;
// Das Attribut &amp;quot;length&amp;quot; eines Arrays enthält seine Größe&lt;br /&gt;
for( int i = 0; i &amp;lt; zahlen.length; i += 1 ) {&lt;br /&gt;
	System.out.println(zahlen[i]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Notiere in der ersten Zeile jeder Tabelle die Werte, die nach Ausführung des gezeigten Quelltextes im Array gespeichert sind. Das Ergebnis jedes Schrittes dient als Ausgangssituation für den nächsten.&amp;lt;br&amp;gt;Falls der Quelltext irgendwo einen Fehler enthält, dann wird der gesamte Code nicht ausgeführt (auch korrekte Zeilen nicht). Das Array ändert sich also nicht.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 8 || 9 || 10 || 6 || 4 || 8&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = 0; i &amp;lt; zahlen.length; i++ ) {&lt;br /&gt;
    zahlen[i] = 10 + zahlen[i];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;18()&#039;&#039;&#039; || &#039;&#039;&#039;19()&#039;&#039;&#039; || &#039;&#039;&#039;20()&#039;&#039;&#039; ||  &#039;&#039;&#039;16()&#039;&#039;&#039; ||  &#039;&#039;&#039;14()&#039;&#039;&#039; ||  &#039;&#039;&#039;18()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = 0; i &amp;lt; zahlen.length; i++ ) {&lt;br /&gt;
    zahlen[i] = 10 + i;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;10()&#039;&#039;&#039; || &#039;&#039;&#039;11()&#039;&#039;&#039; || &#039;&#039;&#039;12()&#039;&#039;&#039; ||  &#039;&#039;&#039;13()&#039;&#039;&#039; ||  &#039;&#039;&#039;14()&#039;&#039;&#039; ||  &#039;&#039;&#039;15()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = 0; i &amp;lt; zahlen.length; i++ ) {&lt;br /&gt;
    zahlen[i] = zahlen[2] + i;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;12()&#039;&#039;&#039; || &#039;&#039;&#039;13()&#039;&#039;&#039; || &#039;&#039;&#039;14()&#039;&#039;&#039; ||  &#039;&#039;&#039;17()&#039;&#039;&#039; ||  &#039;&#039;&#039;18()&#039;&#039;&#039; ||  &#039;&#039;&#039;19()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = zahlen.length; i &amp;gt; 0; i-- ) {&lt;br /&gt;
    zahlen[i-1] = zahlen[i];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;12()&#039;&#039;&#039; || &#039;&#039;&#039;13()&#039;&#039;&#039; || &#039;&#039;&#039;14()&#039;&#039;&#039; ||  &#039;&#039;&#039;17()&#039;&#039;&#039; ||  &#039;&#039;&#039;18()&#039;&#039;&#039; ||  &#039;&#039;&#039;19()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = 1; i &amp;lt; zahlen.length; i += 2 ) {&lt;br /&gt;
    zahlen[i] = zahlen[i-1];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;12()&#039;&#039;&#039; || &#039;&#039;&#039;12()&#039;&#039;&#039; || &#039;&#039;&#039;14()&#039;&#039;&#039; ||  &#039;&#039;&#039;14()&#039;&#039;&#039; ||  &#039;&#039;&#039;18()&#039;&#039;&#039; ||  &#039;&#039;&#039;18()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = zahlen.length-1; i &amp;gt; 0; i -= 1 ) {&lt;br /&gt;
    zahlen[i] = zahlen[i]/2;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;12()&#039;&#039;&#039; || &#039;&#039;&#039;6()&#039;&#039;&#039; || &#039;&#039;&#039;7()&#039;&#039;&#039; ||  &#039;&#039;&#039;7()&#039;&#039;&#039; ||  &#039;&#039;&#039;9()&#039;&#039;&#039; ||  &#039;&#039;&#039;9()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
{{Lösung:Start}}&lt;br /&gt;
1.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 18 || 19 || 20 || 16 || 14 || 18&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
2.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 10 || 11 || 12 || 13 || 14 || 15&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
3.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 12 || 13 || 14 || 17 || 18 || 19&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
4.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 12 || 13 || 14 || 17 || 18 || 19&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
5.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 12 || 12 || 14 || 14 || 18 || 18&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
6.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 12 || 6 || 7 || 7 || 9 || 9&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
{{Lösung:End}}&lt;br /&gt;
&lt;br /&gt;
== Übungen == &lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
# Erstelle in {{Processing}} einen &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;-Array namens&amp;lt;code&amp;gt;bar&amp;lt;/code&amp;gt; mit den Zahlen &amp;lt;code&amp;gt;2, 4, 6&amp;lt;/code&amp;gt; (in dieser Reihenfolge).&lt;br /&gt;
#: Multipliziere die ersten zwei Zahlen und speichere das Ergebnis in der dritten Zelle des Arrays ab. Du solltest also &amp;lt;code&amp;gt;{2, 4, 8}&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;bar&amp;lt;/code&amp;gt; haben. Schreibe &amp;lt;code&amp;gt;bar&amp;lt;/code&amp;gt; mit &amp;lt;code&amp;gt;println()&amp;lt;/code&amp;gt; auf die Konsole, um dies zu prüfen.&lt;br /&gt;
# Kopiere die folgende Zeile nach {{Processing}}:&lt;br /&gt;
#: &amp;lt;code&amp;gt;float[] zahlen = {50,80,140,150,180,225,270,350};&amp;lt;/code&amp;gt;&lt;br /&gt;
#: Gib den Inhalt des Arrays in einer Zählschleife einzeln mit &amp;lt;code&amp;gt;println()&amp;lt;/code&amp;gt; auf der Konsole aus.&lt;br /&gt;
# Verändere das Programm aus 2 so, dass die Zahlen nicht ausgegeben werden, sondern als &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;-Koordinate für Kreise verwendet werden. Die &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;-Koordinate bleibt fest auf &amp;lt;code&amp;gt;50&amp;lt;/code&amp;gt; gesetzt. Stelle die Zeichenfläche auf &amp;lt;code&amp;gt;400x400&amp;lt;/code&amp;gt; Pixel ein. &lt;br /&gt;
# Erweitere das Programm aus 3 so, dass nur jedes zweite Element im Array als &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;-Koordinate verwendet wird und das nachfolgende Element als &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;-Koordinate. (Der erste Kreis wird also bei &amp;lt;code&amp;gt;(50, 80)&amp;lt;/code&amp;gt; gezeichnet.)&lt;br /&gt;
&lt;br /&gt;
{{P5js|https://editor.p5js.org/Ngb/full/rH70PEMDz|height=400}}&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
{{Lösung:Start|Aufgabe 1}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
int[] bar = new int[3];&lt;br /&gt;
bar[0] = 2;&lt;br /&gt;
bar[1] = 4;&lt;br /&gt;
bar[2] = 6;&lt;br /&gt;
bar[2] = bar[0] + bar[1];&lt;br /&gt;
println(bar);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative Lösung:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
int[] bar = new int[]{2, 4, 6};&lt;br /&gt;
bar[2] = bar[0] + bar[1];&lt;br /&gt;
println(bar);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Lösung:End}}{{Lösung:Start|Aufgabe 2}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
float[] zahlen = {50,80,140,150,180,225,270,350};&lt;br /&gt;
for( int i = 0; i &amp;lt; zahlen.length; i++ ) {&lt;br /&gt;
  println(zahlen[i]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Lösung:End}}{{Lösung:Start|Aufgabe 3}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
float[] zahlen = {50,80,140,150,180,225,270,350};&lt;br /&gt;
&lt;br /&gt;
size(400, 400);&lt;br /&gt;
&lt;br /&gt;
for( int i = 0; i &amp;lt; zahlen.length; i++ ) {&lt;br /&gt;
  ellipse(zahlen[i], 50, 20, 20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Lösung:End}}{{Lösung:Start|Aufgabe 4}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
float[] zahlen = {50,80,140,150,180,225,270,350};&lt;br /&gt;
&lt;br /&gt;
size(400, 400);&lt;br /&gt;
&lt;br /&gt;
for( int i = 0; i &amp;lt; zahlen.length; i += 2 ) {&lt;br /&gt;
  ellipse(zahlen[i], zahlen[i+1], 20, 20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Lösung:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Simuliere Ballons (bunte Ellipsen), die vom unteren Bildschirmrand nach oben steigen. Die Koordinaten der Regentropfen werden (als &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt;) in zwei Arrays gespeichert (&amp;lt;code&amp;gt;xcoords&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;ycoords&amp;lt;/code&amp;gt;). Zeige zunächst 10 Ballons an. Sobald die Ballons den oberen Rand erreichen, &amp;quot;platzen&amp;quot; sie (werden nicht mehr angezeigt) und tauchen unten wieder auf (die x-Koordinate wird zufällig und die y-Koordinate wird auf den unteren Bildschirmrand gesetzt).&lt;br /&gt;
&lt;br /&gt;
Du kannst das Ballon-Programm auch selbst kreativ erweitern (zufällige Farben; unterschiedliche Geschwindigkeiten; ...).&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel mit einigen Erweiterungen könnte so aussehen:&lt;br /&gt;
{{P5js|https://editor.p5js.org/Ngb/full/MFsgYHL8X|height=500}}&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
{{Tipp:Start}}&lt;br /&gt;
Du kannst die nötigen Arrays in dieser Art erstellen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
float[] xcoords = new float[10];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nutze in &amp;lt;code&amp;gt;void setup()&amp;lt;/code&amp;gt; eine &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;-Schleife, um eine Variable &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; von &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; bis &amp;lt;code&amp;gt;xcoords.length&amp;lt;/code&amp;gt; laufen zu lassen. Setze im Schleifenrumpf in den beiden Arrays die initialen Koordinaten (z.B. Zufallswerte).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = 0; i &amp;lt; xcoords.length; i++ ) {&lt;br /&gt;
    xcoords[i] = random(0, width);&lt;br /&gt;
    ycoords[i] = height;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Verfahre in &amp;lt;code&amp;gt;void draw()&amp;lt;/code&amp;gt; ähnlich und nutze eine Zählschleife, um die Ballons zu zeichnen und die y-Koordinaten so zu verändern, dass die Ballons langsam nach oben steigen. Es ist hilfreich für das Zeichnen zunächst einen neuen Befehl zu erstellen und diesen in der Schleife mit den passenden Koordinaten aufzurufen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
void ballon(int x, int y, int size) {&lt;br /&gt;
  // zeichne hier den Ballon&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Tipp:End}}{{Tipp:Start|Tipps zu Erweiterungen}}&lt;br /&gt;
Hübschere Zufallsfarben lassen sich einfacher in einem anderen Farbraum als RGB erstellen. Schaut euch den HLS Farbraum und den [https://processing.org/reference/colorMode_.html colorMode()]-Befehl an.&lt;br /&gt;
&lt;br /&gt;
Damit sich die Ballons leicht hin-und-her bewegen, könnt ihr die Sinus- oder Cosinus-Funktion benutzen. Als Eingabe nutzt ihr den [https://processing.org/reference/millis_.html millis()]-Befehl, der die Laufzeit des Programms in Miilisekunden angibt.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
sin(millis() / 350.0);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Tipp:End}}{{Lösung:Start|Eine mögliche Lösung}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
float[] xcoords = new float[10];&lt;br /&gt;
float[] ycoords = new float[10];&lt;br /&gt;
float[] speeds = new float[10];&lt;br /&gt;
color[] colors = new color[10];&lt;br /&gt;
float[] deltas = new float[10];&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  size(400, 500);&lt;br /&gt;
  &lt;br /&gt;
  for( int i = 0; i &amp;lt; xcoords.length; i++ ) {&lt;br /&gt;
    xcoords[i] = random(width);&lt;br /&gt;
    ycoords[i] = height + 10;&lt;br /&gt;
    speeds[i] = random(1, 4);&lt;br /&gt;
    colors[i] = color(int(random(256)), int(random(256)), int(random(256)));&lt;br /&gt;
    deltas[i] = random(1000);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void draw() {&lt;br /&gt;
  background(93, 160, 185);&lt;br /&gt;
  &lt;br /&gt;
  for( int i = 0; i &amp;lt; xcoords.length; i++ ) {&lt;br /&gt;
    float xd = sin(deltas[i] + millis()/350.0) * speeds[i];&lt;br /&gt;
    ycoords[i] -= speeds[i];&lt;br /&gt;
    fill(colors[i]);&lt;br /&gt;
    ellipse(xcoords[i] + xd, ycoords[i], 20, 40);&lt;br /&gt;
    &lt;br /&gt;
    if( ycoords[i]+40 &amp;lt; 0 ) {&lt;br /&gt;
      xcoords[i] = random(width);&lt;br /&gt;
      ycoords[i] = height;&lt;br /&gt;
      speeds[i] = random(1, 4);&lt;br /&gt;
      colors[i] = color(int(random(256)), int(random(256)), int(random(256)));&lt;br /&gt;
      deltas[i] = random(1000);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Lösung:End}}&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Lernpfad:Einf%C3%BChrung_in_Processing/17&amp;diff=9981</id>
		<title>Lernpfad:Einführung in Processing/17</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Lernpfad:Einf%C3%BChrung_in_Processing/17&amp;diff=9981"/>
		<updated>2025-01-23T10:16:26Z</updated>

		<summary type="html">&lt;p&gt;Ngb: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{NNameAnzeigen}}{{NNavigation}}&lt;br /&gt;
&lt;br /&gt;
Arrays (im Deutschen auch Felder genannt) erlauben es, Gruppen von Daten gleichen Typs in einer Variablen zu speichern. Bei der Initialisierung wird der Datentyp und die Anzahl der Werte (Größe des Arrays) festgelegt. Der Interpreter reserviert dann den nötigen Speicherplatz. Ein Integer-Array der Größe 3 belegt 96 Bit (3 x 32 Bit) plus 16 Bit für Statusinformationen (etwa die Größe des Arrays).&lt;br /&gt;
&lt;br /&gt;
== Deklaration ==&lt;br /&gt;
Ein neues Array kann mit dem Schlüsselwort &amp;lt;code&amp;gt;new&amp;lt;/code&amp;gt; erzeugt werden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// Deklaration eines Integer-Arrays der Größe 8&lt;br /&gt;
int[] zahlen = new int[8];&lt;br /&gt;
&lt;br /&gt;
// String-Array der Größe 11&lt;br /&gt;
String[] worte = new String[11];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sind die Elemente des Arrays fest und bekannt, dann kann eine &#039;&#039;Kurzform&#039;&#039; zur Deklaration genutzt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// Deklaration eines Integer-Arrays der Größe 4 mit den Werten 5,6,7 und 8&lt;br /&gt;
int[] zahlen = new int[]{5, 6, 7, 8};&lt;br /&gt;
&lt;br /&gt;
// String-Array der Größe 5&lt;br /&gt;
String[] worte = new String[]{&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;, &amp;quot;d&amp;quot;, &amp;quot;e&amp;quot;};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Soll das Array nicht in einer Variablen gespeichert werden, sondern zum Beispiel nur als Parameter in einem Methodenaufruf genutzt werden, dann kann diese Form genutzt werden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
taschenrechner.addiere(new int[]{5, 6, 7, 8});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Größe eines Arrays kann jederzeit über das &amp;lt;code&amp;gt;length&amp;lt;/code&amp;gt; Attribut abgefragt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
int[] zahlen = new int[7];&lt;br /&gt;
&lt;br /&gt;
zahlen.length; // 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Zugriffe und Zuweisungen ==&lt;br /&gt;
Der Zugriff auf die Elemente eines Arrays erfolgt über einen Index. Dabei bekommt das erste Element den Index 0, das Zweite den Index 1, und so weiter. In einem Array der Größe &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; hat das letzte Element also den Index &amp;lt;code&amp;gt;n-1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Schublade|Man könnte auch sagen, dass jedes Element in einem Array durch seinen Abstand zum ersten Element beschrieben ist.|Farbe={{Farbe:Info}}}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable text-center&amp;quot; style=&amp;quot;margin:0 auto;&amp;quot;&lt;br /&gt;
|+ Adressierung in einem Array mit Namen &amp;quot;feld&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Element&lt;br /&gt;
| 1 || 2 || 3 || ... || i || ... || n-1 || n&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || ... || i-1 || ... || n-2 || n-1&lt;br /&gt;
|-&lt;br /&gt;
! Zugriff&lt;br /&gt;
| feld[0] || feld[1] || feld[2] || ... || feld[i-1] || ... || feld[feld.length-2] || feld[feld.length-1]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Zuweisungen und Zugriffe erfolgen auch mit eckigen Klammern, wie bei der Deklaration.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
int[] zahlen = new int[8];&lt;br /&gt;
&lt;br /&gt;
zahlen[0] = 133; // Zuweisung zum ersten Element mit dem Index 0&lt;br /&gt;
zahlen[1] = 501; // Zuweisung zum zweiten Element mit dem Index 1&lt;br /&gt;
&lt;br /&gt;
zahlen[0] + zahlen[1]; // Zugriff auf die Elemente mit Index 0 und 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zugriffe mit Indizes außerhalb des gültigen Bereichs (also &amp;lt;code&amp;gt;i &amp;lt; 0&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;i &amp;gt; length&amp;lt;/code&amp;gt;) produzieren einen [https://docs.oracle.com/javase/7/docs/api/java/lang/ArrayIndexOutOfBoundsException.html Fehler].&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Notiere in der ersten Zeile jeder Tabelle die Werte, die nach Ausführung des gezeigten Quelltextes im Array gespeichert sind. Das Ergebnis jedes Schrittes dient als Ausgangssituation für den nächsten.&amp;lt;br /&amp;gt; Falls der Quelltext irgendwo einen Fehler enthält, dann wird der gesamte Code nicht ausgeführt (auch korrekte Zeilen nicht). Das Array ändert sich also nicht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
int[] zahlen = new int[6];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;0()&#039;&#039;&#039; || &#039;&#039;&#039;0()&#039;&#039;&#039; || &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
zahlen[4] = 4;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;0()&#039;&#039;&#039; || &#039;&#039;&#039;0()&#039;&#039;&#039; || &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;4()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
zahlen[5] = 5;&lt;br /&gt;
zahlen[6] = 6;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;0()&#039;&#039;&#039; || &#039;&#039;&#039;0()&#039;&#039;&#039; || &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;4()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
zahlen[2] = zahlen[4] + 6;&lt;br /&gt;
zahlen[1] = zahlen[2] - 1;&lt;br /&gt;
zahlen[0] = zahlen[1] - 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;8()&#039;&#039;&#039; || &#039;&#039;&#039;9()&#039;&#039;&#039; || &#039;&#039;&#039;10()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;4()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if( zahlen[3] == 0 &amp;amp;&amp;amp; zahlen[0] == 0 ) {&lt;br /&gt;
    zahlen[5] = zahlen[2] / 2;&lt;br /&gt;
} else {&lt;br /&gt;
    zahlen[5] = zahlen[0] + zahlen[3];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;8()&#039;&#039;&#039; || &#039;&#039;&#039;9()&#039;&#039;&#039; || &#039;&#039;&#039;10()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;4()&#039;&#039;&#039; ||  &#039;&#039;&#039;8()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
zahlen[3] = zahlen.length;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;8()&#039;&#039;&#039; || &#039;&#039;&#039;9()&#039;&#039;&#039; || &#039;&#039;&#039;10()&#039;&#039;&#039; ||  &#039;&#039;&#039;6()&#039;&#039;&#039; ||  &#039;&#039;&#039;4()&#039;&#039;&#039; ||  &#039;&#039;&#039;8()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
{{Lösung:Start}}&lt;br /&gt;
1.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 0 || 0 || 0 || 0 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
2.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 0 || 0 || 0 || 0 || 4 || 0&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
3. Das Array hat die Größe 6 und gültige Indizes für die Elemente sind &amp;lt;code&amp;gt;0,1,2,3,4,5&amp;lt;/code&amp;gt;. Die Zuweisung &amp;lt;code&amp;gt;zahlen[6] = 6&amp;lt;/code&amp;gt; erzeugt einen Fehler, da &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt; kein gültiger Index ist.&lt;br /&gt;
&lt;br /&gt;
4.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 8 || 9 || 10 || 0 || 4 || 0&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
5.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 8 || 9 || 10 || 0 || 4 || 8&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
6.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 8 || 9 || 10 || 6 || 4 || 8&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
{{Lösung:End}}&lt;br /&gt;
&lt;br /&gt;
== Über ein Array iterieren ==&lt;br /&gt;
Da man oft die Größe eines Arrays im Vorfeld nicht kennt, muss man häufig mit einer Zählschleife &#039;&#039;über das Array iterieren&#039;&#039;, um Aktionen auf oder mit den Elementen auszuführen. [[wikipedia:Iteration#Informatik|&#039;&#039;Iterieren&#039;&#039;]] bedeutet hier, auf die Elemente des Arrays vom ersten bis zum letzten Schritt für Schritt zuzugreifen (es zu &amp;quot;durchlaufen&amp;quot;). Dazu kann man jedes Schleifenkonstrukt benutzen, üblich ist aber eine Zählschleife, da sie direkt einen Zähler für den Index bereitstellt.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// Zählschleife von 0 bis zahlen.length&lt;br /&gt;
// Die Zählvariable i durchläuft alle Indizes des Arrays&lt;br /&gt;
// Das Attribut &amp;quot;length&amp;quot; eines Arrays enthält seine Größe&lt;br /&gt;
for( int i = 0; i &amp;lt; zahlen.length; i += 1 ) {&lt;br /&gt;
	System.out.println(zahlen[i]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Notiere in der ersten Zeile jeder Tabelle die Werte, die nach Ausführung des gezeigten Quelltextes im Array gespeichert sind. Das Ergebnis jedes Schrittes dient als Ausgangssituation für den nächsten.&amp;lt;br&amp;gt;Falls der Quelltext irgendwo einen Fehler enthält, dann wird der gesamte Code nicht ausgeführt (auch korrekte Zeilen nicht). Das Array ändert sich also nicht.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 8 || 9 || 10 || 6 || 4 || 8&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = 0; i &amp;lt; zahlen.length; i++ ) {&lt;br /&gt;
    zahlen[i] = 10 + zahlen[i];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;18()&#039;&#039;&#039; || &#039;&#039;&#039;19()&#039;&#039;&#039; || &#039;&#039;&#039;20()&#039;&#039;&#039; ||  &#039;&#039;&#039;16()&#039;&#039;&#039; ||  &#039;&#039;&#039;14()&#039;&#039;&#039; ||  &#039;&#039;&#039;18()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = 0; i &amp;lt; zahlen.length; i++ ) {&lt;br /&gt;
    zahlen[i] = 10 + i;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;10()&#039;&#039;&#039; || &#039;&#039;&#039;11()&#039;&#039;&#039; || &#039;&#039;&#039;12()&#039;&#039;&#039; ||  &#039;&#039;&#039;13()&#039;&#039;&#039; ||  &#039;&#039;&#039;14()&#039;&#039;&#039; ||  &#039;&#039;&#039;15()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = 0; i &amp;lt; zahlen.length; i++ ) {&lt;br /&gt;
    zahlen[i] = zahlen[2] + i;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;12()&#039;&#039;&#039; || &#039;&#039;&#039;13()&#039;&#039;&#039; || &#039;&#039;&#039;14()&#039;&#039;&#039; ||  &#039;&#039;&#039;17()&#039;&#039;&#039; ||  &#039;&#039;&#039;18()&#039;&#039;&#039; ||  &#039;&#039;&#039;19()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = zahlen.length; i &amp;gt; 0; i-- ) {&lt;br /&gt;
    zahlen[i-1] = zahlen[i];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;12()&#039;&#039;&#039; || &#039;&#039;&#039;13()&#039;&#039;&#039; || &#039;&#039;&#039;14()&#039;&#039;&#039; ||  &#039;&#039;&#039;17()&#039;&#039;&#039; ||  &#039;&#039;&#039;18()&#039;&#039;&#039; ||  &#039;&#039;&#039;19()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = 1; i &amp;lt; zahlen.length; i += 2 ) {&lt;br /&gt;
    zahlen[i] = zahlen[i-1];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;12()&#039;&#039;&#039; || &#039;&#039;&#039;12()&#039;&#039;&#039; || &#039;&#039;&#039;14()&#039;&#039;&#039; ||  &#039;&#039;&#039;14()&#039;&#039;&#039; ||  &#039;&#039;&#039;18()&#039;&#039;&#039; ||  &#039;&#039;&#039;18()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = zahlen.length-1; i &amp;gt; 0; i -= 1 ) {&lt;br /&gt;
    zahlen[i] = zahlen[i]/2;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;12()&#039;&#039;&#039; || &#039;&#039;&#039;6()&#039;&#039;&#039; || &#039;&#039;&#039;7()&#039;&#039;&#039; ||  &#039;&#039;&#039;7()&#039;&#039;&#039; ||  &#039;&#039;&#039;9()&#039;&#039;&#039; ||  &#039;&#039;&#039;9()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
{{Lösung:Start}}&lt;br /&gt;
1.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 18 || 19 || 20 || 16 || 14 || 18&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
2.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 10 || 11 || 12 || 13 || 14 || 15&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
3.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 12 || 13 || 14 || 17 || 18 || 19&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
4.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 12 || 13 || 14 || 17 || 18 || 19&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
5.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 12 || 12 || 14 || 14 || 18 || 18&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
6.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 12 || 6 || 7 || 7 || 9 || 9&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
{{Lösung:End}}&lt;br /&gt;
&lt;br /&gt;
== Übungen == &lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
# Erstelle in {{Processing}} einen &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;-Array namens&amp;lt;code&amp;gt;bar&amp;lt;/code&amp;gt; mit den Zahlen &amp;lt;code&amp;gt;2, 4, 6&amp;lt;/code&amp;gt; (in dieser Reihenfolge).&lt;br /&gt;
#: Multipliziere die ersten zwei Zahlen und speichere das Ergebnis in der dritten Zelle des Arrays ab. Du solltest also &amp;lt;code&amp;gt;{2, 4, 8}&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;bar&amp;lt;/code&amp;gt; haben. Schreibe &amp;lt;code&amp;gt;bar&amp;lt;/code&amp;gt; mit &amp;lt;code&amp;gt;println()&amp;lt;/code&amp;gt; auf die Konsole, um dies zu prüfen.&lt;br /&gt;
# Kopiere die folgende Zeile nach {{Processing}}:&lt;br /&gt;
#: &amp;lt;code&amp;gt;float[] zahlen = {50,80,140,150,180,225,270,350};&amp;lt;/code&amp;gt;&lt;br /&gt;
#: Gib den Inhalt des Arrays in einer Zählschleife einzeln mit &amp;lt;code&amp;gt;println()&amp;lt;/code&amp;gt; auf der Konsole aus.&lt;br /&gt;
# Verändere das Programm aus 2 so, dass die Zahlen nicht ausgegeben werden, sondern als &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;-Koordinate für Kreise verwendet werden. Die &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;-Koordinate bleibt fest auf &amp;lt;code&amp;gt;50&amp;lt;/code&amp;gt; gesetzt. Stelle die Zeichenfläche auf &amp;lt;code&amp;gt;400x400&amp;lt;/code&amp;gt; Pixel ein. &lt;br /&gt;
# Erweitere das Programm aus 3 so, dass nur jedes zweite Element im Array als &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;-Koordinate verwendet wird und das nachfolgende Element als &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;-Koordinate. (Der erste Kreis wird also bei &amp;lt;code&amp;gt;(50, 80)&amp;lt;/code&amp;gt; gezeichnet.)&lt;br /&gt;
&lt;br /&gt;
{{P5js|https://editor.p5js.org/Ngb/full/rH70PEMDz|height=400}}&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
{{Lösung:Start|Aufgabe 1}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
int[] bar = new int[3];&lt;br /&gt;
bar[0] = 2;&lt;br /&gt;
bar[1] = 4;&lt;br /&gt;
bar[2] = 6;&lt;br /&gt;
bar[2] = bar[0] + bar[1];&lt;br /&gt;
println(bar);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative Lösung:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
int[] bar = new int[]{2, 4, 6};&lt;br /&gt;
bar[2] = bar[0] + bar[1];&lt;br /&gt;
println(bar);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Lösung:End}}{{Lösung:Start|Aufgabe 2}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
float[] zahlen = {50,80,140,150,180,225,270,350};&lt;br /&gt;
for( int i = 0; i &amp;lt; zahlen.length; i++ ) {&lt;br /&gt;
  println(zahlen[i]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Lösung:End}}{{Lösung:Start|Aufgabe 3}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
float[] zahlen = {50,80,140,150,180,225,270,350};&lt;br /&gt;
&lt;br /&gt;
size(400, 400);&lt;br /&gt;
&lt;br /&gt;
for( int i = 0; i &amp;lt; zahlen.length; i++ ) {&lt;br /&gt;
  ellipse(zahlen[i], 50, 20, 20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Lösung:End}}{{Lösung:Start|Aufgabe 4}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
float[] zahlen = {50,80,140,150,180,225,270,350};&lt;br /&gt;
&lt;br /&gt;
size(400, 400);&lt;br /&gt;
&lt;br /&gt;
for( int i = 0; i &amp;lt; zahlen.length; i += 2 ) {&lt;br /&gt;
  ellipse(zahlen[i], zahlen[i+1], 20, 20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Lösung:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Simuliere Ballons (bunte Ellipsen), die vom unteren Bildschirmrand nach oben steigen. Die Koordinaten der Regentropfen werden (als &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt;) in zwei Arrays gespeichert (&amp;lt;code&amp;gt;xcoords&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;ycoords&amp;lt;/code&amp;gt;). Zeige zunächst 10 Ballons an. Sobald die Ballons den oberen Rand erreichen, &amp;quot;platzen&amp;quot; sie (werden nicht mehr angezeigt) und tauchen unten wieder auf (die x-Koordinate wird zufällig und die y-Koordinate wird auf den unteren Bildschirmrand gesetzt).&lt;br /&gt;
&lt;br /&gt;
Du kannst das Ballon-Programm auch selbst kreativ erweitern (zufällige Farben; unterschiedliche Geschwindigkeiten; ...).&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel mit einigen Erweiterungen könnte so aussehen:&lt;br /&gt;
{{P5js|https://editor.p5js.org/Ngb/full/MFsgYHL8X|height=500}}&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
{{Tipp:Start}}&lt;br /&gt;
Du kannst die nötigen Arrays in dieser Art erstellen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
float[] xcoords = new float[10];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nutze in &amp;lt;code&amp;gt;void setup()&amp;lt;/code&amp;gt; eine &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;-Schleife, um eine Variable &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; von &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; bis &amp;lt;code&amp;gt;xcoords.length&amp;lt;/code&amp;gt; laufen zu lassen. Setze im Schleifenrumpf in den beiden Arrays die initialen Koordinaten (z.B. Zufallswerte).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = 0; i &amp;lt; xcoords.length; i++ ) {&lt;br /&gt;
    xcoords[i] = random(0, width);&lt;br /&gt;
    ycoords[i] = height;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Verfahre in &amp;lt;code&amp;gt;void draw()&amp;lt;/code&amp;gt; ähnlich und nutze eine Zählschleife, um die Ballons zu zeichnen und die y-Koordinaten so zu verändern, dass die Ballons langsam nach oben steigen. Es ist hilfreich für das Zeichnen zunächst einen neuen Befehl zu erstellen und diesen in der Schleife mit den passenden Koordinaten aufzurufen.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
void ballon(int x, int y, int size) {&lt;br /&gt;
  // zeichne hier den Ballon&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Tipp:End}}{{Lösung:Start|Eine mögliche Lösung}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
float[] xcoords = new float[10];&lt;br /&gt;
float[] ycoords = new float[10];&lt;br /&gt;
float[] speeds = new float[10];&lt;br /&gt;
color[] colors = new color[10];&lt;br /&gt;
float[] deltas = new float[10];&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  size(400, 500);&lt;br /&gt;
  &lt;br /&gt;
  for( int i = 0; i &amp;lt; xcoords.length; i++ ) {&lt;br /&gt;
    xcoords[i] = random(width);&lt;br /&gt;
    ycoords[i] = height + 10;&lt;br /&gt;
    speeds[i] = random(1, 4);&lt;br /&gt;
    colors[i] = color(int(random(256)), int(random(256)), int(random(256)));&lt;br /&gt;
    deltas[i] = random(1000);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void draw() {&lt;br /&gt;
  background(93, 160, 185);&lt;br /&gt;
  &lt;br /&gt;
  for( int i = 0; i &amp;lt; xcoords.length; i++ ) {&lt;br /&gt;
    float xd = sin(deltas[i] + millis()/350.0) * speeds[i];&lt;br /&gt;
    ycoords[i] -= speeds[i];&lt;br /&gt;
    fill(colors[i]);&lt;br /&gt;
    ellipse(xcoords[i] + xd, ycoords[i], 20, 40);&lt;br /&gt;
    &lt;br /&gt;
    if( ycoords[i]+40 &amp;lt; 0 ) {&lt;br /&gt;
      xcoords[i] = random(width);&lt;br /&gt;
      ycoords[i] = height;&lt;br /&gt;
      speeds[i] = random(1, 4);&lt;br /&gt;
      colors[i] = color(int(random(256)), int(random(256)), int(random(256)));&lt;br /&gt;
      deltas[i] = random(1000);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Lösung:End}}&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Lernpfad:Einf%C3%BChrung_in_Processing/17&amp;diff=9980</id>
		<title>Lernpfad:Einführung in Processing/17</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Lernpfad:Einf%C3%BChrung_in_Processing/17&amp;diff=9980"/>
		<updated>2025-01-23T10:08:37Z</updated>

		<summary type="html">&lt;p&gt;Ngb: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{NNameAnzeigen}}{{NNavigation}}&lt;br /&gt;
&lt;br /&gt;
Arrays (im Deutschen auch Felder genannt) erlauben es, Gruppen von Daten gleichen Typs in einer Variablen zu speichern. Bei der Initialisierung wird der Datentyp und die Anzahl der Werte (Größe des Arrays) festgelegt. Der Interpreter reserviert dann den nötigen Speicherplatz. Ein Integer-Array der Größe 3 belegt 96 Bit (3 x 32 Bit) plus 16 Bit für Statusinformationen (etwa die Größe des Arrays).&lt;br /&gt;
&lt;br /&gt;
== Deklaration ==&lt;br /&gt;
Ein neues Array kann mit dem Schlüsselwort &amp;lt;code&amp;gt;new&amp;lt;/code&amp;gt; erzeugt werden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// Deklaration eines Integer-Arrays der Größe 8&lt;br /&gt;
int[] zahlen = new int[8];&lt;br /&gt;
&lt;br /&gt;
// String-Array der Größe 11&lt;br /&gt;
String[] worte = new String[11];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sind die Elemente des Arrays fest und bekannt, dann kann eine &#039;&#039;Kurzform&#039;&#039; zur Deklaration genutzt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// Deklaration eines Integer-Arrays der Größe 4 mit den Werten 5,6,7 und 8&lt;br /&gt;
int[] zahlen = new int[]{5, 6, 7, 8};&lt;br /&gt;
&lt;br /&gt;
// String-Array der Größe 5&lt;br /&gt;
String[] worte = new String[]{&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;, &amp;quot;d&amp;quot;, &amp;quot;e&amp;quot;};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Soll das Array nicht in einer Variablen gespeichert werden, sondern zum Beispiel nur als Parameter in einem Methodenaufruf genutzt werden, dann kann diese Form genutzt werden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
taschenrechner.addiere(new int[]{5, 6, 7, 8});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Größe eines Arrays kann jederzeit über das &amp;lt;code&amp;gt;length&amp;lt;/code&amp;gt; Attribut abgefragt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
int[] zahlen = new int[7];&lt;br /&gt;
&lt;br /&gt;
zahlen.length; // 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Zugriffe und Zuweisungen ==&lt;br /&gt;
Der Zugriff auf die Elemente eines Arrays erfolgt über einen Index. Dabei bekommt das erste Element den Index 0, das Zweite den Index 1, und so weiter. In einem Array der Größe &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; hat das letzte Element also den Index &amp;lt;code&amp;gt;n-1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Schublade|Man könnte auch sagen, dass jedes Element in einem Array durch seinen Abstand zum ersten Element beschrieben ist.|Farbe={{Farbe:Info}}}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable text-center&amp;quot; style=&amp;quot;margin:0 auto;&amp;quot;&lt;br /&gt;
|+ Adressierung in einem Array mit Namen &amp;quot;feld&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Element&lt;br /&gt;
| 1 || 2 || 3 || ... || i || ... || n-1 || n&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || ... || i-1 || ... || n-2 || n-1&lt;br /&gt;
|-&lt;br /&gt;
! Zugriff&lt;br /&gt;
| feld[0] || feld[1] || feld[2] || ... || feld[i-1] || ... || feld[feld.length-2] || feld[feld.length-1]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Zuweisungen und Zugriffe erfolgen auch mit eckigen Klammern, wie bei der Deklaration.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
int[] zahlen = new int[8];&lt;br /&gt;
&lt;br /&gt;
zahlen[0] = 133; // Zuweisung zum ersten Element mit dem Index 0&lt;br /&gt;
zahlen[1] = 501; // Zuweisung zum zweiten Element mit dem Index 1&lt;br /&gt;
&lt;br /&gt;
zahlen[0] + zahlen[1]; // Zugriff auf die Elemente mit Index 0 und 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zugriffe mit Indizes außerhalb des gültigen Bereichs (also &amp;lt;code&amp;gt;i &amp;lt; 0&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;i &amp;gt; length&amp;lt;/code&amp;gt;) produzieren einen [https://docs.oracle.com/javase/7/docs/api/java/lang/ArrayIndexOutOfBoundsException.html Fehler].&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Notiere in der ersten Zeile jeder Tabelle die Werte, die nach Ausführung des gezeigten Quelltextes im Array gespeichert sind. Das Ergebnis jedes Schrittes dient als Ausgangssituation für den nächsten.&amp;lt;br /&amp;gt; Falls der Quelltext irgendwo einen Fehler enthält, dann wird der gesamte Code nicht ausgeführt (auch korrekte Zeilen nicht). Das Array ändert sich also nicht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
int[] zahlen = new int[6];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;0()&#039;&#039;&#039; || &#039;&#039;&#039;0()&#039;&#039;&#039; || &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
zahlen[4] = 4;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;0()&#039;&#039;&#039; || &#039;&#039;&#039;0()&#039;&#039;&#039; || &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;4()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
zahlen[5] = 5;&lt;br /&gt;
zahlen[6] = 6;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;0()&#039;&#039;&#039; || &#039;&#039;&#039;0()&#039;&#039;&#039; || &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;4()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
zahlen[2] = zahlen[4] + 6;&lt;br /&gt;
zahlen[1] = zahlen[2] - 1;&lt;br /&gt;
zahlen[0] = zahlen[1] - 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;8()&#039;&#039;&#039; || &#039;&#039;&#039;9()&#039;&#039;&#039; || &#039;&#039;&#039;10()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;4()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if( zahlen[3] == 0 &amp;amp;&amp;amp; zahlen[0] == 0 ) {&lt;br /&gt;
    zahlen[5] = zahlen[2] / 2;&lt;br /&gt;
} else {&lt;br /&gt;
    zahlen[5] = zahlen[0] + zahlen[3];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;8()&#039;&#039;&#039; || &#039;&#039;&#039;9()&#039;&#039;&#039; || &#039;&#039;&#039;10()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;4()&#039;&#039;&#039; ||  &#039;&#039;&#039;8()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
zahlen[3] = zahlen.length;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;8()&#039;&#039;&#039; || &#039;&#039;&#039;9()&#039;&#039;&#039; || &#039;&#039;&#039;10()&#039;&#039;&#039; ||  &#039;&#039;&#039;6()&#039;&#039;&#039; ||  &#039;&#039;&#039;4()&#039;&#039;&#039; ||  &#039;&#039;&#039;8()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
{{Lösung:Start}}&lt;br /&gt;
1.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 0 || 0 || 0 || 0 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
2.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 0 || 0 || 0 || 0 || 4 || 0&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
3. Das Array hat die Größe 6 und gültige Indizes für die Elemente sind &amp;lt;code&amp;gt;0,1,2,3,4,5&amp;lt;/code&amp;gt;. Die Zuweisung &amp;lt;code&amp;gt;zahlen[6] = 6&amp;lt;/code&amp;gt; erzeugt einen Fehler, da &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt; kein gültiger Index ist.&lt;br /&gt;
&lt;br /&gt;
4.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 8 || 9 || 10 || 0 || 4 || 0&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
5.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 8 || 9 || 10 || 0 || 4 || 8&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
6.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 8 || 9 || 10 || 6 || 4 || 8&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
{{Lösung:End}}&lt;br /&gt;
&lt;br /&gt;
== Über ein Array iterieren ==&lt;br /&gt;
Da man oft die Größe eines Arrays im Vorfeld nicht kennt, muss man häufig mit einer Zählschleife &#039;&#039;über das Array iterieren&#039;&#039;, um Aktionen auf oder mit den Elementen auszuführen. [[wikipedia:Iteration#Informatik|&#039;&#039;Iterieren&#039;&#039;]] bedeutet hier, auf die Elemente des Arrays vom ersten bis zum letzten Schritt für Schritt zuzugreifen (es zu &amp;quot;durchlaufen&amp;quot;). Dazu kann man jedes Schleifenkonstrukt benutzen, üblich ist aber eine Zählschleife, da sie direkt einen Zähler für den Index bereitstellt.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// Zählschleife von 0 bis zahlen.length&lt;br /&gt;
// Die Zählvariable i durchläuft alle Indizes des Arrays&lt;br /&gt;
// Das Attribut &amp;quot;length&amp;quot; eines Arrays enthält seine Größe&lt;br /&gt;
for( int i = 0; i &amp;lt; zahlen.length; i += 1 ) {&lt;br /&gt;
	System.out.println(zahlen[i]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Notiere in der ersten Zeile jeder Tabelle die Werte, die nach Ausführung des gezeigten Quelltextes im Array gespeichert sind. Das Ergebnis jedes Schrittes dient als Ausgangssituation für den nächsten.&amp;lt;br&amp;gt;Falls der Quelltext irgendwo einen Fehler enthält, dann wird der gesamte Code nicht ausgeführt (auch korrekte Zeilen nicht). Das Array ändert sich also nicht.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 8 || 9 || 10 || 6 || 4 || 8&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = 0; i &amp;lt; zahlen.length; i++ ) {&lt;br /&gt;
    zahlen[i] = 10 + zahlen[i];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;18()&#039;&#039;&#039; || &#039;&#039;&#039;19()&#039;&#039;&#039; || &#039;&#039;&#039;20()&#039;&#039;&#039; ||  &#039;&#039;&#039;16()&#039;&#039;&#039; ||  &#039;&#039;&#039;14()&#039;&#039;&#039; ||  &#039;&#039;&#039;18()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = 0; i &amp;lt; zahlen.length; i++ ) {&lt;br /&gt;
    zahlen[i] = 10 + i;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;10()&#039;&#039;&#039; || &#039;&#039;&#039;11()&#039;&#039;&#039; || &#039;&#039;&#039;12()&#039;&#039;&#039; ||  &#039;&#039;&#039;13()&#039;&#039;&#039; ||  &#039;&#039;&#039;14()&#039;&#039;&#039; ||  &#039;&#039;&#039;15()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = 0; i &amp;lt; zahlen.length; i++ ) {&lt;br /&gt;
    zahlen[i] = zahlen[2] + i;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;12()&#039;&#039;&#039; || &#039;&#039;&#039;13()&#039;&#039;&#039; || &#039;&#039;&#039;14()&#039;&#039;&#039; ||  &#039;&#039;&#039;17()&#039;&#039;&#039; ||  &#039;&#039;&#039;18()&#039;&#039;&#039; ||  &#039;&#039;&#039;19()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = zahlen.length; i &amp;gt; 0; i-- ) {&lt;br /&gt;
    zahlen[i-1] = zahlen[i];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;12()&#039;&#039;&#039; || &#039;&#039;&#039;13()&#039;&#039;&#039; || &#039;&#039;&#039;14()&#039;&#039;&#039; ||  &#039;&#039;&#039;17()&#039;&#039;&#039; ||  &#039;&#039;&#039;18()&#039;&#039;&#039; ||  &#039;&#039;&#039;19()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = 1; i &amp;lt; zahlen.length; i += 2 ) {&lt;br /&gt;
    zahlen[i] = zahlen[i-1];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;12()&#039;&#039;&#039; || &#039;&#039;&#039;12()&#039;&#039;&#039; || &#039;&#039;&#039;14()&#039;&#039;&#039; ||  &#039;&#039;&#039;14()&#039;&#039;&#039; ||  &#039;&#039;&#039;18()&#039;&#039;&#039; ||  &#039;&#039;&#039;18()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = zahlen.length-1; i &amp;gt; 0; i -= 1 ) {&lt;br /&gt;
    zahlen[i] = zahlen[i]/2;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;12()&#039;&#039;&#039; || &#039;&#039;&#039;6()&#039;&#039;&#039; || &#039;&#039;&#039;7()&#039;&#039;&#039; ||  &#039;&#039;&#039;7()&#039;&#039;&#039; ||  &#039;&#039;&#039;9()&#039;&#039;&#039; ||  &#039;&#039;&#039;9()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
{{Lösung:Start}}&lt;br /&gt;
1.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 18 || 19 || 20 || 16 || 14 || 18&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
2.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 10 || 11 || 12 || 13 || 14 || 15&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
3.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 12 || 13 || 14 || 17 || 18 || 19&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
4.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 12 || 13 || 14 || 17 || 18 || 19&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
5.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 12 || 12 || 14 || 14 || 18 || 18&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
6.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 12 || 6 || 7 || 7 || 9 || 9&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
{{Lösung:End}}&lt;br /&gt;
&lt;br /&gt;
== Übungen == &lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
# Erstelle in {{Processing}} einen &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;-Array namens&amp;lt;code&amp;gt;bar&amp;lt;/code&amp;gt; mit den Zahlen &amp;lt;code&amp;gt;2, 4, 6&amp;lt;/code&amp;gt; (in dieser Reihenfolge).&lt;br /&gt;
#: Multipliziere die ersten zwei Zahlen und speichere das Ergebnis in der dritten Zelle des Arrays ab. Du solltest also &amp;lt;code&amp;gt;{2, 4, 8}&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;bar&amp;lt;/code&amp;gt; haben. Schreibe &amp;lt;code&amp;gt;bar&amp;lt;/code&amp;gt; mit &amp;lt;code&amp;gt;println()&amp;lt;/code&amp;gt; auf die Konsole, um dies zu prüfen.&lt;br /&gt;
# Kopiere die folgende Zeile nach {{Processing}}:&lt;br /&gt;
#: &amp;lt;code&amp;gt;float[] zahlen = {50,80,140,150,180,225,270,350};&amp;lt;/code&amp;gt;&lt;br /&gt;
#: Gib den Inhalt des Arrays in einer Zählschleife einzeln mit &amp;lt;code&amp;gt;println()&amp;lt;/code&amp;gt; auf der Konsole aus.&lt;br /&gt;
# Verändere das Programm aus 2 so, dass die Zahlen nicht ausgegeben werden, sondern als &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;-Koordinate für Kreise verwendet werden. Die &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;-Koordinate bleibt fest auf &amp;lt;code&amp;gt;50&amp;lt;/code&amp;gt; gesetzt. Stelle die Zeichenfläche auf &amp;lt;code&amp;gt;400x400&amp;lt;/code&amp;gt; Pixel ein. &lt;br /&gt;
# Erweitere das Programm aus 3 so, dass nur jedes zweite Element im Array als &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;-Koordinate verwendet wird und das nachfolgende Element als &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;-Koordinate. (Der erste Kreis wird also bei &amp;lt;code&amp;gt;(50, 80)&amp;lt;/code&amp;gt; gezeichnet.)&lt;br /&gt;
&lt;br /&gt;
{{P5js|https://editor.p5js.org/Ngb/full/rH70PEMDz|height=400}}&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
{{Lösung:Start|Aufgabe 1}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
int[] bar = new int[3];&lt;br /&gt;
bar[0] = 2;&lt;br /&gt;
bar[1] = 4;&lt;br /&gt;
bar[2] = 6;&lt;br /&gt;
bar[2] = bar[0] + bar[1];&lt;br /&gt;
println(bar);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative Lösung:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
int[] bar = new int[]{2, 4, 6};&lt;br /&gt;
bar[2] = bar[0] + bar[1];&lt;br /&gt;
println(bar);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Lösung:End}}{{Lösung:Start|Aufgabe 2}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
float[] zahlen = {50,80,140,150,180,225,270,350};&lt;br /&gt;
for( int i = 0; i &amp;lt; zahlen.length; i++ ) {&lt;br /&gt;
  println(zahlen[i]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Lösung:End}}{{Lösung:Start|Aufgabe 3}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
float[] zahlen = {50,80,140,150,180,225,270,350};&lt;br /&gt;
&lt;br /&gt;
size(400, 400);&lt;br /&gt;
&lt;br /&gt;
for( int i = 0; i &amp;lt; zahlen.length; i++ ) {&lt;br /&gt;
  ellipse(zahlen[i], 50, 20, 20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Lösung:End}}{{Lösung:Start|Aufgabe 4}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
float[] zahlen = {50,80,140,150,180,225,270,350};&lt;br /&gt;
&lt;br /&gt;
size(400, 400);&lt;br /&gt;
&lt;br /&gt;
for( int i = 0; i &amp;lt; zahlen.length; i += 2 ) {&lt;br /&gt;
  ellipse(zahlen[i], zahlen[i+1], 20, 20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Lösung:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Simuliere Ballons (bunte Ellipsen), die vom unteren Bildschirmrand nach oben steigen. Die Koordinaten der Regentropen werden (als &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt;) in zwei Arrays gespeichert (&amp;lt;code&amp;gt;xcoords&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;ycoords&amp;lt;/code&amp;gt;). Zeige zunächst 10 Ballons an. Sobald die Ballons den oberen Rand erreichen, &amp;quot;platzen&amp;quot; sie und tauchen unten wieder auf.&lt;br /&gt;
&lt;br /&gt;
Du kannst das Ballon-Programm auch selber kreativ erweitern (zufällige Farben; unterschiedliche Geschwindigkeiten; ...).&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel mit einigen Erweiterungen könnte so aussehen:&lt;br /&gt;
{{P5js|https://editor.p5js.org/Ngb/full/MFsgYHL8X|height=500}}&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
{{Tipp:Start}}&lt;br /&gt;
Du kannst die nötigen Arrays in dieser Art erstellen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
float[] xcoords = new float[10];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nutze in &amp;lt;code&amp;gt;void setup()&amp;lt;/code&amp;gt; eine &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;-Schleife, um eine Variable &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; von &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; bis &amp;lt;code&amp;gt;xcoords.length&amp;lt;/code&amp;gt; laufen zu lassen. Setze im Schleifenrumpf in den beiden Arrays die initialen Koordinaten (z.B. Zufallswerte).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = 0; i &amp;lt; xcoords.length; i++ ) {&lt;br /&gt;
    xcoords[i] = random(0, width);&lt;br /&gt;
    ycoords[i] = height;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Verfahre in &amp;lt;code&amp;gt;void draw()&amp;lt;/code&amp;gt; ähnlich und nutze eine Zählschleife, um die Ballons zu zeichnen.&lt;br /&gt;
{{Tipp:End}}{{Lösung:Start|Eine mögliche Lösung}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
float[] xcoords = new float[10];&lt;br /&gt;
float[] ycoords = new float[10];&lt;br /&gt;
float[] speeds = new float[10];&lt;br /&gt;
color[] colors = new color[10];&lt;br /&gt;
float[] deltas = new float[10];&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  size(400, 500);&lt;br /&gt;
  &lt;br /&gt;
  for( int i = 0; i &amp;lt; xcoords.length; i++ ) {&lt;br /&gt;
    xcoords[i] = random(width);&lt;br /&gt;
    ycoords[i] = height + 10;&lt;br /&gt;
    speeds[i] = random(1, 4);&lt;br /&gt;
    colors[i] = color(int(random(256)), int(random(256)), int(random(256)));&lt;br /&gt;
    deltas[i] = random(1000);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void draw() {&lt;br /&gt;
  background(93, 160, 185);&lt;br /&gt;
  &lt;br /&gt;
  for( int i = 0; i &amp;lt; xcoords.length; i++ ) {&lt;br /&gt;
    float xd = sin(deltas[i] + millis()/350.0) * speeds[i];&lt;br /&gt;
    ycoords[i] -= speeds[i];&lt;br /&gt;
    fill(colors[i]);&lt;br /&gt;
    ellipse(xcoords[i] + xd, ycoords[i], 20, 40);&lt;br /&gt;
    &lt;br /&gt;
    if( ycoords[i]+40 &amp;lt; 0 ) {&lt;br /&gt;
      xcoords[i] = random(width);&lt;br /&gt;
      ycoords[i] = height;&lt;br /&gt;
      speeds[i] = random(1, 4);&lt;br /&gt;
      colors[i] = color(int(random(256)), int(random(256)), int(random(256)));&lt;br /&gt;
      deltas[i] = random(1000);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Lösung:End}}&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Lernpfad:Simulation_von_Rechnernetzen/5&amp;diff=9979</id>
		<title>Lernpfad:Simulation von Rechnernetzen/5</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Lernpfad:Simulation_von_Rechnernetzen/5&amp;diff=9979"/>
		<updated>2025-01-22T09:36:53Z</updated>

		<summary type="html">&lt;p&gt;Ngb: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{NNavigation}}&lt;br /&gt;
&lt;br /&gt;
In Netzwerk wird durch den &#039;&#039;Netzwerkteil&#039;&#039; in einer &#039;&#039;IP-Adresse&#039;&#039; festgelegt. Um über die Netzwerkgrenzen hinaus zu kommunizieren ist ein Vermittlungsrechner notwendig, der weiß, welchen Weg eine Nachricht von einem Netzwerk in ein anderes nehmen muss.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start|Icon=Filius Entwurfsmodus.png}}&lt;br /&gt;
Erstelle ein weiteres Netzwerk in der Art des bestehenden. Es soll wieder drei Rechner und einen Switch enthalten. Das Netzwerk soll ein &#039;&#039;&#039;logisch anderes&#039;&#039;&#039; zum Ersten sein. &lt;br /&gt;
&lt;br /&gt;
[[Datei:Filius Switch.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
Da die gewählte &#039;&#039;Subnetzmaske&#039;&#039; &amp;lt;code&amp;gt;255.255.255.0&amp;lt;/code&amp;gt; ist, führt eine Änderung des dritten Oktetts in den IP-Adressen dazu, dass die drei neuen Rechner einen anderen Netzteil haben, als die Alten.&lt;br /&gt;
&lt;br /&gt;
Wähle passende IPs für die drei neuen Rechner. Teste das neue Netzwerk ggf. im Aktionsmodus.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start|Icon=Filius Entwurfsmodus.png}}&lt;br /&gt;
Verbinde nun die beiden Netzwerke mit einem Vermittlungsrechner. Er braucht mindestens 2 Schnittstellen (Netzwerkkarten). Die beiden Adapter müssen die erste &#039;&#039;IP-Adresse&#039;&#039; im &#039;&#039;IP-Bereich&#039;&#039; der Netzwerke erhalten. Für das alte Netzwerk ist dies &amp;lt;code&amp;gt;192.168.0.1&amp;lt;/code&amp;gt;.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start|Icon=Filius Aktionsmodus.png}}&lt;br /&gt;
Teste den Aufbau mit dem &amp;lt;code&amp;gt;ping&amp;lt;/code&amp;gt; Befehl von einem Rechner im alten Netzwerk (z.B. &amp;lt;code&amp;gt;192.168.0.10&amp;lt;/code&amp;gt;), zu einem im Neuen. Funktioniert die Verbindung?&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
Die Verbindung kann noch nicht zustande kommen, da die Rechner bisher nicht wissen, wo sie Nachrichten hinschicken sollen, die nicht in ihrem Netzwerk bleiben. Dazu muss der Vermittlungsrechner noch als sogenanntes &#039;&#039;Gateway&#039;&#039; eingestellt werden.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start|Icon=Filius Entwurfsmodus.png}}&lt;br /&gt;
Öffne die Einstellungen der sechs Rechner und gibt jeweils die erste Adresse im IP-Adressbereich der beiden Netzwerke im Feld &amp;quot;Gateway&amp;quot; ein.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Filius Gateway Einstellungen.jpg|center]]&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start|Icon=Filius Aktionsmodus.png}}&lt;br /&gt;
Teste wieder mit dem &amp;lt;code&amp;gt;ping&amp;lt;/code&amp;gt; Befehl. Nun sollten die vier Verbindungen zustande kommen.&lt;br /&gt;
{{Aufgabe:End}}&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Projekt:2024/InstaHub&amp;diff=9978</id>
		<title>Projekt:2024/InstaHub</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Projekt:2024/InstaHub&amp;diff=9978"/>
		<updated>2025-01-21T10:07:43Z</updated>

		<summary type="html">&lt;p&gt;Ngb: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Projektseite&lt;br /&gt;
|Projekt=InstaHub&lt;br /&gt;
|Kurs=Informatik LK&lt;br /&gt;
|Schuljahr=2024/25&lt;br /&gt;
}}&lt;br /&gt;
{{Kasten|[[#Tabellen verknüpfen - Teil I|&#039;&#039;&#039;Zur aktuellen Aufgabe springen&#039;&#039;&#039;]]|class=text-center}}&lt;br /&gt;
&lt;br /&gt;
== Projekt InstaHub ==&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Erstelle dir einen Zugang zu InstaHub. Das Video zeigt dir, wie du vorgehen musst: https://youtu.be/6DnmVjtF3UU&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Grundlagen von Datenabfragen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Benutze in InstaHub die Suchfunktion (Datenbanksymbol -&amp;gt; Suche), um die folgenden Abfragen zu stellen. Setze dabei den Haken bei &amp;quot;Zeige SQL&amp;quot; und vergleiche die SQL-Abfrage mit der Suchmaske und der Ergebnistabelle. Notiere dir wichtige Befehle.&lt;br /&gt;
&lt;br /&gt;
# Alle Nutzer.&lt;br /&gt;
# Alle männlichen / alle weiblichen Nutzer.&lt;br /&gt;
# Alle Nutzer, die sich nach dem 23.09.2017 registriert haben.&lt;br /&gt;
# Alle Nutzer aus München.&lt;br /&gt;
# Alle Nutzer sortiert nach Geburtstag.&lt;br /&gt;
# Nutzernamen und Passwort aller Nutzer.&lt;br /&gt;
# Nutzernamen und Passwort aller Nutzer, die kleiner als 1,60 Meter sind.&lt;br /&gt;
# Alle Männer, die größer als 1,80 Meter sind, sortiert nach Datum der Registrierung.&lt;br /&gt;
# Alle Frauen, deren Nutzername die Ziffern &amp;lt;code&amp;gt;45&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Benutze in InstaHub die SQL Abfragefunktion (Datenbanksymbol -&amp;gt; SQL), um SQL-Abfragen für die folgenden Informationen zu erstellen. Nutze dazu die [[Befehlsreferenz SQL]] im Wiki als Hilfe.&lt;br /&gt;
&lt;br /&gt;
# Alle Photos.&lt;br /&gt;
# Alle Photos des Nutzers mit der ID &amp;lt;code&amp;gt;42&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Alle Photos, sortiert nach Erstellungsdatum.&lt;br /&gt;
# Die ID des Nutzers und die URL aller Photos.&lt;br /&gt;
# Alle Photos, deren Beschreibung die Zeichenkette &amp;lt;code&amp;gt;#sonne&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
&lt;br /&gt;
Denk dir weitere Abfragen aus, mit der du die Syntax des &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt;-Befehls ausprobieren kannst.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Abfragen einschränken und sortieren ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; Abfragen lassen sich mit den Schlüsselwörtern &amp;lt;code&amp;gt;LIMIT&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;OFFSET&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;DISTINCT&amp;lt;/code&amp;gt; weiter präzisieren. &lt;br /&gt;
&lt;br /&gt;
# Führe die Abfragen aus und analysiere die Funktion und Syntax der &amp;lt;code&amp;gt;LIMIT&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;OFFSET&amp;lt;/code&amp;gt; Schlüsselwörter.&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT * FROM users LIMIT 5&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT * FROM users LIMIT 10&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT * FROM users LIMIT 5 OFFSET 5&amp;lt;/code&amp;gt;&lt;br /&gt;
# Führe die Abfragen aus und analysiere die Funktion und Syntax des &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; Schlüsselwortes.&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY id&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY username&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY centimeters &amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY centimeters ASC&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY centimeters DESC&amp;lt;/code&amp;gt;&lt;br /&gt;
# Führe die Abfragen aus und analysiere die Funktion und Syntax des &amp;lt;code&amp;gt;DISTINCT&amp;lt;/code&amp;gt; Schlüsselwortes.&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT city FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT DISTINCT city FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# Kombiniere nun die neuen Schlüsselwörter miteinander und entwickele Abfragen zu folgenden Datensätzen:&lt;br /&gt;
## Die fünf größten männlichen Nutzer.&lt;br /&gt;
## Die acht kleinsten weiblichen Nutzer, beginnend ab der Drittkleinsten.&lt;br /&gt;
## 15 unterschiedliche aufsteigend sortierte Namen.&lt;br /&gt;
## Das zuletzt gepostete Photo.&lt;br /&gt;
## Das vorletzte Photo.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Bedingungen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Mittels der &amp;lt;code&amp;gt;WHERE&amp;lt;/code&amp;gt;-Klausel lassen sich Datensätze gezielt auf bestimmte Bedingungen einschränken. Jedes Datenfeld hat einen festgelegten Datentyp (im Wesentlichen &#039;&#039;Zahl&#039;&#039;, &#039;&#039;Text&#039;&#039; und &#039;&#039;Datum&#039;&#039;). Je nach Datentyp lassen sich unterschiedliche Bedingungen nutzen. Bedingungen sind entweder &amp;lt;code&amp;gt;TRUE&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;FALSE&amp;lt;/code&amp;gt;. Bedingungen können mit &amp;lt;code&amp;gt;AND&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;OR&amp;lt;/code&amp;gt; verknüpft, oder mit &amp;lt;code&amp;gt;NOT&amp;lt;/code&amp;gt; negiert werden. &lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;BETWEEN&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;IS NULL&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Entwirf dann Abfragen für folgende Datensätze:&lt;br /&gt;
&lt;br /&gt;
# Alle Kommentare, die zwischen 2018-09-21 07:57:19 und 2018-09-21 09:57:19 erstellt wurden. &lt;br /&gt;
# Zehn Photos, deren Beschreibung &amp;lt;code&amp;gt;#sonne&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;#strand&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;#meer&amp;lt;/code&amp;gt; enthalten.&lt;br /&gt;
# Alle Photos, deren URL &amp;lt;code&amp;gt;animals&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
# Alle Photos, deren URL &#039;&#039;nicht&#039;&#039; &amp;lt;code&amp;gt;animals&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
# Alle Nutzer, die aus Frankfurt oder Berlin kommen und zwischen 150 und 168 Zentimeter groß sind. &lt;br /&gt;
# Alle Nutzer, die keine Größe eingetragen haben.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Eine mächtige Bedingung ist das &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; Schlüsselwort. Mit ihm kann ein Wert mit einer ganzen &#039;&#039;Liste&#039;&#039; von Werten verglichen werden. Der Operator prüft also, ob ein Wert in einer Liste vorkommt, oder nicht.&lt;br /&gt;
&lt;br /&gt;
Betrachte beispielsweise folgende Abfragen und vergleiche sie miteinander. Was fragen sie ab und wie ist der &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; Befehl aufgebaut?&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;SELECT * FROM users WHERE city = &amp;quot;Frankfurt&amp;quot; OR city = &amp;quot;Berlin&amp;quot; OR city = &amp;quot;Leipzig&amp;quot; OR city = &amp;quot;München&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;SELECT * FROM users WHERE city IN (&amp;quot;Frankfurt&amp;quot;,&amp;quot;Berlin&amp;quot;,&amp;quot;Leipzig&amp;quot;,&amp;quot;München&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;SELECT FROM users WHERE city NOT IN (&amp;quot;Frankfurt&amp;quot;,&amp;quot;Berlin&amp;quot;,&amp;quot;Leipzig&amp;quot;,&amp;quot;München&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
Schlüsselwort | Beschreibung&lt;br /&gt;
------------- | ------------&lt;br /&gt;
`SELECT`      | Leitet eine Abfrage zur Auswahl von Daten ein. ...&lt;br /&gt;
...           | ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Erstellen von Tabellen in Markdown ist recht sperrig. Daher ist es sinnvoll ein Werkzeug wie den [https://www.tablesgenerator.com/markdown_tables Markdown Tablegenerator] zu verwenden.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Funktionen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
SQL bietet auch Möglichkeiten, die abgefragten Datensätze durch die Anwendung von Rechenoperationen und Funktionen zu &#039;&#039;transformieren&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Um zum Beispiel die Größe der Nutzer nicht in Zentimetern, sondern in Millimetern abzufragen, könnte die Abfrage so lauten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT username,centimeters*10 FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT COUNT(*) FROM comments&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT MIN(centimeters), MAX(centimeters),AVG(centimeters),ROUND(AVG(centimeters),2),ROUND(AVG(centimeters)),SUM(centimeters) FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT centimeters+100,4+3,centimeters*2,id%2 FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT UPPER(username),CONCAT(city,&amp;quot;, &amp;quot;,country) FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT CONCAT(name,&amp;quot; aus &amp;quot;, city, &amp;quot; (&amp;quot;,UPPER(LEFT(country,3)),&amp;quot;)&amp;quot;) FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT DAY(created_at),MONTH(created_at),YEAR(created_at) FROM users ORDER BY created_at DESC LIMIT 1&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT DAY(created_at),MONTH(created_at),YEAR(created_at) FROM users LIMIT 1 ORDER BY created_at DESC&amp;lt;/code&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Mit der Funktion &amp;lt;code&amp;gt;RAND()&amp;lt;/code&amp;gt; können Zufallszahlen generiert werden. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT RAND()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; befehl benutzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT username FROM users ORDER BY RAND()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Führe die Abfrage mehrmals aus und beobachte die Ergebnisse.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Tabellen verknüpfen - Teil I ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Eine der wichtigsten Eigenschaften von relationalen Datenbanken ist die Verknüpfung der in den verschiedenen Tabellen gespeicherten Daten.&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis einer Abfrage ist eine Liste von Datensätzen. Da &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; mit einer Liste vergleicht, kann das Ergebnis einer &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; Abfrage als Argument für &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; benutzt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * &lt;br /&gt;
FROM photos &lt;br /&gt;
WHERE user_id IN (&lt;br /&gt;
  SELECT id&lt;br /&gt;
  FROM users&lt;br /&gt;
  WHERE city = &amp;quot;Berlin&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und beschreibe mit eigenen Worten, welche Datensätze abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
Teste dann folgende Abfrage und erkläre die Fehlermeldung:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * &lt;br /&gt;
FROM photos &lt;br /&gt;
WHERE user_id IN (&lt;br /&gt;
  SELECT id,username&lt;br /&gt;
  FROM users&lt;br /&gt;
  WHERE city = &amp;quot;Berlin&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erstelle folgende Abfragen:&lt;br /&gt;
&lt;br /&gt;
# Alle Kommentare zu Fotos, die vom Nutzer mit der ID &amp;lt;code&amp;gt;109&amp;lt;/code&amp;gt; erstellt wurden.&lt;br /&gt;
# Alle Likes von Nutzern, die in München oder Berlin wohnen.&lt;br /&gt;
# Alle Likes zu Photos, die von Nutzern gepostet wurden, die in Mühldorf oder Biederitz wohnen.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
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 &#039;&#039;Vereinigung&#039;&#039; von zwei Ergebnissen wird mit dem Schlüsselwort &amp;lt;code&amp;gt;UNION&amp;lt;/code&amp;gt; erreicht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT id,username,city FROM users WHERE centimeters BETWEEN 180 AND 200&lt;br /&gt;
UNION&lt;br /&gt;
SELECT id,username,city FROM users WHERE YEAR(birthday) = 2005&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und beschreibe mit eigenen Worten, welche Datensätze abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
Probiere dann die folgenden beiden Abfragen aus und vergleiche ihre Ergebnisse. Was ändert das Schlüsselwort &amp;lt;code&amp;gt;ALL&amp;lt;/code&amp;gt;?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
UNION&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
UNION ALL&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erstelle dann folgende Abfragen mit Hilfe von &amp;lt;code&amp;gt;UNION&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
# Alle created_at und updated_at Felder (auch doppelte) aus den Tabellen photos, comments und likes, sortiert nach created_at.&lt;br /&gt;
# Alle Städtenamen, die mit &amp;quot;W&amp;quot; oder &amp;quot;R&amp;quot; beginnen.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Verschachtelte Abfragen ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Hinter dem &amp;lt;code&amp;gt;FROM&amp;lt;/code&amp;gt; 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 &amp;lt;code&amp;gt;FROM&amp;lt;/code&amp;gt; also eine Tabelle. Diese kann auch dynamisch mit einer weiteren Abfrage erstellt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * FROM (&lt;br /&gt;
  SELECT id,username,name&lt;br /&gt;
  FROM users&lt;br /&gt;
  WHERE created_at &amp;gt; &amp;quot;2017-09-22&amp;quot;&lt;br /&gt;
) &lt;br /&gt;
WHERE LENGTH(username) = 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Datenauswertung ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Bearbeite den [https://lernpfad.ch/pfad/0osdqmncydgc Lernpfad SQL: Daten auswerten].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Datenmanipulation ===&lt;br /&gt;
Abfragesprachen wie SQL arbeiten nach dem [[wikipedia:CRUD|CRUD]]-Prinzip: &#039;&#039;&#039;C&#039;&#039;&#039;reate, &#039;&#039;&#039;R&#039;&#039;&#039;etrieve, &#039;&#039;&#039;U&#039;&#039;&#039;pdate, &#039;&#039;&#039;D&#039;&#039;&#039;elete&lt;br /&gt;
&lt;br /&gt;
Bisher haben wir uns nur mit dem &#039;&#039;&#039;R&#039;&#039;&#039; befasst und Daten aus der Datenbank abgefragt. Die drei anderen Teile des Akronyms sind in SQL zum Glück weniger komplex.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Bearbeite den [https://lernpfad.ch/pfad/43folj7iwnkc Lernpfad SQL:  INSERT, DELETE und UPDATE].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Tabellen verknüpfen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Bearbeite den [https://lernpfad.ch/pfad/emmr5jvq0bgu Lernpfad SQL:  Tabellen verknüpfen].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== SQL-Island ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Begib dich auf die [[SQL-Island]].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Datenbanken modellieren ===&lt;br /&gt;
&lt;br /&gt;
[https://erdplus.com/standalone ERDPlus]&lt;br /&gt;
&lt;br /&gt;
=== Mehrere Abfagen hintereinander ausführen ===&lt;br /&gt;
&lt;br /&gt;
{{Info:Start}}&lt;br /&gt;
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.&lt;br /&gt;
{{Info:End}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte:2021/22]]&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Projekt:2024/InstaHub&amp;diff=9977</id>
		<title>Projekt:2024/InstaHub</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Projekt:2024/InstaHub&amp;diff=9977"/>
		<updated>2025-01-21T08:35:45Z</updated>

		<summary type="html">&lt;p&gt;Ngb: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Projektseite&lt;br /&gt;
|Projekt=InstaHub&lt;br /&gt;
|Kurs=Informatik LK&lt;br /&gt;
|Schuljahr=2024/25&lt;br /&gt;
}}&lt;br /&gt;
{{Kasten|[[#Tabellen verknüpfen - Teil I|&#039;&#039;&#039;Zur aktuellen Aufgabe springen&#039;&#039;&#039;]]|class=text-center}}&lt;br /&gt;
&lt;br /&gt;
== Projekt InstaHub ==&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Erstelle dir einen Zugang zu InstaHub. Das Video zeigt dir, wie du vorgehen musst: https://youtu.be/6DnmVjtF3UU&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Grundlagen von Datenabfragen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Benutze in InstaHub die Suchfunktion (Datenbanksymbol -&amp;gt; Suche), um die folgenden Abfragen zu stellen. Setze dabei den Haken bei &amp;quot;Zeige SQL&amp;quot; und vergleiche die SQL-Abfrage mit der Suchmaske und der Ergebnistabelle. Notiere dir wichtige Befehle.&lt;br /&gt;
&lt;br /&gt;
# Alle Nutzer.&lt;br /&gt;
# Alle männlichen / alle weiblichen Nutzer.&lt;br /&gt;
# Alle Nutzer, die sich nach dem 23.09.2017 registriert haben.&lt;br /&gt;
# Alle Nutzer aus München.&lt;br /&gt;
# Alle Nutzer sortiert nach Geburtstag.&lt;br /&gt;
# Nutzernamen und Passwort aller Nutzer.&lt;br /&gt;
# Nutzernamen und Passwort aller Nutzer, die kleiner als 1,60 Meter sind.&lt;br /&gt;
# Alle Männer, die größer als 1,80 Meter sind, sortiert nach Datum der Registrierung.&lt;br /&gt;
# Alle Frauen, deren Nutzername die Ziffern &amp;lt;code&amp;gt;45&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Benutze in InstaHub die SQL Abfragefunktion (Datenbanksymbol -&amp;gt; SQL), um SQL-Abfragen für die folgenden Informationen zu erstellen. Nutze dazu die [[Befehlsreferenz SQL]] im Wiki als Hilfe.&lt;br /&gt;
&lt;br /&gt;
# Alle Photos.&lt;br /&gt;
# Alle Photos des Nutzers mit der ID &amp;lt;code&amp;gt;42&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Alle Photos, sortiert nach Erstellungsdatum.&lt;br /&gt;
# Die ID des Nutzers und die URL aller Photos.&lt;br /&gt;
# Alle Photos, deren Beschreibung die Zeichenkette &amp;lt;code&amp;gt;#sonne&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
&lt;br /&gt;
Denk dir weitere Abfragen aus, mit der du die Syntax des &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt;-Befehls ausprobieren kannst.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Abfragen einschränken und sortieren ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; Abfragen lassen sich mit den Schlüsselwörtern &amp;lt;code&amp;gt;LIMIT&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;OFFSET&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;DISTINCT&amp;lt;/code&amp;gt; weiter präzisieren. &lt;br /&gt;
&lt;br /&gt;
# Führe die Abfragen aus und analysiere die Funktion und Syntax der &amp;lt;code&amp;gt;LIMIT&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;OFFSET&amp;lt;/code&amp;gt; Schlüsselwörter.&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT * FROM users LIMIT 5&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT * FROM users LIMIT 10&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT * FROM users LIMIT 5 OFFSET 5&amp;lt;/code&amp;gt;&lt;br /&gt;
# Führe die Abfragen aus und analysiere die Funktion und Syntax des &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; Schlüsselwortes.&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY id&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY username&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY centimeters &amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY centimeters ASC&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY centimeters DESC&amp;lt;/code&amp;gt;&lt;br /&gt;
# Führe die Abfragen aus und analysiere die Funktion und Syntax des &amp;lt;code&amp;gt;DISTINCT&amp;lt;/code&amp;gt; Schlüsselwortes.&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT city FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT DISTINCT city FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# Kombiniere nun die neuen Schlüsselwörter miteinander und entwickele Abfragen zu folgenden Datensätzen:&lt;br /&gt;
## Die fünf größten männlichen Nutzer.&lt;br /&gt;
## Die acht kleinsten weiblichen Nutzer, beginnend ab der Drittkleinsten.&lt;br /&gt;
## 15 unterschiedliche aufsteigend sortierte Namen.&lt;br /&gt;
## Das zuletzt gepostete Photo.&lt;br /&gt;
## Das vorletzte Photo.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Bedingungen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Mittels der &amp;lt;code&amp;gt;WHERE&amp;lt;/code&amp;gt;-Klausel lassen sich Datensätze gezielt auf bestimmte Bedingungen einschränken. Jedes Datenfeld hat einen festgelegten Datentyp (im Wesentlichen &#039;&#039;Zahl&#039;&#039;, &#039;&#039;Text&#039;&#039; und &#039;&#039;Datum&#039;&#039;). Je nach Datentyp lassen sich unterschiedliche Bedingungen nutzen. Bedingungen sind entweder &amp;lt;code&amp;gt;TRUE&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;FALSE&amp;lt;/code&amp;gt;. Bedingungen können mit &amp;lt;code&amp;gt;AND&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;OR&amp;lt;/code&amp;gt; verknüpft, oder mit &amp;lt;code&amp;gt;NOT&amp;lt;/code&amp;gt; negiert werden. &lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;BETWEEN&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;IS NULL&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Entwirf dann Abfragen für folgende Datensätze:&lt;br /&gt;
&lt;br /&gt;
# Alle Kommentare, die zwischen 2018-09-21 07:57:19 und 2018-09-21 09:57:19 erstellt wurden. &lt;br /&gt;
# Zehn Photos, deren Beschreibung &amp;lt;code&amp;gt;#sonne&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;#strand&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;#meer&amp;lt;/code&amp;gt; enthalten.&lt;br /&gt;
# Alle Photos, deren URL &amp;lt;code&amp;gt;animals&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
# Alle Photos, deren URL &#039;&#039;nicht&#039;&#039; &amp;lt;code&amp;gt;animals&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
# Alle Nutzer, die aus Frankfurt oder Berlin kommen und zwischen 150 und 168 Zentimeter groß sind. &lt;br /&gt;
# Alle Nutzer, die keine Größe eingetragen haben.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Eine mächtige Bedingung ist das &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; Schlüsselwort. Mit ihm kann ein Wert mit einer ganzen &#039;&#039;Liste&#039;&#039; von Werten verglichen werden. Der Operator prüft also, ob ein Wert in einer Liste vorkommt, oder nicht.&lt;br /&gt;
&lt;br /&gt;
Betrachte beispielsweise folgende Abfragen und vergleiche sie miteinander. Was fragen sie ab und wie ist der &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; Befehl aufgebaut?&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;SELECT * FROM users WHERE city = &amp;quot;Frankfurt&amp;quot; OR city = &amp;quot;Berlin&amp;quot; OR city = &amp;quot;Leipzig&amp;quot; OR city = &amp;quot;München&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;SELECT * FROM users WHERE city IN (&amp;quot;Frankfurt&amp;quot;,&amp;quot;Berlin&amp;quot;,&amp;quot;Leipzig&amp;quot;,&amp;quot;München&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;SELECT FROM users WHERE city NOT IN (&amp;quot;Frankfurt&amp;quot;,&amp;quot;Berlin&amp;quot;,&amp;quot;Leipzig&amp;quot;,&amp;quot;München&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
Schlüsselwort | Beschreibung&lt;br /&gt;
------------- | ------------&lt;br /&gt;
`SELECT`      | Leitet eine Abfrage zur Auswahl von Daten ein. ...&lt;br /&gt;
...           | ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Erstellen von Tabellen in Markdown ist recht sperrig. Daher ist es sinnvoll ein Werkzeug wie den [https://www.tablesgenerator.com/markdown_tables Markdown Tablegenerator] zu verwenden.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Funktionen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
SQL bietet auch Möglichkeiten, die abgefragten Datensätze durch die Anwendung von Rechenoperationen und Funktionen zu &#039;&#039;transformieren&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Um zum Beispiel die Größe der Nutzer nicht in Zentimetern, sondern in Millimetern abzufragen, könnte die Abfrage so lauten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT username,centimeters*10 FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT COUNT(*) FROM comments&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT MIN(centimeters), MAX(centimeters),AVG(centimeters),ROUND(AVG(centimeters),2),ROUND(AVG(centimeters)),SUM(centimeters) FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT centimeters+100,4+3,centimeters*2,id%2 FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT UPPER(username),CONCAT(city,&amp;quot;, &amp;quot;,country) FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT CONCAT(name,&amp;quot; aus &amp;quot;, city, &amp;quot; (&amp;quot;,UPPER(LEFT(country,3)),&amp;quot;)&amp;quot;) FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT DAY(created_at),MONTH(created_at),YEAR(created_at) FROM users ORDER BY created_at DESC LIMIT 1&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT DAY(created_at),MONTH(created_at),YEAR(created_at) FROM users LIMIT 1 ORDER BY created_at DESC&amp;lt;/code&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Mit der Funktion &amp;lt;code&amp;gt;RAND()&amp;lt;/code&amp;gt; können Zufallszahlen generiert werden. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT RAND()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; befehl benutzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT username FROM users ORDER BY RAND()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Führe die Abfrage mehrmals aus und beobachte die Ergebnisse.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Tabellen verknüpfen - Teil I ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Eine der wichtigsten Eigenschaften von relationalen Datenbanken ist die Verknüpfung der in den verschiedenen Tabellen gespeicherten Daten.&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis einer Abfrage ist eine Liste von Datensätzen. Da &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; mit einer Liste vergleicht, kann das Ergebnis einer &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; Abfrage als Argument für &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; benutzt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * &lt;br /&gt;
FROM photos &lt;br /&gt;
WHERE user_id IN (&lt;br /&gt;
  SELECT id&lt;br /&gt;
  FROM users&lt;br /&gt;
  WHERE city = &amp;quot;Berlin&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und beschriebe mit eigenen Worten, welche Datensätze abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
Teste dann folgende Abfrage und erkläre die Fehlermeldung:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * &lt;br /&gt;
FROM photos &lt;br /&gt;
WHERE user_id IN (&lt;br /&gt;
  SELECT id,username&lt;br /&gt;
  FROM users&lt;br /&gt;
  WHERE city = &amp;quot;Berlin&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erstelle folgende Abfragen:&lt;br /&gt;
&lt;br /&gt;
# Alle Kommentare zu Fotos, die vom Nutzer mit der ID &amp;lt;code&amp;gt;109&amp;lt;/code&amp;gt; erstellt wurden.&lt;br /&gt;
# Alle Likes von Nutzern, die in München oder Berlin wohnen.&lt;br /&gt;
# Alle Likes zu Photos, die von Nutzern gepostet wurden, die in Mühldorf oder Biederitz wohnen.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
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 &#039;&#039;Vereinigung&#039;&#039; von zwei Ergebnissen wird mit dem Schlüsselwort &amp;lt;code&amp;gt;UNION&amp;lt;/code&amp;gt; erreicht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT id,username,city FROM users WHERE centimeters BETWEEN 180 AND 200&lt;br /&gt;
UNION&lt;br /&gt;
SELECT id,username,city FROM users WHERE YEAR(birthday) = 2005&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und beschriebe mit eigenen Worten, welche Datensätze abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
Probiere dann die folgenden beiden Abfragen aus und vergleiche ihre Ergebnisse. Was ändert das Schlüsselwort &amp;lt;code&amp;gt;ALL&amp;lt;/code&amp;gt;?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
UNION&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
UNION ALL&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erstelle dann folgende Abfragen mit Hilfe von &amp;lt;code&amp;gt;UNION&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
# Alle created_at und updated_at Felder (auch doppelte) aus den Tabellen photos, comments und likes, sortiert nach created_at.&lt;br /&gt;
# Alle Städtenamen, die mit &amp;quot;W&amp;quot; oder &amp;quot;R&amp;quot; beginnen.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Verschachtelte Abfragen ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Hinter dem &amp;lt;code&amp;gt;FROM&amp;lt;/code&amp;gt; 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 &amp;lt;code&amp;gt;FROM&amp;lt;/code&amp;gt; also eine Tabelle. Diese kann auch dynamisch mit einer weiteren Abfrage erstellt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * FROM (&lt;br /&gt;
  SELECT id,username,name&lt;br /&gt;
  FROM users&lt;br /&gt;
  WHERE created_at &amp;gt; &amp;quot;2017-09-22&amp;quot;&lt;br /&gt;
) &lt;br /&gt;
WHERE LENGTH(username) = 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Datenauswertung ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Bearbeite den [https://lernpfad.ch/pfad/0osdqmncydgc Lernpfad SQL: Daten auswerten].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Datenmanipulation ===&lt;br /&gt;
Abfragesprachen wie SQL arbeiten nach dem [[wikipedia:CRUD|CRUD]]-Prinzip: &#039;&#039;&#039;C&#039;&#039;&#039;reate, &#039;&#039;&#039;R&#039;&#039;&#039;etrieve, &#039;&#039;&#039;U&#039;&#039;&#039;pdate, &#039;&#039;&#039;D&#039;&#039;&#039;elete&lt;br /&gt;
&lt;br /&gt;
Bisher haben wir uns nur mit dem &#039;&#039;&#039;R&#039;&#039;&#039; befasst und Daten aus der Datenbank abgefragt. Die drei anderen Teile des Akronyms sind in SQL zum Glück weniger komplex.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Bearbeite den [https://lernpfad.ch/pfad/43folj7iwnkc Lernpfad SQL:  INSERT, DELETE und UPDATE].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Tabellen verknüpfen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Bearbeite den [https://lernpfad.ch/pfad/emmr5jvq0bgu Lernpfad SQL:  Tabellen verknüpfen].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== SQL-Island ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Begib dich auf die [[SQL-Island]].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Datenbanken modellieren ===&lt;br /&gt;
&lt;br /&gt;
[https://erdplus.com/standalone ERDPlus]&lt;br /&gt;
&lt;br /&gt;
=== Mehrere Abfagen hintereinander ausführen ===&lt;br /&gt;
&lt;br /&gt;
{{Info:Start}}&lt;br /&gt;
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.&lt;br /&gt;
{{Info:End}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte:2021/22]]&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Lernpfad:Einf%C3%BChrung_in_Processing/17&amp;diff=9976</id>
		<title>Lernpfad:Einführung in Processing/17</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Lernpfad:Einf%C3%BChrung_in_Processing/17&amp;diff=9976"/>
		<updated>2025-01-20T09:04:11Z</updated>

		<summary type="html">&lt;p&gt;Ngb: /* Übungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{NNameAnzeigen}}{{NNavigation}}&lt;br /&gt;
&lt;br /&gt;
Arrays (im Deutschen auch Felder genannt) erlauben es, Gruppen von Daten gleichen Typs in einer Variablen zu speichern. Bei der Initialisierung wird der Datentyp und die Anzahl der Werte (Größe des Arrays) festgelegt. Der Interpreter reserviert dann den nötigen Speicherplatz. Ein Integer-Array der Größe 3 belegt 96 Bit (3 x 32 Bit) plus 16 Bit für Statusinformationen (etwa die Größe des Arrays).&lt;br /&gt;
&lt;br /&gt;
== Deklaration ==&lt;br /&gt;
Ein neues Array kann mit dem Schlüsselwort &amp;lt;code&amp;gt;new&amp;lt;/code&amp;gt; erzeugt werden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// Deklaration eines Integer-Arrays der Größe 8&lt;br /&gt;
int[] zahlen = new int[8];&lt;br /&gt;
&lt;br /&gt;
// String-Array der Größe 11&lt;br /&gt;
String[] worte = new String[11];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sind die Elemente des Arrays fest und bekannt, dann kann eine &#039;&#039;Kurzform&#039;&#039; zur Deklaration genutzt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// Deklaration eines Integer-Arrays der Größe 4 mit den Werten 5,6,7 und 8&lt;br /&gt;
int[] zahlen = new int[]{5, 6, 7, 8};&lt;br /&gt;
&lt;br /&gt;
// String-Array der Größe 5&lt;br /&gt;
String[] worte = new String[]{&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;, &amp;quot;d&amp;quot;, &amp;quot;e&amp;quot;};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Soll das Array nicht in einer Variablen gespeichert werden, sondern zum Beispiel nur als Parameter in einem Methodenaufruf genutzt werden, dann kann diese Form genutzt werden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
taschenrechner.addiere(new int[]{5, 6, 7, 8});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Größe eines Arrays kann jederzeit über das &amp;lt;code&amp;gt;length&amp;lt;/code&amp;gt; Attribut abgefragt werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
int[] zahlen = new int[7];&lt;br /&gt;
&lt;br /&gt;
zahlen.length; // 7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Zugriffe und Zuweisungen ==&lt;br /&gt;
Der Zugriff auf die Elemente eines Arrays erfolgt über einen Index. Dabei bekommt das erste Element den Index 0, das Zweite den Index 1, und so weiter. In einem Array der Größe &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; hat das letzte Element also den Index &amp;lt;code&amp;gt;n-1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Schublade|Man könnte auch sagen, dass jedes Element in einem Array durch seinen Abstand zum ersten Element beschrieben ist.|Farbe={{Farbe:Info}}}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable text-center&amp;quot; style=&amp;quot;margin:0 auto;&amp;quot;&lt;br /&gt;
|+ Adressierung in einem Array mit Namen &amp;quot;feld&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Element&lt;br /&gt;
| 1 || 2 || 3 || ... || i || ... || n-1 || n&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || ... || i-1 || ... || n-2 || n-1&lt;br /&gt;
|-&lt;br /&gt;
! Zugriff&lt;br /&gt;
| feld[0] || feld[1] || feld[2] || ... || feld[i-1] || ... || feld[feld.length-2] || feld[feld.length-1]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Zuweisungen und Zugriffe erfolgen auch mit eckigen Klammern, wie bei der Deklaration.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
int[] zahlen = new int[8];&lt;br /&gt;
&lt;br /&gt;
zahlen[0] = 133; // Zuweisung zum ersten Element mit dem Index 0&lt;br /&gt;
zahlen[1] = 501; // Zuweisung zum zweiten Element mit dem Index 1&lt;br /&gt;
&lt;br /&gt;
zahlen[0] + zahlen[1]; // Zugriff auf die Elemente mit Index 0 und 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zugriffe mit Indizes außerhalb des gültigen Bereichs (also &amp;lt;code&amp;gt;i &amp;lt; 0&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;i &amp;gt; length&amp;lt;/code&amp;gt;) produzieren einen [https://docs.oracle.com/javase/7/docs/api/java/lang/ArrayIndexOutOfBoundsException.html Fehler].&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Notiere in der ersten Zeile jeder Tabelle die Werte, die nach Ausführung des gezeigten Quelltextes im Array gespeichert sind. Das Ergebnis jedes Schrittes dient als Ausgangssituation für den nächsten.&amp;lt;br /&amp;gt; Falls der Quelltext irgendwo einen Fehler enthält, dann wird der gesamte Code nicht ausgeführt (auch korrekte Zeilen nicht). Das Array ändert sich also nicht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
int[] zahlen = new int[6];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;0()&#039;&#039;&#039; || &#039;&#039;&#039;0()&#039;&#039;&#039; || &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
zahlen[4] = 4;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;0()&#039;&#039;&#039; || &#039;&#039;&#039;0()&#039;&#039;&#039; || &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;4()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
zahlen[5] = 5;&lt;br /&gt;
zahlen[6] = 6;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;0()&#039;&#039;&#039; || &#039;&#039;&#039;0()&#039;&#039;&#039; || &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;4()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
zahlen[2] = zahlen[4] + 6;&lt;br /&gt;
zahlen[1] = zahlen[2] - 1;&lt;br /&gt;
zahlen[0] = zahlen[1] - 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;8()&#039;&#039;&#039; || &#039;&#039;&#039;9()&#039;&#039;&#039; || &#039;&#039;&#039;10()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;4()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if( zahlen[3] == 0 &amp;amp;&amp;amp; zahlen[0] == 0 ) {&lt;br /&gt;
    zahlen[5] = zahlen[2] / 2;&lt;br /&gt;
} else {&lt;br /&gt;
    zahlen[5] = zahlen[0] + zahlen[3];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;8()&#039;&#039;&#039; || &#039;&#039;&#039;9()&#039;&#039;&#039; || &#039;&#039;&#039;10()&#039;&#039;&#039; ||  &#039;&#039;&#039;0()&#039;&#039;&#039; ||  &#039;&#039;&#039;4()&#039;&#039;&#039; ||  &#039;&#039;&#039;8()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
zahlen[3] = zahlen.length;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;8()&#039;&#039;&#039; || &#039;&#039;&#039;9()&#039;&#039;&#039; || &#039;&#039;&#039;10()&#039;&#039;&#039; ||  &#039;&#039;&#039;6()&#039;&#039;&#039; ||  &#039;&#039;&#039;4()&#039;&#039;&#039; ||  &#039;&#039;&#039;8()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
{{Lösung:Start}}&lt;br /&gt;
1.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 0 || 0 || 0 || 0 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
2.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 0 || 0 || 0 || 0 || 4 || 0&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
3. Das Array hat die Größe 6 und gültige Indizes für die Elemente sind &amp;lt;code&amp;gt;0,1,2,3,4,5&amp;lt;/code&amp;gt;. Die Zuweisung &amp;lt;code&amp;gt;zahlen[6] = 6&amp;lt;/code&amp;gt; erzeugt einen Fehler, da &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt; kein gültiger Index ist.&lt;br /&gt;
&lt;br /&gt;
4.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 8 || 9 || 10 || 0 || 4 || 0&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
5.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 8 || 9 || 10 || 0 || 4 || 8&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
6.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 8 || 9 || 10 || 6 || 4 || 8&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
{{Lösung:End}}&lt;br /&gt;
&lt;br /&gt;
== Über ein Array iterieren ==&lt;br /&gt;
Da man oft die Größe eines Arrays im Vorfeld nicht kennt, muss man häufig mit einer Zählschleife &#039;&#039;über das Array iterieren&#039;&#039;, um Aktionen auf oder mit den Elementen auszuführen. [[wikipedia:Iteration#Informatik|&#039;&#039;Iterieren&#039;&#039;]] bedeutet hier, auf die Elemente des Arrays vom ersten bis zum letzten Schritt für Schritt zuzugreifen (es zu &amp;quot;durchlaufen&amp;quot;). Dazu kann man jedes Schleifenkonstrukt benutzen, üblich ist aber eine Zählschleife, da sie direkt einen Zähler für den Index bereitstellt.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// Zählschleife von 0 bis zahlen.length&lt;br /&gt;
// Die Zählvariable i durchläuft alle Indizes des Arrays&lt;br /&gt;
// Das Attribut &amp;quot;length&amp;quot; eines Arrays enthält seine Größe&lt;br /&gt;
for( int i = 0; i &amp;lt; zahlen.length; i += 1 ) {&lt;br /&gt;
	System.out.println(zahlen[i]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Notiere in der ersten Zeile jeder Tabelle die Werte, die nach Ausführung des gezeigten Quelltextes im Array gespeichert sind. Das Ergebnis jedes Schrittes dient als Ausgangssituation für den nächsten.&amp;lt;br&amp;gt;Falls der Quelltext irgendwo einen Fehler enthält, dann wird der gesamte Code nicht ausgeführt (auch korrekte Zeilen nicht). Das Array ändert sich also nicht.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 8 || 9 || 10 || 6 || 4 || 8&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = 0; i &amp;lt; zahlen.length; i++ ) {&lt;br /&gt;
    zahlen[i] = 10 + zahlen[i];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;18()&#039;&#039;&#039; || &#039;&#039;&#039;19()&#039;&#039;&#039; || &#039;&#039;&#039;20()&#039;&#039;&#039; ||  &#039;&#039;&#039;16()&#039;&#039;&#039; ||  &#039;&#039;&#039;14()&#039;&#039;&#039; ||  &#039;&#039;&#039;18()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = 0; i &amp;lt; zahlen.length; i++ ) {&lt;br /&gt;
    zahlen[i] = 10 + i;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;10()&#039;&#039;&#039; || &#039;&#039;&#039;11()&#039;&#039;&#039; || &#039;&#039;&#039;12()&#039;&#039;&#039; ||  &#039;&#039;&#039;13()&#039;&#039;&#039; ||  &#039;&#039;&#039;14()&#039;&#039;&#039; ||  &#039;&#039;&#039;15()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = 0; i &amp;lt; zahlen.length; i++ ) {&lt;br /&gt;
    zahlen[i] = zahlen[2] + i;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;12()&#039;&#039;&#039; || &#039;&#039;&#039;13()&#039;&#039;&#039; || &#039;&#039;&#039;14()&#039;&#039;&#039; ||  &#039;&#039;&#039;17()&#039;&#039;&#039; ||  &#039;&#039;&#039;18()&#039;&#039;&#039; ||  &#039;&#039;&#039;19()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = zahlen.length; i &amp;gt; 0; i-- ) {&lt;br /&gt;
    zahlen[i-1] = zahlen[i];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;12()&#039;&#039;&#039; || &#039;&#039;&#039;13()&#039;&#039;&#039; || &#039;&#039;&#039;14()&#039;&#039;&#039; ||  &#039;&#039;&#039;17()&#039;&#039;&#039; ||  &#039;&#039;&#039;18()&#039;&#039;&#039; ||  &#039;&#039;&#039;19()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = 1; i &amp;lt; zahlen.length; i += 2 ) {&lt;br /&gt;
    zahlen[i] = zahlen[i-1];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;12()&#039;&#039;&#039; || &#039;&#039;&#039;12()&#039;&#039;&#039; || &#039;&#039;&#039;14()&#039;&#039;&#039; ||  &#039;&#039;&#039;14()&#039;&#039;&#039; ||  &#039;&#039;&#039;18()&#039;&#039;&#039; ||  &#039;&#039;&#039;18()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = zahlen.length-1; i &amp;gt; 0; i -= 1 ) {&lt;br /&gt;
    zahlen[i] = zahlen[i]/2;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;lückentext&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable text-center code&amp;quot;&lt;br /&gt;
! Inhalt&lt;br /&gt;
| &#039;&#039;&#039;12()&#039;&#039;&#039; || &#039;&#039;&#039;6()&#039;&#039;&#039; || &#039;&#039;&#039;7()&#039;&#039;&#039; ||  &#039;&#039;&#039;7()&#039;&#039;&#039; ||  &#039;&#039;&#039;9()&#039;&#039;&#039; ||  &#039;&#039;&#039;9()&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Index&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/lückentext&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
{{Lösung:Start}}&lt;br /&gt;
1.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 18 || 19 || 20 || 16 || 14 || 18&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
2.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 10 || 11 || 12 || 13 || 14 || 15&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
3.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 12 || 13 || 14 || 17 || 18 || 19&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
4.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 12 || 13 || 14 || 17 || 18 || 19&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
5.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 12 || 12 || 14 || 14 || 18 || 18&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
6.&lt;br /&gt;
{| class=&amp;quot;wikitable code text-center&amp;quot;&lt;br /&gt;
!Inhalt&lt;br /&gt;
| 12 || 6 || 7 || 7 || 9 || 9&lt;br /&gt;
|-&lt;br /&gt;
!Index&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|0&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|1&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|2&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|3&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|4&lt;br /&gt;
|width=&amp;quot;30px&amp;quot;|5&lt;br /&gt;
|}&lt;br /&gt;
{{Lösung:End}}&lt;br /&gt;
&lt;br /&gt;
== Übungen == &lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
# Erstelle in {{Processing}} einen &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;-Array namens&amp;lt;code&amp;gt;bar&amp;lt;/code&amp;gt; mit den Zahlen &amp;lt;code&amp;gt;2, 4, 6&amp;lt;/code&amp;gt; (in dieser Reihenfolge).&lt;br /&gt;
#: Multipliziere die ersten zwei Zahlen und speichere das Ergebnis in der dritten Zelle des Arrays ab. Du solltest also &amp;lt;code&amp;gt;{2, 4, 8}&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;bar&amp;lt;/code&amp;gt; haben. Schreibe &amp;lt;code&amp;gt;bar&amp;lt;/code&amp;gt; mit &amp;lt;code&amp;gt;println()&amp;lt;/code&amp;gt; auf die Konsole, um dies zu prüfen.&lt;br /&gt;
# Kopiere die folgende Zeile nach {{Processing}}:&lt;br /&gt;
#: &amp;lt;code&amp;gt;float[] zahlen = {50,80,140,150,180,225,270,350};&amp;lt;/code&amp;gt;&lt;br /&gt;
#: Gib den Inhalt des Arrays in einer Zählschleife einzeln mit &amp;lt;code&amp;gt;println()&amp;lt;/code&amp;gt; auf der Konsole aus.&lt;br /&gt;
# Verändere das Programm aus 2 so, dass die Zahlen nicht ausgegeben werden, sondern als &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;-Koordinate für Kreise verwendet werden. Die &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;-Koordinate bleibt fest auf &amp;lt;code&amp;gt;50&amp;lt;/code&amp;gt; gesetzt. Stelle die Zeichenfläche auf &amp;lt;code&amp;gt;400x400&amp;lt;/code&amp;gt; Pixel ein. &lt;br /&gt;
# Erweitere das Programm aus 3 so, dass nur jedes zweite Element im Array als &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;-Koordinate verwendet wird und das nachfolgende Element als &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;-Koordinate. (Der erste Kreis wird also bei &amp;lt;code&amp;gt;(50, 80)&amp;lt;/code&amp;gt; gezeichnet.)&lt;br /&gt;
&lt;br /&gt;
{{P5js|https://editor.p5js.org/Ngb/full/rH70PEMDz|height=400}}&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
{{Lösung:Start|Aufgabe 1}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
int[] bar = new int[3];&lt;br /&gt;
bar[0] = 2;&lt;br /&gt;
bar[1] = 4;&lt;br /&gt;
bar[2] = 6;&lt;br /&gt;
bar[2] = bar[0] + bar[1];&lt;br /&gt;
println(bar);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative Lösung:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
int[] bar = new int[]{2, 4, 6};&lt;br /&gt;
bar[2] = bar[0] + bar[1];&lt;br /&gt;
println(bar);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Lösung:End}}{{Lösung:Start|Aufgabe 2}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
float[] zahlen = {50,80,140,150,180,225,270,350};&lt;br /&gt;
for( int i = 0; i &amp;lt; zahlen.length; i++ ) {&lt;br /&gt;
  println(zahlen[i]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Lösung:End}}{{Lösung:Start|Aufgabe 3}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
float[] zahlen = {50,80,140,150,180,225,270,350};&lt;br /&gt;
&lt;br /&gt;
size(400, 400);&lt;br /&gt;
&lt;br /&gt;
for( int i = 0; i &amp;lt; zahlen.length; i++ ) {&lt;br /&gt;
  ellipse(zahlen[i], 50, 20, 20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Lösung:End}}{{Lösung:Start|Aufgabe 4}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
float[] zahlen = {50,80,140,150,180,225,270,350};&lt;br /&gt;
&lt;br /&gt;
size(400, 400);&lt;br /&gt;
&lt;br /&gt;
for( int i = 0; i &amp;lt; zahlen.length; i += 2 ) {&lt;br /&gt;
  ellipse(zahlen[i], zahlen[i+1], 20, 20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Lösung:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Simuliere Ballons (bunte Ellipsen), die vom unteren Bildschirmrand nach oben steigen. Die Koordinaten der Regentropen werden (als &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt;) in zwei Arrays gespeichert (&amp;lt;code&amp;gt;xcoords&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;ycoords&amp;lt;/code&amp;gt;). Zeige zunächst 10 Ballons an. Sobald die Ballons den oberen Rand erreichen, &amp;quot;platzen&amp;quot; sie und tauchen unten wieder auf.&lt;br /&gt;
&lt;br /&gt;
Du kannst das Ballon-Programm auch selber kreativ erweitern (zufällige Farben; unterschiedliche Geschwindigkeiten; ...).&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel mit einigen Erweiterungen könnte so aussehen:&lt;br /&gt;
{{P5js|https://editor.p5js.org/Ngb/full/MFsgYHL8X|height=500}}&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
{{Tipp:Start}}&lt;br /&gt;
Du kannst die nötigen Arrays in dieser Art erstellen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
float[] xcoords = new float[10];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nutze in &amp;lt;code&amp;gt;void setup()&amp;lt;/code&amp;gt; eine &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;-Schleife, um eine Variable &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; von &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; bis &amp;lt;code&amp;gt;xcoords.length&amp;lt;/code&amp;gt; laufen zu lassen. Setze im Schleifenrumpf in den beiden Arrays die initialen Koordinaten (z.B. Zufallswerte).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = 0; i &amp;lt; xcoords.length; i++ ) {&lt;br /&gt;
    xcoords[i] = random(0, width);&lt;br /&gt;
    ycoords[i] = height;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Verfahre in &amp;lt;code&amp;gt;void draw()&amp;lt;/code&amp;gt; ähnlich und nutze eine Zählschleife, um die Ballons zu zeichnen.&lt;br /&gt;
{{Tipp:End}}{{Lösung:Start|Eine mögliche Lösung}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
float[] xcoords = new float[10];&lt;br /&gt;
float[] ycoords = new float[10];&lt;br /&gt;
float[] speeds = new float[10];&lt;br /&gt;
color[] colors = new color[10];&lt;br /&gt;
float[] deltas = new float[10];&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  size(400, 500);&lt;br /&gt;
  &lt;br /&gt;
  for( int i = 0; i &amp;lt; xcoords.length; i++ ) {&lt;br /&gt;
    xcoords[i] = random(width);&lt;br /&gt;
    ycoords[i] = height + 10;&lt;br /&gt;
    speeds[i] = random(1, 4);&lt;br /&gt;
    colors[i] = color(int(random(256)), int(random(256)), int(random(256)));&lt;br /&gt;
    deltas[i] = random(1000);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void draw() {&lt;br /&gt;
  background(93, 160, 185);&lt;br /&gt;
  &lt;br /&gt;
  for( int i = 0; i &amp;lt; xcoords.length; i++ ) {&lt;br /&gt;
    float xd = sin(deltas[i] + millis()/350.0) * speeds[i];&lt;br /&gt;
    ycoords[i] -= speeds[i];&lt;br /&gt;
    fill(colors[i]);&lt;br /&gt;
    ellipse(xcoords[i] + xd, ycoords[i], 20, 40);&lt;br /&gt;
    &lt;br /&gt;
    if( ycoords[i]+40 &amp;lt; 0 ) {&lt;br /&gt;
      xcoords[i] = random(width);&lt;br /&gt;
      ycoords[i] = height;&lt;br /&gt;
      speeds[i] = random(1, 4);&lt;br /&gt;
      colors[i] = color(int(random(256)), int(random(256)), int(random(256)));&lt;br /&gt;
      deltas[i] = random(1000);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Lösung:End}}&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Projekt:2024/InstaHub&amp;diff=9975</id>
		<title>Projekt:2024/InstaHub</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Projekt:2024/InstaHub&amp;diff=9975"/>
		<updated>2025-01-17T06:58:05Z</updated>

		<summary type="html">&lt;p&gt;Ngb: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Projektseite&lt;br /&gt;
|Projekt=InstaHub&lt;br /&gt;
|Kurs=Informatik LK&lt;br /&gt;
|Schuljahr=2024/25&lt;br /&gt;
}}&lt;br /&gt;
{{Kasten|[[#Funktionen|&#039;&#039;&#039;Zur aktuellen Aufgabe springen&#039;&#039;&#039;]]|class=text-center}}&lt;br /&gt;
&lt;br /&gt;
== Projekt InstaHub ==&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Erstelle dir einen Zugang zu InstaHub. Das Video zeigt dir, wie du vorgehen musst: https://youtu.be/6DnmVjtF3UU&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Grundlagen von Datenabfragen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Benutze in InstaHub die Suchfunktion (Datenbanksymbol -&amp;gt; Suche), um die folgenden Abfragen zu stellen. Setze dabei den Haken bei &amp;quot;Zeige SQL&amp;quot; und vergleiche die SQL-Abfrage mit der Suchmaske und der Ergebnistabelle. Notiere dir wichtige Befehle.&lt;br /&gt;
&lt;br /&gt;
# Alle Nutzer.&lt;br /&gt;
# Alle männlichen / alle weiblichen Nutzer.&lt;br /&gt;
# Alle Nutzer, die sich nach dem 23.09.2017 registriert haben.&lt;br /&gt;
# Alle Nutzer aus München.&lt;br /&gt;
# Alle Nutzer sortiert nach Geburtstag.&lt;br /&gt;
# Nutzernamen und Passwort aller Nutzer.&lt;br /&gt;
# Nutzernamen und Passwort aller Nutzer, die kleiner als 1,60 Meter sind.&lt;br /&gt;
# Alle Männer, die größer als 1,80 Meter sind, sortiert nach Datum der Registrierung.&lt;br /&gt;
# Alle Frauen, deren Nutzername die Ziffern &amp;lt;code&amp;gt;45&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Benutze in InstaHub die SQL Abfragefunktion (Datenbanksymbol -&amp;gt; SQL), um SQL-Abfragen für die folgenden Informationen zu erstellen. Nutze dazu die [[Befehlsreferenz SQL]] im Wiki als Hilfe.&lt;br /&gt;
&lt;br /&gt;
# Alle Photos.&lt;br /&gt;
# Alle Photos des Nutzers mit der ID &amp;lt;code&amp;gt;42&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Alle Photos, sortiert nach Erstellungsdatum.&lt;br /&gt;
# Die ID des Nutzers und die URL aller Photos.&lt;br /&gt;
# Alle Photos, deren Beschreibung die Zeichenkette &amp;lt;code&amp;gt;#sonne&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
&lt;br /&gt;
Denk dir weitere Abfragen aus, mit der du die Syntax des &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt;-Befehls ausprobieren kannst.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Abfragen einschränken und sortieren ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; Abfragen lassen sich mit den Schlüsselwörtern &amp;lt;code&amp;gt;LIMIT&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;OFFSET&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;DISTINCT&amp;lt;/code&amp;gt; weiter präzisieren. &lt;br /&gt;
&lt;br /&gt;
# Führe die Abfragen aus und analysiere die Funktion und Syntax der &amp;lt;code&amp;gt;LIMIT&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;OFFSET&amp;lt;/code&amp;gt; Schlüsselwörter.&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT * FROM users LIMIT 5&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT * FROM users LIMIT 10&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT * FROM users LIMIT 5 OFFSET 5&amp;lt;/code&amp;gt;&lt;br /&gt;
# Führe die Abfragen aus und analysiere die Funktion und Syntax des &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; Schlüsselwortes.&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY id&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY username&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY centimeters &amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY centimeters ASC&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY centimeters DESC&amp;lt;/code&amp;gt;&lt;br /&gt;
# Führe die Abfragen aus und analysiere die Funktion und Syntax des &amp;lt;code&amp;gt;DISTINCT&amp;lt;/code&amp;gt; Schlüsselwortes.&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT city FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT DISTINCT city FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# Kombiniere nun die neuen Schlüsselwörter miteinander und entwickele Abfragen zu folgenden Datensätzen:&lt;br /&gt;
## Die fünf größten männlichen Nutzer.&lt;br /&gt;
## Die acht kleinsten weiblichen Nutzer, beginnend ab der Drittkleinsten.&lt;br /&gt;
## 15 unterschiedliche aufsteigend sortierte Namen.&lt;br /&gt;
## Das zuletzt gepostete Photo.&lt;br /&gt;
## Das vorletzte Photo.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Bedingungen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Mittels der &amp;lt;code&amp;gt;WHERE&amp;lt;/code&amp;gt;-Klausel lassen sich Datensätze gezielt auf bestimmte Bedingungen einschränken. Jedes Datenfeld hat einen festgelegten Datentyp (im Wesentlichen &#039;&#039;Zahl&#039;&#039;, &#039;&#039;Text&#039;&#039; und &#039;&#039;Datum&#039;&#039;). Je nach Datentyp lassen sich unterschiedliche Bedingungen nutzen. Bedingungen sind entweder &amp;lt;code&amp;gt;TRUE&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;FALSE&amp;lt;/code&amp;gt;. Bedingungen können mit &amp;lt;code&amp;gt;AND&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;OR&amp;lt;/code&amp;gt; verknüpft, oder mit &amp;lt;code&amp;gt;NOT&amp;lt;/code&amp;gt; negiert werden. &lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;BETWEEN&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;IS NULL&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Entwirf dann Abfragen für folgende Datensätze:&lt;br /&gt;
&lt;br /&gt;
# Alle Kommentare, die zwischen 2018-09-21 07:57:19 und 2018-09-21 09:57:19 erstellt wurden. &lt;br /&gt;
# Zehn Photos, deren Beschreibung &amp;lt;code&amp;gt;#sonne&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;#strand&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;#meer&amp;lt;/code&amp;gt; enthalten.&lt;br /&gt;
# Alle Photos, deren URL &amp;lt;code&amp;gt;animals&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
# Alle Photos, deren URL &#039;&#039;nicht&#039;&#039; &amp;lt;code&amp;gt;animals&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
# Alle Nutzer, die aus Frankfurt oder Berlin kommen und zwischen 150 und 168 Zentimeter groß sind. &lt;br /&gt;
# Alle Nutzer, die keine Größe eingetragen haben.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Eine mächtige Bedingung ist das &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; Schlüsselwort. Mit ihm kann ein Wert mit einer ganzen &#039;&#039;Liste&#039;&#039; von Werten verglichen werden. Der Operator prüft also, ob ein Wert in einer Liste vorkommt, oder nicht.&lt;br /&gt;
&lt;br /&gt;
Betrachte beispielsweise folgende Abfragen und vergleiche sie miteinander. Was fragen sie ab und wie ist der &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; Befehl aufgebaut?&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;SELECT * FROM users WHERE city = &amp;quot;Frankfurt&amp;quot; OR city = &amp;quot;Berlin&amp;quot; OR city = &amp;quot;Leipzig&amp;quot; OR city = &amp;quot;München&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;SELECT * FROM users WHERE city IN (&amp;quot;Frankfurt&amp;quot;,&amp;quot;Berlin&amp;quot;,&amp;quot;Leipzig&amp;quot;,&amp;quot;München&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;SELECT FROM users WHERE city NOT IN (&amp;quot;Frankfurt&amp;quot;,&amp;quot;Berlin&amp;quot;,&amp;quot;Leipzig&amp;quot;,&amp;quot;München&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
Schlüsselwort | Beschreibung&lt;br /&gt;
------------- | ------------&lt;br /&gt;
`SELECT`      | Leitet eine Abfrage zur Auswahl von Daten ein. ...&lt;br /&gt;
...           | ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Erstellen von Tabellen in Markdown ist recht sperrig. Daher ist es sinnvoll ein Werkzeug wie den [https://www.tablesgenerator.com/markdown_tables Markdown Tablegenerator] zu verwenden.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Funktionen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
SQL bietet auch Möglichkeiten, die abgefragten Datensätze durch die Anwendung von Rechenoperationen und Funktionen zu &#039;&#039;transformieren&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Um zum Beispiel die Größe der Nutzer nicht in Zentimetern, sondern in Millimetern abzufragen, könnte die Abfrage so lauten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT username,centimeters*10 FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT COUNT(*) FROM comments&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT MIN(centimeters), MAX(centimeters),AVG(centimeters),ROUND(AVG(centimeters),2),ROUND(AVG(centimeters)),SUM(centimeters) FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT centimeters+100,4+3,centimeters*2,id%2 FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT UPPER(username),CONCAT(city,&amp;quot;, &amp;quot;,country) FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT CONCAT(name,&amp;quot; aus &amp;quot;, city, &amp;quot; (&amp;quot;,UPPER(LEFT(country,3)),&amp;quot;)&amp;quot;) FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT DAY(created_at),MONTH(created_at),YEAR(created_at) FROM users ORDER BY created_at DESC LIMIT 1&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT DAY(created_at),MONTH(created_at),YEAR(created_at) FROM users LIMIT 1 ORDER BY created_at DESC&amp;lt;/code&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Mit der Funktion &amp;lt;code&amp;gt;RAND()&amp;lt;/code&amp;gt; können Zufallszahlen generiert werden. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT RAND()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; befehl benutzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT username FROM users ORDER BY RAND()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Führe die Abfrage mehrmals aus und beobachte die Ergebnisse.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Tabellen verknüpfen - Teil I ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Eine der wichtigsten Eigenschaften von relationalen Datenbanken ist die Verknüpfung der in den verschiedenen Tabellen gespeicherten Daten.&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis einer Abfrage ist eine Liste von Datensätzen. Da &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; mit einer Liste vergleicht, kann das Ergebnis einer &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; Abfrage als Argument für &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; benutzt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * &lt;br /&gt;
FROM photos &lt;br /&gt;
WHERE user_id IN (&lt;br /&gt;
  SELECT id&lt;br /&gt;
  FROM users&lt;br /&gt;
  WHERE city = &amp;quot;Berlin&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und beschriebe mit eigenen Worten, welche Datensätze abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
Teste dann folgende Abfrage und erkläre die Fehlermeldung:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * &lt;br /&gt;
FROM photos &lt;br /&gt;
WHERE user_id IN (&lt;br /&gt;
  SELECT id,username&lt;br /&gt;
  FROM users&lt;br /&gt;
  WHERE city = &amp;quot;Berlin&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erstelle folgende Abfragen:&lt;br /&gt;
&lt;br /&gt;
# Alle Kommentare zu Fotos, die vom Nutzer mit der ID &amp;lt;code&amp;gt;109&amp;lt;/code&amp;gt; erstellt wurden.&lt;br /&gt;
# Alle Likes von Nutzern, die in München oder Berlin wohnen.&lt;br /&gt;
# Alle Likes zu Photos, die von Nutzern gepostet wurden, die in Mühldorf oder Biederitz wohnen.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
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 &#039;&#039;Vereinigung&#039;&#039; von zwei Ergebnissen wird mit dem Schlüsselwort &amp;lt;code&amp;gt;UNION&amp;lt;/code&amp;gt; erreicht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT id,username,city FROM users WHERE centimeters BETWEEN 180 AND 200&lt;br /&gt;
UNION&lt;br /&gt;
SELECT id,username,city FROM users WHERE YEAR(birthday) = 2005&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und beschriebe mit eigenen Worten, welche Datensätze abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
Probiere dann die folgenden beiden Abfragen aus und vergleiche ihre Ergebnisse. Was ändert das Schlüsselwort &amp;lt;code&amp;gt;ALL&amp;lt;/code&amp;gt;?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
UNION&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
UNION ALL&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erstelle dann folgende Abfragen mit Hilfe von &amp;lt;code&amp;gt;UNION&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
# Alle created_at und updated_at Felder (auch doppelte) aus den Tabellen photos, comments und likes, sortiert nach created_at.&lt;br /&gt;
# Alle Städtenamen, die mit &amp;quot;W&amp;quot; oder &amp;quot;R&amp;quot; beginnen.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Verschachtelte Abfragen ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Hinter dem &amp;lt;code&amp;gt;FROM&amp;lt;/code&amp;gt; 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 &amp;lt;code&amp;gt;FROM&amp;lt;/code&amp;gt; also eine Tabelle. Diese kann auch dynamisch mit einer weiteren Abfrage erstellt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * FROM (&lt;br /&gt;
  SELECT id,username,name&lt;br /&gt;
  FROM users&lt;br /&gt;
  WHERE created_at &amp;gt; &amp;quot;2017-09-22&amp;quot;&lt;br /&gt;
) &lt;br /&gt;
WHERE LENGTH(username) = 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fallunterscheidungen ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Manchmal möchte man verschiedene Fälle an Werten unterschieden und darauf basierend die zurückgelieferten Werte steuern. Dazu gibt es in SQL die &amp;lt;code&amp;gt;CASE&amp;lt;/code&amp;gt; Anweisung.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT &lt;br /&gt;
  url,&lt;br /&gt;
  CASE &lt;br /&gt;
    WHEN &lt;br /&gt;
      description LIKE &#039;%natur%&#039; &lt;br /&gt;
      OR description LIKE &#039;%landschaft%&#039;  &lt;br /&gt;
      OR description LIKE &#039;%berg%&#039; &lt;br /&gt;
    THEN true &lt;br /&gt;
    ELSE false &lt;br /&gt;
  END &lt;br /&gt;
FROM photos &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und beschriebe mit eigenen Worten, wie &amp;lt;code&amp;gt;CASE&amp;lt;/code&amp;gt; funktioniert.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Werbung ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Auf einer Photoseite werden unterhalb der Photos Werbebanner eingeblendet. Welche Werbung gezeigt wird, wird durch eine SQL-Abfrage gesteuert. Die Werbung kann auf einen Nutzer zugeschnitten sein, oder auf das Photo, unter dem sie angezeigt wird.&lt;br /&gt;
&lt;br /&gt;
Überlege dir eine Werbeanzeige, die du in InstaHub schalten möchtest und für welche Zielgruppe diese geeignet ist. Wie könntest du Nutzer der Zielgruppe in InstaHub möglichst genau identifizieren? (Um deine Anzeige später zu testen ist es einfacher, die Werbung anhand des Photos zu schalten.)&lt;br /&gt;
&lt;br /&gt;
Entwirf dann eine SQL-Abfrage, die so genau es geht auf die Zielgruppe zugeschnitten ist. Die Vorgaben für eine Werbe-Abfrage lauten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Die Abfrage muss true oder false ergeben. Alternativ kann auch eine Liste zurückgegeben werden, in welcher die Benutzer-ID gesucht wird. $user kann als Platzhalter für den angemeldeten Benutzer und $photo für das aktuelle Photo verwendet werden.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Teste die Abfrage in InstaHub.&lt;br /&gt;
&lt;br /&gt;
Hinweis: Mit der &amp;lt;code&amp;gt;CASE&amp;lt;/code&amp;gt;-Anweisung von oben kannst du zwischen true und false unterscheiden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT &lt;br /&gt;
  CASE gender &lt;br /&gt;
    WHEN &#039;female&#039; &lt;br /&gt;
      THEN true &lt;br /&gt;
    ELSE false &lt;br /&gt;
  END &lt;br /&gt;
FROM users &lt;br /&gt;
WHERE id=$user&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Erstellte ein neues Werbebanner in InstaHub. Gehe dazu auf den Kiosk oben und Wähle &amp;quot;Kampagnen&amp;quot;. Klicke das grüne Plus und gib die relevanten Daten ein. (Name und SQL-Anfrage sind notwendig. Wenn du möchtest, kannst du ein eigenes Bild nutzen. Der Rest kann so bleiben wie er ist.)&lt;br /&gt;
[[Datei:InstaHub NewAd.png|center|400px]]&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Datenauswertung ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Bearbeite den [https://lernpfad.ch/pfad/0osdqmncydgc Lernpfad SQL: Daten auswerten].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Datenmanipulation ===&lt;br /&gt;
Abfragesprachen wie SQL arbeiten nach dem [[wikipedia:CRUD|CRUD]]-Prinzip: &#039;&#039;&#039;C&#039;&#039;&#039;reate, &#039;&#039;&#039;R&#039;&#039;&#039;etrieve, &#039;&#039;&#039;U&#039;&#039;&#039;pdate, &#039;&#039;&#039;D&#039;&#039;&#039;elete&lt;br /&gt;
&lt;br /&gt;
Bisher haben wir uns nur mit dem &#039;&#039;&#039;R&#039;&#039;&#039; befasst und Daten aus der Datenbank abgefragt. Die drei anderen Teile des Akronyms sind in SQL zum Glück weniger komplex.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Bearbeite den [https://lernpfad.ch/pfad/43folj7iwnkc Lernpfad SQL:  INSERT, DELETE und UPDATE].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Tabellen verknüpfen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Bearbeite den [https://lernpfad.ch/pfad/emmr5jvq0bgu Lernpfad SQL:  Tabellen verknüpfen].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== SQL-Island ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Begib dich auf die [[SQL-Island]].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Datenbanken modellieren ===&lt;br /&gt;
&lt;br /&gt;
[https://erdplus.com/standalone ERDPlus]&lt;br /&gt;
&lt;br /&gt;
=== Mehrere Abfagen hintereinander ausführen ===&lt;br /&gt;
&lt;br /&gt;
{{Info:Start}}&lt;br /&gt;
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.&lt;br /&gt;
{{Info:End}}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte:2021/22]]&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Projekt:2024/InstaHub&amp;diff=9974</id>
		<title>Projekt:2024/InstaHub</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Projekt:2024/InstaHub&amp;diff=9974"/>
		<updated>2025-01-15T12:22:31Z</updated>

		<summary type="html">&lt;p&gt;Ngb: /* Bedingungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Projektseite&lt;br /&gt;
|Projekt=InstaHub&lt;br /&gt;
|Kurs=Informatik LK&lt;br /&gt;
|Schuljahr=2024/25&lt;br /&gt;
}}&lt;br /&gt;
{{Kasten|[[#Bedingungen|&#039;&#039;&#039;Zur aktuellen Aufgabe springen&#039;&#039;&#039;]]|class=text-center}}&lt;br /&gt;
&lt;br /&gt;
== Projekt InstaHub ==&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Erstelle dir einen Zugang zu InstaHub. Das Video zeigt dir, wie du vorgehen musst: https://youtu.be/6DnmVjtF3UU&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Grundlagen von Datenabfragen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Benutze in InstaHub die Suchfunktion (Datenbanksymbol -&amp;gt; Suche), um die folgenden Abfragen zu stellen. Setze dabei den Haken bei &amp;quot;Zeige SQL&amp;quot; und vergleiche die SQL-Abfrage mit der Suchmaske und der Ergebnistabelle. Notiere dir wichtige Befehle.&lt;br /&gt;
&lt;br /&gt;
# Alle Nutzer.&lt;br /&gt;
# Alle männlichen / alle weiblichen Nutzer.&lt;br /&gt;
# Alle Nutzer, die sich nach dem 23.09.2017 registriert haben.&lt;br /&gt;
# Alle Nutzer aus München.&lt;br /&gt;
# Alle Nutzer sortiert nach Geburtstag.&lt;br /&gt;
# Nutzernamen und Passwort aller Nutzer.&lt;br /&gt;
# Nutzernamen und Passwort aller Nutzer, die kleiner als 1,60 Meter sind.&lt;br /&gt;
# Alle Männer, die größer als 1,80 Meter sind, sortiert nach Datum der Registrierung.&lt;br /&gt;
# Alle Frauen, deren Nutzername die Ziffern &amp;lt;code&amp;gt;45&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Benutze in InstaHub die SQL Abfragefunktion (Datenbanksymbol -&amp;gt; SQL), um SQL-Abfragen für die folgenden Informationen zu erstellen. Nutze dazu die [[Befehlsreferenz SQL]] im Wiki als Hilfe.&lt;br /&gt;
&lt;br /&gt;
# Alle Photos.&lt;br /&gt;
# Alle Photos des Nutzers mit der ID &amp;lt;code&amp;gt;42&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Alle Photos, sortiert nach Erstellungsdatum.&lt;br /&gt;
# Die ID des Nutzers und die URL aller Photos.&lt;br /&gt;
# Alle Photos, deren Beschreibung die Zeichenkette &amp;lt;code&amp;gt;#sonne&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
&lt;br /&gt;
Denk dir weitere Abfragen aus, mit der du die Syntax des &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt;-Befehls ausprobieren kannst.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Abfragen einschränken und sortieren ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; Abfragen lassen sich mit den Schlüsselwörtern &amp;lt;code&amp;gt;LIMIT&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;OFFSET&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;DISTINCT&amp;lt;/code&amp;gt; weiter präzisieren. &lt;br /&gt;
&lt;br /&gt;
# Führe die Abfragen aus und analysiere die Funktion und Syntax der &amp;lt;code&amp;gt;LIMIT&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;OFFSET&amp;lt;/code&amp;gt; Schlüsselwörter.&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT * FROM users LIMIT 5&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT * FROM users LIMIT 10&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT * FROM users LIMIT 5 OFFSET 5&amp;lt;/code&amp;gt;&lt;br /&gt;
# Führe die Abfragen aus und analysiere die Funktion und Syntax des &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; Schlüsselwortes.&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY id&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY username&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY centimeters &amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY centimeters ASC&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY centimeters DESC&amp;lt;/code&amp;gt;&lt;br /&gt;
# Führe die Abfragen aus und analysiere die Funktion und Syntax des &amp;lt;code&amp;gt;DISTINCT&amp;lt;/code&amp;gt; Schlüsselwortes.&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT city FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT DISTINCT city FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# Kombiniere nun die neuen Schlüsselwörter miteinander und entwickele Abfragen zu folgenden Datensätzen:&lt;br /&gt;
## Die fünf größten männlichen Nutzer.&lt;br /&gt;
## Die acht kleinsten weiblichen Nutzer, beginnend ab der Drittkleinsten.&lt;br /&gt;
## 15 unterschiedliche aufsteigend sortierte Namen.&lt;br /&gt;
## Das zuletzt gepostete Photo.&lt;br /&gt;
## Das vorletzte Photo.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Bedingungen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Mittels der &amp;lt;code&amp;gt;WHERE&amp;lt;/code&amp;gt;-Klausel lassen sich Datensätze gezielt auf bestimmte Bedingungen einschränken. Jedes Datenfeld hat einen festgelegten Datentyp (im Wesentlichen &#039;&#039;Zahl&#039;&#039;, &#039;&#039;Text&#039;&#039; und &#039;&#039;Datum&#039;&#039;). Je nach Datentyp lassen sich unterschiedliche Bedingungen nutzen. Bedingungen sind entweder &amp;lt;code&amp;gt;TRUE&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;FALSE&amp;lt;/code&amp;gt;. Bedingungen können mit &amp;lt;code&amp;gt;AND&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;OR&amp;lt;/code&amp;gt; verknüpft, oder mit &amp;lt;code&amp;gt;NOT&amp;lt;/code&amp;gt; negiert werden. &lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;BETWEEN&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;IS NULL&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Entwirf dann Abfragen für folgende Datensätze:&lt;br /&gt;
&lt;br /&gt;
# Alle Kommentare, die zwischen 2018-09-21 07:57:19 und 2018-09-21 09:57:19 erstellt wurden. &lt;br /&gt;
# Zehn Photos, deren Beschreibung &amp;lt;code&amp;gt;#sonne&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;#strand&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;#meer&amp;lt;/code&amp;gt; enthalten.&lt;br /&gt;
# Alle Photos, deren URL &amp;lt;code&amp;gt;animals&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
# Alle Photos, deren URL &#039;&#039;nicht&#039;&#039; &amp;lt;code&amp;gt;animals&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
# Alle Nutzer, die aus Frankfurt oder Berlin kommen und zwischen 150 und 168 Zentimeter groß sind. &lt;br /&gt;
# Alle Nutzer, die keine Größe eingetragen haben.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Eine mächtige Bedingung ist das &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; Schlüsselwort. Mit ihm kann ein Wert mit einer ganzen &#039;&#039;Liste&#039;&#039; von Werten verglichen werden. Der Operator prüft also, ob ein Wert in einer Liste vorkommt, oder nicht.&lt;br /&gt;
&lt;br /&gt;
Betrachte beispielsweise folgende Abfragen und vergleiche sie miteinander. Was fragen sie ab und wie ist der &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; Befehl aufgebaut?&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;SELECT * FROM users WHERE city = &amp;quot;Frankfurt&amp;quot; OR city = &amp;quot;Berlin&amp;quot; OR city = &amp;quot;Leipzig&amp;quot; OR city = &amp;quot;München&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;SELECT * FROM users WHERE city IN (&amp;quot;Frankfurt&amp;quot;,&amp;quot;Berlin&amp;quot;,&amp;quot;Leipzig&amp;quot;,&amp;quot;München&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;SELECT FROM users WHERE city NOT IN (&amp;quot;Frankfurt&amp;quot;,&amp;quot;Berlin&amp;quot;,&amp;quot;Leipzig&amp;quot;,&amp;quot;München&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
Schlüsselwort | Beschreibung&lt;br /&gt;
------------- | ------------&lt;br /&gt;
`SELECT`      | Leitet eine Abfrage zur Auswahl von Daten ein. ...&lt;br /&gt;
...           | ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Erstellen von Tabellen in Markdown ist recht sperrig. Daher ist es sinnvoll ein Werkzeug wie den [https://www.tablesgenerator.com/markdown_tables Markdown Tablegenerator] zu verwenden.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Funktionen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
SQL bietet auch Möglichkeiten, die abgefragten Datensätze durch die Anwendung von Rechenoperationen und Funktionen zu &#039;&#039;transformieren&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Um zum Beispiel die Größe der Nutzer nicht in Zentimetern, sondern in Millimetern abzufragen, könnte die Abfrage so lauten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT username,centimeters*10 FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT COUNT(*) FROM comments&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT MIN(centimeters), MAX(centimeters),AVG(centimeters),ROUND(AVG(centimeters),2),ROUND(AVG(centimeters)),SUM(centimeters) FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT centimeters+100,4+3,centimeters*2,id%2 FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT UPPER(username),CONCAT(city,&amp;quot;, &amp;quot;,country) FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT CONCAT(name,&amp;quot; aus &amp;quot;, city, &amp;quot; (&amp;quot;,UPPER(LEFT(country,3)),&amp;quot;)&amp;quot;) FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT DAY(created_at),MONTH(created_at),YEAR(created_at) FROM users ORDER BY created_at DESC LIMIT 1&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT DAY(created_at),MONTH(created_at),YEAR(created_at) FROM users LIMIT 1 ORDER BY created_at DESC&amp;lt;/code&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Mit der Funktion &amp;lt;code&amp;gt;RAND()&amp;lt;/code&amp;gt; können Zufallszahlen generiert werden. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT RAND()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; befehl benutzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT username FROM users ORDER BY RAND()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Führe die Abfrage mehrmals aus und beobachte die Ergebnisse.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Tabellen verknüpfen - Teil I ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Eine der wichtigsten Eigenschaften von relationalen Datenbanken ist die Verknüpfung der in den verschiedenen Tabellen gespeicherten Daten.&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis einer Abfrage ist eine Liste von Datensätzen. Da &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; mit einer Liste vergleicht, kann das Ergebnis einer &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; Abfrage als Argument für &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; benutzt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * &lt;br /&gt;
FROM photos &lt;br /&gt;
WHERE user_id IN (&lt;br /&gt;
  SELECT id&lt;br /&gt;
  FROM users&lt;br /&gt;
  WHERE city = &amp;quot;Berlin&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und beschriebe mit eigenen Worten, welche Datensätze abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
Teste dann folgende Abfrage und erkläre die Fehlermeldung:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * &lt;br /&gt;
FROM photos &lt;br /&gt;
WHERE user_id IN (&lt;br /&gt;
  SELECT id,username&lt;br /&gt;
  FROM users&lt;br /&gt;
  WHERE city = &amp;quot;Berlin&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erstelle folgende Abfragen:&lt;br /&gt;
&lt;br /&gt;
# Alle Kommentare zu Fotos, die vom Nutzer mit der ID &amp;lt;code&amp;gt;109&amp;lt;/code&amp;gt; erstellt wurden.&lt;br /&gt;
# Alle Likes von Nutzern, die in München oder Berlin wohnen.&lt;br /&gt;
# Alle Likes zu Photos, die von Nutzern gepostet wurden, die in Mühldorf oder Biederitz wohnen.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
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 &#039;&#039;Vereinigung&#039;&#039; von zwei Ergebnissen wird mit dem Schlüsselwort &amp;lt;code&amp;gt;UNION&amp;lt;/code&amp;gt; erreicht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT id,username,city FROM users WHERE centimeters BETWEEN 180 AND 200&lt;br /&gt;
UNION&lt;br /&gt;
SELECT id,username,city FROM users WHERE YEAR(birthday) = 2005&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und beschriebe mit eigenen Worten, welche Datensätze abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
Probiere dann die folgenden beiden Abfragen aus und vergleiche ihre Ergebnisse. Was ändert das Schlüsselwort &amp;lt;code&amp;gt;ALL&amp;lt;/code&amp;gt;?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
UNION&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
UNION ALL&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erstelle dann folgende Abfragen mit Hilfe von &amp;lt;code&amp;gt;UNION&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
# Alle created_at und updated_at Felder (auch doppelte) aus den Tabellen photos, comments und likes, sortiert nach created_at.&lt;br /&gt;
# Alle Städtenamen, die mit &amp;quot;W&amp;quot; oder &amp;quot;R&amp;quot; beginnen.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Verschachtelte Abfragen ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Hinter dem &amp;lt;code&amp;gt;FROM&amp;lt;/code&amp;gt; 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 &amp;lt;code&amp;gt;FROM&amp;lt;/code&amp;gt; also eine Tabelle. Diese kann auch dynamisch mit einer weiteren Abfrage erstellt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * FROM (&lt;br /&gt;
  SELECT id,username,name&lt;br /&gt;
  FROM users&lt;br /&gt;
  WHERE created_at &amp;gt; &amp;quot;2017-09-22&amp;quot;&lt;br /&gt;
) &lt;br /&gt;
WHERE LENGTH(username) = 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fallunterscheidungen ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Manchmal möchte man verschiedene Fälle an Werten unterschieden und darauf basierend die zurückgelieferten Werte steuern. Dazu gibt es in SQL die &amp;lt;code&amp;gt;CASE&amp;lt;/code&amp;gt; Anweisung.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT &lt;br /&gt;
  url,&lt;br /&gt;
  CASE &lt;br /&gt;
    WHEN &lt;br /&gt;
      description LIKE &#039;%natur%&#039; &lt;br /&gt;
      OR description LIKE &#039;%landschaft%&#039;  &lt;br /&gt;
      OR description LIKE &#039;%berg%&#039; &lt;br /&gt;
    THEN true &lt;br /&gt;
    ELSE false &lt;br /&gt;
  END &lt;br /&gt;
FROM photos &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und beschriebe mit eigenen Worten, wie &amp;lt;code&amp;gt;CASE&amp;lt;/code&amp;gt; funktioniert.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Werbung ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Auf einer Photoseite werden unterhalb der Photos Werbebanner eingeblendet. Welche Werbung gezeigt wird, wird durch eine SQL-Abfrage gesteuert. Die Werbung kann auf einen Nutzer zugeschnitten sein, oder auf das Photo, unter dem sie angezeigt wird.&lt;br /&gt;
&lt;br /&gt;
Überlege dir eine Werbeanzeige, die du in InstaHub schalten möchtest und für welche Zielgruppe diese geeignet ist. Wie könntest du Nutzer der Zielgruppe in InstaHub möglichst genau identifizieren? (Um deine Anzeige später zu testen ist es einfacher, die Werbung anhand des Photos zu schalten.)&lt;br /&gt;
&lt;br /&gt;
Entwirf dann eine SQL-Abfrage, die so genau es geht auf die Zielgruppe zugeschnitten ist. Die Vorgaben für eine Werbe-Abfrage lauten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Die Abfrage muss true oder false ergeben. Alternativ kann auch eine Liste zurückgegeben werden, in welcher die Benutzer-ID gesucht wird. $user kann als Platzhalter für den angemeldeten Benutzer und $photo für das aktuelle Photo verwendet werden.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Teste die Abfrage in InstaHub.&lt;br /&gt;
&lt;br /&gt;
Hinweis: Mit der &amp;lt;code&amp;gt;CASE&amp;lt;/code&amp;gt;-Anweisung von oben kannst du zwischen true und false unterscheiden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT &lt;br /&gt;
  CASE gender &lt;br /&gt;
    WHEN &#039;female&#039; &lt;br /&gt;
      THEN true &lt;br /&gt;
    ELSE false &lt;br /&gt;
  END &lt;br /&gt;
FROM users &lt;br /&gt;
WHERE id=$user&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Erstellte ein neues Werbebanner in InstaHub. Gehe dazu auf den Kiosk oben und Wähle &amp;quot;Kampagnen&amp;quot;. Klicke das grüne Plus und gib die relevanten Daten ein. (Name und SQL-Anfrage sind notwendig. Wenn du möchtest, kannst du ein eigenes Bild nutzen. Der Rest kann so bleiben wie er ist.)&lt;br /&gt;
[[Datei:InstaHub NewAd.png|center|400px]]&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Datenauswertung ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Bearbeite den [https://lernpfad.ch/pfad/0osdqmncydgc Lernpfad SQL: Daten auswerten].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Datenmanipulation ===&lt;br /&gt;
Abfragesprachen wie SQL arbeiten nach dem [[wikipedia:CRUD|CRUD]]-Prinzip: &#039;&#039;&#039;C&#039;&#039;&#039;reate, &#039;&#039;&#039;R&#039;&#039;&#039;etrieve, &#039;&#039;&#039;U&#039;&#039;&#039;pdate, &#039;&#039;&#039;D&#039;&#039;&#039;elete&lt;br /&gt;
&lt;br /&gt;
Bisher haben wir uns nur mit dem &#039;&#039;&#039;R&#039;&#039;&#039; befasst und Daten aus der Datenbank abgefragt. Die drei anderen Teile des Akronyms sind in SQL zum Glück weniger komplex.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Bearbeite den [https://lernpfad.ch/pfad/43folj7iwnkc Lernpfad SQL:  INSERT, DELETE und UPDATE].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Tabellen verknüpfen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Bearbeite den [https://lernpfad.ch/pfad/emmr5jvq0bgu Lernpfad SQL:  Tabellen verknüpfen].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== SQL-Island ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Begib dich auf die [[SQL-Island]].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Datenbanken modellieren ===&lt;br /&gt;
&lt;br /&gt;
[https://erdplus.com/standalone ERDPlus]&lt;br /&gt;
&lt;br /&gt;
=== Mehrere Abfagen hintereinander ausführen ===&lt;br /&gt;
&lt;br /&gt;
{{Info:Start}}&lt;br /&gt;
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.&lt;br /&gt;
{{Info:End}}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte:2021/22]]&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Projekt:2024/InstaHub&amp;diff=9973</id>
		<title>Projekt:2024/InstaHub</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Projekt:2024/InstaHub&amp;diff=9973"/>
		<updated>2025-01-15T11:59:28Z</updated>

		<summary type="html">&lt;p&gt;Ngb: /* Bedingungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Projektseite&lt;br /&gt;
|Projekt=InstaHub&lt;br /&gt;
|Kurs=Informatik LK&lt;br /&gt;
|Schuljahr=2024/25&lt;br /&gt;
}}&lt;br /&gt;
{{Kasten|[[#Bedingungen|&#039;&#039;&#039;Zur aktuellen Aufgabe springen&#039;&#039;&#039;]]|class=text-center}}&lt;br /&gt;
&lt;br /&gt;
== Projekt InstaHub ==&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Erstelle dir einen Zugang zu InstaHub. Das Video zeigt dir, wie du vorgehen musst: https://youtu.be/6DnmVjtF3UU&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Grundlagen von Datenabfragen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Benutze in InstaHub die Suchfunktion (Datenbanksymbol -&amp;gt; Suche), um die folgenden Abfragen zu stellen. Setze dabei den Haken bei &amp;quot;Zeige SQL&amp;quot; und vergleiche die SQL-Abfrage mit der Suchmaske und der Ergebnistabelle. Notiere dir wichtige Befehle.&lt;br /&gt;
&lt;br /&gt;
# Alle Nutzer.&lt;br /&gt;
# Alle männlichen / alle weiblichen Nutzer.&lt;br /&gt;
# Alle Nutzer, die sich nach dem 23.09.2017 registriert haben.&lt;br /&gt;
# Alle Nutzer aus München.&lt;br /&gt;
# Alle Nutzer sortiert nach Geburtstag.&lt;br /&gt;
# Nutzernamen und Passwort aller Nutzer.&lt;br /&gt;
# Nutzernamen und Passwort aller Nutzer, die kleiner als 1,60 Meter sind.&lt;br /&gt;
# Alle Männer, die größer als 1,80 Meter sind, sortiert nach Datum der Registrierung.&lt;br /&gt;
# Alle Frauen, deren Nutzername die Ziffern &amp;lt;code&amp;gt;45&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Benutze in InstaHub die SQL Abfragefunktion (Datenbanksymbol -&amp;gt; SQL), um SQL-Abfragen für die folgenden Informationen zu erstellen. Nutze dazu die [[Befehlsreferenz SQL]] im Wiki als Hilfe.&lt;br /&gt;
&lt;br /&gt;
# Alle Photos.&lt;br /&gt;
# Alle Photos des Nutzers mit der ID &amp;lt;code&amp;gt;42&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Alle Photos, sortiert nach Erstellungsdatum.&lt;br /&gt;
# Die ID des Nutzers und die URL aller Photos.&lt;br /&gt;
# Alle Photos, deren Beschreibung die Zeichenkette &amp;lt;code&amp;gt;#sonne&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
&lt;br /&gt;
Denk dir weitere Abfragen aus, mit der du die Syntax des &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt;-Befehls ausprobieren kannst.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Abfragen einschränken und sortieren ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; Abfragen lassen sich mit den Schlüsselwörtern &amp;lt;code&amp;gt;LIMIT&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;OFFSET&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;DISTINCT&amp;lt;/code&amp;gt; weiter präzisieren. &lt;br /&gt;
&lt;br /&gt;
# Führe die Abfragen aus und analysiere die Funktion und Syntax der &amp;lt;code&amp;gt;LIMIT&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;OFFSET&amp;lt;/code&amp;gt; Schlüsselwörter.&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT * FROM users LIMIT 5&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT * FROM users LIMIT 10&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT * FROM users LIMIT 5 OFFSET 5&amp;lt;/code&amp;gt;&lt;br /&gt;
# Führe die Abfragen aus und analysiere die Funktion und Syntax des &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; Schlüsselwortes.&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY id&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY username&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY centimeters &amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY centimeters ASC&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY centimeters DESC&amp;lt;/code&amp;gt;&lt;br /&gt;
# Führe die Abfragen aus und analysiere die Funktion und Syntax des &amp;lt;code&amp;gt;DISTINCT&amp;lt;/code&amp;gt; Schlüsselwortes.&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT city FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT DISTINCT city FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# Kombiniere nun die neuen Schlüsselwörter miteinander und entwickele Abfragen zu folgenden Datensätzen:&lt;br /&gt;
## Die fünf größten männlichen Nutzer.&lt;br /&gt;
## Die acht kleinsten weiblichen Nutzer, beginnend ab der Drittkleinsten.&lt;br /&gt;
## 15 unterschiedliche aufsteigend sortierte Namen.&lt;br /&gt;
## Das zuletzt gepostete Photo.&lt;br /&gt;
## Das vorletzte Photo.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Bedingungen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Mittels der &amp;lt;code&amp;gt;WHERE&amp;lt;/code&amp;gt;-Klausel lassen sich Datensätze gezielt auf bestimmte Bedingungen einschränken. Jedes Datenfeld hat einen festgelegten Datentyp (im Wesentlichen &#039;&#039;Zahl&#039;&#039;, &#039;&#039;Text&#039;&#039; und &#039;&#039;Datum&#039;&#039;). Je nach Datentyp lassen sich unterschiedliche Bedingungen nutzen. Bedingungen sind entweder &amp;lt;code&amp;gt;TRUE&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;FALSE&amp;lt;/code&amp;gt;. Bedingungen können mit &amp;lt;code&amp;gt;AND&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;OR&amp;lt;/code&amp;gt; verknüpft, oder mit &amp;lt;code&amp;gt;NOT&amp;lt;/code&amp;gt; negiert werden. &lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;BETWEEN&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;IS NULL&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Entwirf dann Abfragen für folgende Datensätze:&lt;br /&gt;
&lt;br /&gt;
# Alle Kommentare, die zwischen 2018-09-21 07:57:19 und 2018-09-21 09:57:19 erstellt wurden. &lt;br /&gt;
# Zehn Photos, deren Beschreibung &amp;lt;code&amp;gt;#sonne&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;#strand&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;#meer&amp;lt;/code&amp;gt; enthalten.&lt;br /&gt;
# Alle Photos, deren URL &amp;lt;code&amp;gt;animals&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
# Alle Photos, deren URL &#039;&#039;nicht&#039;&#039; &amp;lt;code&amp;gt;animals&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
# Alle Nutzer, die aus Frankfurt oder Berlin kommen und zwischen 150 und 168 Zentimeter groß sind. &lt;br /&gt;
# Alle Nutzer, die keine Größe eingetragen haben.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Eine mächtige Bedingung ist das &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; Schlüsselwort. Mit ihm kann ein Wert mit einer ganzen &#039;&#039;Liste&#039;&#039; von Werten verglichen werden. Der Operator prüft also, ob ein Wert in einer Liste vorkommt, oder nicht.&lt;br /&gt;
&lt;br /&gt;
Betrachte beispielsweise folgende Abfragen und vergleiche sie miteinander. Was fragen sie ab und wie ist der &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; Befehl aufgebaut?&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;SELECT * FROM users WHERE city = &amp;quot;Frankfurt&amp;quot; OR city = &amp;quot;Berlin&amp;quot; OR city = &amp;quot;Leipzig&amp;quot; OR city = &amp;quot;München&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;SELECT * FROM users WHERE city IN (&amp;quot;Frankfurt&amp;quot;,&amp;quot;Berlin&amp;quot;,&amp;quot;Leipzig&amp;quot;,&amp;quot;München&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;SELECT FROM users WHERE city NOT IN (&amp;quot;Frankfurt&amp;quot;,&amp;quot;Berlin&amp;quot;,&amp;quot;Leipzig&amp;quot;,&amp;quot;München&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Dokumnetiert 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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
Schlüsselwort | Beschreibung&lt;br /&gt;
------------- | ------------&lt;br /&gt;
`SELECT`      | Leitet eine Abfrage zur Auswahl von Daten ein. ...&lt;br /&gt;
...           | ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Erstellen von Tabellen in Markdown ist recht sperrig. Daher ist es sinnvoll ein Werkzeug wie den [https://www.tablesgenerator.com/markdown_tables Markdown Tablegenerator] zu verwenden.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Funktionen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
SQL bietet auch Möglichkeiten, die abgefragten Datensätze durch die Anwendung von Rechenoperationen und Funktionen zu &#039;&#039;transformieren&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Um zum Beispiel die Größe der Nutzer nicht in Zentimetern, sondern in Millimetern abzufragen, könnte die Abfrage so lauten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT username,centimeters*10 FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT COUNT(*) FROM comments&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT MIN(centimeters), MAX(centimeters),AVG(centimeters),ROUND(AVG(centimeters),2),ROUND(AVG(centimeters)),SUM(centimeters) FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT centimeters+100,4+3,centimeters*2,id%2 FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT UPPER(username),CONCAT(city,&amp;quot;, &amp;quot;,country) FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT CONCAT(name,&amp;quot; aus &amp;quot;, city, &amp;quot; (&amp;quot;,UPPER(LEFT(country,3)),&amp;quot;)&amp;quot;) FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT DAY(created_at),MONTH(created_at),YEAR(created_at) FROM users ORDER BY created_at DESC LIMIT 1&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT DAY(created_at),MONTH(created_at),YEAR(created_at) FROM users LIMIT 1 ORDER BY created_at DESC&amp;lt;/code&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Mit der Funktion &amp;lt;code&amp;gt;RAND()&amp;lt;/code&amp;gt; können Zufallszahlen generiert werden. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT RAND()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; befehl benutzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT username FROM users ORDER BY RAND()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Führe die Abfrage mehrmals aus und beobachte die Ergebnisse.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Tabellen verknüpfen - Teil I ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Eine der wichtigsten Eigenschaften von relationalen Datenbanken ist die Verknüpfung der in den verschiedenen Tabellen gespeicherten Daten.&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis einer Abfrage ist eine Liste von Datensätzen. Da &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; mit einer Liste vergleicht, kann das Ergebnis einer &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; Abfrage als Argument für &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; benutzt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * &lt;br /&gt;
FROM photos &lt;br /&gt;
WHERE user_id IN (&lt;br /&gt;
  SELECT id&lt;br /&gt;
  FROM users&lt;br /&gt;
  WHERE city = &amp;quot;Berlin&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und beschriebe mit eigenen Worten, welche Datensätze abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
Teste dann folgende Abfrage und erkläre die Fehlermeldung:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * &lt;br /&gt;
FROM photos &lt;br /&gt;
WHERE user_id IN (&lt;br /&gt;
  SELECT id,username&lt;br /&gt;
  FROM users&lt;br /&gt;
  WHERE city = &amp;quot;Berlin&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erstelle folgende Abfragen:&lt;br /&gt;
&lt;br /&gt;
# Alle Kommentare zu Fotos, die vom Nutzer mit der ID &amp;lt;code&amp;gt;109&amp;lt;/code&amp;gt; erstellt wurden.&lt;br /&gt;
# Alle Likes von Nutzern, die in München oder Berlin wohnen.&lt;br /&gt;
# Alle Likes zu Photos, die von Nutzern gepostet wurden, die in Mühldorf oder Biederitz wohnen.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
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 &#039;&#039;Vereinigung&#039;&#039; von zwei Ergebnissen wird mit dem Schlüsselwort &amp;lt;code&amp;gt;UNION&amp;lt;/code&amp;gt; erreicht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT id,username,city FROM users WHERE centimeters BETWEEN 180 AND 200&lt;br /&gt;
UNION&lt;br /&gt;
SELECT id,username,city FROM users WHERE YEAR(birthday) = 2005&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und beschriebe mit eigenen Worten, welche Datensätze abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
Probiere dann die folgenden beiden Abfragen aus und vergleiche ihre Ergebnisse. Was ändert das Schlüsselwort &amp;lt;code&amp;gt;ALL&amp;lt;/code&amp;gt;?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
UNION&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
UNION ALL&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erstelle dann folgende Abfragen mit Hilfe von &amp;lt;code&amp;gt;UNION&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
# Alle created_at und updated_at Felder (auch doppelte) aus den Tabellen photos, comments und likes, sortiert nach created_at.&lt;br /&gt;
# Alle Städtenamen, die mit &amp;quot;W&amp;quot; oder &amp;quot;R&amp;quot; beginnen.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Verschachtelte Abfragen ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Hinter dem &amp;lt;code&amp;gt;FROM&amp;lt;/code&amp;gt; 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 &amp;lt;code&amp;gt;FROM&amp;lt;/code&amp;gt; also eine Tabelle. Diese kann auch dynamisch mit einer weiteren Abfrage erstellt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * FROM (&lt;br /&gt;
  SELECT id,username,name&lt;br /&gt;
  FROM users&lt;br /&gt;
  WHERE created_at &amp;gt; &amp;quot;2017-09-22&amp;quot;&lt;br /&gt;
) &lt;br /&gt;
WHERE LENGTH(username) = 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fallunterscheidungen ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Manchmal möchte man verschiedene Fälle an Werten unterschieden und darauf basierend die zurückgelieferten Werte steuern. Dazu gibt es in SQL die &amp;lt;code&amp;gt;CASE&amp;lt;/code&amp;gt; Anweisung.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT &lt;br /&gt;
  url,&lt;br /&gt;
  CASE &lt;br /&gt;
    WHEN &lt;br /&gt;
      description LIKE &#039;%natur%&#039; &lt;br /&gt;
      OR description LIKE &#039;%landschaft%&#039;  &lt;br /&gt;
      OR description LIKE &#039;%berg%&#039; &lt;br /&gt;
    THEN true &lt;br /&gt;
    ELSE false &lt;br /&gt;
  END &lt;br /&gt;
FROM photos &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und beschriebe mit eigenen Worten, wie &amp;lt;code&amp;gt;CASE&amp;lt;/code&amp;gt; funktioniert.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Werbung ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Auf einer Photoseite werden unterhalb der Photos Werbebanner eingeblendet. Welche Werbung gezeigt wird, wird durch eine SQL-Abfrage gesteuert. Die Werbung kann auf einen Nutzer zugeschnitten sein, oder auf das Photo, unter dem sie angezeigt wird.&lt;br /&gt;
&lt;br /&gt;
Überlege dir eine Werbeanzeige, die du in InstaHub schalten möchtest und für welche Zielgruppe diese geeignet ist. Wie könntest du Nutzer der Zielgruppe in InstaHub möglichst genau identifizieren? (Um deine Anzeige später zu testen ist es einfacher, die Werbung anhand des Photos zu schalten.)&lt;br /&gt;
&lt;br /&gt;
Entwirf dann eine SQL-Abfrage, die so genau es geht auf die Zielgruppe zugeschnitten ist. Die Vorgaben für eine Werbe-Abfrage lauten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Die Abfrage muss true oder false ergeben. Alternativ kann auch eine Liste zurückgegeben werden, in welcher die Benutzer-ID gesucht wird. $user kann als Platzhalter für den angemeldeten Benutzer und $photo für das aktuelle Photo verwendet werden.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Teste die Abfrage in InstaHub.&lt;br /&gt;
&lt;br /&gt;
Hinweis: Mit der &amp;lt;code&amp;gt;CASE&amp;lt;/code&amp;gt;-Anweisung von oben kannst du zwischen true und false unterscheiden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT &lt;br /&gt;
  CASE gender &lt;br /&gt;
    WHEN &#039;female&#039; &lt;br /&gt;
      THEN true &lt;br /&gt;
    ELSE false &lt;br /&gt;
  END &lt;br /&gt;
FROM users &lt;br /&gt;
WHERE id=$user&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Erstellte ein neues Werbebanner in InstaHub. Gehe dazu auf den Kiosk oben und Wähle &amp;quot;Kampagnen&amp;quot;. Klicke das grüne Plus und gib die relevanten Daten ein. (Name und SQL-Anfrage sind notwendig. Wenn du möchtest, kannst du ein eigenes Bild nutzen. Der Rest kann so bleiben wie er ist.)&lt;br /&gt;
[[Datei:InstaHub NewAd.png|center|400px]]&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Datenauswertung ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Bearbeite den [https://lernpfad.ch/pfad/0osdqmncydgc Lernpfad SQL: Daten auswerten].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Datenmanipulation ===&lt;br /&gt;
Abfragesprachen wie SQL arbeiten nach dem [[wikipedia:CRUD|CRUD]]-Prinzip: &#039;&#039;&#039;C&#039;&#039;&#039;reate, &#039;&#039;&#039;R&#039;&#039;&#039;etrieve, &#039;&#039;&#039;U&#039;&#039;&#039;pdate, &#039;&#039;&#039;D&#039;&#039;&#039;elete&lt;br /&gt;
&lt;br /&gt;
Bisher haben wir uns nur mit dem &#039;&#039;&#039;R&#039;&#039;&#039; befasst und Daten aus der Datenbank abgefragt. Die drei anderen Teile des Akronyms sind in SQL zum Glück weniger komplex.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Bearbeite den [https://lernpfad.ch/pfad/43folj7iwnkc Lernpfad SQL:  INSERT, DELETE und UPDATE].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Tabellen verknüpfen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Bearbeite den [https://lernpfad.ch/pfad/emmr5jvq0bgu Lernpfad SQL:  Tabellen verknüpfen].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== SQL-Island ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Begib dich auf die [[SQL-Island]].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Datenbanken modellieren ===&lt;br /&gt;
&lt;br /&gt;
[https://erdplus.com/standalone ERDPlus]&lt;br /&gt;
&lt;br /&gt;
=== Mehrere Abfagen hintereinander ausführen ===&lt;br /&gt;
&lt;br /&gt;
{{Info:Start}}&lt;br /&gt;
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.&lt;br /&gt;
{{Info:End}}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte:2021/22]]&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Projekt:2024/InstaHub&amp;diff=9972</id>
		<title>Projekt:2024/InstaHub</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Projekt:2024/InstaHub&amp;diff=9972"/>
		<updated>2025-01-15T11:58:20Z</updated>

		<summary type="html">&lt;p&gt;Ngb: /* Bedingungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Projektseite&lt;br /&gt;
|Projekt=InstaHub&lt;br /&gt;
|Kurs=Informatik LK&lt;br /&gt;
|Schuljahr=2024/25&lt;br /&gt;
}}&lt;br /&gt;
{{Kasten|[[#Bedingungen|&#039;&#039;&#039;Zur aktuellen Aufgabe springen&#039;&#039;&#039;]]|class=text-center}}&lt;br /&gt;
&lt;br /&gt;
== Projekt InstaHub ==&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Erstelle dir einen Zugang zu InstaHub. Das Video zeigt dir, wie du vorgehen musst: https://youtu.be/6DnmVjtF3UU&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Grundlagen von Datenabfragen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Benutze in InstaHub die Suchfunktion (Datenbanksymbol -&amp;gt; Suche), um die folgenden Abfragen zu stellen. Setze dabei den Haken bei &amp;quot;Zeige SQL&amp;quot; und vergleiche die SQL-Abfrage mit der Suchmaske und der Ergebnistabelle. Notiere dir wichtige Befehle.&lt;br /&gt;
&lt;br /&gt;
# Alle Nutzer.&lt;br /&gt;
# Alle männlichen / alle weiblichen Nutzer.&lt;br /&gt;
# Alle Nutzer, die sich nach dem 23.09.2017 registriert haben.&lt;br /&gt;
# Alle Nutzer aus München.&lt;br /&gt;
# Alle Nutzer sortiert nach Geburtstag.&lt;br /&gt;
# Nutzernamen und Passwort aller Nutzer.&lt;br /&gt;
# Nutzernamen und Passwort aller Nutzer, die kleiner als 1,60 Meter sind.&lt;br /&gt;
# Alle Männer, die größer als 1,80 Meter sind, sortiert nach Datum der Registrierung.&lt;br /&gt;
# Alle Frauen, deren Nutzername die Ziffern &amp;lt;code&amp;gt;45&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Benutze in InstaHub die SQL Abfragefunktion (Datenbanksymbol -&amp;gt; SQL), um SQL-Abfragen für die folgenden Informationen zu erstellen. Nutze dazu die [[Befehlsreferenz SQL]] im Wiki als Hilfe.&lt;br /&gt;
&lt;br /&gt;
# Alle Photos.&lt;br /&gt;
# Alle Photos des Nutzers mit der ID &amp;lt;code&amp;gt;42&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Alle Photos, sortiert nach Erstellungsdatum.&lt;br /&gt;
# Die ID des Nutzers und die URL aller Photos.&lt;br /&gt;
# Alle Photos, deren Beschreibung die Zeichenkette &amp;lt;code&amp;gt;#sonne&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
&lt;br /&gt;
Denk dir weitere Abfragen aus, mit der du die Syntax des &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt;-Befehls ausprobieren kannst.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Abfragen einschränken und sortieren ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; Abfragen lassen sich mit den Schlüsselwörtern &amp;lt;code&amp;gt;LIMIT&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;OFFSET&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;DISTINCT&amp;lt;/code&amp;gt; weiter präzisieren. &lt;br /&gt;
&lt;br /&gt;
# Führe die Abfragen aus und analysiere die Funktion und Syntax der &amp;lt;code&amp;gt;LIMIT&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;OFFSET&amp;lt;/code&amp;gt; Schlüsselwörter.&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT * FROM users LIMIT 5&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT * FROM users LIMIT 10&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT * FROM users LIMIT 5 OFFSET 5&amp;lt;/code&amp;gt;&lt;br /&gt;
# Führe die Abfragen aus und analysiere die Funktion und Syntax des &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; Schlüsselwortes.&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY id&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY username&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY centimeters &amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY centimeters ASC&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY centimeters DESC&amp;lt;/code&amp;gt;&lt;br /&gt;
# Führe die Abfragen aus und analysiere die Funktion und Syntax des &amp;lt;code&amp;gt;DISTINCT&amp;lt;/code&amp;gt; Schlüsselwortes.&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT city FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT DISTINCT city FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# Kombiniere nun die neuen Schlüsselwörter miteinander und entwickele Abfragen zu folgenden Datensätzen:&lt;br /&gt;
## Die fünf größten männlichen Nutzer.&lt;br /&gt;
## Die acht kleinsten weiblichen Nutzer, beginnend ab der Drittkleinsten.&lt;br /&gt;
## 15 unterschiedliche aufsteigend sortierte Namen.&lt;br /&gt;
## Das zuletzt gepostete Photo.&lt;br /&gt;
## Das vorletzte Photo.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Bedingungen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Mittels der &amp;lt;code&amp;gt;WHERE&amp;lt;/code&amp;gt;-Klausel lassen sich Datensätze gezielt auf bestimmte Bedingungen einschränken. Jedes Datenfeld hat einen festgelegten Datentyp (im Wesentlichen &#039;&#039;Zahl&#039;&#039;, &#039;&#039;Text&#039;&#039; und &#039;&#039;Datum&#039;&#039;). Je nach Datentyp lassen sich unterschiedliche Bedingungen nutzen. Bedingungen sind entweder &amp;lt;code&amp;gt;TRUE&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;FALSE&amp;lt;/code&amp;gt;. Bedingungen können mit &amp;lt;code&amp;gt;AND&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;OR&amp;lt;/code&amp;gt; verknüpft, oder mit &amp;lt;code&amp;gt;NOT&amp;lt;/code&amp;gt; negiert werden. &lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;BETWEEN&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;IS NULL&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Entwirf dann Abfragen für folgende Datensätze:&lt;br /&gt;
&lt;br /&gt;
# Alle Kommentare, die zwischen 2018-09-21 07:57:19 und 2018-09-21 09:57:19 erstellt wurden. &lt;br /&gt;
# Zehn Photos, deren Beschreibung &amp;lt;code&amp;gt;#sonne&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;#strand&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;#meer&amp;lt;/code&amp;gt; enthalten.&lt;br /&gt;
# Alle Photos, deren URL &amp;lt;code&amp;gt;animals&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
# Alle Photos, deren URL &#039;&#039;nicht&#039;&#039; &amp;lt;code&amp;gt;animals&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
# Alle Nutzer, die aus Frankfurt oder Berlin kommen und zwischen 150 und 168 Zentimeter groß sind. &lt;br /&gt;
# Alle Nutzer, die keine Größe eingetragen haben.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Eine mächtige Bedingung ist das &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; Schlüsselwort. Mit ihm kann ein Wert mit einer ganzen &#039;&#039;Liste&#039;&#039; von Werten verglichen werden. Der Operator prüft also, ob ein Wert in einer Liste vorkommt, oder nicht.&lt;br /&gt;
&lt;br /&gt;
Betrachte beispielsweise folgende Abfragen und vergleiche sie miteinander. Was fragen sie ab und wie ist der &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; Befehl aufgebaut?&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;SELECT * FROM users WHERE city = &amp;quot;Frankfurt&amp;quot; OR city = &amp;quot;Berlin&amp;quot; OR city = &amp;quot;Leipzig&amp;quot; OR city = &amp;quot;München&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;SELECT * FROM users WHERE city IN (&amp;quot;Frankfurt&amp;quot;,&amp;quot;Berlin&amp;quot;,&amp;quot;Leipzig&amp;quot;,&amp;quot;München&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;SELECT FROM users WHERE city NOT IN (&amp;quot;Frankfurt&amp;quot;,&amp;quot;Berlin&amp;quot;,&amp;quot;Leipzig&amp;quot;,&amp;quot;München&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Dokumnetiert die bisher kennengelernten Schlüsselwörter mit einer kurzen Beschreibung der Funktion in der Wissenslandkarte. Legt dazu gemeinsam [https://markdown-syntax.de/Syntax-GFM/Tabellen/ eine Tabelle] an.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
Schlüsselwort | Beschreibung&lt;br /&gt;
------------- | ------------&lt;br /&gt;
`SELECT`      | Leitet eine Abfrage zur Auswahl von Daten ein. ...&lt;br /&gt;
...           | ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Erstellen von Tabellen in Markdown ist recht sperrig. Daher ist es sinnvoll ein Werkzeug wie den [https://www.tablesgenerator.com/markdown_tables Markdown Tablegenerator] zu verwenden.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Funktionen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
SQL bietet auch Möglichkeiten, die abgefragten Datensätze durch die Anwendung von Rechenoperationen und Funktionen zu &#039;&#039;transformieren&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Um zum Beispiel die Größe der Nutzer nicht in Zentimetern, sondern in Millimetern abzufragen, könnte die Abfrage so lauten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT username,centimeters*10 FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT COUNT(*) FROM comments&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT MIN(centimeters), MAX(centimeters),AVG(centimeters),ROUND(AVG(centimeters),2),ROUND(AVG(centimeters)),SUM(centimeters) FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT centimeters+100,4+3,centimeters*2,id%2 FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT UPPER(username),CONCAT(city,&amp;quot;, &amp;quot;,country) FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT CONCAT(name,&amp;quot; aus &amp;quot;, city, &amp;quot; (&amp;quot;,UPPER(LEFT(country,3)),&amp;quot;)&amp;quot;) FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT DAY(created_at),MONTH(created_at),YEAR(created_at) FROM users ORDER BY created_at DESC LIMIT 1&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT DAY(created_at),MONTH(created_at),YEAR(created_at) FROM users LIMIT 1 ORDER BY created_at DESC&amp;lt;/code&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Mit der Funktion &amp;lt;code&amp;gt;RAND()&amp;lt;/code&amp;gt; können Zufallszahlen generiert werden. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT RAND()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; befehl benutzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT username FROM users ORDER BY RAND()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Führe die Abfrage mehrmals aus und beobachte die Ergebnisse.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Tabellen verknüpfen - Teil I ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Eine der wichtigsten Eigenschaften von relationalen Datenbanken ist die Verknüpfung der in den verschiedenen Tabellen gespeicherten Daten.&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis einer Abfrage ist eine Liste von Datensätzen. Da &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; mit einer Liste vergleicht, kann das Ergebnis einer &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; Abfrage als Argument für &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; benutzt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * &lt;br /&gt;
FROM photos &lt;br /&gt;
WHERE user_id IN (&lt;br /&gt;
  SELECT id&lt;br /&gt;
  FROM users&lt;br /&gt;
  WHERE city = &amp;quot;Berlin&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und beschriebe mit eigenen Worten, welche Datensätze abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
Teste dann folgende Abfrage und erkläre die Fehlermeldung:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * &lt;br /&gt;
FROM photos &lt;br /&gt;
WHERE user_id IN (&lt;br /&gt;
  SELECT id,username&lt;br /&gt;
  FROM users&lt;br /&gt;
  WHERE city = &amp;quot;Berlin&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erstelle folgende Abfragen:&lt;br /&gt;
&lt;br /&gt;
# Alle Kommentare zu Fotos, die vom Nutzer mit der ID &amp;lt;code&amp;gt;109&amp;lt;/code&amp;gt; erstellt wurden.&lt;br /&gt;
# Alle Likes von Nutzern, die in München oder Berlin wohnen.&lt;br /&gt;
# Alle Likes zu Photos, die von Nutzern gepostet wurden, die in Mühldorf oder Biederitz wohnen.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
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 &#039;&#039;Vereinigung&#039;&#039; von zwei Ergebnissen wird mit dem Schlüsselwort &amp;lt;code&amp;gt;UNION&amp;lt;/code&amp;gt; erreicht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT id,username,city FROM users WHERE centimeters BETWEEN 180 AND 200&lt;br /&gt;
UNION&lt;br /&gt;
SELECT id,username,city FROM users WHERE YEAR(birthday) = 2005&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und beschriebe mit eigenen Worten, welche Datensätze abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
Probiere dann die folgenden beiden Abfragen aus und vergleiche ihre Ergebnisse. Was ändert das Schlüsselwort &amp;lt;code&amp;gt;ALL&amp;lt;/code&amp;gt;?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
UNION&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
UNION ALL&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erstelle dann folgende Abfragen mit Hilfe von &amp;lt;code&amp;gt;UNION&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
# Alle created_at und updated_at Felder (auch doppelte) aus den Tabellen photos, comments und likes, sortiert nach created_at.&lt;br /&gt;
# Alle Städtenamen, die mit &amp;quot;W&amp;quot; oder &amp;quot;R&amp;quot; beginnen.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Verschachtelte Abfragen ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Hinter dem &amp;lt;code&amp;gt;FROM&amp;lt;/code&amp;gt; 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 &amp;lt;code&amp;gt;FROM&amp;lt;/code&amp;gt; also eine Tabelle. Diese kann auch dynamisch mit einer weiteren Abfrage erstellt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * FROM (&lt;br /&gt;
  SELECT id,username,name&lt;br /&gt;
  FROM users&lt;br /&gt;
  WHERE created_at &amp;gt; &amp;quot;2017-09-22&amp;quot;&lt;br /&gt;
) &lt;br /&gt;
WHERE LENGTH(username) = 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fallunterscheidungen ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Manchmal möchte man verschiedene Fälle an Werten unterschieden und darauf basierend die zurückgelieferten Werte steuern. Dazu gibt es in SQL die &amp;lt;code&amp;gt;CASE&amp;lt;/code&amp;gt; Anweisung.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT &lt;br /&gt;
  url,&lt;br /&gt;
  CASE &lt;br /&gt;
    WHEN &lt;br /&gt;
      description LIKE &#039;%natur%&#039; &lt;br /&gt;
      OR description LIKE &#039;%landschaft%&#039;  &lt;br /&gt;
      OR description LIKE &#039;%berg%&#039; &lt;br /&gt;
    THEN true &lt;br /&gt;
    ELSE false &lt;br /&gt;
  END &lt;br /&gt;
FROM photos &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und beschriebe mit eigenen Worten, wie &amp;lt;code&amp;gt;CASE&amp;lt;/code&amp;gt; funktioniert.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Werbung ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Auf einer Photoseite werden unterhalb der Photos Werbebanner eingeblendet. Welche Werbung gezeigt wird, wird durch eine SQL-Abfrage gesteuert. Die Werbung kann auf einen Nutzer zugeschnitten sein, oder auf das Photo, unter dem sie angezeigt wird.&lt;br /&gt;
&lt;br /&gt;
Überlege dir eine Werbeanzeige, die du in InstaHub schalten möchtest und für welche Zielgruppe diese geeignet ist. Wie könntest du Nutzer der Zielgruppe in InstaHub möglichst genau identifizieren? (Um deine Anzeige später zu testen ist es einfacher, die Werbung anhand des Photos zu schalten.)&lt;br /&gt;
&lt;br /&gt;
Entwirf dann eine SQL-Abfrage, die so genau es geht auf die Zielgruppe zugeschnitten ist. Die Vorgaben für eine Werbe-Abfrage lauten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Die Abfrage muss true oder false ergeben. Alternativ kann auch eine Liste zurückgegeben werden, in welcher die Benutzer-ID gesucht wird. $user kann als Platzhalter für den angemeldeten Benutzer und $photo für das aktuelle Photo verwendet werden.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Teste die Abfrage in InstaHub.&lt;br /&gt;
&lt;br /&gt;
Hinweis: Mit der &amp;lt;code&amp;gt;CASE&amp;lt;/code&amp;gt;-Anweisung von oben kannst du zwischen true und false unterscheiden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT &lt;br /&gt;
  CASE gender &lt;br /&gt;
    WHEN &#039;female&#039; &lt;br /&gt;
      THEN true &lt;br /&gt;
    ELSE false &lt;br /&gt;
  END &lt;br /&gt;
FROM users &lt;br /&gt;
WHERE id=$user&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Erstellte ein neues Werbebanner in InstaHub. Gehe dazu auf den Kiosk oben und Wähle &amp;quot;Kampagnen&amp;quot;. Klicke das grüne Plus und gib die relevanten Daten ein. (Name und SQL-Anfrage sind notwendig. Wenn du möchtest, kannst du ein eigenes Bild nutzen. Der Rest kann so bleiben wie er ist.)&lt;br /&gt;
[[Datei:InstaHub NewAd.png|center|400px]]&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Datenauswertung ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Bearbeite den [https://lernpfad.ch/pfad/0osdqmncydgc Lernpfad SQL: Daten auswerten].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Datenmanipulation ===&lt;br /&gt;
Abfragesprachen wie SQL arbeiten nach dem [[wikipedia:CRUD|CRUD]]-Prinzip: &#039;&#039;&#039;C&#039;&#039;&#039;reate, &#039;&#039;&#039;R&#039;&#039;&#039;etrieve, &#039;&#039;&#039;U&#039;&#039;&#039;pdate, &#039;&#039;&#039;D&#039;&#039;&#039;elete&lt;br /&gt;
&lt;br /&gt;
Bisher haben wir uns nur mit dem &#039;&#039;&#039;R&#039;&#039;&#039; befasst und Daten aus der Datenbank abgefragt. Die drei anderen Teile des Akronyms sind in SQL zum Glück weniger komplex.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Bearbeite den [https://lernpfad.ch/pfad/43folj7iwnkc Lernpfad SQL:  INSERT, DELETE und UPDATE].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Tabellen verknüpfen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Bearbeite den [https://lernpfad.ch/pfad/emmr5jvq0bgu Lernpfad SQL:  Tabellen verknüpfen].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== SQL-Island ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Begib dich auf die [[SQL-Island]].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Datenbanken modellieren ===&lt;br /&gt;
&lt;br /&gt;
[https://erdplus.com/standalone ERDPlus]&lt;br /&gt;
&lt;br /&gt;
=== Mehrere Abfagen hintereinander ausführen ===&lt;br /&gt;
&lt;br /&gt;
{{Info:Start}}&lt;br /&gt;
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.&lt;br /&gt;
{{Info:End}}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte:2021/22]]&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Projekt:2024/InstaHub&amp;diff=9971</id>
		<title>Projekt:2024/InstaHub</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Projekt:2024/InstaHub&amp;diff=9971"/>
		<updated>2025-01-15T11:57:42Z</updated>

		<summary type="html">&lt;p&gt;Ngb: /* Bedingungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Projektseite&lt;br /&gt;
|Projekt=InstaHub&lt;br /&gt;
|Kurs=Informatik LK&lt;br /&gt;
|Schuljahr=2024/25&lt;br /&gt;
}}&lt;br /&gt;
{{Kasten|[[#Bedingungen|&#039;&#039;&#039;Zur aktuellen Aufgabe springen&#039;&#039;&#039;]]|class=text-center}}&lt;br /&gt;
&lt;br /&gt;
== Projekt InstaHub ==&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Erstelle dir einen Zugang zu InstaHub. Das Video zeigt dir, wie du vorgehen musst: https://youtu.be/6DnmVjtF3UU&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Grundlagen von Datenabfragen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Benutze in InstaHub die Suchfunktion (Datenbanksymbol -&amp;gt; Suche), um die folgenden Abfragen zu stellen. Setze dabei den Haken bei &amp;quot;Zeige SQL&amp;quot; und vergleiche die SQL-Abfrage mit der Suchmaske und der Ergebnistabelle. Notiere dir wichtige Befehle.&lt;br /&gt;
&lt;br /&gt;
# Alle Nutzer.&lt;br /&gt;
# Alle männlichen / alle weiblichen Nutzer.&lt;br /&gt;
# Alle Nutzer, die sich nach dem 23.09.2017 registriert haben.&lt;br /&gt;
# Alle Nutzer aus München.&lt;br /&gt;
# Alle Nutzer sortiert nach Geburtstag.&lt;br /&gt;
# Nutzernamen und Passwort aller Nutzer.&lt;br /&gt;
# Nutzernamen und Passwort aller Nutzer, die kleiner als 1,60 Meter sind.&lt;br /&gt;
# Alle Männer, die größer als 1,80 Meter sind, sortiert nach Datum der Registrierung.&lt;br /&gt;
# Alle Frauen, deren Nutzername die Ziffern &amp;lt;code&amp;gt;45&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Benutze in InstaHub die SQL Abfragefunktion (Datenbanksymbol -&amp;gt; SQL), um SQL-Abfragen für die folgenden Informationen zu erstellen. Nutze dazu die [[Befehlsreferenz SQL]] im Wiki als Hilfe.&lt;br /&gt;
&lt;br /&gt;
# Alle Photos.&lt;br /&gt;
# Alle Photos des Nutzers mit der ID &amp;lt;code&amp;gt;42&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Alle Photos, sortiert nach Erstellungsdatum.&lt;br /&gt;
# Die ID des Nutzers und die URL aller Photos.&lt;br /&gt;
# Alle Photos, deren Beschreibung die Zeichenkette &amp;lt;code&amp;gt;#sonne&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
&lt;br /&gt;
Denk dir weitere Abfragen aus, mit der du die Syntax des &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt;-Befehls ausprobieren kannst.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Abfragen einschränken und sortieren ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; Abfragen lassen sich mit den Schlüsselwörtern &amp;lt;code&amp;gt;LIMIT&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;OFFSET&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;DISTINCT&amp;lt;/code&amp;gt; weiter präzisieren. &lt;br /&gt;
&lt;br /&gt;
# Führe die Abfragen aus und analysiere die Funktion und Syntax der &amp;lt;code&amp;gt;LIMIT&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;OFFSET&amp;lt;/code&amp;gt; Schlüsselwörter.&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT * FROM users LIMIT 5&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT * FROM users LIMIT 10&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT * FROM users LIMIT 5 OFFSET 5&amp;lt;/code&amp;gt;&lt;br /&gt;
# Führe die Abfragen aus und analysiere die Funktion und Syntax des &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; Schlüsselwortes.&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY id&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY username&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY centimeters &amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY centimeters ASC&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY centimeters DESC&amp;lt;/code&amp;gt;&lt;br /&gt;
# Führe die Abfragen aus und analysiere die Funktion und Syntax des &amp;lt;code&amp;gt;DISTINCT&amp;lt;/code&amp;gt; Schlüsselwortes.&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT city FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT DISTINCT city FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# Kombiniere nun die neuen Schlüsselwörter miteinander und entwickele Abfragen zu folgenden Datensätzen:&lt;br /&gt;
## Die fünf größten männlichen Nutzer.&lt;br /&gt;
## Die acht kleinsten weiblichen Nutzer, beginnend ab der Drittkleinsten.&lt;br /&gt;
## 15 unterschiedliche aufsteigend sortierte Namen.&lt;br /&gt;
## Das zuletzt gepostete Photo.&lt;br /&gt;
## Das vorletzte Photo.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Bedingungen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Mittels der &amp;lt;code&amp;gt;WHERE&amp;lt;/code&amp;gt;-Klausel lassen sich Datensätze gezielt auf bestimmte Bedingungen einschränken. Jedes Datenfeld hat einen festgelegten Datentyp (im Wesentlichen &#039;&#039;Zahl&#039;&#039;, &#039;&#039;Text&#039;&#039; und &#039;&#039;Datum&#039;&#039;). Je nach Datentyp lassen sich unterschiedliche Bedingungen nutzen. Bedingungen sind entweder &amp;lt;code&amp;gt;TRUE&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;FALSE&amp;lt;/code&amp;gt;. Bedingungen können mit &amp;lt;code&amp;gt;AND&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;OR&amp;lt;/code&amp;gt; verknüpft, oder mit &amp;lt;code&amp;gt;NOT&amp;lt;/code&amp;gt; negiert werden. &lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;BETWEEN&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;IS NULL&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Entwirf dann Abfragen für folgende Datensätze:&lt;br /&gt;
&lt;br /&gt;
# Alle Kommentare, die zwischen 2018-09-21 07:57:19 und 2018-09-21 09:57:19 erstellt wurden. &lt;br /&gt;
# Zehn Photos, deren Beschreibung &amp;lt;code&amp;gt;#sonne&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;#strand&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;#meer&amp;lt;/code&amp;gt; enthalten.&lt;br /&gt;
# Alle Photos, deren URL &amp;lt;code&amp;gt;animals&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
# Alle Photos, deren URL &#039;&#039;nicht&#039;&#039; &amp;lt;code&amp;gt;animals&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
# Alle Nutzer, die aus Frankfurt oder Berlin kommen und zwischen 150 und 168 Zentimeter groß sind. &lt;br /&gt;
# Alle Nutzer, die keine Größe eingetragen haben.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Eine mächtige Bedingung ist das &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; Schlüsselwort. Mit ihm kann ein Wert mit einer ganzen &#039;&#039;Liste&#039;&#039; von Werten verglichen werden. Der Operator prüft also, ob ein Wert in einer Liste vorkommt, oder nicht.&lt;br /&gt;
&lt;br /&gt;
Betrachte beispielsweise folgende Abfragen und vergleiche sie miteinander. Was fragen sie ab und wie ist der &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; Befehl aufgebaut?&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;SELECT * FROM users WHERE city = &amp;quot;Frankfurt&amp;quot; OR city = &amp;quot;Berlin&amp;quot; OR city = &amp;quot;Leipzig&amp;quot; OR city = &amp;quot;München&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;SELECT * FROM users WHERE city IN (&amp;quot;Frankfurt&amp;quot;,&amp;quot;Berlin&amp;quot;,&amp;quot;Leipzig&amp;quot;,&amp;quot;München&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;SELECT FROM users WHERE city NOT IN (&amp;quot;Frankfurt&amp;quot;,&amp;quot;Berlin&amp;quot;,&amp;quot;Leipzig&amp;quot;,&amp;quot;München&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Dokumnetiert die bisher kennengelernten Schlüsselwörter mit einer kurzen Beschreibung der Funktion in der Wissenslandkarte. Legt dazu gemeinsam [https://markdown-syntax.de/Syntax-GFM/Tabellen/ eine Tabelle] an.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
Schlüsselwort | Beschreibung&lt;br /&gt;
-------- | -------- &lt;br /&gt;
`SELECT`   | Leitet eine Abfrage zur Auswahl von Daten ein. ...&lt;br /&gt;
...   | ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Erstellen von Tabellen in Markdown ist recht sperrig. Daher ist es sinnvoll ein Werkzeug wie den [https://www.tablesgenerator.com/markdown_tables Markdown Tablegenerator] zu verwenden.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Funktionen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
SQL bietet auch Möglichkeiten, die abgefragten Datensätze durch die Anwendung von Rechenoperationen und Funktionen zu &#039;&#039;transformieren&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Um zum Beispiel die Größe der Nutzer nicht in Zentimetern, sondern in Millimetern abzufragen, könnte die Abfrage so lauten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT username,centimeters*10 FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT COUNT(*) FROM comments&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT MIN(centimeters), MAX(centimeters),AVG(centimeters),ROUND(AVG(centimeters),2),ROUND(AVG(centimeters)),SUM(centimeters) FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT centimeters+100,4+3,centimeters*2,id%2 FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT UPPER(username),CONCAT(city,&amp;quot;, &amp;quot;,country) FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT CONCAT(name,&amp;quot; aus &amp;quot;, city, &amp;quot; (&amp;quot;,UPPER(LEFT(country,3)),&amp;quot;)&amp;quot;) FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT DAY(created_at),MONTH(created_at),YEAR(created_at) FROM users ORDER BY created_at DESC LIMIT 1&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT DAY(created_at),MONTH(created_at),YEAR(created_at) FROM users LIMIT 1 ORDER BY created_at DESC&amp;lt;/code&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Mit der Funktion &amp;lt;code&amp;gt;RAND()&amp;lt;/code&amp;gt; können Zufallszahlen generiert werden. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT RAND()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; befehl benutzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT username FROM users ORDER BY RAND()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Führe die Abfrage mehrmals aus und beobachte die Ergebnisse.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Tabellen verknüpfen - Teil I ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Eine der wichtigsten Eigenschaften von relationalen Datenbanken ist die Verknüpfung der in den verschiedenen Tabellen gespeicherten Daten.&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis einer Abfrage ist eine Liste von Datensätzen. Da &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; mit einer Liste vergleicht, kann das Ergebnis einer &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; Abfrage als Argument für &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; benutzt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * &lt;br /&gt;
FROM photos &lt;br /&gt;
WHERE user_id IN (&lt;br /&gt;
  SELECT id&lt;br /&gt;
  FROM users&lt;br /&gt;
  WHERE city = &amp;quot;Berlin&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und beschriebe mit eigenen Worten, welche Datensätze abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
Teste dann folgende Abfrage und erkläre die Fehlermeldung:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * &lt;br /&gt;
FROM photos &lt;br /&gt;
WHERE user_id IN (&lt;br /&gt;
  SELECT id,username&lt;br /&gt;
  FROM users&lt;br /&gt;
  WHERE city = &amp;quot;Berlin&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erstelle folgende Abfragen:&lt;br /&gt;
&lt;br /&gt;
# Alle Kommentare zu Fotos, die vom Nutzer mit der ID &amp;lt;code&amp;gt;109&amp;lt;/code&amp;gt; erstellt wurden.&lt;br /&gt;
# Alle Likes von Nutzern, die in München oder Berlin wohnen.&lt;br /&gt;
# Alle Likes zu Photos, die von Nutzern gepostet wurden, die in Mühldorf oder Biederitz wohnen.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
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 &#039;&#039;Vereinigung&#039;&#039; von zwei Ergebnissen wird mit dem Schlüsselwort &amp;lt;code&amp;gt;UNION&amp;lt;/code&amp;gt; erreicht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT id,username,city FROM users WHERE centimeters BETWEEN 180 AND 200&lt;br /&gt;
UNION&lt;br /&gt;
SELECT id,username,city FROM users WHERE YEAR(birthday) = 2005&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und beschriebe mit eigenen Worten, welche Datensätze abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
Probiere dann die folgenden beiden Abfragen aus und vergleiche ihre Ergebnisse. Was ändert das Schlüsselwort &amp;lt;code&amp;gt;ALL&amp;lt;/code&amp;gt;?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
UNION&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
UNION ALL&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erstelle dann folgende Abfragen mit Hilfe von &amp;lt;code&amp;gt;UNION&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
# Alle created_at und updated_at Felder (auch doppelte) aus den Tabellen photos, comments und likes, sortiert nach created_at.&lt;br /&gt;
# Alle Städtenamen, die mit &amp;quot;W&amp;quot; oder &amp;quot;R&amp;quot; beginnen.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Verschachtelte Abfragen ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Hinter dem &amp;lt;code&amp;gt;FROM&amp;lt;/code&amp;gt; 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 &amp;lt;code&amp;gt;FROM&amp;lt;/code&amp;gt; also eine Tabelle. Diese kann auch dynamisch mit einer weiteren Abfrage erstellt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * FROM (&lt;br /&gt;
  SELECT id,username,name&lt;br /&gt;
  FROM users&lt;br /&gt;
  WHERE created_at &amp;gt; &amp;quot;2017-09-22&amp;quot;&lt;br /&gt;
) &lt;br /&gt;
WHERE LENGTH(username) = 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fallunterscheidungen ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Manchmal möchte man verschiedene Fälle an Werten unterschieden und darauf basierend die zurückgelieferten Werte steuern. Dazu gibt es in SQL die &amp;lt;code&amp;gt;CASE&amp;lt;/code&amp;gt; Anweisung.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT &lt;br /&gt;
  url,&lt;br /&gt;
  CASE &lt;br /&gt;
    WHEN &lt;br /&gt;
      description LIKE &#039;%natur%&#039; &lt;br /&gt;
      OR description LIKE &#039;%landschaft%&#039;  &lt;br /&gt;
      OR description LIKE &#039;%berg%&#039; &lt;br /&gt;
    THEN true &lt;br /&gt;
    ELSE false &lt;br /&gt;
  END &lt;br /&gt;
FROM photos &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und beschriebe mit eigenen Worten, wie &amp;lt;code&amp;gt;CASE&amp;lt;/code&amp;gt; funktioniert.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Werbung ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Auf einer Photoseite werden unterhalb der Photos Werbebanner eingeblendet. Welche Werbung gezeigt wird, wird durch eine SQL-Abfrage gesteuert. Die Werbung kann auf einen Nutzer zugeschnitten sein, oder auf das Photo, unter dem sie angezeigt wird.&lt;br /&gt;
&lt;br /&gt;
Überlege dir eine Werbeanzeige, die du in InstaHub schalten möchtest und für welche Zielgruppe diese geeignet ist. Wie könntest du Nutzer der Zielgruppe in InstaHub möglichst genau identifizieren? (Um deine Anzeige später zu testen ist es einfacher, die Werbung anhand des Photos zu schalten.)&lt;br /&gt;
&lt;br /&gt;
Entwirf dann eine SQL-Abfrage, die so genau es geht auf die Zielgruppe zugeschnitten ist. Die Vorgaben für eine Werbe-Abfrage lauten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Die Abfrage muss true oder false ergeben. Alternativ kann auch eine Liste zurückgegeben werden, in welcher die Benutzer-ID gesucht wird. $user kann als Platzhalter für den angemeldeten Benutzer und $photo für das aktuelle Photo verwendet werden.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Teste die Abfrage in InstaHub.&lt;br /&gt;
&lt;br /&gt;
Hinweis: Mit der &amp;lt;code&amp;gt;CASE&amp;lt;/code&amp;gt;-Anweisung von oben kannst du zwischen true und false unterscheiden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT &lt;br /&gt;
  CASE gender &lt;br /&gt;
    WHEN &#039;female&#039; &lt;br /&gt;
      THEN true &lt;br /&gt;
    ELSE false &lt;br /&gt;
  END &lt;br /&gt;
FROM users &lt;br /&gt;
WHERE id=$user&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Erstellte ein neues Werbebanner in InstaHub. Gehe dazu auf den Kiosk oben und Wähle &amp;quot;Kampagnen&amp;quot;. Klicke das grüne Plus und gib die relevanten Daten ein. (Name und SQL-Anfrage sind notwendig. Wenn du möchtest, kannst du ein eigenes Bild nutzen. Der Rest kann so bleiben wie er ist.)&lt;br /&gt;
[[Datei:InstaHub NewAd.png|center|400px]]&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Datenauswertung ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Bearbeite den [https://lernpfad.ch/pfad/0osdqmncydgc Lernpfad SQL: Daten auswerten].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Datenmanipulation ===&lt;br /&gt;
Abfragesprachen wie SQL arbeiten nach dem [[wikipedia:CRUD|CRUD]]-Prinzip: &#039;&#039;&#039;C&#039;&#039;&#039;reate, &#039;&#039;&#039;R&#039;&#039;&#039;etrieve, &#039;&#039;&#039;U&#039;&#039;&#039;pdate, &#039;&#039;&#039;D&#039;&#039;&#039;elete&lt;br /&gt;
&lt;br /&gt;
Bisher haben wir uns nur mit dem &#039;&#039;&#039;R&#039;&#039;&#039; befasst und Daten aus der Datenbank abgefragt. Die drei anderen Teile des Akronyms sind in SQL zum Glück weniger komplex.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Bearbeite den [https://lernpfad.ch/pfad/43folj7iwnkc Lernpfad SQL:  INSERT, DELETE und UPDATE].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Tabellen verknüpfen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Bearbeite den [https://lernpfad.ch/pfad/emmr5jvq0bgu Lernpfad SQL:  Tabellen verknüpfen].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== SQL-Island ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Begib dich auf die [[SQL-Island]].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Datenbanken modellieren ===&lt;br /&gt;
&lt;br /&gt;
[https://erdplus.com/standalone ERDPlus]&lt;br /&gt;
&lt;br /&gt;
=== Mehrere Abfagen hintereinander ausführen ===&lt;br /&gt;
&lt;br /&gt;
{{Info:Start}}&lt;br /&gt;
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.&lt;br /&gt;
{{Info:End}}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte:2021/22]]&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Projekt:2024/InstaHub&amp;diff=9970</id>
		<title>Projekt:2024/InstaHub</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Projekt:2024/InstaHub&amp;diff=9970"/>
		<updated>2025-01-15T11:56:43Z</updated>

		<summary type="html">&lt;p&gt;Ngb: /* Bedingungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Projektseite&lt;br /&gt;
|Projekt=InstaHub&lt;br /&gt;
|Kurs=Informatik LK&lt;br /&gt;
|Schuljahr=2024/25&lt;br /&gt;
}}&lt;br /&gt;
{{Kasten|[[#Bedingungen|&#039;&#039;&#039;Zur aktuellen Aufgabe springen&#039;&#039;&#039;]]|class=text-center}}&lt;br /&gt;
&lt;br /&gt;
== Projekt InstaHub ==&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Erstelle dir einen Zugang zu InstaHub. Das Video zeigt dir, wie du vorgehen musst: https://youtu.be/6DnmVjtF3UU&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Grundlagen von Datenabfragen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Benutze in InstaHub die Suchfunktion (Datenbanksymbol -&amp;gt; Suche), um die folgenden Abfragen zu stellen. Setze dabei den Haken bei &amp;quot;Zeige SQL&amp;quot; und vergleiche die SQL-Abfrage mit der Suchmaske und der Ergebnistabelle. Notiere dir wichtige Befehle.&lt;br /&gt;
&lt;br /&gt;
# Alle Nutzer.&lt;br /&gt;
# Alle männlichen / alle weiblichen Nutzer.&lt;br /&gt;
# Alle Nutzer, die sich nach dem 23.09.2017 registriert haben.&lt;br /&gt;
# Alle Nutzer aus München.&lt;br /&gt;
# Alle Nutzer sortiert nach Geburtstag.&lt;br /&gt;
# Nutzernamen und Passwort aller Nutzer.&lt;br /&gt;
# Nutzernamen und Passwort aller Nutzer, die kleiner als 1,60 Meter sind.&lt;br /&gt;
# Alle Männer, die größer als 1,80 Meter sind, sortiert nach Datum der Registrierung.&lt;br /&gt;
# Alle Frauen, deren Nutzername die Ziffern &amp;lt;code&amp;gt;45&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Benutze in InstaHub die SQL Abfragefunktion (Datenbanksymbol -&amp;gt; SQL), um SQL-Abfragen für die folgenden Informationen zu erstellen. Nutze dazu die [[Befehlsreferenz SQL]] im Wiki als Hilfe.&lt;br /&gt;
&lt;br /&gt;
# Alle Photos.&lt;br /&gt;
# Alle Photos des Nutzers mit der ID &amp;lt;code&amp;gt;42&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Alle Photos, sortiert nach Erstellungsdatum.&lt;br /&gt;
# Die ID des Nutzers und die URL aller Photos.&lt;br /&gt;
# Alle Photos, deren Beschreibung die Zeichenkette &amp;lt;code&amp;gt;#sonne&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
&lt;br /&gt;
Denk dir weitere Abfragen aus, mit der du die Syntax des &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt;-Befehls ausprobieren kannst.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Abfragen einschränken und sortieren ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; Abfragen lassen sich mit den Schlüsselwörtern &amp;lt;code&amp;gt;LIMIT&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;OFFSET&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;DISTINCT&amp;lt;/code&amp;gt; weiter präzisieren. &lt;br /&gt;
&lt;br /&gt;
# Führe die Abfragen aus und analysiere die Funktion und Syntax der &amp;lt;code&amp;gt;LIMIT&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;OFFSET&amp;lt;/code&amp;gt; Schlüsselwörter.&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT * FROM users LIMIT 5&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT * FROM users LIMIT 10&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT * FROM users LIMIT 5 OFFSET 5&amp;lt;/code&amp;gt;&lt;br /&gt;
# Führe die Abfragen aus und analysiere die Funktion und Syntax des &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; Schlüsselwortes.&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY id&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY username&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY centimeters &amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY centimeters ASC&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY centimeters DESC&amp;lt;/code&amp;gt;&lt;br /&gt;
# Führe die Abfragen aus und analysiere die Funktion und Syntax des &amp;lt;code&amp;gt;DISTINCT&amp;lt;/code&amp;gt; Schlüsselwortes.&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT city FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT DISTINCT city FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# Kombiniere nun die neuen Schlüsselwörter miteinander und entwickele Abfragen zu folgenden Datensätzen:&lt;br /&gt;
## Die fünf größten männlichen Nutzer.&lt;br /&gt;
## Die acht kleinsten weiblichen Nutzer, beginnend ab der Drittkleinsten.&lt;br /&gt;
## 15 unterschiedliche aufsteigend sortierte Namen.&lt;br /&gt;
## Das zuletzt gepostete Photo.&lt;br /&gt;
## Das vorletzte Photo.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Bedingungen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Mittels der &amp;lt;code&amp;gt;WHERE&amp;lt;/code&amp;gt;-Klausel lassen sich Datensätze gezielt auf bestimmte Bedingungen einschränken. Jedes Datenfeld hat einen festgelegten Datentyp (im Wesentlichen &#039;&#039;Zahl&#039;&#039;, &#039;&#039;Text&#039;&#039; und &#039;&#039;Datum&#039;&#039;). Je nach Datentyp lassen sich unterschiedliche Bedingungen nutzen. Bedingungen sind entweder &amp;lt;code&amp;gt;TRUE&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;FALSE&amp;lt;/code&amp;gt;. Bedingungen können mit &amp;lt;code&amp;gt;AND&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;OR&amp;lt;/code&amp;gt; verknüpft, oder mit &amp;lt;code&amp;gt;NOT&amp;lt;/code&amp;gt; negiert werden. &lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;BETWEEN&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;IS NULL&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Entwirf dann Abfragen für folgende Datensätze:&lt;br /&gt;
&lt;br /&gt;
# Alle Kommentare, die zwischen 2018-09-21 07:57:19 und 2018-09-21 09:57:19 erstellt wurden. &lt;br /&gt;
# Zehn Photos, deren Beschreibung &amp;lt;code&amp;gt;#sonne&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;#strand&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;#meer&amp;lt;/code&amp;gt; enthalten.&lt;br /&gt;
# Alle Photos, deren URL &amp;lt;code&amp;gt;animals&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
# Alle Photos, deren URL &#039;&#039;nicht&#039;&#039; &amp;lt;code&amp;gt;animals&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
# Alle Nutzer, die aus Frankfurt oder Berlin kommen und zwischen 150 und 168 Zentimeter groß sind. &lt;br /&gt;
# Alle Nutzer, die keine Größe eingetragen haben.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Eine mächtige Bedingung ist das &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; Schlüsselwort. Mit ihm kann ein Wert mit einer ganzen &#039;&#039;Liste&#039;&#039; von Werten verglichen werden. Der Operator prüft also, ob ein Wert in einer Liste vorkommt, oder nicht.&lt;br /&gt;
&lt;br /&gt;
Betrachte beispielsweise folgende Abfragen und vergleiche sie miteinander. Was fragen sie ab und wie ist der &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; Befehl aufgebaut?&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;SELECT * FROM users WHERE city = &amp;quot;Frankfurt&amp;quot; OR city = &amp;quot;Berlin&amp;quot; OR city = &amp;quot;Leipzig&amp;quot; OR city = &amp;quot;München&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;SELECT * FROM users WHERE city IN (&amp;quot;Frankfurt&amp;quot;,&amp;quot;Berlin&amp;quot;,&amp;quot;Leipzig&amp;quot;,&amp;quot;München&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;SELECT FROM users WHERE city NOT IN (&amp;quot;Frankfurt&amp;quot;,&amp;quot;Berlin&amp;quot;,&amp;quot;Leipzig&amp;quot;,&amp;quot;München&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Dokumnetiert die bisher kennengelernten Schlüsselwörter mit einer kurzen Beschreibung der Funktion in der Wissenslandkarte. Legt dazu gemeinsam [https://markdown-syntax.de/Syntax-GFM/Tabellen/ eine Tabelle] an.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
Schlüsselwort | Beschreibung&lt;br /&gt;
-------- | -------- &lt;br /&gt;
`SELECT`   | Leitet eine Abfrage zur Auswahl von Daten ein. ...&lt;br /&gt;
...   | ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Funktionen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
SQL bietet auch Möglichkeiten, die abgefragten Datensätze durch die Anwendung von Rechenoperationen und Funktionen zu &#039;&#039;transformieren&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Um zum Beispiel die Größe der Nutzer nicht in Zentimetern, sondern in Millimetern abzufragen, könnte die Abfrage so lauten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT username,centimeters*10 FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT COUNT(*) FROM comments&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT MIN(centimeters), MAX(centimeters),AVG(centimeters),ROUND(AVG(centimeters),2),ROUND(AVG(centimeters)),SUM(centimeters) FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT centimeters+100,4+3,centimeters*2,id%2 FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT UPPER(username),CONCAT(city,&amp;quot;, &amp;quot;,country) FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT CONCAT(name,&amp;quot; aus &amp;quot;, city, &amp;quot; (&amp;quot;,UPPER(LEFT(country,3)),&amp;quot;)&amp;quot;) FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT DAY(created_at),MONTH(created_at),YEAR(created_at) FROM users ORDER BY created_at DESC LIMIT 1&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT DAY(created_at),MONTH(created_at),YEAR(created_at) FROM users LIMIT 1 ORDER BY created_at DESC&amp;lt;/code&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Mit der Funktion &amp;lt;code&amp;gt;RAND()&amp;lt;/code&amp;gt; können Zufallszahlen generiert werden. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT RAND()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; befehl benutzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT username FROM users ORDER BY RAND()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Führe die Abfrage mehrmals aus und beobachte die Ergebnisse.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Tabellen verknüpfen - Teil I ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Eine der wichtigsten Eigenschaften von relationalen Datenbanken ist die Verknüpfung der in den verschiedenen Tabellen gespeicherten Daten.&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis einer Abfrage ist eine Liste von Datensätzen. Da &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; mit einer Liste vergleicht, kann das Ergebnis einer &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; Abfrage als Argument für &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; benutzt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * &lt;br /&gt;
FROM photos &lt;br /&gt;
WHERE user_id IN (&lt;br /&gt;
  SELECT id&lt;br /&gt;
  FROM users&lt;br /&gt;
  WHERE city = &amp;quot;Berlin&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und beschriebe mit eigenen Worten, welche Datensätze abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
Teste dann folgende Abfrage und erkläre die Fehlermeldung:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * &lt;br /&gt;
FROM photos &lt;br /&gt;
WHERE user_id IN (&lt;br /&gt;
  SELECT id,username&lt;br /&gt;
  FROM users&lt;br /&gt;
  WHERE city = &amp;quot;Berlin&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erstelle folgende Abfragen:&lt;br /&gt;
&lt;br /&gt;
# Alle Kommentare zu Fotos, die vom Nutzer mit der ID &amp;lt;code&amp;gt;109&amp;lt;/code&amp;gt; erstellt wurden.&lt;br /&gt;
# Alle Likes von Nutzern, die in München oder Berlin wohnen.&lt;br /&gt;
# Alle Likes zu Photos, die von Nutzern gepostet wurden, die in Mühldorf oder Biederitz wohnen.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
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 &#039;&#039;Vereinigung&#039;&#039; von zwei Ergebnissen wird mit dem Schlüsselwort &amp;lt;code&amp;gt;UNION&amp;lt;/code&amp;gt; erreicht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT id,username,city FROM users WHERE centimeters BETWEEN 180 AND 200&lt;br /&gt;
UNION&lt;br /&gt;
SELECT id,username,city FROM users WHERE YEAR(birthday) = 2005&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und beschriebe mit eigenen Worten, welche Datensätze abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
Probiere dann die folgenden beiden Abfragen aus und vergleiche ihre Ergebnisse. Was ändert das Schlüsselwort &amp;lt;code&amp;gt;ALL&amp;lt;/code&amp;gt;?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
UNION&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
UNION ALL&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erstelle dann folgende Abfragen mit Hilfe von &amp;lt;code&amp;gt;UNION&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
# Alle created_at und updated_at Felder (auch doppelte) aus den Tabellen photos, comments und likes, sortiert nach created_at.&lt;br /&gt;
# Alle Städtenamen, die mit &amp;quot;W&amp;quot; oder &amp;quot;R&amp;quot; beginnen.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Verschachtelte Abfragen ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Hinter dem &amp;lt;code&amp;gt;FROM&amp;lt;/code&amp;gt; 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 &amp;lt;code&amp;gt;FROM&amp;lt;/code&amp;gt; also eine Tabelle. Diese kann auch dynamisch mit einer weiteren Abfrage erstellt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * FROM (&lt;br /&gt;
  SELECT id,username,name&lt;br /&gt;
  FROM users&lt;br /&gt;
  WHERE created_at &amp;gt; &amp;quot;2017-09-22&amp;quot;&lt;br /&gt;
) &lt;br /&gt;
WHERE LENGTH(username) = 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fallunterscheidungen ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Manchmal möchte man verschiedene Fälle an Werten unterschieden und darauf basierend die zurückgelieferten Werte steuern. Dazu gibt es in SQL die &amp;lt;code&amp;gt;CASE&amp;lt;/code&amp;gt; Anweisung.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT &lt;br /&gt;
  url,&lt;br /&gt;
  CASE &lt;br /&gt;
    WHEN &lt;br /&gt;
      description LIKE &#039;%natur%&#039; &lt;br /&gt;
      OR description LIKE &#039;%landschaft%&#039;  &lt;br /&gt;
      OR description LIKE &#039;%berg%&#039; &lt;br /&gt;
    THEN true &lt;br /&gt;
    ELSE false &lt;br /&gt;
  END &lt;br /&gt;
FROM photos &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und beschriebe mit eigenen Worten, wie &amp;lt;code&amp;gt;CASE&amp;lt;/code&amp;gt; funktioniert.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Werbung ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Auf einer Photoseite werden unterhalb der Photos Werbebanner eingeblendet. Welche Werbung gezeigt wird, wird durch eine SQL-Abfrage gesteuert. Die Werbung kann auf einen Nutzer zugeschnitten sein, oder auf das Photo, unter dem sie angezeigt wird.&lt;br /&gt;
&lt;br /&gt;
Überlege dir eine Werbeanzeige, die du in InstaHub schalten möchtest und für welche Zielgruppe diese geeignet ist. Wie könntest du Nutzer der Zielgruppe in InstaHub möglichst genau identifizieren? (Um deine Anzeige später zu testen ist es einfacher, die Werbung anhand des Photos zu schalten.)&lt;br /&gt;
&lt;br /&gt;
Entwirf dann eine SQL-Abfrage, die so genau es geht auf die Zielgruppe zugeschnitten ist. Die Vorgaben für eine Werbe-Abfrage lauten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Die Abfrage muss true oder false ergeben. Alternativ kann auch eine Liste zurückgegeben werden, in welcher die Benutzer-ID gesucht wird. $user kann als Platzhalter für den angemeldeten Benutzer und $photo für das aktuelle Photo verwendet werden.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Teste die Abfrage in InstaHub.&lt;br /&gt;
&lt;br /&gt;
Hinweis: Mit der &amp;lt;code&amp;gt;CASE&amp;lt;/code&amp;gt;-Anweisung von oben kannst du zwischen true und false unterscheiden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT &lt;br /&gt;
  CASE gender &lt;br /&gt;
    WHEN &#039;female&#039; &lt;br /&gt;
      THEN true &lt;br /&gt;
    ELSE false &lt;br /&gt;
  END &lt;br /&gt;
FROM users &lt;br /&gt;
WHERE id=$user&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Erstellte ein neues Werbebanner in InstaHub. Gehe dazu auf den Kiosk oben und Wähle &amp;quot;Kampagnen&amp;quot;. Klicke das grüne Plus und gib die relevanten Daten ein. (Name und SQL-Anfrage sind notwendig. Wenn du möchtest, kannst du ein eigenes Bild nutzen. Der Rest kann so bleiben wie er ist.)&lt;br /&gt;
[[Datei:InstaHub NewAd.png|center|400px]]&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Datenauswertung ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Bearbeite den [https://lernpfad.ch/pfad/0osdqmncydgc Lernpfad SQL: Daten auswerten].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Datenmanipulation ===&lt;br /&gt;
Abfragesprachen wie SQL arbeiten nach dem [[wikipedia:CRUD|CRUD]]-Prinzip: &#039;&#039;&#039;C&#039;&#039;&#039;reate, &#039;&#039;&#039;R&#039;&#039;&#039;etrieve, &#039;&#039;&#039;U&#039;&#039;&#039;pdate, &#039;&#039;&#039;D&#039;&#039;&#039;elete&lt;br /&gt;
&lt;br /&gt;
Bisher haben wir uns nur mit dem &#039;&#039;&#039;R&#039;&#039;&#039; befasst und Daten aus der Datenbank abgefragt. Die drei anderen Teile des Akronyms sind in SQL zum Glück weniger komplex.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Bearbeite den [https://lernpfad.ch/pfad/43folj7iwnkc Lernpfad SQL:  INSERT, DELETE und UPDATE].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Tabellen verknüpfen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Bearbeite den [https://lernpfad.ch/pfad/emmr5jvq0bgu Lernpfad SQL:  Tabellen verknüpfen].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== SQL-Island ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Begib dich auf die [[SQL-Island]].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Datenbanken modellieren ===&lt;br /&gt;
&lt;br /&gt;
[https://erdplus.com/standalone ERDPlus]&lt;br /&gt;
&lt;br /&gt;
=== Mehrere Abfagen hintereinander ausführen ===&lt;br /&gt;
&lt;br /&gt;
{{Info:Start}}&lt;br /&gt;
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.&lt;br /&gt;
{{Info:End}}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte:2021/22]]&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Projekt:2024/InstaHub&amp;diff=9969</id>
		<title>Projekt:2024/InstaHub</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Projekt:2024/InstaHub&amp;diff=9969"/>
		<updated>2025-01-15T11:55:50Z</updated>

		<summary type="html">&lt;p&gt;Ngb: /* Bedingungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Projektseite&lt;br /&gt;
|Projekt=InstaHub&lt;br /&gt;
|Kurs=Informatik LK&lt;br /&gt;
|Schuljahr=2024/25&lt;br /&gt;
}}&lt;br /&gt;
{{Kasten|[[#Bedingungen|&#039;&#039;&#039;Zur aktuellen Aufgabe springen&#039;&#039;&#039;]]|class=text-center}}&lt;br /&gt;
&lt;br /&gt;
== Projekt InstaHub ==&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Erstelle dir einen Zugang zu InstaHub. Das Video zeigt dir, wie du vorgehen musst: https://youtu.be/6DnmVjtF3UU&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Grundlagen von Datenabfragen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Benutze in InstaHub die Suchfunktion (Datenbanksymbol -&amp;gt; Suche), um die folgenden Abfragen zu stellen. Setze dabei den Haken bei &amp;quot;Zeige SQL&amp;quot; und vergleiche die SQL-Abfrage mit der Suchmaske und der Ergebnistabelle. Notiere dir wichtige Befehle.&lt;br /&gt;
&lt;br /&gt;
# Alle Nutzer.&lt;br /&gt;
# Alle männlichen / alle weiblichen Nutzer.&lt;br /&gt;
# Alle Nutzer, die sich nach dem 23.09.2017 registriert haben.&lt;br /&gt;
# Alle Nutzer aus München.&lt;br /&gt;
# Alle Nutzer sortiert nach Geburtstag.&lt;br /&gt;
# Nutzernamen und Passwort aller Nutzer.&lt;br /&gt;
# Nutzernamen und Passwort aller Nutzer, die kleiner als 1,60 Meter sind.&lt;br /&gt;
# Alle Männer, die größer als 1,80 Meter sind, sortiert nach Datum der Registrierung.&lt;br /&gt;
# Alle Frauen, deren Nutzername die Ziffern &amp;lt;code&amp;gt;45&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Benutze in InstaHub die SQL Abfragefunktion (Datenbanksymbol -&amp;gt; SQL), um SQL-Abfragen für die folgenden Informationen zu erstellen. Nutze dazu die [[Befehlsreferenz SQL]] im Wiki als Hilfe.&lt;br /&gt;
&lt;br /&gt;
# Alle Photos.&lt;br /&gt;
# Alle Photos des Nutzers mit der ID &amp;lt;code&amp;gt;42&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Alle Photos, sortiert nach Erstellungsdatum.&lt;br /&gt;
# Die ID des Nutzers und die URL aller Photos.&lt;br /&gt;
# Alle Photos, deren Beschreibung die Zeichenkette &amp;lt;code&amp;gt;#sonne&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
&lt;br /&gt;
Denk dir weitere Abfragen aus, mit der du die Syntax des &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt;-Befehls ausprobieren kannst.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Abfragen einschränken und sortieren ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; Abfragen lassen sich mit den Schlüsselwörtern &amp;lt;code&amp;gt;LIMIT&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;OFFSET&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;DISTINCT&amp;lt;/code&amp;gt; weiter präzisieren. &lt;br /&gt;
&lt;br /&gt;
# Führe die Abfragen aus und analysiere die Funktion und Syntax der &amp;lt;code&amp;gt;LIMIT&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;OFFSET&amp;lt;/code&amp;gt; Schlüsselwörter.&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT * FROM users LIMIT 5&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT * FROM users LIMIT 10&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT * FROM users LIMIT 5 OFFSET 5&amp;lt;/code&amp;gt;&lt;br /&gt;
# Führe die Abfragen aus und analysiere die Funktion und Syntax des &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; Schlüsselwortes.&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY id&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY username&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY centimeters &amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY centimeters ASC&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY centimeters DESC&amp;lt;/code&amp;gt;&lt;br /&gt;
# Führe die Abfragen aus und analysiere die Funktion und Syntax des &amp;lt;code&amp;gt;DISTINCT&amp;lt;/code&amp;gt; Schlüsselwortes.&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT city FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT DISTINCT city FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# Kombiniere nun die neuen Schlüsselwörter miteinander und entwickele Abfragen zu folgenden Datensätzen:&lt;br /&gt;
## Die fünf größten männlichen Nutzer.&lt;br /&gt;
## Die acht kleinsten weiblichen Nutzer, beginnend ab der Drittkleinsten.&lt;br /&gt;
## 15 unterschiedliche aufsteigend sortierte Namen.&lt;br /&gt;
## Das zuletzt gepostete Photo.&lt;br /&gt;
## Das vorletzte Photo.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Bedingungen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Mittels der &amp;lt;code&amp;gt;WHERE&amp;lt;/code&amp;gt;-Klausel lassen sich Datensätze gezielt auf bestimmte Bedingungen einschränken. Jedes Datenfeld hat einen festgelegten Datentyp (im Wesentlichen &#039;&#039;Zahl&#039;&#039;, &#039;&#039;Text&#039;&#039; und &#039;&#039;Datum&#039;&#039;). Je nach Datentyp lassen sich unterschiedliche Bedingungen nutzen. Bedingungen sind entweder &amp;lt;code&amp;gt;TRUE&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;FALSE&amp;lt;/code&amp;gt;. Bedingungen können mit &amp;lt;code&amp;gt;AND&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;OR&amp;lt;/code&amp;gt; verknüpft, oder mit &amp;lt;code&amp;gt;NOT&amp;lt;/code&amp;gt; negiert werden. &lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;BETWEEN&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;IS NULL&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Entwirf dann Abfragen für folgende Datensätze:&lt;br /&gt;
&lt;br /&gt;
# Alle Kommentare, die zwischen 2018-09-21 07:57:19 und 2018-09-21 09:57:19 erstellt wurden. &lt;br /&gt;
# Zehn Photos, deren Beschreibung &amp;lt;code&amp;gt;#sonne&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;#strand&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;#meer&amp;lt;/code&amp;gt; enthalten.&lt;br /&gt;
# Alle Photos, deren URL &amp;lt;code&amp;gt;animals&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
# Alle Photos, deren URL &#039;&#039;nicht&#039;&#039; &amp;lt;code&amp;gt;animals&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
# Alle Nutzer, die aus Frankfurt oder Berlin kommen und zwischen 150 und 168 Zentimeter groß sind. &lt;br /&gt;
# Alle Nutzer, die keine Größe eingetragen haben.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Eine mächtige Bedingung ist das &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; Schlüsselwort. Mit ihm kann ein Wert mit einer ganzen &#039;&#039;Liste&#039;&#039; von Werten verglichen werden. Der Operator prüft also, ob ein Wert in einer Liste vorkommt, oder nicht.&lt;br /&gt;
&lt;br /&gt;
Betrachte beispielsweise folgende Abfragen und vergleiche sie miteinander. Was fragen sie ab und wie ist der &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; Befehl aufgebaut?&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;SELECT * FROM users WHERE city = &amp;quot;Frankfurt&amp;quot; OR city = &amp;quot;Berlin&amp;quot; OR city = &amp;quot;Leipzig&amp;quot; OR city = &amp;quot;München&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;SELECT * FROM users WHERE city IN (&amp;quot;Frankfurt&amp;quot;,&amp;quot;Berlin&amp;quot;,&amp;quot;Leipzig&amp;quot;,&amp;quot;München&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;SELECT FROM users WHERE city NOT IN (&amp;quot;Frankfurt&amp;quot;,&amp;quot;Berlin&amp;quot;,&amp;quot;Leipzig&amp;quot;,&amp;quot;München&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Dokumnetiert die bisher kennengelernten Schlüsselwörter mit einer kurzen Beschreibung der Funktion in der Wissenslandkarte. Legt dazu gemeinsam [https://markdown-syntax.de/Syntax-GFM/Tabellen/ eine Tabelle] an.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
Spalte 1 | Spalte 2 | Spalte 3&lt;br /&gt;
-------- | -------- | --------&lt;br /&gt;
Inhalt   | Inhalt   | Inhalt&lt;br /&gt;
Inhalt   | Inhalt   | Inhalt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Funktionen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
SQL bietet auch Möglichkeiten, die abgefragten Datensätze durch die Anwendung von Rechenoperationen und Funktionen zu &#039;&#039;transformieren&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Um zum Beispiel die Größe der Nutzer nicht in Zentimetern, sondern in Millimetern abzufragen, könnte die Abfrage so lauten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT username,centimeters*10 FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT COUNT(*) FROM comments&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT MIN(centimeters), MAX(centimeters),AVG(centimeters),ROUND(AVG(centimeters),2),ROUND(AVG(centimeters)),SUM(centimeters) FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT centimeters+100,4+3,centimeters*2,id%2 FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT UPPER(username),CONCAT(city,&amp;quot;, &amp;quot;,country) FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT CONCAT(name,&amp;quot; aus &amp;quot;, city, &amp;quot; (&amp;quot;,UPPER(LEFT(country,3)),&amp;quot;)&amp;quot;) FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT DAY(created_at),MONTH(created_at),YEAR(created_at) FROM users ORDER BY created_at DESC LIMIT 1&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT DAY(created_at),MONTH(created_at),YEAR(created_at) FROM users LIMIT 1 ORDER BY created_at DESC&amp;lt;/code&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Mit der Funktion &amp;lt;code&amp;gt;RAND()&amp;lt;/code&amp;gt; können Zufallszahlen generiert werden. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT RAND()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; befehl benutzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT username FROM users ORDER BY RAND()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Führe die Abfrage mehrmals aus und beobachte die Ergebnisse.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Tabellen verknüpfen - Teil I ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Eine der wichtigsten Eigenschaften von relationalen Datenbanken ist die Verknüpfung der in den verschiedenen Tabellen gespeicherten Daten.&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis einer Abfrage ist eine Liste von Datensätzen. Da &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; mit einer Liste vergleicht, kann das Ergebnis einer &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; Abfrage als Argument für &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; benutzt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * &lt;br /&gt;
FROM photos &lt;br /&gt;
WHERE user_id IN (&lt;br /&gt;
  SELECT id&lt;br /&gt;
  FROM users&lt;br /&gt;
  WHERE city = &amp;quot;Berlin&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und beschriebe mit eigenen Worten, welche Datensätze abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
Teste dann folgende Abfrage und erkläre die Fehlermeldung:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * &lt;br /&gt;
FROM photos &lt;br /&gt;
WHERE user_id IN (&lt;br /&gt;
  SELECT id,username&lt;br /&gt;
  FROM users&lt;br /&gt;
  WHERE city = &amp;quot;Berlin&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erstelle folgende Abfragen:&lt;br /&gt;
&lt;br /&gt;
# Alle Kommentare zu Fotos, die vom Nutzer mit der ID &amp;lt;code&amp;gt;109&amp;lt;/code&amp;gt; erstellt wurden.&lt;br /&gt;
# Alle Likes von Nutzern, die in München oder Berlin wohnen.&lt;br /&gt;
# Alle Likes zu Photos, die von Nutzern gepostet wurden, die in Mühldorf oder Biederitz wohnen.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
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 &#039;&#039;Vereinigung&#039;&#039; von zwei Ergebnissen wird mit dem Schlüsselwort &amp;lt;code&amp;gt;UNION&amp;lt;/code&amp;gt; erreicht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT id,username,city FROM users WHERE centimeters BETWEEN 180 AND 200&lt;br /&gt;
UNION&lt;br /&gt;
SELECT id,username,city FROM users WHERE YEAR(birthday) = 2005&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und beschriebe mit eigenen Worten, welche Datensätze abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
Probiere dann die folgenden beiden Abfragen aus und vergleiche ihre Ergebnisse. Was ändert das Schlüsselwort &amp;lt;code&amp;gt;ALL&amp;lt;/code&amp;gt;?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
UNION&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
UNION ALL&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erstelle dann folgende Abfragen mit Hilfe von &amp;lt;code&amp;gt;UNION&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
# Alle created_at und updated_at Felder (auch doppelte) aus den Tabellen photos, comments und likes, sortiert nach created_at.&lt;br /&gt;
# Alle Städtenamen, die mit &amp;quot;W&amp;quot; oder &amp;quot;R&amp;quot; beginnen.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Verschachtelte Abfragen ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Hinter dem &amp;lt;code&amp;gt;FROM&amp;lt;/code&amp;gt; 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 &amp;lt;code&amp;gt;FROM&amp;lt;/code&amp;gt; also eine Tabelle. Diese kann auch dynamisch mit einer weiteren Abfrage erstellt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * FROM (&lt;br /&gt;
  SELECT id,username,name&lt;br /&gt;
  FROM users&lt;br /&gt;
  WHERE created_at &amp;gt; &amp;quot;2017-09-22&amp;quot;&lt;br /&gt;
) &lt;br /&gt;
WHERE LENGTH(username) = 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fallunterscheidungen ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Manchmal möchte man verschiedene Fälle an Werten unterschieden und darauf basierend die zurückgelieferten Werte steuern. Dazu gibt es in SQL die &amp;lt;code&amp;gt;CASE&amp;lt;/code&amp;gt; Anweisung.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT &lt;br /&gt;
  url,&lt;br /&gt;
  CASE &lt;br /&gt;
    WHEN &lt;br /&gt;
      description LIKE &#039;%natur%&#039; &lt;br /&gt;
      OR description LIKE &#039;%landschaft%&#039;  &lt;br /&gt;
      OR description LIKE &#039;%berg%&#039; &lt;br /&gt;
    THEN true &lt;br /&gt;
    ELSE false &lt;br /&gt;
  END &lt;br /&gt;
FROM photos &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und beschriebe mit eigenen Worten, wie &amp;lt;code&amp;gt;CASE&amp;lt;/code&amp;gt; funktioniert.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Werbung ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Auf einer Photoseite werden unterhalb der Photos Werbebanner eingeblendet. Welche Werbung gezeigt wird, wird durch eine SQL-Abfrage gesteuert. Die Werbung kann auf einen Nutzer zugeschnitten sein, oder auf das Photo, unter dem sie angezeigt wird.&lt;br /&gt;
&lt;br /&gt;
Überlege dir eine Werbeanzeige, die du in InstaHub schalten möchtest und für welche Zielgruppe diese geeignet ist. Wie könntest du Nutzer der Zielgruppe in InstaHub möglichst genau identifizieren? (Um deine Anzeige später zu testen ist es einfacher, die Werbung anhand des Photos zu schalten.)&lt;br /&gt;
&lt;br /&gt;
Entwirf dann eine SQL-Abfrage, die so genau es geht auf die Zielgruppe zugeschnitten ist. Die Vorgaben für eine Werbe-Abfrage lauten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Die Abfrage muss true oder false ergeben. Alternativ kann auch eine Liste zurückgegeben werden, in welcher die Benutzer-ID gesucht wird. $user kann als Platzhalter für den angemeldeten Benutzer und $photo für das aktuelle Photo verwendet werden.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Teste die Abfrage in InstaHub.&lt;br /&gt;
&lt;br /&gt;
Hinweis: Mit der &amp;lt;code&amp;gt;CASE&amp;lt;/code&amp;gt;-Anweisung von oben kannst du zwischen true und false unterscheiden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT &lt;br /&gt;
  CASE gender &lt;br /&gt;
    WHEN &#039;female&#039; &lt;br /&gt;
      THEN true &lt;br /&gt;
    ELSE false &lt;br /&gt;
  END &lt;br /&gt;
FROM users &lt;br /&gt;
WHERE id=$user&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Erstellte ein neues Werbebanner in InstaHub. Gehe dazu auf den Kiosk oben und Wähle &amp;quot;Kampagnen&amp;quot;. Klicke das grüne Plus und gib die relevanten Daten ein. (Name und SQL-Anfrage sind notwendig. Wenn du möchtest, kannst du ein eigenes Bild nutzen. Der Rest kann so bleiben wie er ist.)&lt;br /&gt;
[[Datei:InstaHub NewAd.png|center|400px]]&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Datenauswertung ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Bearbeite den [https://lernpfad.ch/pfad/0osdqmncydgc Lernpfad SQL: Daten auswerten].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Datenmanipulation ===&lt;br /&gt;
Abfragesprachen wie SQL arbeiten nach dem [[wikipedia:CRUD|CRUD]]-Prinzip: &#039;&#039;&#039;C&#039;&#039;&#039;reate, &#039;&#039;&#039;R&#039;&#039;&#039;etrieve, &#039;&#039;&#039;U&#039;&#039;&#039;pdate, &#039;&#039;&#039;D&#039;&#039;&#039;elete&lt;br /&gt;
&lt;br /&gt;
Bisher haben wir uns nur mit dem &#039;&#039;&#039;R&#039;&#039;&#039; befasst und Daten aus der Datenbank abgefragt. Die drei anderen Teile des Akronyms sind in SQL zum Glück weniger komplex.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Bearbeite den [https://lernpfad.ch/pfad/43folj7iwnkc Lernpfad SQL:  INSERT, DELETE und UPDATE].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Tabellen verknüpfen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Bearbeite den [https://lernpfad.ch/pfad/emmr5jvq0bgu Lernpfad SQL:  Tabellen verknüpfen].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== SQL-Island ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Begib dich auf die [[SQL-Island]].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Datenbanken modellieren ===&lt;br /&gt;
&lt;br /&gt;
[https://erdplus.com/standalone ERDPlus]&lt;br /&gt;
&lt;br /&gt;
=== Mehrere Abfagen hintereinander ausführen ===&lt;br /&gt;
&lt;br /&gt;
{{Info:Start}}&lt;br /&gt;
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.&lt;br /&gt;
{{Info:End}}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte:2021/22]]&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Projekt:2024/InstaHub&amp;diff=9968</id>
		<title>Projekt:2024/InstaHub</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Projekt:2024/InstaHub&amp;diff=9968"/>
		<updated>2025-01-15T11:53:45Z</updated>

		<summary type="html">&lt;p&gt;Ngb: /* Bedingungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Projektseite&lt;br /&gt;
|Projekt=InstaHub&lt;br /&gt;
|Kurs=Informatik LK&lt;br /&gt;
|Schuljahr=2024/25&lt;br /&gt;
}}&lt;br /&gt;
{{Kasten|[[#Bedingungen|&#039;&#039;&#039;Zur aktuellen Aufgabe springen&#039;&#039;&#039;]]|class=text-center}}&lt;br /&gt;
&lt;br /&gt;
== Projekt InstaHub ==&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Erstelle dir einen Zugang zu InstaHub. Das Video zeigt dir, wie du vorgehen musst: https://youtu.be/6DnmVjtF3UU&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Grundlagen von Datenabfragen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Benutze in InstaHub die Suchfunktion (Datenbanksymbol -&amp;gt; Suche), um die folgenden Abfragen zu stellen. Setze dabei den Haken bei &amp;quot;Zeige SQL&amp;quot; und vergleiche die SQL-Abfrage mit der Suchmaske und der Ergebnistabelle. Notiere dir wichtige Befehle.&lt;br /&gt;
&lt;br /&gt;
# Alle Nutzer.&lt;br /&gt;
# Alle männlichen / alle weiblichen Nutzer.&lt;br /&gt;
# Alle Nutzer, die sich nach dem 23.09.2017 registriert haben.&lt;br /&gt;
# Alle Nutzer aus München.&lt;br /&gt;
# Alle Nutzer sortiert nach Geburtstag.&lt;br /&gt;
# Nutzernamen und Passwort aller Nutzer.&lt;br /&gt;
# Nutzernamen und Passwort aller Nutzer, die kleiner als 1,60 Meter sind.&lt;br /&gt;
# Alle Männer, die größer als 1,80 Meter sind, sortiert nach Datum der Registrierung.&lt;br /&gt;
# Alle Frauen, deren Nutzername die Ziffern &amp;lt;code&amp;gt;45&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Benutze in InstaHub die SQL Abfragefunktion (Datenbanksymbol -&amp;gt; SQL), um SQL-Abfragen für die folgenden Informationen zu erstellen. Nutze dazu die [[Befehlsreferenz SQL]] im Wiki als Hilfe.&lt;br /&gt;
&lt;br /&gt;
# Alle Photos.&lt;br /&gt;
# Alle Photos des Nutzers mit der ID &amp;lt;code&amp;gt;42&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Alle Photos, sortiert nach Erstellungsdatum.&lt;br /&gt;
# Die ID des Nutzers und die URL aller Photos.&lt;br /&gt;
# Alle Photos, deren Beschreibung die Zeichenkette &amp;lt;code&amp;gt;#sonne&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
&lt;br /&gt;
Denk dir weitere Abfragen aus, mit der du die Syntax des &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt;-Befehls ausprobieren kannst.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Abfragen einschränken und sortieren ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; Abfragen lassen sich mit den Schlüsselwörtern &amp;lt;code&amp;gt;LIMIT&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;OFFSET&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;DISTINCT&amp;lt;/code&amp;gt; weiter präzisieren. &lt;br /&gt;
&lt;br /&gt;
# Führe die Abfragen aus und analysiere die Funktion und Syntax der &amp;lt;code&amp;gt;LIMIT&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;OFFSET&amp;lt;/code&amp;gt; Schlüsselwörter.&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT * FROM users LIMIT 5&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT * FROM users LIMIT 10&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT * FROM users LIMIT 5 OFFSET 5&amp;lt;/code&amp;gt;&lt;br /&gt;
# Führe die Abfragen aus und analysiere die Funktion und Syntax des &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; Schlüsselwortes.&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY id&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY username&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY centimeters &amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY centimeters ASC&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY centimeters DESC&amp;lt;/code&amp;gt;&lt;br /&gt;
# Führe die Abfragen aus und analysiere die Funktion und Syntax des &amp;lt;code&amp;gt;DISTINCT&amp;lt;/code&amp;gt; Schlüsselwortes.&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT city FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT DISTINCT city FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# Kombiniere nun die neuen Schlüsselwörter miteinander und entwickele Abfragen zu folgenden Datensätzen:&lt;br /&gt;
## Die fünf größten männlichen Nutzer.&lt;br /&gt;
## Die acht kleinsten weiblichen Nutzer, beginnend ab der Drittkleinsten.&lt;br /&gt;
## 15 unterschiedliche aufsteigend sortierte Namen.&lt;br /&gt;
## Das zuletzt gepostete Photo.&lt;br /&gt;
## Das vorletzte Photo.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Bedingungen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Mittels der &amp;lt;code&amp;gt;WHERE&amp;lt;/code&amp;gt;-Klausel lassen sich Datensätze gezielt auf bestimmte Bedingungen einschränken. Jedes Datenfeld hat einen festgelegten Datentyp (im Wesentlichen &#039;&#039;Zahl&#039;&#039;, &#039;&#039;Text&#039;&#039; und &#039;&#039;Datum&#039;&#039;). Je nach Datentyp lassen sich unterschiedliche Bedingungen nutzen. Bedingungen sind entweder &amp;lt;code&amp;gt;TRUE&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;FALSE&amp;lt;/code&amp;gt;. Bedingungen können mit &amp;lt;code&amp;gt;AND&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;OR&amp;lt;/code&amp;gt; verknüpft, oder mit &amp;lt;code&amp;gt;NOT&amp;lt;/code&amp;gt; negiert werden. &lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;BETWEEN&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;IS NULL&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Entwirf dann Abfragen für folgende Datensätze:&lt;br /&gt;
&lt;br /&gt;
# Alle Kommentare, die zwischen 2018-09-21 07:57:19 und 2018-09-21 09:57:19 erstellt wurden. &lt;br /&gt;
# Zehn Photos, deren Beschreibung &amp;lt;code&amp;gt;#sonne&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;#strand&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;#meer&amp;lt;/code&amp;gt; enthalten.&lt;br /&gt;
# Alle Photos, deren URL &amp;lt;code&amp;gt;animals&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
# Alle Photos, deren URL &#039;&#039;nicht&#039;&#039; &amp;lt;code&amp;gt;animals&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
# Alle Nutzer, die aus Frankfurt oder Berlin kommen und zwischen 150 und 168 Zentimeter groß sind. &lt;br /&gt;
# Alle Nutzer, die keine Größe eingetragen haben.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Eine mächtige Bedingung ist das &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; Schlüsselwort. Mit ihm kann ein Wert mit einer ganzen &#039;&#039;Liste&#039;&#039; von Werten verglichen werden. Der Operator prüft also, ob ein Wert in einer Liste vorkommt, oder nicht.&lt;br /&gt;
&lt;br /&gt;
Betrachte beispielsweise folgende Abfragen und vergleiche sie miteinander. Was fragen sie ab und wie ist der &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; Befehl aufgebaut?&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;SELECT * FROM users WHERE city = &amp;quot;Frankfurt&amp;quot; OR city = &amp;quot;Berlin&amp;quot; OR city = &amp;quot;Leipzig&amp;quot; OR city = &amp;quot;München&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;SELECT * FROM users WHERE city IN (&amp;quot;Frankfurt&amp;quot;,&amp;quot;Berlin&amp;quot;,&amp;quot;Leipzig&amp;quot;,&amp;quot;München&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;SELECT FROM users WHERE city NOT IN (&amp;quot;Frankfurt&amp;quot;,&amp;quot;Berlin&amp;quot;,&amp;quot;Leipzig&amp;quot;,&amp;quot;München&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Funktionen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
SQL bietet auch Möglichkeiten, die abgefragten Datensätze durch die Anwendung von Rechenoperationen und Funktionen zu &#039;&#039;transformieren&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Um zum Beispiel die Größe der Nutzer nicht in Zentimetern, sondern in Millimetern abzufragen, könnte die Abfrage so lauten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT username,centimeters*10 FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT COUNT(*) FROM comments&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT MIN(centimeters), MAX(centimeters),AVG(centimeters),ROUND(AVG(centimeters),2),ROUND(AVG(centimeters)),SUM(centimeters) FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT centimeters+100,4+3,centimeters*2,id%2 FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT UPPER(username),CONCAT(city,&amp;quot;, &amp;quot;,country) FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT CONCAT(name,&amp;quot; aus &amp;quot;, city, &amp;quot; (&amp;quot;,UPPER(LEFT(country,3)),&amp;quot;)&amp;quot;) FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT DAY(created_at),MONTH(created_at),YEAR(created_at) FROM users ORDER BY created_at DESC LIMIT 1&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT DAY(created_at),MONTH(created_at),YEAR(created_at) FROM users LIMIT 1 ORDER BY created_at DESC&amp;lt;/code&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Mit der Funktion &amp;lt;code&amp;gt;RAND()&amp;lt;/code&amp;gt; können Zufallszahlen generiert werden. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT RAND()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; befehl benutzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT username FROM users ORDER BY RAND()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Führe die Abfrage mehrmals aus und beobachte die Ergebnisse.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Tabellen verknüpfen - Teil I ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Eine der wichtigsten Eigenschaften von relationalen Datenbanken ist die Verknüpfung der in den verschiedenen Tabellen gespeicherten Daten.&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis einer Abfrage ist eine Liste von Datensätzen. Da &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; mit einer Liste vergleicht, kann das Ergebnis einer &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; Abfrage als Argument für &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; benutzt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * &lt;br /&gt;
FROM photos &lt;br /&gt;
WHERE user_id IN (&lt;br /&gt;
  SELECT id&lt;br /&gt;
  FROM users&lt;br /&gt;
  WHERE city = &amp;quot;Berlin&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und beschriebe mit eigenen Worten, welche Datensätze abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
Teste dann folgende Abfrage und erkläre die Fehlermeldung:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * &lt;br /&gt;
FROM photos &lt;br /&gt;
WHERE user_id IN (&lt;br /&gt;
  SELECT id,username&lt;br /&gt;
  FROM users&lt;br /&gt;
  WHERE city = &amp;quot;Berlin&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erstelle folgende Abfragen:&lt;br /&gt;
&lt;br /&gt;
# Alle Kommentare zu Fotos, die vom Nutzer mit der ID &amp;lt;code&amp;gt;109&amp;lt;/code&amp;gt; erstellt wurden.&lt;br /&gt;
# Alle Likes von Nutzern, die in München oder Berlin wohnen.&lt;br /&gt;
# Alle Likes zu Photos, die von Nutzern gepostet wurden, die in Mühldorf oder Biederitz wohnen.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
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 &#039;&#039;Vereinigung&#039;&#039; von zwei Ergebnissen wird mit dem Schlüsselwort &amp;lt;code&amp;gt;UNION&amp;lt;/code&amp;gt; erreicht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT id,username,city FROM users WHERE centimeters BETWEEN 180 AND 200&lt;br /&gt;
UNION&lt;br /&gt;
SELECT id,username,city FROM users WHERE YEAR(birthday) = 2005&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und beschriebe mit eigenen Worten, welche Datensätze abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
Probiere dann die folgenden beiden Abfragen aus und vergleiche ihre Ergebnisse. Was ändert das Schlüsselwort &amp;lt;code&amp;gt;ALL&amp;lt;/code&amp;gt;?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
UNION&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
UNION ALL&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erstelle dann folgende Abfragen mit Hilfe von &amp;lt;code&amp;gt;UNION&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
# Alle created_at und updated_at Felder (auch doppelte) aus den Tabellen photos, comments und likes, sortiert nach created_at.&lt;br /&gt;
# Alle Städtenamen, die mit &amp;quot;W&amp;quot; oder &amp;quot;R&amp;quot; beginnen.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Verschachtelte Abfragen ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Hinter dem &amp;lt;code&amp;gt;FROM&amp;lt;/code&amp;gt; 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 &amp;lt;code&amp;gt;FROM&amp;lt;/code&amp;gt; also eine Tabelle. Diese kann auch dynamisch mit einer weiteren Abfrage erstellt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * FROM (&lt;br /&gt;
  SELECT id,username,name&lt;br /&gt;
  FROM users&lt;br /&gt;
  WHERE created_at &amp;gt; &amp;quot;2017-09-22&amp;quot;&lt;br /&gt;
) &lt;br /&gt;
WHERE LENGTH(username) = 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fallunterscheidungen ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Manchmal möchte man verschiedene Fälle an Werten unterschieden und darauf basierend die zurückgelieferten Werte steuern. Dazu gibt es in SQL die &amp;lt;code&amp;gt;CASE&amp;lt;/code&amp;gt; Anweisung.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT &lt;br /&gt;
  url,&lt;br /&gt;
  CASE &lt;br /&gt;
    WHEN &lt;br /&gt;
      description LIKE &#039;%natur%&#039; &lt;br /&gt;
      OR description LIKE &#039;%landschaft%&#039;  &lt;br /&gt;
      OR description LIKE &#039;%berg%&#039; &lt;br /&gt;
    THEN true &lt;br /&gt;
    ELSE false &lt;br /&gt;
  END &lt;br /&gt;
FROM photos &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und beschriebe mit eigenen Worten, wie &amp;lt;code&amp;gt;CASE&amp;lt;/code&amp;gt; funktioniert.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Werbung ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Auf einer Photoseite werden unterhalb der Photos Werbebanner eingeblendet. Welche Werbung gezeigt wird, wird durch eine SQL-Abfrage gesteuert. Die Werbung kann auf einen Nutzer zugeschnitten sein, oder auf das Photo, unter dem sie angezeigt wird.&lt;br /&gt;
&lt;br /&gt;
Überlege dir eine Werbeanzeige, die du in InstaHub schalten möchtest und für welche Zielgruppe diese geeignet ist. Wie könntest du Nutzer der Zielgruppe in InstaHub möglichst genau identifizieren? (Um deine Anzeige später zu testen ist es einfacher, die Werbung anhand des Photos zu schalten.)&lt;br /&gt;
&lt;br /&gt;
Entwirf dann eine SQL-Abfrage, die so genau es geht auf die Zielgruppe zugeschnitten ist. Die Vorgaben für eine Werbe-Abfrage lauten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Die Abfrage muss true oder false ergeben. Alternativ kann auch eine Liste zurückgegeben werden, in welcher die Benutzer-ID gesucht wird. $user kann als Platzhalter für den angemeldeten Benutzer und $photo für das aktuelle Photo verwendet werden.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Teste die Abfrage in InstaHub.&lt;br /&gt;
&lt;br /&gt;
Hinweis: Mit der &amp;lt;code&amp;gt;CASE&amp;lt;/code&amp;gt;-Anweisung von oben kannst du zwischen true und false unterscheiden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT &lt;br /&gt;
  CASE gender &lt;br /&gt;
    WHEN &#039;female&#039; &lt;br /&gt;
      THEN true &lt;br /&gt;
    ELSE false &lt;br /&gt;
  END &lt;br /&gt;
FROM users &lt;br /&gt;
WHERE id=$user&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Erstellte ein neues Werbebanner in InstaHub. Gehe dazu auf den Kiosk oben und Wähle &amp;quot;Kampagnen&amp;quot;. Klicke das grüne Plus und gib die relevanten Daten ein. (Name und SQL-Anfrage sind notwendig. Wenn du möchtest, kannst du ein eigenes Bild nutzen. Der Rest kann so bleiben wie er ist.)&lt;br /&gt;
[[Datei:InstaHub NewAd.png|center|400px]]&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Datenauswertung ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Bearbeite den [https://lernpfad.ch/pfad/0osdqmncydgc Lernpfad SQL: Daten auswerten].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Datenmanipulation ===&lt;br /&gt;
Abfragesprachen wie SQL arbeiten nach dem [[wikipedia:CRUD|CRUD]]-Prinzip: &#039;&#039;&#039;C&#039;&#039;&#039;reate, &#039;&#039;&#039;R&#039;&#039;&#039;etrieve, &#039;&#039;&#039;U&#039;&#039;&#039;pdate, &#039;&#039;&#039;D&#039;&#039;&#039;elete&lt;br /&gt;
&lt;br /&gt;
Bisher haben wir uns nur mit dem &#039;&#039;&#039;R&#039;&#039;&#039; befasst und Daten aus der Datenbank abgefragt. Die drei anderen Teile des Akronyms sind in SQL zum Glück weniger komplex.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Bearbeite den [https://lernpfad.ch/pfad/43folj7iwnkc Lernpfad SQL:  INSERT, DELETE und UPDATE].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Tabellen verknüpfen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Bearbeite den [https://lernpfad.ch/pfad/emmr5jvq0bgu Lernpfad SQL:  Tabellen verknüpfen].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== SQL-Island ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Begib dich auf die [[SQL-Island]].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Datenbanken modellieren ===&lt;br /&gt;
&lt;br /&gt;
[https://erdplus.com/standalone ERDPlus]&lt;br /&gt;
&lt;br /&gt;
=== Mehrere Abfagen hintereinander ausführen ===&lt;br /&gt;
&lt;br /&gt;
{{Info:Start}}&lt;br /&gt;
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.&lt;br /&gt;
{{Info:End}}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte:2021/22]]&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Projekt:2024/InstaHub&amp;diff=9967</id>
		<title>Projekt:2024/InstaHub</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Projekt:2024/InstaHub&amp;diff=9967"/>
		<updated>2025-01-14T09:42:13Z</updated>

		<summary type="html">&lt;p&gt;Ngb: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Projektseite&lt;br /&gt;
|Projekt=InstaHub&lt;br /&gt;
|Kurs=Informatik LK&lt;br /&gt;
|Schuljahr=2024/25&lt;br /&gt;
}}&lt;br /&gt;
{{Kasten|[[#Bedingungen|&#039;&#039;&#039;Zur aktuellen Aufgabe springen&#039;&#039;&#039;]]|class=text-center}}&lt;br /&gt;
&lt;br /&gt;
== Projekt InstaHub ==&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Erstelle dir einen Zugang zu InstaHub. Das Video zeigt dir, wie du vorgehen musst: https://youtu.be/6DnmVjtF3UU&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Grundlagen von Datenabfragen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Benutze in InstaHub die Suchfunktion (Datenbanksymbol -&amp;gt; Suche), um die folgenden Abfragen zu stellen. Setze dabei den Haken bei &amp;quot;Zeige SQL&amp;quot; und vergleiche die SQL-Abfrage mit der Suchmaske und der Ergebnistabelle. Notiere dir wichtige Befehle.&lt;br /&gt;
&lt;br /&gt;
# Alle Nutzer.&lt;br /&gt;
# Alle männlichen / alle weiblichen Nutzer.&lt;br /&gt;
# Alle Nutzer, die sich nach dem 23.09.2017 registriert haben.&lt;br /&gt;
# Alle Nutzer aus München.&lt;br /&gt;
# Alle Nutzer sortiert nach Geburtstag.&lt;br /&gt;
# Nutzernamen und Passwort aller Nutzer.&lt;br /&gt;
# Nutzernamen und Passwort aller Nutzer, die kleiner als 1,60 Meter sind.&lt;br /&gt;
# Alle Männer, die größer als 1,80 Meter sind, sortiert nach Datum der Registrierung.&lt;br /&gt;
# Alle Frauen, deren Nutzername die Ziffern &amp;lt;code&amp;gt;45&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Benutze in InstaHub die SQL Abfragefunktion (Datenbanksymbol -&amp;gt; SQL), um SQL-Abfragen für die folgenden Informationen zu erstellen. Nutze dazu die [[Befehlsreferenz SQL]] im Wiki als Hilfe.&lt;br /&gt;
&lt;br /&gt;
# Alle Photos.&lt;br /&gt;
# Alle Photos des Nutzers mit der ID &amp;lt;code&amp;gt;42&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Alle Photos, sortiert nach Erstellungsdatum.&lt;br /&gt;
# Die ID des Nutzers und die URL aller Photos.&lt;br /&gt;
# Alle Photos, deren Beschreibung die Zeichenkette &amp;lt;code&amp;gt;#sonne&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
&lt;br /&gt;
Denk dir weitere Abfragen aus, mit der du die Syntax des &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt;-Befehls ausprobieren kannst.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Abfragen einschränken und sortieren ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; Abfragen lassen sich mit den Schlüsselwörtern &amp;lt;code&amp;gt;LIMIT&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;OFFSET&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;DISTINCT&amp;lt;/code&amp;gt; weiter präzisieren. &lt;br /&gt;
&lt;br /&gt;
# Führe die Abfragen aus und analysiere die Funktion und Syntax der &amp;lt;code&amp;gt;LIMIT&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;OFFSET&amp;lt;/code&amp;gt; Schlüsselwörter.&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT * FROM users LIMIT 5&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT * FROM users LIMIT 10&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT * FROM users LIMIT 5 OFFSET 5&amp;lt;/code&amp;gt;&lt;br /&gt;
# Führe die Abfragen aus und analysiere die Funktion und Syntax des &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; Schlüsselwortes.&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY id&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY username&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY centimeters &amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY centimeters ASC&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY centimeters DESC&amp;lt;/code&amp;gt;&lt;br /&gt;
# Führe die Abfragen aus und analysiere die Funktion und Syntax des &amp;lt;code&amp;gt;DISTINCT&amp;lt;/code&amp;gt; Schlüsselwortes.&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT city FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT DISTINCT city FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# Kombiniere nun die neuen Schlüsselwörter miteinander und entwickele Abfragen zu folgenden Datensätzen:&lt;br /&gt;
## Die fünf größten männlichen Nutzer.&lt;br /&gt;
## Die acht kleinsten weiblichen Nutzer, beginnend ab der Drittkleinsten.&lt;br /&gt;
## 15 unterschiedliche aufsteigend sortierte Namen.&lt;br /&gt;
## Das zuletzt gepostete Photo.&lt;br /&gt;
## Das vorletzte Photo.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Bedingungen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Mittels der &amp;lt;code&amp;gt;WHERE&amp;lt;/code&amp;gt;-Klausel lassen sich Datensätze gezielt auf bestimmte Bedingungen einschränken. Jedes Datenfeld hat einen festgelegten Datentyp (im Wesentlichen &#039;&#039;Zahl&#039;&#039;, &#039;&#039;Text&#039;&#039; und &#039;&#039;Datum&#039;&#039;). Je nach Datentyp lassen sich unterschiedliche Bedingungen nutzen. Bedingungen sind entweder &amp;lt;code&amp;gt;TRUE&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;FALSE&amp;lt;/code&amp;gt;. Bedingungen können mit &amp;lt;code&amp;gt;AND&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;OR&amp;lt;/code&amp;gt; verknüpft, oder mit &amp;lt;code&amp;gt;NOT&amp;lt;/code&amp;gt; negiert werden. &lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;BETWEEN&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;IS NULL&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Entwirf dann Abfragen für folgende Datensätze:&lt;br /&gt;
&lt;br /&gt;
# Alle Kommentare, die zwischen 2018-09-21 07:57:19 und 2018-09-21 09:57:19 erstellt wurden. &lt;br /&gt;
# Zehn Photos, deren Beschreibung &amp;lt;code&amp;gt;#sonne&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;#strand&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;#meer&amp;lt;/code&amp;gt; enthalten.&lt;br /&gt;
# Alle Photos, deren URL &amp;lt;code&amp;gt;animals&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
# Alle Photos, deren URL &#039;&#039;nicht&#039;&#039; &amp;lt;code&amp;gt;animals&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
# Alle Nutzer, die aus Frankfurt oder Berlin kommen und zwischen 150 und 168 Zentimeter groß sind. &lt;br /&gt;
# Alle Nutzer, die keine Größe eingetragen haben.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
! SQL-Befehl&lt;br /&gt;
! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| SELECT&lt;br /&gt;
| Fragt Datensätze nach bestimmten Kriterien aus der Datenbank ab. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Eine mächtige Bedingung ist das &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; Schlüsselwort. Mit ihm kann ein Wert mit einer ganzen &#039;&#039;Liste&#039;&#039; von Werten verglichen werden. Der Operator prüft also, ob ein Wert in einer Liste vorkommt, oder nicht.&lt;br /&gt;
&lt;br /&gt;
Betrachte beispielsweise folgende Abfragen und vergleiche sie miteinander. Was fragen sie ab und wie ist der &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; Befehl aufgebaut?&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;SELECT * FROM users WHERE city = &amp;quot;Frankfurt&amp;quot; OR city = &amp;quot;Berlin&amp;quot; OR city = &amp;quot;Leipzig&amp;quot; OR city = &amp;quot;München&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;SELECT * FROM users WHERE city IN (&amp;quot;Frankfurt&amp;quot;,&amp;quot;Berlin&amp;quot;,&amp;quot;Leipzig&amp;quot;,&amp;quot;München&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;SELECT FROM users WHERE city NOT IN (&amp;quot;Frankfurt&amp;quot;,&amp;quot;Berlin&amp;quot;,&amp;quot;Leipzig&amp;quot;,&amp;quot;München&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Funktionen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
SQL bietet auch Möglichkeiten, die abgefragten Datensätze durch die Anwendung von Rechenoperationen und Funktionen zu &#039;&#039;transformieren&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Um zum Beispiel die Größe der Nutzer nicht in Zentimetern, sondern in Millimetern abzufragen, könnte die Abfrage so lauten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT username,centimeters*10 FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT COUNT(*) FROM comments&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT MIN(centimeters), MAX(centimeters),AVG(centimeters),ROUND(AVG(centimeters),2),ROUND(AVG(centimeters)),SUM(centimeters) FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT centimeters+100,4+3,centimeters*2,id%2 FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT UPPER(username),CONCAT(city,&amp;quot;, &amp;quot;,country) FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT CONCAT(name,&amp;quot; aus &amp;quot;, city, &amp;quot; (&amp;quot;,UPPER(LEFT(country,3)),&amp;quot;)&amp;quot;) FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT DAY(created_at),MONTH(created_at),YEAR(created_at) FROM users ORDER BY created_at DESC LIMIT 1&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT DAY(created_at),MONTH(created_at),YEAR(created_at) FROM users LIMIT 1 ORDER BY created_at DESC&amp;lt;/code&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Mit der Funktion &amp;lt;code&amp;gt;RAND()&amp;lt;/code&amp;gt; können Zufallszahlen generiert werden. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT RAND()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; befehl benutzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT username FROM users ORDER BY RAND()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Führe die Abfrage mehrmals aus und beobachte die Ergebnisse.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Tabellen verknüpfen - Teil I ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Eine der wichtigsten Eigenschaften von relationalen Datenbanken ist die Verknüpfung der in den verschiedenen Tabellen gespeicherten Daten.&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis einer Abfrage ist eine Liste von Datensätzen. Da &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; mit einer Liste vergleicht, kann das Ergebnis einer &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; Abfrage als Argument für &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; benutzt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * &lt;br /&gt;
FROM photos &lt;br /&gt;
WHERE user_id IN (&lt;br /&gt;
  SELECT id&lt;br /&gt;
  FROM users&lt;br /&gt;
  WHERE city = &amp;quot;Berlin&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und beschriebe mit eigenen Worten, welche Datensätze abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
Teste dann folgende Abfrage und erkläre die Fehlermeldung:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * &lt;br /&gt;
FROM photos &lt;br /&gt;
WHERE user_id IN (&lt;br /&gt;
  SELECT id,username&lt;br /&gt;
  FROM users&lt;br /&gt;
  WHERE city = &amp;quot;Berlin&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erstelle folgende Abfragen:&lt;br /&gt;
&lt;br /&gt;
# Alle Kommentare zu Fotos, die vom Nutzer mit der ID &amp;lt;code&amp;gt;109&amp;lt;/code&amp;gt; erstellt wurden.&lt;br /&gt;
# Alle Likes von Nutzern, die in München oder Berlin wohnen.&lt;br /&gt;
# Alle Likes zu Photos, die von Nutzern gepostet wurden, die in Mühldorf oder Biederitz wohnen.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
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 &#039;&#039;Vereinigung&#039;&#039; von zwei Ergebnissen wird mit dem Schlüsselwort &amp;lt;code&amp;gt;UNION&amp;lt;/code&amp;gt; erreicht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT id,username,city FROM users WHERE centimeters BETWEEN 180 AND 200&lt;br /&gt;
UNION&lt;br /&gt;
SELECT id,username,city FROM users WHERE YEAR(birthday) = 2005&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und beschriebe mit eigenen Worten, welche Datensätze abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
Probiere dann die folgenden beiden Abfragen aus und vergleiche ihre Ergebnisse. Was ändert das Schlüsselwort &amp;lt;code&amp;gt;ALL&amp;lt;/code&amp;gt;?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
UNION&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
UNION ALL&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erstelle dann folgende Abfragen mit Hilfe von &amp;lt;code&amp;gt;UNION&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
# Alle created_at und updated_at Felder (auch doppelte) aus den Tabellen photos, comments und likes, sortiert nach created_at.&lt;br /&gt;
# Alle Städtenamen, die mit &amp;quot;W&amp;quot; oder &amp;quot;R&amp;quot; beginnen.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Verschachtelte Abfragen ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Hinter dem &amp;lt;code&amp;gt;FROM&amp;lt;/code&amp;gt; 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 &amp;lt;code&amp;gt;FROM&amp;lt;/code&amp;gt; also eine Tabelle. Diese kann auch dynamisch mit einer weiteren Abfrage erstellt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * FROM (&lt;br /&gt;
  SELECT id,username,name&lt;br /&gt;
  FROM users&lt;br /&gt;
  WHERE created_at &amp;gt; &amp;quot;2017-09-22&amp;quot;&lt;br /&gt;
) &lt;br /&gt;
WHERE LENGTH(username) = 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fallunterscheidungen ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Manchmal möchte man verschiedene Fälle an Werten unterschieden und darauf basierend die zurückgelieferten Werte steuern. Dazu gibt es in SQL die &amp;lt;code&amp;gt;CASE&amp;lt;/code&amp;gt; Anweisung.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT &lt;br /&gt;
  url,&lt;br /&gt;
  CASE &lt;br /&gt;
    WHEN &lt;br /&gt;
      description LIKE &#039;%natur%&#039; &lt;br /&gt;
      OR description LIKE &#039;%landschaft%&#039;  &lt;br /&gt;
      OR description LIKE &#039;%berg%&#039; &lt;br /&gt;
    THEN true &lt;br /&gt;
    ELSE false &lt;br /&gt;
  END &lt;br /&gt;
FROM photos &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und beschriebe mit eigenen Worten, wie &amp;lt;code&amp;gt;CASE&amp;lt;/code&amp;gt; funktioniert.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Werbung ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Auf einer Photoseite werden unterhalb der Photos Werbebanner eingeblendet. Welche Werbung gezeigt wird, wird durch eine SQL-Abfrage gesteuert. Die Werbung kann auf einen Nutzer zugeschnitten sein, oder auf das Photo, unter dem sie angezeigt wird.&lt;br /&gt;
&lt;br /&gt;
Überlege dir eine Werbeanzeige, die du in InstaHub schalten möchtest und für welche Zielgruppe diese geeignet ist. Wie könntest du Nutzer der Zielgruppe in InstaHub möglichst genau identifizieren? (Um deine Anzeige später zu testen ist es einfacher, die Werbung anhand des Photos zu schalten.)&lt;br /&gt;
&lt;br /&gt;
Entwirf dann eine SQL-Abfrage, die so genau es geht auf die Zielgruppe zugeschnitten ist. Die Vorgaben für eine Werbe-Abfrage lauten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Die Abfrage muss true oder false ergeben. Alternativ kann auch eine Liste zurückgegeben werden, in welcher die Benutzer-ID gesucht wird. $user kann als Platzhalter für den angemeldeten Benutzer und $photo für das aktuelle Photo verwendet werden.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Teste die Abfrage in InstaHub.&lt;br /&gt;
&lt;br /&gt;
Hinweis: Mit der &amp;lt;code&amp;gt;CASE&amp;lt;/code&amp;gt;-Anweisung von oben kannst du zwischen true und false unterscheiden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT &lt;br /&gt;
  CASE gender &lt;br /&gt;
    WHEN &#039;female&#039; &lt;br /&gt;
      THEN true &lt;br /&gt;
    ELSE false &lt;br /&gt;
  END &lt;br /&gt;
FROM users &lt;br /&gt;
WHERE id=$user&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Erstellte ein neues Werbebanner in InstaHub. Gehe dazu auf den Kiosk oben und Wähle &amp;quot;Kampagnen&amp;quot;. Klicke das grüne Plus und gib die relevanten Daten ein. (Name und SQL-Anfrage sind notwendig. Wenn du möchtest, kannst du ein eigenes Bild nutzen. Der Rest kann so bleiben wie er ist.)&lt;br /&gt;
[[Datei:InstaHub NewAd.png|center|400px]]&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Datenauswertung ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Bearbeite den [https://lernpfad.ch/pfad/0osdqmncydgc Lernpfad SQL: Daten auswerten].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Datenmanipulation ===&lt;br /&gt;
Abfragesprachen wie SQL arbeiten nach dem [[wikipedia:CRUD|CRUD]]-Prinzip: &#039;&#039;&#039;C&#039;&#039;&#039;reate, &#039;&#039;&#039;R&#039;&#039;&#039;etrieve, &#039;&#039;&#039;U&#039;&#039;&#039;pdate, &#039;&#039;&#039;D&#039;&#039;&#039;elete&lt;br /&gt;
&lt;br /&gt;
Bisher haben wir uns nur mit dem &#039;&#039;&#039;R&#039;&#039;&#039; befasst und Daten aus der Datenbank abgefragt. Die drei anderen Teile des Akronyms sind in SQL zum Glück weniger komplex.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Bearbeite den [https://lernpfad.ch/pfad/43folj7iwnkc Lernpfad SQL:  INSERT, DELETE und UPDATE].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Tabellen verknüpfen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Bearbeite den [https://lernpfad.ch/pfad/emmr5jvq0bgu Lernpfad SQL:  Tabellen verknüpfen].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== SQL-Island ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Begib dich auf die [[SQL-Island]].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Datenbanken modellieren ===&lt;br /&gt;
&lt;br /&gt;
[https://erdplus.com/standalone ERDPlus]&lt;br /&gt;
&lt;br /&gt;
=== Mehrere Abfagen hintereinander ausführen ===&lt;br /&gt;
&lt;br /&gt;
{{Info:Start}}&lt;br /&gt;
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.&lt;br /&gt;
{{Info:End}}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte:2021/22]]&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Lernpfad:Einf%C3%BChrung_in_Processing/13&amp;diff=9966</id>
		<title>Lernpfad:Einführung in Processing/13</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Lernpfad:Einf%C3%BChrung_in_Processing/13&amp;diff=9966"/>
		<updated>2025-01-13T09:36:04Z</updated>

		<summary type="html">&lt;p&gt;Ngb: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{NNameAnzeigen}}{{NNavigation}}&lt;br /&gt;
&lt;br /&gt;
{{Tldr:Start|Was du in diesem Schritt lernst|Icon=Icon Chalk board.png}}&lt;br /&gt;
* &#039;&#039;Bedingte Schleifen&#039;&#039;&lt;br /&gt;
* &#039;&#039;Zählschleifen&#039;&#039;&lt;br /&gt;
* &#039;&#039;verschachtelte&#039;&#039; Schleifen&lt;br /&gt;
{{Tldr:End}}&lt;br /&gt;
&lt;br /&gt;
== Bedingte Schleifen ==&lt;br /&gt;
&lt;br /&gt;
{{Pfad|11|Bedingte Anweisungen}} erlauben die Ausführung von Anweisungen unter einer bestimmten Bedingung. Oftmals sollen Anweisungen aber nicht nur einmal, sondern öfter ausgeführt werden, &#039;&#039;solange&#039;&#039; eine Bedingung &#039;&#039;wahr&#039;&#039; ist. Diese Art von Konstrukt nennt man eine &#039;&#039;Bedingte Schleife&#039;&#039; (oder auch &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;-Schleife).&lt;br /&gt;
&lt;br /&gt;
Du hast schon Schleifen in deinen Programmen benutzt, auch wenn sie bisher in {{Processing}} versteckt waren. Die &amp;lt;code&amp;gt;draw()&amp;lt;/code&amp;gt; Methode wird immer wieder ausgeführt &#039;&#039;solange die App läuft&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
solange App läuft&lt;br /&gt;
    führe draw() aus&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Syntax einer &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;-Schleife unterscheidet sich kaum von einer &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt;-Anweisung:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
// Gib alle Quadratzahlen kleiner 100 aus.&lt;br /&gt;
int x = 1;&lt;br /&gt;
int quadrat = 1;&lt;br /&gt;
while( quadrat &amp;lt; 100 ) {&lt;br /&gt;
    println(quadrat);&lt;br /&gt;
    x += 1;&lt;br /&gt;
    quadrat = x*x;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&amp;quot;output&amp;quot;&amp;gt;&lt;br /&gt;
1&lt;br /&gt;
4&lt;br /&gt;
9&lt;br /&gt;
16&lt;br /&gt;
25&lt;br /&gt;
36&lt;br /&gt;
49&lt;br /&gt;
64&lt;br /&gt;
81&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig ist hier Zeile 6: Die Schleife läuft so lange, bis &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; größer oder gleich &amp;lt;code&amp;gt;100&amp;lt;/code&amp;gt; ist. Wenn Zeile 6 nicht wäre, würde sich &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; nicht verändern und immer &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; bleiben. In dem Fall würde das Programm &#039;&#039;unendlich lange&#039;&#039; laufen und niemals enden.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Kopiere das Programm nach {{Processing}} und probiere es mithilfe des &#039;&#039;Debuggers&#039;&#039; aus.&lt;br /&gt;
&lt;br /&gt;
Klicke dazu den runden grauen Button oben rechts an (der etwas aussieht wie ein Käfer). {{Processing}} wechselt in den Debug-Modus. Nun kannst du das Programm &#039;&#039;schrittweise&#039;&#039; ablaufen lassen. Markiere dazu Zeile 4 als &#039;&#039;Breakpoint&#039;&#039;, indem du links auf die Zeilennummer klickst (die Nummer wird zu einem &amp;quot;Diamanten&amp;quot;). Wenn du jetzt das Programm startest, stoppt die Ausführung in Zeile 5 und zeigt dir im &#039;&#039;Debug-Fenster&#039;&#039; die Werte aller Variablen an.&lt;br /&gt;
&lt;br /&gt;
Klicke nun den &#039;&#039;Weiter&#039;&#039; Button mehrmals und beobachte die Veränderung der Werte im kleinen &#039;&#039;Debug-Fenster&#039;&#039;.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
# Gib alle geraden Zahlen von 2 bis 100 auf der Konsole aus.&lt;br /&gt;
# Zeichnen drei Quadrate nebeneinander. Das Erste liegt bei &amp;lt;code&amp;gt;(10, 40)&amp;lt;/code&amp;gt; und ist 20x20 Pixel groß. Das nächste liegt mit 10 Pixeln Abstand rechts daneben, das dritte wieder 10 Pixel rechts davon.&lt;br /&gt;
#: Verwende eine &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;-Schleife, sodass mit einer kleinen Änderung auch 5 oder 2 Quadrate gezeichnet werden können.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
{{Lösung:Start}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
int i = 0;&lt;br /&gt;
while( i &amp;lt; 3 ) {&lt;br /&gt;
    rect(10 + i*20, 40, 20, 20);&lt;br /&gt;
    i = i + 1;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Lösung:End}}&lt;br /&gt;
&lt;br /&gt;
== Zählschleifen ==&lt;br /&gt;
&lt;br /&gt;
Die Aufgaben oben haben alle einen ähnlichen Aufbau: Sie zählen in einer Variable von einem &#039;&#039;Anfangswert&#039;&#039; bis zu einem &#039;&#039;Zielwert&#039;&#039; mit einer festgelegten &#039;&#039;Schrittweite&#039;&#039;. Da diese Art der Schleife beim Programmieren regelmäßig vorkommt, gibt es dafür ein eigenes Konstrukt: die &#039;&#039;Zählschleife&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Eine Zählschleife (oder auch &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;-Schleife) bringt alle drei Teile zusammen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = 0; i &amp;lt; 100; i += 1 ) {&lt;br /&gt;
    println(i+1);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&amp;quot;output&amp;quot;&amp;gt;&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Programm gibt die Zahlen &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; bis &amp;lt;code&amp;gt;100&amp;lt;/code&amp;gt; auf die Konsole aus. In der Klammer hinter &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; stehen die Bestandteile durch &amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt; getrennt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for( Zählvariable = Startwert; Zielwert; Schrittweite )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Eine Zählschleife lässt sich immer auch als &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;-Schleife schreiben, ist aber kompakter und dadurch besser lesbar. Das Programm zur Ausgabe der Quadratzahlen lässt sich mit einer &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;-Schleife zum Beispiel so programmieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = 1; i*i &amp;lt; 100; i += 1 ) {&lt;br /&gt;
    println(i*i);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
# Probiere dieses Programm aus und erkläre seine Funktion. Was sind &#039;&#039;Startwert&#039;&#039;, &#039;&#039;Zielwert&#039;&#039; und &#039;&#039;Schrittweite&#039;&#039;?&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
for (int x = 0; x &amp;lt; 100; x = x + 10) {&lt;br /&gt;
  int y = x;&lt;br /&gt;
  ellipse(x, y, 5, 5);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Schreibe das Programm so um, dass die Ellipsen von links unten nach rechts oben gezeichnet werden.&lt;br /&gt;
# Schreibe eine &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;-Schleife, die die Zeichenfläche mit vertikalen Linien mit einem Abstand von 10 Pixeln füllt.&lt;br /&gt;
# Erweitere das Programm zu einem Karo-Muster.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
{{Lösung:Start|Lösung zu Aufgabe 2}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
for (int x = 0; x &amp;lt; 100; x = x + 10) {&lt;br /&gt;
  int y = 100 - x;&lt;br /&gt;
  ellipse(x, y, 5, 5);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Lösung:End}}&lt;br /&gt;
{{Lösung:Start|Lösung zu Aufgabe 4}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
for (int y = 0; y &amp;lt; 100; y = y + 10) {&lt;br /&gt;
  line(0, y, 100, y);&lt;br /&gt;
}&lt;br /&gt;
for (int x = 0; x &amp;lt; 100; x = x + 10) {&lt;br /&gt;
  line(x, 0, x, 100);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Lösung:End}}&lt;br /&gt;
&lt;br /&gt;
== Verschachtelte Schleifen ==&lt;br /&gt;
&lt;br /&gt;
Eine Schleife kann schon eine Menge Arbeit sparen, da man Anweisungen nicht ständig wiederholen muss. Noch mächtiger werden sie aber, wenn mehrere Schleifen &#039;&#039;ineinander&#039;&#039; verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Stell dir vor, wir haben eine Tabelle mit &amp;lt;em&amp;gt;Zeilen&amp;lt;/em&amp;gt; und &amp;lt;em&amp;gt;Spalten&amp;lt;/em&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
! !! 0 !! 1 !! 2 !! 3 !! 4&lt;br /&gt;
|-&lt;br /&gt;
! 0&lt;br /&gt;
| || || || ||&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| || || || ||&lt;br /&gt;
|-&lt;br /&gt;
! 2&lt;br /&gt;
| || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Wir können alle Zeilennummern mit einer Zählschleife ausgeben:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = 0; i &amp;lt; 3; i += 1 ) {&lt;br /&gt;
    println(&amp;quot;Zeile &amp;quot; + i);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&amp;quot;code output&amp;quot;&amp;gt;&lt;br /&gt;
Zeile 0&lt;br /&gt;
Zeile 1&lt;br /&gt;
Zeile 2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ebenso die Spalten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
for( int j = 0; j &amp;lt; 5; j += 1 ) {&lt;br /&gt;
    println(&amp;quot;Spalte &amp;quot; + j);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&amp;quot;code output&amp;quot;&amp;gt;&lt;br /&gt;
Spalte 0&lt;br /&gt;
Spalte 1&lt;br /&gt;
Spalte 2&lt;br /&gt;
Spalte 3&lt;br /&gt;
Spalte 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen nun für alle &amp;lt;em&amp;gt;Zellen&amp;lt;/em&amp;gt; die Zeilen und Spaltennummer ausgegeben werden, müssen wir beide Schleifen &#039;&#039;&#039;ineinander verschachteln&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = 0; i &amp;lt; 3; i += 1 ) {&lt;br /&gt;
    for( int j = 0; j &amp;lt; 5; j += 1 ) {&lt;br /&gt;
        println(&amp;quot;Zeile &amp;quot;+i+&amp;quot;, Spalte &amp;quot;+j);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&amp;quot;code output&amp;quot;&amp;gt;&lt;br /&gt;
Zeile 0, Spalte 0&lt;br /&gt;
Zeile 0, Spalte 1&lt;br /&gt;
Zeile 0, Spalte 2&lt;br /&gt;
Zeile 0, Spalte 3&lt;br /&gt;
Zeile 0, Spalte 4&lt;br /&gt;
Zeile 1, Spalte 0&lt;br /&gt;
Zeile 1, Spalte 1&lt;br /&gt;
Zeile 1, Spalte 2&lt;br /&gt;
Zeile 1, Spalte 3&lt;br /&gt;
Zeile 1, Spalte 4&lt;br /&gt;
Zeile 2, Spalte 0&lt;br /&gt;
Zeile 2, Spalte 1&lt;br /&gt;
Zeile 2, Spalte 2&lt;br /&gt;
Zeile 2, Spalte 3&lt;br /&gt;
Zeile 2, Spalte 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
size(200, 200);&lt;br /&gt;
&lt;br /&gt;
for( int i = 0; i &amp;lt; 5; i += 1 ) {&lt;br /&gt;
    for( int j = 0; j &amp;lt; 5; j += 1 ) {&lt;br /&gt;
        if( (i+j)%2 == 0 ) {&lt;br /&gt;
          fill(0);&lt;br /&gt;
        } else {&lt;br /&gt;
          fill(255);&lt;br /&gt;
        }&lt;br /&gt;
        rect(i*40, j*40, 40, 40);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Analysiere das Programm oben und erkläre seine Funktion.&lt;br /&gt;
#: &#039;&#039;&#039;Tipps&#039;&#039;&#039;: &lt;br /&gt;
#* Zur Erinnerung: &amp;lt;code&amp;gt;a%2 == 0&amp;lt;/code&amp;gt; prüft, ob die Zahl &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; durch zwei teilbar ist. &lt;br /&gt;
#* Stell dir &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; als Zeilen- und &amp;lt;code&amp;gt;j&amp;lt;/code&amp;gt; als Spaltennummer vor. Welche Quadrate werden dann wie eingefärbt?&lt;br /&gt;
#* Du kennst das Ergebnis schon aus {{Pfad|10|Schritt 10}}.&lt;br /&gt;
# Pass das Programm so an, dass das Muster ein Fenster der Größe &amp;lt;code&amp;gt;400x400&amp;lt;/code&amp;gt; ausfüllt.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
{{Lösung:Start|Lösung Aufgabe 1}}&lt;br /&gt;
Das Programm zeichnet dasselbe Schachbrettmuster, wie in der Aufgabe in {{Pfad|10|Schritt 10}}.&lt;br /&gt;
{{Lösung:End}}&lt;br /&gt;
{{Lösung:Start|Lösung Aufgabe 2}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
size(400, 400);&lt;br /&gt;
&lt;br /&gt;
for( int i = 0; i &amp;lt; 20; i += 1 ) {&lt;br /&gt;
    for( int j = 0; j &amp;lt; 20; j += 1 ) {&lt;br /&gt;
        if( (i+j)%2 == 0 ) {&lt;br /&gt;
          fill(0);&lt;br /&gt;
        } else {&lt;br /&gt;
          fill(255);&lt;br /&gt;
        }&lt;br /&gt;
        rect(i*40, j*40, 40, 40);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Lösung:End}}&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
# Erstelle ein Programm, dass für die Zahlen Eins bis Zehn die Produkte mit den Zahlen Eins bis Zehn ausgibt (also das kleine Einmaleins).&lt;br /&gt;
#: &amp;lt;code&amp;gt;1*1=1, 1*2=2, 1*3=3, ..., 1*10=10, 2*1=2, 2*2=4, 2*3=6, ..., 10*10=100&amp;lt;/code&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
## Fülle eine &amp;lt;code&amp;gt;400x400&amp;lt;/code&amp;gt;-Pixel Große Zeichenfläche reihen- und spaltenweise mit roten Kreisen. &lt;br /&gt;
##: [[Bild:Processing_Kreismuster.jpg|200px]]&lt;br /&gt;
## Modifiziere das Programm so, dass jede zweite Spalte grüne Kreise enthält.&lt;br /&gt;
##: [[Bild:Processing_Kreismuster_2.jpg|200px]]&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
{{Lösung:Start|Lösung Aufgabe 1}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
for( int i = 1; i &amp;lt;= 10; i += 1 ) {&lt;br /&gt;
  for( int j = 1; j &amp;lt;= 10; j += 1 ) {&lt;br /&gt;
    int produkt = i*j;&lt;br /&gt;
    println(i+&amp;quot;*&amp;quot;+j+&amp;quot;=&amp;quot;+produkt);&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Lösung:End}}&lt;br /&gt;
{{Lösung:Start|Lösung Aufgabe 2}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  size(400, 400);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void draw() {&lt;br /&gt;
  fill(236, 48, 0);&lt;br /&gt;
  for ( int i = 0; i &amp;lt; 10; i += 1 ) {&lt;br /&gt;
    for ( int j = 0; j &amp;lt; 10; j += 1 ) {&lt;br /&gt;
      ellipse(20 + i*40, 20 + j*40, 30, 30);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Lösung:End}}&lt;br /&gt;
{{Lösung:Start|Lösung Aufgabe 3}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  size(400, 400);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void draw() {&lt;br /&gt;
  for ( int i = 0; i &amp;lt; 10; i += 1 ) {&lt;br /&gt;
    for ( int j = 0; j &amp;lt; 10; j += 1 ) {&lt;br /&gt;
      if ( i%2 == 1 ) {&lt;br /&gt;
        fill(0, 198, 48);&lt;br /&gt;
      } else {&lt;br /&gt;
        fill(236, 48, 0);&lt;br /&gt;
      }&lt;br /&gt;
      ellipse(20 + i*40, 20 + j*40, 30, 30);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Lösung:End}}&lt;br /&gt;
&lt;br /&gt;
{{Zusatzaufgabe:Start}}&lt;br /&gt;
Erstelle ein &#039;&#039;radiales&#039;&#039; Muster dieser Art:&lt;br /&gt;
&lt;br /&gt;
[[Bild:Processing_Kreise_radial.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
Verwende auch hier verschachtelte Schleifen. Die erste bestimmt den Abstand zum Mittelpunkt, die zweite den Winkel. Nutze dann &amp;lt;code&amp;gt;sin()&amp;lt;/code&amp;gt; zur Berechnung der &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;- und &amp;lt;code&amp;gt;cos()&amp;lt;/code&amp;gt; für die &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;-Koordinate.&lt;br /&gt;
{{Zusatzaufgabe:End}}&lt;br /&gt;
{{Tipp:Start|Tipp zur Zusatzaufgabe}}&lt;br /&gt;
Für den nullten Kreis und den Winkel 135 Grad könntest du die Koordinaten berechnen durch:&lt;br /&gt;
&lt;br /&gt;
* x: &amp;lt;code&amp;gt;i*60*sin(radians(135))&amp;lt;/code&amp;gt;&lt;br /&gt;
* y: &amp;lt;code&amp;gt;i*60*cos(radians(135))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;60&amp;lt;/code&amp;gt; ist der Abstand zwischen zwei Ringen. Der Winkel beginnt bei 0 und zählt bis 360 hoch. Die Schrittweite wird anhand der Anzahl Kreise pro Ring bestimmt. Bei Acht Kreisen: &amp;lt;code&amp;gt;360 / 8 = 45&amp;lt;/code&amp;gt;.&lt;br /&gt;
{{Tipp:End}}{{Lösung:Start|Lösung Zusatzaufgabe}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  size(400, 400);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void draw() {&lt;br /&gt;
  for ( int i = 0; i &amp;lt;= 3; i += 1 ) {&lt;br /&gt;
    for ( int j = 0; j &amp;lt; 360; j += 45 ) {&lt;br /&gt;
      ellipse(200+i*60*sin(radians(j)), 200+i*60*cos(radians(j)), 30, 30);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Lösung:End}}&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Lernpfad:Einf%C3%BChrung_in_Processing/12&amp;diff=9965</id>
		<title>Lernpfad:Einführung in Processing/12</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Lernpfad:Einf%C3%BChrung_in_Processing/12&amp;diff=9965"/>
		<updated>2025-01-09T14:06:38Z</updated>

		<summary type="html">&lt;p&gt;Ngb: /* Tipps und Hinweise */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{NNameAnzeigen}}{{NNavigation}}&lt;br /&gt;
&lt;br /&gt;
Wir haben schon eine Menge der grundlegenden Programmierkonzepte erarbeitet. Nun sollen alles in einem kleinen Miniprojekt zusammengebracht werden: &amp;lt;colorize size=&amp;quot;0&amp;quot;&amp;gt;Raindrops&amp;lt;/colorize&amp;gt; (Regentropfen).&lt;br /&gt;
&lt;br /&gt;
{{P5js|https://editor.p5js.org/Ngb/full/_8PPVEHNW|width=400|height=600}}&lt;br /&gt;
&lt;br /&gt;
{{Kasten|&lt;br /&gt;
Bei &#039;&#039;Raindrops&#039;&#039; fallen aus dem &amp;quot;Himmel&amp;quot; einzelne &amp;quot;Regentropfen&amp;quot; in Richtung &amp;quot;Erde&amp;quot;. Auf der Erde versucht der Spieler die Tropfen mit seinem &amp;quot;Eimer&amp;quot; zu fangen. Für jeden Tropfen gibt es Punkte, bis zu viele Tropfen auf den Boden gefallen sind.}}&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|&lt;br /&gt;
In deinem Projekt müssen keine Regentropfen in einen Eimer fallen. Es können auch Äpfel in einen Korb, Kühe in einen Stall oder [https://memory-alpha.fandom.com/de/wiki/Liste_von_Shuttles_der_F%C3%B6deration#Shuttles_der_USS_Enterprise_.28NCC-1701-D.29 Shuttles] in das Dock der [https://memory-alpha.fandom.com/de/wiki/USS_Enterprise_(NCC-1701-D) NCC-1701-D] &amp;quot;fallen&amp;quot;.}}&lt;br /&gt;
&lt;br /&gt;
{{Tldr:Start|Was du in diesem Schritt lernst|Icon=Icon Chalk board.png}}&lt;br /&gt;
* Ein komplexeres Projekt strukturiert entwickeln.&lt;br /&gt;
* Bilder verwenden. &lt;br /&gt;
* Kollisionen erkennen. &lt;br /&gt;
{{Tldr:End}}&lt;br /&gt;
&lt;br /&gt;
Ein Projekt dieser Art zu entwickeln erfordert einiges an Planung. Du solltest dir erst &#039;&#039;Teilprobleme&#039;&#039; überlegen, die du lösen musst und zum finalen Projekt zusammensetzen kannst. &#039;&#039;&#039;Implementiere jedes Teilproblem als eine eigene Methode.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Du kannst jederzeit im Lernpfad zurückgehen, um etwas nachzuschlagen. &lt;br /&gt;
&lt;br /&gt;
{{Kasten|&lt;br /&gt;
Wenn du dich schon sicher fühlst im Umgang mit den bisherigen Programmierkonzepten, dann kannst das vorgeschlagene Miniprojekt gerne variieren. Nimm dir aber nicht zu viel vor! Besprich deine Ideen am besten vorher mit deiner Lehrperson.|Farbe={{Farbe:Info}}}}&lt;br /&gt;
&lt;br /&gt;
== Das Projekt strukturieren ==&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Überlege dir zunächst genau, aus welchen Teilen das Programm besteht. Möchtest du einen Hintergrund zeichnen? Dann benötigst du eine Methode &amp;lt;code&amp;gt;void zeichneHintergrund()&amp;lt;/code&amp;gt;. Sicherlich brauchst du eine Methode &amp;lt;code&amp;gt;void zeichneRegentropfen( double x, double y )&amp;lt;/code&amp;gt;, die einen Regentropfen an die Position (x|y) zeichnet.&lt;br /&gt;
&lt;br /&gt;
Notiere dir weitere Methoden, die implementiert werden müssen.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
== Bilder benutzen ==&lt;br /&gt;
&lt;br /&gt;
Du kannst in Processing leicht Bilder einfügen und in deinen Programmen benutzen. Dazu benötigst du die Befehle {{Processing Ref|loadImage()}}, um die Bilddatei zu laden und {{Processing Ref|image()}}, um das Bild auf die Zeichenfläche zu zeichnen. Um ein Bild in einer &#039;&#039;Variablen&#039;&#039; zu speichern, wird der &#039;&#039;Datentyp&#039;&#039; &amp;lt;code&amp;gt;PImage&amp;lt;/code&amp;gt; verwendet.&lt;br /&gt;
&lt;br /&gt;
Für unser Spiel benötigen wir zwei Bilder: Einen Regentropfen und einen Eimer.&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:Droplet.png&lt;br /&gt;
Bild:Bucket_02.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lade die beiden Bilder runter (Rechtsklick -&amp;gt; Speicher unter..) und kopiere sie in deinen Projektordner (erstelle zunächst ein leeres Projekt und speichere es einmal ab). Probiere dann folgenden Code aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
PImage tropfen;&lt;br /&gt;
PImage eimer;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  size(400, 600);&lt;br /&gt;
  &lt;br /&gt;
  eimer = loadImage(&amp;quot;Bucket_02.png&amp;quot;);&lt;br /&gt;
  tropfen = loadImage(&amp;quot;Droplet.png&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void draw() {&lt;br /&gt;
  background(0,150,255);&lt;br /&gt;
&lt;br /&gt;
  image(eimer, mouseX-25, 530, 50, 50);&lt;br /&gt;
  &lt;br /&gt;
  image(tropfen, random(50, 350), random(50, 300), 21.35, 30);&lt;br /&gt;
  image(tropfen, random(50, 350), random(50, 300), 21.35, 30);&lt;br /&gt;
  image(tropfen, random(50, 350), random(50, 450), 21.35, 30);&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Warnung|&lt;br /&gt;
Die Namen der Bilddateien (z.B. &amp;lt;code&amp;gt;Droplet.png&amp;lt;/code&amp;gt;) müssen exakt so lauten, wie sie im Programmcode stehen (Zeile 8). Außerdem müssen die Dateien im Ordner eures Processing-Projektes liegen:&lt;br /&gt;
&lt;br /&gt;
[[Bild:Processing_Regentropfen_Projektstruktur.png|400px|center]]}}&lt;br /&gt;
&lt;br /&gt;
== Kollisionen erkennen ==&lt;br /&gt;
&lt;br /&gt;
Kollisionen zwischen Objekten in unserem Projekt (z.B. Regentropfen und Eimer) lassen sich erkennen, indem du die Koordinaten der Objekte vergleichst. Mit Koordinaten ist das Rechteck gemeint, dass das Objekt komplett einschließt.&lt;br /&gt;
&lt;br /&gt;
Ist zum Beispiel ein Tropfen an den Koordinaten &amp;lt;code&amp;gt;(x|y)&amp;lt;/code&amp;gt;, dann sind die Eckpunkte des Tropfens durch &amp;lt;code&amp;gt;(x|y)&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;(x+width|y)&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;(x+width|y+height)&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;(x|y+height)&amp;lt;/code&amp;gt; beschrieben.&lt;br /&gt;
&lt;br /&gt;
Nun kannst du mit bedingten Anweisungen prüfen, ob sich dieses Rechteck mit dem eines anderen Objektes überschneidet:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if( tropfenX &amp;gt;= eimerX ) {&lt;br /&gt;
    if( tropfenX &amp;lt;= eimerX+eimerWidth ) {&lt;br /&gt;
        if( tropfenY &amp;gt;= eimerY ) {&lt;br /&gt;
            if( tropfenY &amp;lt;= eimerY+eimerHeight ) {&lt;br /&gt;
                // Die obere Linke Ecke des Tropfen (tropfenX|tropfenY)&lt;br /&gt;
                // liegt im Rechteck des Eimers!&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Warnung|&lt;br /&gt;
&amp;lt;code&amp;gt;tropfenX&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;tropfenY&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;eimerX&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;eimerY&amp;lt;/code&amp;gt; sind Variablen in denen die Koordinaten &#039;&#039;eines&#039;&#039; Tropfens und des Eimers gespeichert sind. Du kannst sie durch die entsprechenden Variablenbezeichner in deinem Projekt ersetzen.&lt;br /&gt;
&lt;br /&gt;
Denk auch daran, dass die &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;-Koordinate des Eimers durch &amp;lt;code&amp;gt;mouseX&amp;lt;/code&amp;gt; festgelegt ist. Die &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;-Koordinate des Eimers ist fest.}}&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|&lt;br /&gt;
Das Verschachteln von bedingten Anweisungen in dieser Art wird schnell unübersichtlich. &lt;br /&gt;
Oft ist es besser, mehrere zusammenhängende Bedingungen zu &#039;&#039;verknüpfen&#039;&#039;. Dazu gibt es die &#039;&#039;logischen Operatoren&#039;&#039;, die du noch in {{Pfad|14}} kennenlernst.&lt;br /&gt;
&lt;br /&gt;
Das Beispiel oben kann man auch schreiben als:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if( tropfenX &amp;gt;= eimerX &amp;amp;&amp;amp; tropfenX &amp;lt;= eimerX+eimerWidth&lt;br /&gt;
        &amp;amp;&amp;amp; tropfenY &amp;gt;= eimerY &amp;amp;&amp;amp; tropfenY &amp;lt;= eimerY+eimerHeight ) {&lt;br /&gt;
    // Kollision erkannt!&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;amp;&amp;amp;&amp;lt;/code&amp;gt; bedeutet hier &amp;quot;UND&amp;quot;. Also muss die erste Bedingung erfüllt sein &amp;quot;UND&amp;quot; die Zweite. Du kennst diese Verknüpfung schon von digitalen Schaltungen!&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Da du diese Prüfung immer wieder für alle Tropfen machen musst, bietet es sich an, dafür eine {{Pfad|10|&#039;&#039;Methode mit Rückgabe&#039;&#039;|Anker=#Befehle mit Rückgabe programmieren}} zu implementieren, die die &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;- und &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;-Koordinate eines Tropfen als &#039;&#039;Parameter&#039;&#039; übergeben bekommt und einen &#039;&#039;Wahrheitswert&#039;&#039; (&amp;lt;code&amp;gt;boolean&amp;lt;/code&amp;gt;) &#039;&#039;zurückgibt&#039;&#039;, ob der Tropfen mit dem Eimer kollidiert:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
boolean trifftEimer( float x, float y ) {&lt;br /&gt;
    if( x&amp;gt;= eimerX &amp;amp;&amp;amp; x &amp;lt;= eimerX+eimerWidth&lt;br /&gt;
            &amp;amp;&amp;amp; y &amp;gt;= eimerY &amp;amp;&amp;amp; y &amp;lt;= eimerY+eimerHeight ) {&lt;br /&gt;
        return true;&lt;br /&gt;
    } else {&lt;br /&gt;
        return false;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|&lt;br /&gt;
Das Beispiel oben vergleicht immer die obere linke Ecke des Tropfens mit dem Rechteck des Eimers. Um einen anderen Punkt des Tropfens zu nutzen, musst du vor dem Vergleich die Koordinaten entsprechend anpassen (z.B. &amp;lt;code&amp;gt;x {{=}} x + 10;&amp;lt;/code&amp;gt;).}}&lt;br /&gt;
&lt;br /&gt;
== Das Spiel neu starten ==&lt;br /&gt;
&lt;br /&gt;
== Tipps und Hinweise ==&lt;br /&gt;
{{Tipp:Start|Grundgerüst des Programms}}&lt;br /&gt;
Wenn du einen Startpunkt für das Projekt brauchst, dann übernimm diese Vorlage in {{Processing}}. Du musst nicht alle Methoden benutzen. Konzentriere dich zunächst auf das grundlegende Spielprinzip.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
// Deklaration von Konfigurationsvariablen&lt;br /&gt;
// Siehe in startGame()&lt;br /&gt;
float speed;&lt;br /&gt;
int gefangen, gefallen;&lt;br /&gt;
int nextLevel;&lt;br /&gt;
&lt;br /&gt;
// Bilder&lt;br /&gt;
PImage tropfen;&lt;br /&gt;
PImage eimer;&lt;br /&gt;
&lt;br /&gt;
// Position Tropfen 1&lt;br /&gt;
float x1 = 0, y1 = 0;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
    size(400, 600);&lt;br /&gt;
&lt;br /&gt;
    // Bilder laden&lt;br /&gt;
    tropfen = loadImage(&amp;quot;&amp;quot;);&lt;br /&gt;
    eimer = loadImage(&amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    tropfen.resize(21, 30);&lt;br /&gt;
    eimer.resize(50, 50);&lt;br /&gt;
&lt;br /&gt;
    startGame();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void startGame() {&lt;br /&gt;
    // Startet das Spiel neu und initialisiert alle Variablen&lt;br /&gt;
&lt;br /&gt;
    // Initialisierung der Startwerte&lt;br /&gt;
    speed = 4;      // Fallgeschw. der Tropfen&lt;br /&gt;
    gefangen = 0;   // Gefangene Tropfen&lt;br /&gt;
    gefallen = 0;   // Nicht gefangen&lt;br /&gt;
    nextLevel = 10; // Gefangene Tropfen für nächstes Level&lt;br /&gt;
&lt;br /&gt;
    // Initialisierung der Tropfen&lt;br /&gt;
    x1 = 0;&lt;br /&gt;
    y1 = 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void draw() {&lt;br /&gt;
    // Zeichnet das Spielfeld neu&lt;br /&gt;
    background(0, 0, 248);&lt;br /&gt;
    // drawClouds();&lt;br /&gt;
    // draw Ground();&lt;br /&gt;
&lt;br /&gt;
    image(tropfen, x1, y1);&lt;br /&gt;
&lt;br /&gt;
    image(eimer, mouseX-25, 530);&lt;br /&gt;
&lt;br /&gt;
    update();&lt;br /&gt;
    checkGame();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void update() {&lt;br /&gt;
    // Aktualisiere hier die Positionen der Tropfen und prüfe,&lt;br /&gt;
    // ob die Tropfen den Eimer oder den Boden &lt;br /&gt;
    // erreicht haben&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void checkGame() {&lt;br /&gt;
    // Prüfe hier, ob das nächste Level erreicht wurde&lt;br /&gt;
    // oder ob das Spiel verloren wurde. &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Tipp:End}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
{{Zusatzaufgabe:Start}}&lt;br /&gt;
Tasten benutzen&lt;br /&gt;
{{Zusatzaufgabe:End}}&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Lernpfad:Einf%C3%BChrung_in_Processing/12&amp;diff=9964</id>
		<title>Lernpfad:Einführung in Processing/12</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Lernpfad:Einf%C3%BChrung_in_Processing/12&amp;diff=9964"/>
		<updated>2025-01-09T14:05:36Z</updated>

		<summary type="html">&lt;p&gt;Ngb: /* Tipps und Hinweise */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{NNameAnzeigen}}{{NNavigation}}&lt;br /&gt;
&lt;br /&gt;
Wir haben schon eine Menge der grundlegenden Programmierkonzepte erarbeitet. Nun sollen alles in einem kleinen Miniprojekt zusammengebracht werden: &amp;lt;colorize size=&amp;quot;0&amp;quot;&amp;gt;Raindrops&amp;lt;/colorize&amp;gt; (Regentropfen).&lt;br /&gt;
&lt;br /&gt;
{{P5js|https://editor.p5js.org/Ngb/full/_8PPVEHNW|width=400|height=600}}&lt;br /&gt;
&lt;br /&gt;
{{Kasten|&lt;br /&gt;
Bei &#039;&#039;Raindrops&#039;&#039; fallen aus dem &amp;quot;Himmel&amp;quot; einzelne &amp;quot;Regentropfen&amp;quot; in Richtung &amp;quot;Erde&amp;quot;. Auf der Erde versucht der Spieler die Tropfen mit seinem &amp;quot;Eimer&amp;quot; zu fangen. Für jeden Tropfen gibt es Punkte, bis zu viele Tropfen auf den Boden gefallen sind.}}&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|&lt;br /&gt;
In deinem Projekt müssen keine Regentropfen in einen Eimer fallen. Es können auch Äpfel in einen Korb, Kühe in einen Stall oder [https://memory-alpha.fandom.com/de/wiki/Liste_von_Shuttles_der_F%C3%B6deration#Shuttles_der_USS_Enterprise_.28NCC-1701-D.29 Shuttles] in das Dock der [https://memory-alpha.fandom.com/de/wiki/USS_Enterprise_(NCC-1701-D) NCC-1701-D] &amp;quot;fallen&amp;quot;.}}&lt;br /&gt;
&lt;br /&gt;
{{Tldr:Start|Was du in diesem Schritt lernst|Icon=Icon Chalk board.png}}&lt;br /&gt;
* Ein komplexeres Projekt strukturiert entwickeln.&lt;br /&gt;
* Bilder verwenden. &lt;br /&gt;
* Kollisionen erkennen. &lt;br /&gt;
{{Tldr:End}}&lt;br /&gt;
&lt;br /&gt;
Ein Projekt dieser Art zu entwickeln erfordert einiges an Planung. Du solltest dir erst &#039;&#039;Teilprobleme&#039;&#039; überlegen, die du lösen musst und zum finalen Projekt zusammensetzen kannst. &#039;&#039;&#039;Implementiere jedes Teilproblem als eine eigene Methode.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Du kannst jederzeit im Lernpfad zurückgehen, um etwas nachzuschlagen. &lt;br /&gt;
&lt;br /&gt;
{{Kasten|&lt;br /&gt;
Wenn du dich schon sicher fühlst im Umgang mit den bisherigen Programmierkonzepten, dann kannst das vorgeschlagene Miniprojekt gerne variieren. Nimm dir aber nicht zu viel vor! Besprich deine Ideen am besten vorher mit deiner Lehrperson.|Farbe={{Farbe:Info}}}}&lt;br /&gt;
&lt;br /&gt;
== Das Projekt strukturieren ==&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Überlege dir zunächst genau, aus welchen Teilen das Programm besteht. Möchtest du einen Hintergrund zeichnen? Dann benötigst du eine Methode &amp;lt;code&amp;gt;void zeichneHintergrund()&amp;lt;/code&amp;gt;. Sicherlich brauchst du eine Methode &amp;lt;code&amp;gt;void zeichneRegentropfen( double x, double y )&amp;lt;/code&amp;gt;, die einen Regentropfen an die Position (x|y) zeichnet.&lt;br /&gt;
&lt;br /&gt;
Notiere dir weitere Methoden, die implementiert werden müssen.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
== Bilder benutzen ==&lt;br /&gt;
&lt;br /&gt;
Du kannst in Processing leicht Bilder einfügen und in deinen Programmen benutzen. Dazu benötigst du die Befehle {{Processing Ref|loadImage()}}, um die Bilddatei zu laden und {{Processing Ref|image()}}, um das Bild auf die Zeichenfläche zu zeichnen. Um ein Bild in einer &#039;&#039;Variablen&#039;&#039; zu speichern, wird der &#039;&#039;Datentyp&#039;&#039; &amp;lt;code&amp;gt;PImage&amp;lt;/code&amp;gt; verwendet.&lt;br /&gt;
&lt;br /&gt;
Für unser Spiel benötigen wir zwei Bilder: Einen Regentropfen und einen Eimer.&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:Droplet.png&lt;br /&gt;
Bild:Bucket_02.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lade die beiden Bilder runter (Rechtsklick -&amp;gt; Speicher unter..) und kopiere sie in deinen Projektordner (erstelle zunächst ein leeres Projekt und speichere es einmal ab). Probiere dann folgenden Code aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
PImage tropfen;&lt;br /&gt;
PImage eimer;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  size(400, 600);&lt;br /&gt;
  &lt;br /&gt;
  eimer = loadImage(&amp;quot;Bucket_02.png&amp;quot;);&lt;br /&gt;
  tropfen = loadImage(&amp;quot;Droplet.png&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void draw() {&lt;br /&gt;
  background(0,150,255);&lt;br /&gt;
&lt;br /&gt;
  image(eimer, mouseX-25, 530, 50, 50);&lt;br /&gt;
  &lt;br /&gt;
  image(tropfen, random(50, 350), random(50, 300), 21.35, 30);&lt;br /&gt;
  image(tropfen, random(50, 350), random(50, 300), 21.35, 30);&lt;br /&gt;
  image(tropfen, random(50, 350), random(50, 450), 21.35, 30);&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Warnung|&lt;br /&gt;
Die Namen der Bilddateien (z.B. &amp;lt;code&amp;gt;Droplet.png&amp;lt;/code&amp;gt;) müssen exakt so lauten, wie sie im Programmcode stehen (Zeile 8). Außerdem müssen die Dateien im Ordner eures Processing-Projektes liegen:&lt;br /&gt;
&lt;br /&gt;
[[Bild:Processing_Regentropfen_Projektstruktur.png|400px|center]]}}&lt;br /&gt;
&lt;br /&gt;
== Kollisionen erkennen ==&lt;br /&gt;
&lt;br /&gt;
Kollisionen zwischen Objekten in unserem Projekt (z.B. Regentropfen und Eimer) lassen sich erkennen, indem du die Koordinaten der Objekte vergleichst. Mit Koordinaten ist das Rechteck gemeint, dass das Objekt komplett einschließt.&lt;br /&gt;
&lt;br /&gt;
Ist zum Beispiel ein Tropfen an den Koordinaten &amp;lt;code&amp;gt;(x|y)&amp;lt;/code&amp;gt;, dann sind die Eckpunkte des Tropfens durch &amp;lt;code&amp;gt;(x|y)&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;(x+width|y)&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;(x+width|y+height)&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;(x|y+height)&amp;lt;/code&amp;gt; beschrieben.&lt;br /&gt;
&lt;br /&gt;
Nun kannst du mit bedingten Anweisungen prüfen, ob sich dieses Rechteck mit dem eines anderen Objektes überschneidet:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if( tropfenX &amp;gt;= eimerX ) {&lt;br /&gt;
    if( tropfenX &amp;lt;= eimerX+eimerWidth ) {&lt;br /&gt;
        if( tropfenY &amp;gt;= eimerY ) {&lt;br /&gt;
            if( tropfenY &amp;lt;= eimerY+eimerHeight ) {&lt;br /&gt;
                // Die obere Linke Ecke des Tropfen (tropfenX|tropfenY)&lt;br /&gt;
                // liegt im Rechteck des Eimers!&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Warnung|&lt;br /&gt;
&amp;lt;code&amp;gt;tropfenX&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;tropfenY&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;eimerX&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;eimerY&amp;lt;/code&amp;gt; sind Variablen in denen die Koordinaten &#039;&#039;eines&#039;&#039; Tropfens und des Eimers gespeichert sind. Du kannst sie durch die entsprechenden Variablenbezeichner in deinem Projekt ersetzen.&lt;br /&gt;
&lt;br /&gt;
Denk auch daran, dass die &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;-Koordinate des Eimers durch &amp;lt;code&amp;gt;mouseX&amp;lt;/code&amp;gt; festgelegt ist. Die &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;-Koordinate des Eimers ist fest.}}&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|&lt;br /&gt;
Das Verschachteln von bedingten Anweisungen in dieser Art wird schnell unübersichtlich. &lt;br /&gt;
Oft ist es besser, mehrere zusammenhängende Bedingungen zu &#039;&#039;verknüpfen&#039;&#039;. Dazu gibt es die &#039;&#039;logischen Operatoren&#039;&#039;, die du noch in {{Pfad|14}} kennenlernst.&lt;br /&gt;
&lt;br /&gt;
Das Beispiel oben kann man auch schreiben als:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if( tropfenX &amp;gt;= eimerX &amp;amp;&amp;amp; tropfenX &amp;lt;= eimerX+eimerWidth&lt;br /&gt;
        &amp;amp;&amp;amp; tropfenY &amp;gt;= eimerY &amp;amp;&amp;amp; tropfenY &amp;lt;= eimerY+eimerHeight ) {&lt;br /&gt;
    // Kollision erkannt!&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;amp;&amp;amp;&amp;lt;/code&amp;gt; bedeutet hier &amp;quot;UND&amp;quot;. Also muss die erste Bedingung erfüllt sein &amp;quot;UND&amp;quot; die Zweite. Du kennst diese Verknüpfung schon von digitalen Schaltungen!&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Da du diese Prüfung immer wieder für alle Tropfen machen musst, bietet es sich an, dafür eine {{Pfad|10|&#039;&#039;Methode mit Rückgabe&#039;&#039;|Anker=#Befehle mit Rückgabe programmieren}} zu implementieren, die die &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;- und &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;-Koordinate eines Tropfen als &#039;&#039;Parameter&#039;&#039; übergeben bekommt und einen &#039;&#039;Wahrheitswert&#039;&#039; (&amp;lt;code&amp;gt;boolean&amp;lt;/code&amp;gt;) &#039;&#039;zurückgibt&#039;&#039;, ob der Tropfen mit dem Eimer kollidiert:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
boolean trifftEimer( float x, float y ) {&lt;br /&gt;
    if( x&amp;gt;= eimerX &amp;amp;&amp;amp; x &amp;lt;= eimerX+eimerWidth&lt;br /&gt;
            &amp;amp;&amp;amp; y &amp;gt;= eimerY &amp;amp;&amp;amp; y &amp;lt;= eimerY+eimerHeight ) {&lt;br /&gt;
        return true;&lt;br /&gt;
    } else {&lt;br /&gt;
        return false;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|&lt;br /&gt;
Das Beispiel oben vergleicht immer die obere linke Ecke des Tropfens mit dem Rechteck des Eimers. Um einen anderen Punkt des Tropfens zu nutzen, musst du vor dem Vergleich die Koordinaten entsprechend anpassen (z.B. &amp;lt;code&amp;gt;x {{=}} x + 10;&amp;lt;/code&amp;gt;).}}&lt;br /&gt;
&lt;br /&gt;
== Das Spiel neu starten ==&lt;br /&gt;
&lt;br /&gt;
== Tipps und Hinweise ==&lt;br /&gt;
{{Tipp:Start|Grundgerüst des Programms}}&lt;br /&gt;
Wenn du einen Startpunkt für das Projekt brauchst, dann übernimm diese Vorlage in {{Processing}}. Du musst nicht alle Methoden benutzen. Konzentriere dich zunächst auf das grundlegende Spielprinzip.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
// Deklaration von Konfigurationsvariablen&lt;br /&gt;
// Siehe in startGame()&lt;br /&gt;
float speed;&lt;br /&gt;
int gefangen, gefallen;&lt;br /&gt;
int nextLevel;&lt;br /&gt;
&lt;br /&gt;
// Bilder&lt;br /&gt;
PImage tropfen;&lt;br /&gt;
PImage eimer;&lt;br /&gt;
&lt;br /&gt;
// Position Tropfen 1&lt;br /&gt;
float x1 = 0, y1 = 0;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
    size(400, 600);&lt;br /&gt;
&lt;br /&gt;
    // Bilder laden&lt;br /&gt;
    tropfen = loadImage(&amp;quot;&amp;quot;);&lt;br /&gt;
    eimer = loadImage(&amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    tropfen.resize(21, 30);&lt;br /&gt;
    eimer.resize(50, 50);&lt;br /&gt;
&lt;br /&gt;
    startGame();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void startGame() {&lt;br /&gt;
    // Startet das Spiel neu und initialisiert alle Variablen&lt;br /&gt;
&lt;br /&gt;
    // Initialisierung der Startwerte&lt;br /&gt;
    speed = 4;      // Fallgeschw. der Tropfen&lt;br /&gt;
    gefangen = 0;   // Gefangene Tropfen&lt;br /&gt;
    gefallen = 0;   // Nicht gefangen&lt;br /&gt;
    nextLevel = 10; // Gefangene Tropfen für nächstes Level&lt;br /&gt;
&lt;br /&gt;
    // Initialisierung der Tropfen&lt;br /&gt;
    x1 = 0;&lt;br /&gt;
    y1 = 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void draw() {&lt;br /&gt;
    // Zeichnet das Spielfeld neu&lt;br /&gt;
    background(0, 0, 248);&lt;br /&gt;
    // drawClouds();&lt;br /&gt;
    // draw Ground();&lt;br /&gt;
&lt;br /&gt;
    image(tropfen, x1, y1);&lt;br /&gt;
&lt;br /&gt;
    image(eimer, mouseX-25, 530);&lt;br /&gt;
&lt;br /&gt;
    update();&lt;br /&gt;
    checkGame();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void update() {&lt;br /&gt;
    // Aktualisiere hier die Positionen der Tropfen und&lt;br /&gt;
    // ob die Tropfen den Eimer oder den Boden &lt;br /&gt;
    // erreicht haben&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void checkGame() {&lt;br /&gt;
    // Prüfe hier, ob das nächste Level erreicht wurde&lt;br /&gt;
    // oder ob das Spiel verloren wurde. &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Tipp:End}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
{{Zusatzaufgabe:Start}}&lt;br /&gt;
Tasten benutzen&lt;br /&gt;
{{Zusatzaufgabe:End}}&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Projekt:2024/InstaHub&amp;diff=9963</id>
		<title>Projekt:2024/InstaHub</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Projekt:2024/InstaHub&amp;diff=9963"/>
		<updated>2025-01-07T09:38:32Z</updated>

		<summary type="html">&lt;p&gt;Ngb: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Projektseite&lt;br /&gt;
|Projekt=InstaHub&lt;br /&gt;
|Kurs=Informatik LK&lt;br /&gt;
|Schuljahr=2024/25&lt;br /&gt;
}}&lt;br /&gt;
{{Kasten|[[#Grundlagen von Datenabfragen|&#039;&#039;&#039;Zur aktuellen Aufgabe springen&#039;&#039;&#039;]]|class=text-center}}&lt;br /&gt;
&lt;br /&gt;
== Projekt InstaHub ==&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Erstelle dir einen Zugang zu InstaHub. Das Video zeigt dir, wie du vorgehen musst: https://youtu.be/6DnmVjtF3UU&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Grundlagen von Datenabfragen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Benutze in InstaHub die Suchfunktion (Datenbanksymbol -&amp;gt; Suche), um die folgenden Abfragen zu stellen. Setze dabei den Haken bei &amp;quot;Zeige SQL&amp;quot; und vergleiche die SQL-Abfrage mit der Suchmaske und der Ergebnistabelle. Notiere dir wichtige Befehle.&lt;br /&gt;
&lt;br /&gt;
# Alle Nutzer.&lt;br /&gt;
# Alle männlichen / alle weiblichen Nutzer.&lt;br /&gt;
# Alle Nutzer, die sich nach dem 23.09.2017 registriert haben.&lt;br /&gt;
# Alle Nutzer aus München.&lt;br /&gt;
# Alle Nutzer sortiert nach Geburtstag.&lt;br /&gt;
# Nutzernamen und Passwort aller Nutzer.&lt;br /&gt;
# Nutzernamen und Passwort aller Nutzer, die kleiner als 1,60 Meter sind.&lt;br /&gt;
# Alle Männer, die größer als 1,80 Meter sind, sortiert nach Datum der Registrierung.&lt;br /&gt;
# Alle Frauen, deren Nutzername die Ziffern &amp;lt;code&amp;gt;45&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Benutze in InstaHub die SQL Abfragefunktion (Datenbanksymbol -&amp;gt; SQL), um SQL-Abfragen für die folgenden Informationen zu erstellen. Nutze dazu die [[Befehlsreferenz SQL]] im Wiki als Hilfe.&lt;br /&gt;
&lt;br /&gt;
# Alle Photos.&lt;br /&gt;
# Alle Photos des Nutzers mit der ID &amp;lt;code&amp;gt;42&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Alle Photos, sortiert nach Erstellungsdatum.&lt;br /&gt;
# Die ID des Nutzers und die URL aller Photos.&lt;br /&gt;
# Alle Photos, deren Beschreibung die Zeichenkette &amp;lt;code&amp;gt;#sonne&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
&lt;br /&gt;
Denk dir weitere Abfragen aus, mit der du die Syntax des &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt;-Befehls ausprobieren kannst.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Abfragen einschränken und sortieren ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; Abfragen lassen sich mit den Schlüsselwörtern &amp;lt;code&amp;gt;LIMIT&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;OFFSET&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;DISTINCT&amp;lt;/code&amp;gt; weiter präzisieren. &lt;br /&gt;
&lt;br /&gt;
# Führe die Abfragen aus und analysiere die Funktion und Syntax der &amp;lt;code&amp;gt;LIMIT&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;OFFSET&amp;lt;/code&amp;gt; Schlüsselwörter.&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT * FROM users LIMIT 5&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT * FROM users LIMIT 10&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT * FROM users LIMIT 5 OFFSET 5&amp;lt;/code&amp;gt;&lt;br /&gt;
# Führe die Abfragen aus und analysiere die Funktion und Syntax des &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; Schlüsselwortes.&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY id&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY username&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY centimeters &amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY centimeters ASC&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY centimeters DESC&amp;lt;/code&amp;gt;&lt;br /&gt;
# Führe die Abfragen aus und analysiere die Funktion und Syntax des &amp;lt;code&amp;gt;DISTINCT&amp;lt;/code&amp;gt; Schlüsselwortes.&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT city FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT DISTINCT city FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# Kombiniere nun die neuen Schlüsselwörter miteinander und entwickele Abfragen zu folgenden Datensätzen:&lt;br /&gt;
## Die fünf größten männlichen Nutzer.&lt;br /&gt;
## Die acht kleinsten weiblichen Nutzer, beginnend ab der Drittkleinsten.&lt;br /&gt;
## 15 unterschiedliche aufsteigend sortierte Namen.&lt;br /&gt;
## Das zuletzt gepostete Photo.&lt;br /&gt;
## Das vorletzte Photo.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Bedingungen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Mittels der &amp;lt;code&amp;gt;WHERE&amp;lt;/code&amp;gt;-Klausel lassen sich Datensätze gezielt auf bestimmte Bedingungen einschränken. Jedes Datenfeld hat einen festgelegten Datentyp (im Wesentlichen &#039;&#039;Zahl&#039;&#039;, &#039;&#039;Text&#039;&#039; und &#039;&#039;Datum&#039;&#039;). Je nach Datentyp lassen sich unterschiedliche Bedingungen nutzen. Bedingungen sind entweder &amp;lt;code&amp;gt;TRUE&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;FALSE&amp;lt;/code&amp;gt;. Bedingungen können mit &amp;lt;code&amp;gt;AND&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;OR&amp;lt;/code&amp;gt; verknüpft, oder mit &amp;lt;code&amp;gt;NOT&amp;lt;/code&amp;gt; negiert werden. &lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;BETWEEN&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;IS NULL&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Entwirf dann Abfragen für folgende Datensätze:&lt;br /&gt;
&lt;br /&gt;
# Alle Kommentare, die zwischen 2018-09-21 07:57:19 und 2018-09-21 09:57:19 erstellt wurden. &lt;br /&gt;
# Zehn Photos, deren Beschreibung &amp;lt;code&amp;gt;#sonne&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;#strand&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;#meer&amp;lt;/code&amp;gt; enthalten.&lt;br /&gt;
# Alle Photos, deren URL &amp;lt;code&amp;gt;animals&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
# Alle Photos, deren URL &#039;&#039;nicht&#039;&#039; &amp;lt;code&amp;gt;animals&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
# Alle Nutzer, die aus Frankfurt oder Berlin kommen und zwischen 150 und 168 Zentimeter groß sind. &lt;br /&gt;
# Alle Nutzer, die keine Größe eingetragen haben.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
! SQL-Befehl&lt;br /&gt;
! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| SELECT&lt;br /&gt;
| Fragt Datensätze nach bestimmten Kriterien aus der Datenbank ab. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Eine mächtige Bedingung ist das &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; Schlüsselwort. Mit ihm kann ein Wert mit einer ganzen &#039;&#039;Liste&#039;&#039; von Werten verglichen werden. Der Operator prüft also, ob ein Wert in einer Liste vorkommt, oder nicht.&lt;br /&gt;
&lt;br /&gt;
Betrachte beispielsweise folgende Abfragen und vergleiche sie miteinander. Was fragen sie ab und wie ist der &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; Befehl aufgebaut?&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;SELECT * FROM users WHERE city = &amp;quot;Frankfurt&amp;quot; OR city = &amp;quot;Berlin&amp;quot; OR city = &amp;quot;Leipzig&amp;quot; OR city = &amp;quot;München&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;SELECT * FROM users WHERE city IN (&amp;quot;Frankfurt&amp;quot;,&amp;quot;Berlin&amp;quot;,&amp;quot;Leipzig&amp;quot;,&amp;quot;München&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;SELECT FROM users WHERE city NOT IN (&amp;quot;Frankfurt&amp;quot;,&amp;quot;Berlin&amp;quot;,&amp;quot;Leipzig&amp;quot;,&amp;quot;München&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Funktionen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
SQL bietet auch Möglichkeiten, die abgefragten Datensätze durch die Anwendung von Rechenoperationen und Funktionen zu &#039;&#039;transformieren&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Um zum Beispiel die Größe der Nutzer nicht in Zentimetern, sondern in Millimetern abzufragen, könnte die Abfrage so lauten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT username,centimeters*10 FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT COUNT(*) FROM comments&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT MIN(centimeters), MAX(centimeters),AVG(centimeters),ROUND(AVG(centimeters),2),ROUND(AVG(centimeters)),SUM(centimeters) FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT centimeters+100,4+3,centimeters*2,id%2 FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT UPPER(username),CONCAT(city,&amp;quot;, &amp;quot;,country) FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT CONCAT(name,&amp;quot; aus &amp;quot;, city, &amp;quot; (&amp;quot;,UPPER(LEFT(country,3)),&amp;quot;)&amp;quot;) FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT DAY(created_at),MONTH(created_at),YEAR(created_at) FROM users ORDER BY created_at DESC LIMIT 1&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT DAY(created_at),MONTH(created_at),YEAR(created_at) FROM users LIMIT 1 ORDER BY created_at DESC&amp;lt;/code&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Mit der Funktion &amp;lt;code&amp;gt;RAND()&amp;lt;/code&amp;gt; können Zufallszahlen generiert werden. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT RAND()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; befehl benutzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT username FROM users ORDER BY RAND()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Führe die Abfrage mehrmals aus und beobachte die Ergebnisse.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Tabellen verknüpfen - Teil I ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Eine der wichtigsten Eigenschaften von relationalen Datenbanken ist die Verknüpfung der in den verschiedenen Tabellen gespeicherten Daten.&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis einer Abfrage ist eine Liste von Datensätzen. Da &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; mit einer Liste vergleicht, kann das Ergebnis einer &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; Abfrage als Argument für &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; benutzt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * &lt;br /&gt;
FROM photos &lt;br /&gt;
WHERE user_id IN (&lt;br /&gt;
  SELECT id&lt;br /&gt;
  FROM users&lt;br /&gt;
  WHERE city = &amp;quot;Berlin&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und beschriebe mit eigenen Worten, welche Datensätze abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
Teste dann folgende Abfrage und erkläre die Fehlermeldung:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * &lt;br /&gt;
FROM photos &lt;br /&gt;
WHERE user_id IN (&lt;br /&gt;
  SELECT id,username&lt;br /&gt;
  FROM users&lt;br /&gt;
  WHERE city = &amp;quot;Berlin&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erstelle folgende Abfragen:&lt;br /&gt;
&lt;br /&gt;
# Alle Kommentare zu Fotos, die vom Nutzer mit der ID &amp;lt;code&amp;gt;109&amp;lt;/code&amp;gt; erstellt wurden.&lt;br /&gt;
# Alle Likes von Nutzern, die in München oder Berlin wohnen.&lt;br /&gt;
# Alle Likes zu Photos, die von Nutzern gepostet wurden, die in Mühldorf oder Biederitz wohnen.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
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 &#039;&#039;Vereinigung&#039;&#039; von zwei Ergebnissen wird mit dem Schlüsselwort &amp;lt;code&amp;gt;UNION&amp;lt;/code&amp;gt; erreicht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT id,username,city FROM users WHERE centimeters BETWEEN 180 AND 200&lt;br /&gt;
UNION&lt;br /&gt;
SELECT id,username,city FROM users WHERE YEAR(birthday) = 2005&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und beschriebe mit eigenen Worten, welche Datensätze abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
Probiere dann die folgenden beiden Abfragen aus und vergleiche ihre Ergebnisse. Was ändert das Schlüsselwort &amp;lt;code&amp;gt;ALL&amp;lt;/code&amp;gt;?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
UNION&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
UNION ALL&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erstelle dann folgende Abfragen mit Hilfe von &amp;lt;code&amp;gt;UNION&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
# Alle created_at und updated_at Felder (auch doppelte) aus den Tabellen photos, comments und likes, sortiert nach created_at.&lt;br /&gt;
# Alle Städtenamen, die mit &amp;quot;W&amp;quot; oder &amp;quot;R&amp;quot; beginnen.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Verschachtelte Abfragen ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Hinter dem &amp;lt;code&amp;gt;FROM&amp;lt;/code&amp;gt; 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 &amp;lt;code&amp;gt;FROM&amp;lt;/code&amp;gt; also eine Tabelle. Diese kann auch dynamisch mit einer weiteren Abfrage erstellt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * FROM (&lt;br /&gt;
  SELECT id,username,name&lt;br /&gt;
  FROM users&lt;br /&gt;
  WHERE created_at &amp;gt; &amp;quot;2017-09-22&amp;quot;&lt;br /&gt;
) &lt;br /&gt;
WHERE LENGTH(username) = 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fallunterscheidungen ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Manchmal möchte man verschiedene Fälle an Werten unterschieden und darauf basierend die zurückgelieferten Werte steuern. Dazu gibt es in SQL die &amp;lt;code&amp;gt;CASE&amp;lt;/code&amp;gt; Anweisung.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT &lt;br /&gt;
  url,&lt;br /&gt;
  CASE &lt;br /&gt;
    WHEN &lt;br /&gt;
      description LIKE &#039;%natur%&#039; &lt;br /&gt;
      OR description LIKE &#039;%landschaft%&#039;  &lt;br /&gt;
      OR description LIKE &#039;%berg%&#039; &lt;br /&gt;
    THEN true &lt;br /&gt;
    ELSE false &lt;br /&gt;
  END &lt;br /&gt;
FROM photos &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und beschriebe mit eigenen Worten, wie &amp;lt;code&amp;gt;CASE&amp;lt;/code&amp;gt; funktioniert.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Werbung ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Auf einer Photoseite werden unterhalb der Photos Werbebanner eingeblendet. Welche Werbung gezeigt wird, wird durch eine SQL-Abfrage gesteuert. Die Werbung kann auf einen Nutzer zugeschnitten sein, oder auf das Photo, unter dem sie angezeigt wird.&lt;br /&gt;
&lt;br /&gt;
Überlege dir eine Werbeanzeige, die du in InstaHub schalten möchtest und für welche Zielgruppe diese geeignet ist. Wie könntest du Nutzer der Zielgruppe in InstaHub möglichst genau identifizieren? (Um deine Anzeige später zu testen ist es einfacher, die Werbung anhand des Photos zu schalten.)&lt;br /&gt;
&lt;br /&gt;
Entwirf dann eine SQL-Abfrage, die so genau es geht auf die Zielgruppe zugeschnitten ist. Die Vorgaben für eine Werbe-Abfrage lauten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Die Abfrage muss true oder false ergeben. Alternativ kann auch eine Liste zurückgegeben werden, in welcher die Benutzer-ID gesucht wird. $user kann als Platzhalter für den angemeldeten Benutzer und $photo für das aktuelle Photo verwendet werden.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Teste die Abfrage in InstaHub.&lt;br /&gt;
&lt;br /&gt;
Hinweis: Mit der &amp;lt;code&amp;gt;CASE&amp;lt;/code&amp;gt;-Anweisung von oben kannst du zwischen true und false unterscheiden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT &lt;br /&gt;
  CASE gender &lt;br /&gt;
    WHEN &#039;female&#039; &lt;br /&gt;
      THEN true &lt;br /&gt;
    ELSE false &lt;br /&gt;
  END &lt;br /&gt;
FROM users &lt;br /&gt;
WHERE id=$user&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Erstellte ein neues Werbebanner in InstaHub. Gehe dazu auf den Kiosk oben und Wähle &amp;quot;Kampagnen&amp;quot;. Klicke das grüne Plus und gib die relevanten Daten ein. (Name und SQL-Anfrage sind notwendig. Wenn du möchtest, kannst du ein eigenes Bild nutzen. Der Rest kann so bleiben wie er ist.)&lt;br /&gt;
[[Datei:InstaHub NewAd.png|center|400px]]&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Datenauswertung ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Bearbeite den [https://lernpfad.ch/pfad/0osdqmncydgc Lernpfad SQL: Daten auswerten].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Datenmanipulation ===&lt;br /&gt;
Abfragesprachen wie SQL arbeiten nach dem [[wikipedia:CRUD|CRUD]]-Prinzip: &#039;&#039;&#039;C&#039;&#039;&#039;reate, &#039;&#039;&#039;R&#039;&#039;&#039;etrieve, &#039;&#039;&#039;U&#039;&#039;&#039;pdate, &#039;&#039;&#039;D&#039;&#039;&#039;elete&lt;br /&gt;
&lt;br /&gt;
Bisher haben wir uns nur mit dem &#039;&#039;&#039;R&#039;&#039;&#039; befasst und Daten aus der Datenbank abgefragt. Die drei anderen Teile des Akronyms sind in SQL zum Glück weniger komplex.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Bearbeite den [https://lernpfad.ch/pfad/43folj7iwnkc Lernpfad SQL:  INSERT, DELETE und UPDATE].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Tabellen verknüpfen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Bearbeite den [https://lernpfad.ch/pfad/emmr5jvq0bgu Lernpfad SQL:  Tabellen verknüpfen].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== SQL-Island ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Begib dich auf die [[SQL-Island]].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Datenbanken modellieren ===&lt;br /&gt;
&lt;br /&gt;
[https://erdplus.com/standalone ERDPlus]&lt;br /&gt;
&lt;br /&gt;
=== Mehrere Abfagen hintereinander ausführen ===&lt;br /&gt;
&lt;br /&gt;
{{Info:Start}}&lt;br /&gt;
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.&lt;br /&gt;
{{Info:End}}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte:2021/22]]&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Projekt:2024/InstaHub&amp;diff=9962</id>
		<title>Projekt:2024/InstaHub</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Projekt:2024/InstaHub&amp;diff=9962"/>
		<updated>2025-01-07T08:49:03Z</updated>

		<summary type="html">&lt;p&gt;Ngb: Die Seite wurde neu angelegt: „{{Projektseite |Projekt=InstaHub |Kurs=Informatik LK |Schuljahr=2024/25 }} {{Kasten|&amp;#039;&amp;#039;&amp;#039;Zur aktuellen Aufgabe springen&amp;#039;&amp;#039;&amp;#039;|class=text-center}}  == Projekt InstaHub ==  {{Aufgabe:Start}} Erstelle dir einen Zugang zu InstaHub. Das Video zeigt dir, wie du vorgehen musst: https://youtu.be/6DnmVjtF3UU {{Aufgabe:End}}  === Grundlagen von Datenabfragen === {{Aufgabe:Start}} Benutze in InstaHub die Suchfunktion (Datenbanksymbol -&amp;gt;…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Projektseite&lt;br /&gt;
|Projekt=InstaHub&lt;br /&gt;
|Kurs=Informatik LK&lt;br /&gt;
|Schuljahr=2024/25&lt;br /&gt;
}}&lt;br /&gt;
{{Kasten|[[#Grundlagen von Datenabfragen|&#039;&#039;&#039;Zur aktuellen Aufgabe springen&#039;&#039;&#039;]]|class=text-center}}&lt;br /&gt;
&lt;br /&gt;
== Projekt InstaHub ==&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Erstelle dir einen Zugang zu InstaHub. Das Video zeigt dir, wie du vorgehen musst: https://youtu.be/6DnmVjtF3UU&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Grundlagen von Datenabfragen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Benutze in InstaHub die Suchfunktion (Datenbanksymbol -&amp;gt; Suche), um die folgenden Abfragen zu stellen. Setze dabei den Haken bei &amp;quot;Zeige SQL&amp;quot; und vergleiche die SQL-Abfrage mit der Suchmaske und der Ergebnistabelle. Notiere dir wichtige Befehle.&lt;br /&gt;
&lt;br /&gt;
# Alle Nutzer.&lt;br /&gt;
# Alle männlichen / alle weiblichen Nutzer.&lt;br /&gt;
# Alle Nutzer, die sich nach dem 23.09.2017 registriert haben.&lt;br /&gt;
# Alle Nutzer aus München.&lt;br /&gt;
# Alle Nutzer sortiert nach Geburtstag.&lt;br /&gt;
# Nutzernamen und Passwort aller Nutzer.&lt;br /&gt;
# Nutzernamen und Passwort aller Nutzer, die kleiner als 1,60 Meter sind.&lt;br /&gt;
# Alle Männer, die größer als 1,80 Meter sind, sortiert nach Datum der Registrierung.&lt;br /&gt;
# Alle Frauen, deren Nutzername die Ziffern &amp;lt;code&amp;gt;45&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Benutze in InstaHub die SQL Abfragefunktion (Datenbanksymbol -&amp;gt; SQL), um SQL-Abfragen für die folgenden Informationen zu erstellen. Nutze dazu die [[Befehlsreferenz SQL]] im Wiki und die gedruckte [https://wiki.qg-moessingen.de/lib/exe/fetch.php?media=faecher:informatik:oberstufe:datenbanken:sql_abfrage:sql_befehle_b.pdf Befehlsübersicht SQL] als Hilfe.&lt;br /&gt;
&lt;br /&gt;
# Alle Photos.&lt;br /&gt;
# Alle Photos des Nutzers mit der ID &amp;lt;code&amp;gt;42&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Alle Photos, sortiert nach Erstellungsdatum.&lt;br /&gt;
# Die ID des Nutzers und die URL aller Photos.&lt;br /&gt;
# Alle Photos, deren Beschreibung die Zeichenkette &amp;lt;code&amp;gt;#sonne&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
&lt;br /&gt;
Denk dir weitere Abfragen aus, mit der du die Syntax des &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt;-Befehls ausprobieren kannst.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Abfragen einschränken und sortieren ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; Abfragen lassen sich mit den Schlüsselwörtern &amp;lt;code&amp;gt;LIMIT&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;OFFSET&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;DISTINCT&amp;lt;/code&amp;gt; weiter präzisieren. &lt;br /&gt;
&lt;br /&gt;
# Führe die Abfragen aus und analysiere die Funktion und Syntax der &amp;lt;code&amp;gt;LIMIT&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;OFFSET&amp;lt;/code&amp;gt; Schlüsselwörter.&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT * FROM users LIMIT 5&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT * FROM users LIMIT 10&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT * FROM users LIMIT 5 OFFSET 5&amp;lt;/code&amp;gt;&lt;br /&gt;
# Führe die Abfragen aus und analysiere die Funktion und Syntax des &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; Schlüsselwortes.&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY id&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY username&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY centimeters &amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY centimeters ASC&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT id,username,centimeters FROM users ORDER BY centimeters DESC&amp;lt;/code&amp;gt;&lt;br /&gt;
# Führe die Abfragen aus und analysiere die Funktion und Syntax des &amp;lt;code&amp;gt;DISTINCT&amp;lt;/code&amp;gt; Schlüsselwortes.&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT city FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;SELECT DISTINCT city FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# Kombiniere nun die neuen Schlüsselwörter miteinander und entwickele Abfragen zu folgenden Datensätzen:&lt;br /&gt;
## Die fünf größten männlichen Nutzer.&lt;br /&gt;
## Die acht kleinsten weiblichen Nutzer, beginnend ab der Drittkleinsten.&lt;br /&gt;
## 15 unterschiedliche aufsteigend sortierte Namen.&lt;br /&gt;
## Das zuletzt gepostete Photo.&lt;br /&gt;
## Das vorletzte Photo.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Bedingungen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Mittels der &amp;lt;code&amp;gt;WHERE&amp;lt;/code&amp;gt;-Klausel lassen sich Datensätze gezielt auf bestimmte Bedingungen einschränken. Jedes Datenfeld hat einen festgelegten Datentyp (im Wesentlichen &#039;&#039;Zahl&#039;&#039;, &#039;&#039;Text&#039;&#039; und &#039;&#039;Datum&#039;&#039;). Je nach Datentyp lassen sich unterschiedliche Bedingungen nutzen. Bedingungen sind entweder &amp;lt;code&amp;gt;TRUE&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;FALSE&amp;lt;/code&amp;gt;. Bedingungen können mit &amp;lt;code&amp;gt;AND&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;OR&amp;lt;/code&amp;gt; verknüpft, oder mit &amp;lt;code&amp;gt;NOT&amp;lt;/code&amp;gt; negiert werden. &lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;BETWEEN&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;IS NULL&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Entwirf dann Abfragen für folgende Datensätze:&lt;br /&gt;
&lt;br /&gt;
# Alle Kommentare, die zwischen 2018-09-21 07:57:19 und 2018-09-21 09:57:19 erstellt wurden. &lt;br /&gt;
# Zehn Photos, deren Beschreibung &amp;lt;code&amp;gt;#sonne&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;#strand&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;#meer&amp;lt;/code&amp;gt; enthalten.&lt;br /&gt;
# Alle Photos, deren URL &amp;lt;code&amp;gt;animals&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
# Alle Photos, deren URL &#039;&#039;nicht&#039;&#039; &amp;lt;code&amp;gt;animals&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
# Alle Nutzer, die aus Frankfurt oder Berlin kommen und zwischen 150 und 168 Zentimeter groß sind. &lt;br /&gt;
# Alle Nutzer, die keine Größe eingetragen haben.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
! SQL-Befehl&lt;br /&gt;
! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| SELECT&lt;br /&gt;
| Fragt Datensätze nach bestimmten Kriterien aus der Datenbank ab. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Eine mächtige Bedingung ist das &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; Schlüsselwort. Mit ihm kann ein Wert mit einer ganzen &#039;&#039;Liste&#039;&#039; von Werten verglichen werden. Der Operator prüft also, ob ein Wert in einer Liste vorkommt, oder nicht.&lt;br /&gt;
&lt;br /&gt;
Betrachte beispielsweise folgende Abfragen und vergleiche sie miteinander. Was fragen sie ab und wie ist der &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; Befehl aufgebaut?&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;SELECT * FROM users WHERE city = &amp;quot;Frankfurt&amp;quot; OR city = &amp;quot;Berlin&amp;quot; OR city = &amp;quot;Leipzig&amp;quot; OR city = &amp;quot;München&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;SELECT * FROM users WHERE city IN (&amp;quot;Frankfurt&amp;quot;,&amp;quot;Berlin&amp;quot;,&amp;quot;Leipzig&amp;quot;,&amp;quot;München&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;SELECT FROM users WHERE city NOT IN (&amp;quot;Frankfurt&amp;quot;,&amp;quot;Berlin&amp;quot;,&amp;quot;Leipzig&amp;quot;,&amp;quot;München&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Funktionen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
SQL bietet auch Möglichkeiten, die abgefragten Datensätze durch die Anwendung von Rechenoperationen und Funktionen zu &#039;&#039;transformieren&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Um zum Beispiel die Größe der Nutzer nicht in Zentimetern, sondern in Millimetern abzufragen, könnte die Abfrage so lauten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT username,centimeters*10 FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT COUNT(*) FROM comments&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT MIN(centimeters), MAX(centimeters),AVG(centimeters),ROUND(AVG(centimeters),2),ROUND(AVG(centimeters)),SUM(centimeters) FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT centimeters+100,4+3,centimeters*2,id%2 FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT UPPER(username),CONCAT(city,&amp;quot;, &amp;quot;,country) FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT CONCAT(name,&amp;quot; aus &amp;quot;, city, &amp;quot; (&amp;quot;,UPPER(LEFT(country,3)),&amp;quot;)&amp;quot;) FROM users&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT DAY(created_at),MONTH(created_at),YEAR(created_at) FROM users ORDER BY created_at DESC LIMIT 1&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SELECT DAY(created_at),MONTH(created_at),YEAR(created_at) FROM users LIMIT 1 ORDER BY created_at DESC&amp;lt;/code&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Mit der Funktion &amp;lt;code&amp;gt;RAND()&amp;lt;/code&amp;gt; können Zufallszahlen generiert werden. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT RAND()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;ORDER BY&amp;lt;/code&amp;gt; befehl benutzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SELECT username FROM users ORDER BY RAND()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Führe die Abfrage mehrmals aus und beobachte die Ergebnisse.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Tabellen verknüpfen - Teil I ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Eine der wichtigsten Eigenschaften von relationalen Datenbanken ist die Verknüpfung der in den verschiedenen Tabellen gespeicherten Daten.&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis einer Abfrage ist eine Liste von Datensätzen. Da &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; mit einer Liste vergleicht, kann das Ergebnis einer &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; Abfrage als Argument für &amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt; benutzt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * &lt;br /&gt;
FROM photos &lt;br /&gt;
WHERE user_id IN (&lt;br /&gt;
  SELECT id&lt;br /&gt;
  FROM users&lt;br /&gt;
  WHERE city = &amp;quot;Berlin&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und beschriebe mit eigenen Worten, welche Datensätze abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
Teste dann folgende Abfrage und erkläre die Fehlermeldung:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * &lt;br /&gt;
FROM photos &lt;br /&gt;
WHERE user_id IN (&lt;br /&gt;
  SELECT id,username&lt;br /&gt;
  FROM users&lt;br /&gt;
  WHERE city = &amp;quot;Berlin&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erstelle folgende Abfragen:&lt;br /&gt;
&lt;br /&gt;
# Alle Kommentare zu Fotos, die vom Nutzer mit der ID &amp;lt;code&amp;gt;109&amp;lt;/code&amp;gt; erstellt wurden.&lt;br /&gt;
# Alle Likes von Nutzern, die in München oder Berlin wohnen.&lt;br /&gt;
# Alle Likes zu Photos, die von Nutzern gepostet wurden, die in Mühldorf oder Biederitz wohnen.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
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 &#039;&#039;Vereinigung&#039;&#039; von zwei Ergebnissen wird mit dem Schlüsselwort &amp;lt;code&amp;gt;UNION&amp;lt;/code&amp;gt; erreicht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT id,username,city FROM users WHERE centimeters BETWEEN 180 AND 200&lt;br /&gt;
UNION&lt;br /&gt;
SELECT id,username,city FROM users WHERE YEAR(birthday) = 2005&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und beschriebe mit eigenen Worten, welche Datensätze abgefragt werden.&lt;br /&gt;
&lt;br /&gt;
Probiere dann die folgenden beiden Abfragen aus und vergleiche ihre Ergebnisse. Was ändert das Schlüsselwort &amp;lt;code&amp;gt;ALL&amp;lt;/code&amp;gt;?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
UNION&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
UNION ALL&lt;br /&gt;
SELECT city FROM users WHERE LEFT(city,1) = &amp;quot;W&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erstelle dann folgende Abfragen mit Hilfe von &amp;lt;code&amp;gt;UNION&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
# Alle created_at und updated_at Felder (auch doppelte) aus den Tabellen photos, comments und likes, sortiert nach created_at.&lt;br /&gt;
# Alle Städtenamen, die mit &amp;quot;W&amp;quot; oder &amp;quot;R&amp;quot; beginnen.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Verschachtelte Abfragen ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Hinter dem &amp;lt;code&amp;gt;FROM&amp;lt;/code&amp;gt; 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 &amp;lt;code&amp;gt;FROM&amp;lt;/code&amp;gt; also eine Tabelle. Diese kann auch dynamisch mit einer weiteren Abfrage erstellt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT * FROM (&lt;br /&gt;
  SELECT id,username,name&lt;br /&gt;
  FROM users&lt;br /&gt;
  WHERE created_at &amp;gt; &amp;quot;2017-09-22&amp;quot;&lt;br /&gt;
) &lt;br /&gt;
WHERE LENGTH(username) = 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fallunterscheidungen ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Manchmal möchte man verschiedene Fälle an Werten unterschieden und darauf basierend die zurückgelieferten Werte steuern. Dazu gibt es in SQL die &amp;lt;code&amp;gt;CASE&amp;lt;/code&amp;gt; Anweisung.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT &lt;br /&gt;
  url,&lt;br /&gt;
  CASE &lt;br /&gt;
    WHEN &lt;br /&gt;
      description LIKE &#039;%natur%&#039; &lt;br /&gt;
      OR description LIKE &#039;%landschaft%&#039;  &lt;br /&gt;
      OR description LIKE &#039;%berg%&#039; &lt;br /&gt;
    THEN true &lt;br /&gt;
    ELSE false &lt;br /&gt;
  END &lt;br /&gt;
FROM photos &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analysiere die Abfrage und ihre Bestandteile, probiere sie aus und beschriebe mit eigenen Worten, wie &amp;lt;code&amp;gt;CASE&amp;lt;/code&amp;gt; funktioniert.&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Werbung ===&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Auf einer Photoseite werden unterhalb der Photos Werbebanner eingeblendet. Welche Werbung gezeigt wird, wird durch eine SQL-Abfrage gesteuert. Die Werbung kann auf einen Nutzer zugeschnitten sein, oder auf das Photo, unter dem sie angezeigt wird.&lt;br /&gt;
&lt;br /&gt;
Überlege dir eine Werbeanzeige, die du in InstaHub schalten möchtest und für welche Zielgruppe diese geeignet ist. Wie könntest du Nutzer der Zielgruppe in InstaHub möglichst genau identifizieren? (Um deine Anzeige später zu testen ist es einfacher, die Werbung anhand des Photos zu schalten.)&lt;br /&gt;
&lt;br /&gt;
Entwirf dann eine SQL-Abfrage, die so genau es geht auf die Zielgruppe zugeschnitten ist. Die Vorgaben für eine Werbe-Abfrage lauten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Die Abfrage muss true oder false ergeben. Alternativ kann auch eine Liste zurückgegeben werden, in welcher die Benutzer-ID gesucht wird. $user kann als Platzhalter für den angemeldeten Benutzer und $photo für das aktuelle Photo verwendet werden.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Teste die Abfrage in InstaHub.&lt;br /&gt;
&lt;br /&gt;
Hinweis: Mit der &amp;lt;code&amp;gt;CASE&amp;lt;/code&amp;gt;-Anweisung von oben kannst du zwischen true und false unterscheiden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT &lt;br /&gt;
  CASE gender &lt;br /&gt;
    WHEN &#039;female&#039; &lt;br /&gt;
      THEN true &lt;br /&gt;
    ELSE false &lt;br /&gt;
  END &lt;br /&gt;
FROM users &lt;br /&gt;
WHERE id=$user&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Erstellte ein neues Werbebanner in InstaHub. Gehe dazu auf den Kiosk oben und Wähle &amp;quot;Kampagnen&amp;quot;. Klicke das grüne Plus und gib die relevanten Daten ein. (Name und SQL-Anfrage sind notwendig. Wenn du möchtest, kannst du ein eigenes Bild nutzen. Der Rest kann so bleiben wie er ist.)&lt;br /&gt;
[[Datei:InstaHub NewAd.png|center|400px]]&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Datenauswertung ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Bearbeite den [https://lernpfad.ch/pfad/0osdqmncydgc Lernpfad SQL: Daten auswerten].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Datenmanipulation ===&lt;br /&gt;
Abfragesprachen wie SQL arbeiten nach dem [[wikipedia:CRUD|CRUD]]-Prinzip: &#039;&#039;&#039;C&#039;&#039;&#039;reate, &#039;&#039;&#039;R&#039;&#039;&#039;etrieve, &#039;&#039;&#039;U&#039;&#039;&#039;pdate, &#039;&#039;&#039;D&#039;&#039;&#039;elete&lt;br /&gt;
&lt;br /&gt;
Bisher haben wir uns nur mit dem &#039;&#039;&#039;R&#039;&#039;&#039; befasst und Daten aus der Datenbank abgefragt. Die drei anderen Teile des Akronyms sind in SQL zum Glück weniger komplex.&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Bearbeite den [https://lernpfad.ch/pfad/43folj7iwnkc Lernpfad SQL:  INSERT, DELETE und UPDATE].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== Tabellen verknüpfen ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Bearbeite den [https://lernpfad.ch/pfad/emmr5jvq0bgu Lernpfad SQL:  Tabellen verknüpfen].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
=== SQL-Island ===&lt;br /&gt;
{{Aufgabe:Start}}&lt;br /&gt;
Begib dich auf die [[SQL-Island]].&lt;br /&gt;
{{Aufgabe:End}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Datenbanken modellieren ===&lt;br /&gt;
&lt;br /&gt;
[https://erdplus.com/standalone ERDPlus]&lt;br /&gt;
&lt;br /&gt;
=== Mehrere Abfagen hintereinander ausführen ===&lt;br /&gt;
&lt;br /&gt;
{{Info:Start}}&lt;br /&gt;
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.&lt;br /&gt;
{{Info:End}}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte:2021/22]]&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Korrektur_einer_Klassenarbeit&amp;diff=9961</id>
		<title>Korrektur einer Klassenarbeit</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Korrektur_einer_Klassenarbeit&amp;diff=9961"/>
		<updated>2024-12-19T07:43:50Z</updated>

		<summary type="html">&lt;p&gt;Ngb: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Kasten|&amp;lt;center&amp;gt;{{Farbig|&#039;&#039;&#039;Mache die Verbesserung Deiner Klassenarbeit mit Köpfchen und lerne aus Deinen Fehlern!&#039;&#039;&#039;|#FFF}}&amp;lt;/center&amp;gt;|Farbe={{Farbe:Helmholtz}}}}&lt;br /&gt;
&lt;br /&gt;
{{Kurzlink|korrektur}}&lt;br /&gt;
&lt;br /&gt;
== Korrekturzeichen ==&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
! Abkürzung !! Erklärung&lt;br /&gt;
|-&lt;br /&gt;
| 🙂 || Du hast die komplette Aufgabe ohne Fehler gelöst.&lt;br /&gt;
|-&lt;br /&gt;
| ✓ || Diese Teilaufgabe hast Du richtig gelöst.&lt;br /&gt;
|-&lt;br /&gt;
| (✓) || &amp;quot;Folgerichtig&amp;quot;: Du hast irgendwo in der Aufgabe einen Fehler gemacht, aber dann mit diesem falschen Ergebnis korrekt weiter gerechnet. &lt;br /&gt;
|-&lt;br /&gt;
| {{Inline|fehler.png|Fehler}} oder &amp;lt;span style=&amp;quot;color: #FF00FF&amp;quot;&amp;gt;___&amp;lt;/span&amp;gt; || Hier hast Du etwas falsch gemacht.&lt;br /&gt;
|-&lt;br /&gt;
| {{Inline|lupe.png|Lupe}} || Diesen Fehler solltest Du Dir noch einmal anschauen!&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color: #FF00FF&amp;quot;&amp;gt;f&amp;lt;/span&amp;gt;  || In dieser Teilaufgabe hast Du einen Fehler gemacht.&lt;br /&gt;
|-&lt;br /&gt;
| s.o. || &amp;quot;Wiederholungsfehler&amp;quot;: Du hast denselben Fehler weiter oben in der Aufgabe schon einmal gemacht.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Verbesserung ==&lt;br /&gt;
&lt;br /&gt;
{{Info:Start|Icon=lupe.png|Farbe=#00FF00}}&lt;br /&gt;
&#039;&#039;&#039;Fehler, die ich Dir am Rand mit einer grünen Lupe markiert habe, sind besonders wichtig, denn hier kannst Du viel lernen.&#039;&#039;&#039; Es sind zumeist Fehler, die Du häufig machst oder die für das Verständnis eines Themas entscheidend sind.&lt;br /&gt;
&lt;br /&gt;
Diese Fehler solltest Du mit besonderer Aufmerksamkeit korrigieren. Du kannst dazu so vorgehen:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Schlage das Thema nach&#039;&#039;&#039;&lt;br /&gt;
#* in den im Unterricht verwendeten Materialien&lt;br /&gt;
#* oder in dem von mir im Feedback angegebenen Material (siehe [[#Material zum Naschschlagen|Liste häufig vorgeschlagener Materialien]] unten).&lt;br /&gt;
# &#039;&#039;&#039;Lerne&#039;&#039;&#039; oder wiederhole das Thema.&lt;br /&gt;
# &#039;&#039;&#039;Verbessere und sichere die Inhalte schriftlich&#039;&#039;&#039;&lt;br /&gt;
#* Korrigiere den markierten Fehler in der Aufgabe und schreibe die Aufgabe korrekt auf.&lt;br /&gt;
#* Überlege Dir &#039;&#039;&#039;zwei weitere Aufgaben&#039;&#039;&#039;, die zum Fehler passen, löse sie und notiere sie ebenfalls.&lt;br /&gt;
{{Info:End}}&lt;br /&gt;
&lt;br /&gt;
== Material zum Nachschlagen ==&lt;br /&gt;
&lt;br /&gt;
=== M: Mathematische Grundlagen ===&lt;br /&gt;
* &#039;&#039;&#039;M0&#039;&#039;&#039; Kopfrechnen: [https://mathe.aufgabenfuchs.de/kopfrechnen/addieren.shtml Addieren], [https://mathe.aufgabenfuchs.de/kopfrechnen/subtrahieren.shtml Subtrahieren], [https://mathe.aufgabenfuchs.de/kopfrechnen/multiplizieren.shtml Multiplizieren], [https://mathe.aufgabenfuchs.de/kopfrechnen/dividieren.shtml Dividieren]&lt;br /&gt;
* &#039;&#039;&#039;M1&#039;&#039;&#039; [https://easy-schule.de/grundrechenarten/#grundrechenarten-uebersicht Grundbegriffe der Grundrechenarten]&lt;br /&gt;
* &#039;&#039;&#039;M2&#039;&#039;&#039; [https://mathegym.de/mathe/natuerliche-zahlen-runden/aufgabe/90 Zahlen runden]&lt;br /&gt;
* &#039;&#039;&#039;M3&#039;&#039;&#039; Umkehraufgaben bilden&lt;br /&gt;
* &#039;&#039;&#039;M4&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Längen umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Längen rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M5&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Gewichte umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Gewichten rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M6&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Geld umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Geld rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M7&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Zeitangaben umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Zeitangaben rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M8&#039;&#039;&#039; [https://www.yout-ube.com/watch?v=KR0tK27u_uA {{Inline|video.png}} Sachaufgaben lösen in 5 Schritten]&lt;br /&gt;
&lt;br /&gt;
=== G: Geraden, Punkte, Koordinaten, Symmetrie ===&lt;br /&gt;
* &#039;&#039;&#039;G1&#039;&#039;&#039; [https://www.yout-ube.com/watch?v=vxCh6xw_TmI {{Inline|video.png}} Das Geodreieck benutzen]&lt;br /&gt;
* &#039;&#039;&#039;G2&#039;&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;G3&#039;&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;G4&#039;&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;G5&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;G6&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Vielen Dank an [https://herr-kalt.de Herrn Kalt] für seine [https://herr-kalt.de/orga-unterricht/korrekturzeichen  Vorlage zu dieser Wiki-Seite].&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Korrektur_einer_Klassenarbeit&amp;diff=9960</id>
		<title>Korrektur einer Klassenarbeit</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Korrektur_einer_Klassenarbeit&amp;diff=9960"/>
		<updated>2024-12-19T07:42:43Z</updated>

		<summary type="html">&lt;p&gt;Ngb: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Kasten|&amp;lt;center&amp;gt;{{Farbig|&#039;&#039;&#039;Mache die Verbesserung Deiner Klassenarbeit mit Köpfchen und lerne aus Deinen Fehlern!&#039;&#039;&#039;|#FFF}}&amp;lt;/center&amp;gt;|Farbe={{Farbe:Helmholtz}}}}&lt;br /&gt;
&lt;br /&gt;
{{Kurzlink|korrektur}}&lt;br /&gt;
&lt;br /&gt;
== Korrekturzeichen ==&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
! Abkürzung !! Erklärung&lt;br /&gt;
|-&lt;br /&gt;
| 🙂 || Du hast die komplette Aufgabe ohne Fehler gelöst.&lt;br /&gt;
|-&lt;br /&gt;
| ✓ || Diese Teilaufgabe hast Du richtig gelöst.&lt;br /&gt;
|-&lt;br /&gt;
| (✓) || &amp;quot;Folgerichtig&amp;quot;: Du hast irgendwo in der Aufgabe einen Fehler gemacht, aber dann mit diesem falschen Ergebnis korrekt weiter gerechnet. &lt;br /&gt;
|-&lt;br /&gt;
| {{Inline|fehler.png|Fehler}} oder &amp;lt;span style=&amp;quot;color: #FF00FF&amp;quot;&amp;gt;___&amp;lt;/span&amp;gt; || Hier hast Du etwas falsch gemacht.&lt;br /&gt;
|-&lt;br /&gt;
| {{Inline|lupe.png|Lupe}} || Diesen Fehler solltest Du Dir noch einmal anschauen!&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color: #FF00FF&amp;quot;&amp;gt;f&amp;lt;/span&amp;gt;  || In dieser Teilaufgabe hast Du einen Fehler gemacht.&lt;br /&gt;
|-&lt;br /&gt;
| s.o. || &amp;quot;Wiederholungsfehler&amp;quot;: Du hast denselben Fehler weiter oben in der Aufgabe schon einmal gemacht.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Verbesserung ==&lt;br /&gt;
&lt;br /&gt;
{{Info:Start|Icon=lupe.png|Farbe=#00FF00}}&lt;br /&gt;
&#039;&#039;&#039;Fehler, die ich Dir am Rand mit einer grünen Lupe markiert habe, sind besonders wichtig, denn hier kannst Du viel lernen.&#039;&#039;&#039; Es sind zumeist Fehler, die Du häufig machst oder die für das Verständnis eines Themas entscheidend sind.&lt;br /&gt;
&lt;br /&gt;
Diese Fehler solltest Du mit besonderer Aufmerksamkeit korrigieren. Du kannst dazu so vorgehen:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Schlage das Thema nach&#039;&#039;&#039;&lt;br /&gt;
#* in den im Unterricht verwendeten Materialien&lt;br /&gt;
#* oder in dem von mir im Feedback angegebenen Material (siehe [[#Material zum Naschschlagen|Liste häufig vorgeschlagener Materialien]] unten).&lt;br /&gt;
# &#039;&#039;&#039;Lerne&#039;&#039;&#039; oder wiederhole das Thema.&lt;br /&gt;
# &#039;&#039;&#039;Verbessere und sichere die Inhalte schriftlich&#039;&#039;&#039;&lt;br /&gt;
#* Korrigiere den markierten Fehler in der Aufgabe und schreibe die Aufgabe korrekt auf.&lt;br /&gt;
#* Überlege Dir &#039;&#039;&#039;zwei weitere Aufgaben&#039;&#039;&#039;, die zum Fehler passen, löse sie und notiere sie ebenfalls.&lt;br /&gt;
{{Info:End}}&lt;br /&gt;
&lt;br /&gt;
== Material zum Nachschlagen ==&lt;br /&gt;
&lt;br /&gt;
=== M: Mathematische Grundlagen ===&lt;br /&gt;
* &#039;&#039;&#039;M0&#039;&#039;&#039; Kopfrechnen: [https://mathe.aufgabenfuchs.de/kopfrechnen/addieren.shtml Addieren], [https://mathe.aufgabenfuchs.de/kopfrechnen/subtrahieren.shtml Subtrahieren], [https://mathe.aufgabenfuchs.de/kopfrechnen/multiplizieren.shtml Multiplizieren], [https://mathe.aufgabenfuchs.de/kopfrechnen/dividieren.shtml Dividieren]&lt;br /&gt;
* &#039;&#039;&#039;M1&#039;&#039;&#039; [https://easy-schule.de/grundrechenarten/#grundrechenarten-uebersicht Grundbegriffe der Grundrechenarten]&lt;br /&gt;
* &#039;&#039;&#039;M2&#039;&#039;&#039; [https://mathegym.de/mathe/natuerliche-zahlen-runden/aufgabe/90 Zahlen runden]&lt;br /&gt;
* &#039;&#039;&#039;M3&#039;&#039;&#039; Umkehraufgaben bilden&lt;br /&gt;
* &#039;&#039;&#039;M4&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Längen umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Längen rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M5&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Gewichte umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Gewichten rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M6&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Geld umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Geld rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M7&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Zeitangaben umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Zeitangaben rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M8&#039;&#039;&#039; [https://www.yout-ube.com/watch?v=KR0tK27u_uA Video: Sachaufgaben lösen in 5 Schritten]&lt;br /&gt;
&lt;br /&gt;
=== G: Geraden, Punkte, Koordinaten, Symmetrie ===&lt;br /&gt;
* &#039;&#039;&#039;G1&#039;&#039;&#039; [https://www.yout-ube.com/watch?v=vxCh6xw_TmI Video: Das Geodreieck benutzen]&lt;br /&gt;
* &#039;&#039;&#039;G2&#039;&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;G3&#039;&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;G4&#039;&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;G5&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;G6&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Vielen Dank an [https://herr-kalt.de Herrn Kalt] für seine [https://herr-kalt.de/orga-unterricht/korrekturzeichen  Vorlage zu dieser Wiki-Seite].&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Korrektur_einer_Klassenarbeit&amp;diff=9959</id>
		<title>Korrektur einer Klassenarbeit</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Korrektur_einer_Klassenarbeit&amp;diff=9959"/>
		<updated>2024-12-18T22:48:30Z</updated>

		<summary type="html">&lt;p&gt;Ngb: /* Verbesserung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Kasten|&amp;lt;center&amp;gt;{{Farbig|&#039;&#039;&#039;Mache die Verbesserung Deiner Klassenarbeit mit Köpfchen und lerne aus Deinen Fehlern!&#039;&#039;&#039;|#FFF}}&amp;lt;/center&amp;gt;|Farbe={{Farbe:Helmholtz}}}}&lt;br /&gt;
&lt;br /&gt;
{{Kurzlink|korrektur}}&lt;br /&gt;
&lt;br /&gt;
== Korrekturzeichen ==&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
! Abkürzung !! Erklärung&lt;br /&gt;
|-&lt;br /&gt;
| 🙂 || Du hast die komplette Aufgabe ohen Fehler gelöst.&lt;br /&gt;
|-&lt;br /&gt;
| ✓ || Diese Teilaufgabe hast Du richtig gelöst.&lt;br /&gt;
|-&lt;br /&gt;
| (✓) || &amp;quot;Folgerichtig&amp;quot;: Du hast irgendwo in der Aufgabe einen Fehler gemacht, aber dann mit diesem falschen Ergebnis korrekt weiter gerechnet. &lt;br /&gt;
|-&lt;br /&gt;
| {{Inline|fehler.png|Fehler}} oder &amp;lt;span style=&amp;quot;color: #FF00FF&amp;quot;&amp;gt;___&amp;lt;/span&amp;gt; || Hier hast Du etwas falsch gemacht.&lt;br /&gt;
|-&lt;br /&gt;
| {{Inline|lupe.png|Lupe}} || Diesen Fehler solltest Du Dir noch einmal anschauen!&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color: #FF00FF&amp;quot;&amp;gt;f&amp;lt;/span&amp;gt;  || In dieser Teilaufgabe hast Du einen Fehler gemacht.&lt;br /&gt;
|-&lt;br /&gt;
| s.o. || &amp;quot;Wiederholungsfehler&amp;quot;: Du hast denselben Fehler weiter oben in der Aufgabe schon einmal gemacht.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Verbesserung ==&lt;br /&gt;
&lt;br /&gt;
{{Info:Start|Icon=lupe.png|Farbe=#00FF00}}&lt;br /&gt;
&#039;&#039;&#039;Fehler, die ich Dir am Rand mit einer grünen Lupe markiert habe, sind besonders wichtig, denn hier kannst Du viel lernen.&#039;&#039;&#039; Es sind zumeist Fehler, die Du häufig machst oder die für das Verständnis eines Themas entscheidend sind.&lt;br /&gt;
&lt;br /&gt;
Diese Fehler solltest Du mit besonderer Aufmerksamkeit korrigieren. Du kannst dazu so vorgehen:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Schlage das Thema nach&#039;&#039;&#039;&lt;br /&gt;
#* in den im Unterricht verwendeten Materialien&lt;br /&gt;
#* oder in dem von mir im Feedback angegebenen Material (siehe [[#Material zum Naschschlagen|Liste häufig vorgeschlagener Materialien]] unten).&lt;br /&gt;
# &#039;&#039;&#039;Lerne&#039;&#039;&#039; oder wiederhole das Thema.&lt;br /&gt;
# &#039;&#039;&#039;Verbessere und sichere die Inhalte schriftlich&#039;&#039;&#039;&lt;br /&gt;
#* Korrigiere den markierten Fehler in der Aufgabe und schreibe die Aufgabe korrekt auf.&lt;br /&gt;
#* Überlege Dir &#039;&#039;&#039;zwei weitere Aufgaben&#039;&#039;&#039;, die zum Fehler passen, löse sie und notiere sie ebenfalls.&lt;br /&gt;
{{Info:End}}&lt;br /&gt;
&lt;br /&gt;
== Material zum Nachschlagen ==&lt;br /&gt;
&lt;br /&gt;
=== M: Mathematische Grundlagen ===&lt;br /&gt;
* &#039;&#039;&#039;M0&#039;&#039;&#039; Kopfrechnen: [https://mathe.aufgabenfuchs.de/kopfrechnen/addieren.shtml Addieren], [https://mathe.aufgabenfuchs.de/kopfrechnen/subtrahieren.shtml Subtrahieren], [https://mathe.aufgabenfuchs.de/kopfrechnen/multiplizieren.shtml Multiplizieren], [https://mathe.aufgabenfuchs.de/kopfrechnen/dividieren.shtml Dividieren]&lt;br /&gt;
* &#039;&#039;&#039;M1&#039;&#039;&#039; [https://easy-schule.de/grundrechenarten/#grundrechenarten-uebersicht Grundbegriffe der Grundrechenarten]&lt;br /&gt;
* &#039;&#039;&#039;M2&#039;&#039;&#039; [https://mathegym.de/mathe/natuerliche-zahlen-runden/aufgabe/90 Zahlen runden]&lt;br /&gt;
* &#039;&#039;&#039;M3&#039;&#039;&#039; Umkehraufgaben bilden&lt;br /&gt;
* &#039;&#039;&#039;M4&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Längen umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Längen rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M5&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Gewichte umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Gewichten rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M6&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Geld umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Geld rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M7&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Zeitangaben umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Zeitangaben rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M8&#039;&#039;&#039; Sachaufgaben bearbeiten&lt;br /&gt;
&lt;br /&gt;
=== G: Geraden, Punkte, Koordinaten, Symmetrie ===&lt;br /&gt;
* &#039;&#039;&#039;G1&#039;&#039;&#039; [https://www.yout-ube.com/watch?v=vxCh6xw_TmI Das Geodreieck benutzen]&lt;br /&gt;
* &#039;&#039;&#039;G2&#039;&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;G3&#039;&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;G4&#039;&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;G5&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;G6&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Vielen Dank an [https://herr-kalt.de Herrn Kalt] für seine [https://herr-kalt.de/orga-unterricht/korrekturzeichen  Vorlage zu dieser Wiki-Seite].&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Korrektur_einer_Klassenarbeit&amp;diff=9958</id>
		<title>Korrektur einer Klassenarbeit</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Korrektur_einer_Klassenarbeit&amp;diff=9958"/>
		<updated>2024-12-18T22:11:40Z</updated>

		<summary type="html">&lt;p&gt;Ngb: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Kasten|&amp;lt;center&amp;gt;{{Farbig|&#039;&#039;&#039;Mache die Verbesserung Deiner Klassenarbeit mit Köpfchen und lerne aus Deinen Fehlern!&#039;&#039;&#039;|#FFF}}&amp;lt;/center&amp;gt;|Farbe={{Farbe:Helmholtz}}}}&lt;br /&gt;
&lt;br /&gt;
{{Kurzlink|korrektur}}&lt;br /&gt;
&lt;br /&gt;
== Korrekturzeichen ==&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
! Abkürzung !! Erklärung&lt;br /&gt;
|-&lt;br /&gt;
| 🙂 || Du hast die komplette Aufgabe ohen Fehler gelöst.&lt;br /&gt;
|-&lt;br /&gt;
| ✓ || Diese Teilaufgabe hast Du richtig gelöst.&lt;br /&gt;
|-&lt;br /&gt;
| (✓) || &amp;quot;Folgerichtig&amp;quot;: Du hast irgendwo in der Aufgabe einen Fehler gemacht, aber dann mit diesem falschen Ergebnis korrekt weiter gerechnet. &lt;br /&gt;
|-&lt;br /&gt;
| {{Inline|fehler.png|Fehler}} oder &amp;lt;span style=&amp;quot;color: #FF00FF&amp;quot;&amp;gt;___&amp;lt;/span&amp;gt; || Hier hast Du etwas falsch gemacht.&lt;br /&gt;
|-&lt;br /&gt;
| {{Inline|lupe.png|Lupe}} || Diesen Fehler solltest Du Dir noch einmal anschauen!&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color: #FF00FF&amp;quot;&amp;gt;f&amp;lt;/span&amp;gt;  || In dieser Teilaufgabe hast Du einen Fehler gemacht.&lt;br /&gt;
|-&lt;br /&gt;
| s.o. || &amp;quot;Wiederholungsfehler&amp;quot;: Du hast denselben Fehler weiter oben in der Aufgabe schon einmal gemacht.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Verbesserung ==&lt;br /&gt;
&lt;br /&gt;
{{Info:Start|Icon=lupe.png|Farbe=#00FF00}}&lt;br /&gt;
&#039;&#039;&#039;Fehler, die ich Dir am Rand mit einer grünen Lupe markiert habe, sind besonders wichtig, denn hier kannst Du viel lernen.&#039;&#039;&#039; Es sind zumeist Fehler, die Du häufig machst oder die für das Verständnis eines Themas entscheidend sind.&lt;br /&gt;
&lt;br /&gt;
Diese Fehler solltest Du mit besonderer Aufmerksamkeit korrigieren. Du kannst dazu so vorgehen:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Schlage das Thema nach&#039;&#039;&#039;&lt;br /&gt;
#* in den im Unterricht verwendeten Materialien&lt;br /&gt;
#* oder in dem von mir im Feedback angegebenen Material (siehe [[#Material zum Naschschlagen|Liste häufig vorgeschlagener Materialien]] unten).&lt;br /&gt;
# &#039;&#039;&#039;Lerne&#039;&#039;&#039; oder wiederhole das Thema.&lt;br /&gt;
# &#039;&#039;&#039;Verbessere und sichere die Inhalte schriftlich&#039;&#039;&#039;&lt;br /&gt;
#* Korrigiere den markierten Fehler in der Aufgabe und schreibe sie korrekt auf.&lt;br /&gt;
#* Überlege Dir &#039;&#039;&#039;zwei weitere Aufgaben&#039;&#039;&#039;, die zum Fehler passen, löse sie und notiere sie ebenfalls.&lt;br /&gt;
{{Info:End}}&lt;br /&gt;
&lt;br /&gt;
== Material zum Nachschlagen ==&lt;br /&gt;
&lt;br /&gt;
=== M: Mathematische Grundlagen ===&lt;br /&gt;
* &#039;&#039;&#039;M0&#039;&#039;&#039; Kopfrechnen: [https://mathe.aufgabenfuchs.de/kopfrechnen/addieren.shtml Addieren], [https://mathe.aufgabenfuchs.de/kopfrechnen/subtrahieren.shtml Subtrahieren], [https://mathe.aufgabenfuchs.de/kopfrechnen/multiplizieren.shtml Multiplizieren], [https://mathe.aufgabenfuchs.de/kopfrechnen/dividieren.shtml Dividieren]&lt;br /&gt;
* &#039;&#039;&#039;M1&#039;&#039;&#039; [https://easy-schule.de/grundrechenarten/#grundrechenarten-uebersicht Grundbegriffe der Grundrechenarten]&lt;br /&gt;
* &#039;&#039;&#039;M2&#039;&#039;&#039; [https://mathegym.de/mathe/natuerliche-zahlen-runden/aufgabe/90 Zahlen runden]&lt;br /&gt;
* &#039;&#039;&#039;M3&#039;&#039;&#039; Umkehraufgaben bilden&lt;br /&gt;
* &#039;&#039;&#039;M4&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Längen umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Längen rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M5&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Gewichte umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Gewichten rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M6&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Geld umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Geld rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M7&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Zeitangaben umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Zeitangaben rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M8&#039;&#039;&#039; Sachaufgaben bearbeiten&lt;br /&gt;
&lt;br /&gt;
=== G: Geraden, Punkte, Koordinaten, Symmetrie ===&lt;br /&gt;
* &#039;&#039;&#039;G1&#039;&#039;&#039; [https://www.yout-ube.com/watch?v=vxCh6xw_TmI Das Geodreieck benutzen]&lt;br /&gt;
* &#039;&#039;&#039;G2&#039;&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;G3&#039;&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;G4&#039;&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;G5&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;G6&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Vielen Dank an [https://herr-kalt.de Herrn Kalt] für seine [https://herr-kalt.de/orga-unterricht/korrekturzeichen  Vorlage zu dieser Wiki-Seite].&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Korrektur_einer_Klassenarbeit&amp;diff=9957</id>
		<title>Korrektur einer Klassenarbeit</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Korrektur_einer_Klassenarbeit&amp;diff=9957"/>
		<updated>2024-12-18T22:11:22Z</updated>

		<summary type="html">&lt;p&gt;Ngb: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Kurzlink|korrektur}}&lt;br /&gt;
&lt;br /&gt;
{{Kasten|&amp;lt;center&amp;gt;{{Farbig|&#039;&#039;&#039;Mache die Verbesserung Deiner Klassenarbeit mit Köpfchen und lerne aus Deinen Fehlern!&#039;&#039;&#039;|#FFF}}&amp;lt;/center&amp;gt;|Farbe={{Farbe:Helmholtz}}}}&lt;br /&gt;
&lt;br /&gt;
== Korrekturzeichen ==&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
! Abkürzung !! Erklärung&lt;br /&gt;
|-&lt;br /&gt;
| 🙂 || Du hast die komplette Aufgabe ohen Fehler gelöst.&lt;br /&gt;
|-&lt;br /&gt;
| ✓ || Diese Teilaufgabe hast Du richtig gelöst.&lt;br /&gt;
|-&lt;br /&gt;
| (✓) || &amp;quot;Folgerichtig&amp;quot;: Du hast irgendwo in der Aufgabe einen Fehler gemacht, aber dann mit diesem falschen Ergebnis korrekt weiter gerechnet. &lt;br /&gt;
|-&lt;br /&gt;
| {{Inline|fehler.png|Fehler}} oder &amp;lt;span style=&amp;quot;color: #FF00FF&amp;quot;&amp;gt;___&amp;lt;/span&amp;gt; || Hier hast Du etwas falsch gemacht.&lt;br /&gt;
|-&lt;br /&gt;
| {{Inline|lupe.png|Lupe}} || Diesen Fehler solltest Du Dir noch einmal anschauen!&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color: #FF00FF&amp;quot;&amp;gt;f&amp;lt;/span&amp;gt;  || In dieser Teilaufgabe hast Du einen Fehler gemacht.&lt;br /&gt;
|-&lt;br /&gt;
| s.o. || &amp;quot;Wiederholungsfehler&amp;quot;: Du hast denselben Fehler weiter oben in der Aufgabe schon einmal gemacht.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Verbesserung ==&lt;br /&gt;
&lt;br /&gt;
{{Info:Start|Icon=lupe.png|Farbe=#00FF00}}&lt;br /&gt;
&#039;&#039;&#039;Fehler, die ich Dir am Rand mit einer grünen Lupe markiert habe, sind besonders wichtig, denn hier kannst Du viel lernen.&#039;&#039;&#039; Es sind zumeist Fehler, die Du häufig machst oder die für das Verständnis eines Themas entscheidend sind.&lt;br /&gt;
&lt;br /&gt;
Diese Fehler solltest Du mit besonderer Aufmerksamkeit korrigieren. Du kannst dazu so vorgehen:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Schlage das Thema nach&#039;&#039;&#039;&lt;br /&gt;
#* in den im Unterricht verwendeten Materialien&lt;br /&gt;
#* oder in dem von mir im Feedback angegebenen Material (siehe [[#Material zum Naschschlagen|Liste häufig vorgeschlagener Materialien]] unten).&lt;br /&gt;
# &#039;&#039;&#039;Lerne&#039;&#039;&#039; oder wiederhole das Thema.&lt;br /&gt;
# &#039;&#039;&#039;Verbessere und sichere die Inhalte schriftlich&#039;&#039;&#039;&lt;br /&gt;
#* Korrigiere den markierten Fehler in der Aufgabe und schreibe sie korrekt auf.&lt;br /&gt;
#* Überlege Dir &#039;&#039;&#039;zwei weitere Aufgaben&#039;&#039;&#039;, die zum Fehler passen, löse sie und notiere sie ebenfalls.&lt;br /&gt;
{{Info:End}}&lt;br /&gt;
&lt;br /&gt;
== Material zum Nachschlagen ==&lt;br /&gt;
&lt;br /&gt;
=== M: Mathematische Grundlagen ===&lt;br /&gt;
* &#039;&#039;&#039;M0&#039;&#039;&#039; Kopfrechnen: [https://mathe.aufgabenfuchs.de/kopfrechnen/addieren.shtml Addieren], [https://mathe.aufgabenfuchs.de/kopfrechnen/subtrahieren.shtml Subtrahieren], [https://mathe.aufgabenfuchs.de/kopfrechnen/multiplizieren.shtml Multiplizieren], [https://mathe.aufgabenfuchs.de/kopfrechnen/dividieren.shtml Dividieren]&lt;br /&gt;
* &#039;&#039;&#039;M1&#039;&#039;&#039; [https://easy-schule.de/grundrechenarten/#grundrechenarten-uebersicht Grundbegriffe der Grundrechenarten]&lt;br /&gt;
* &#039;&#039;&#039;M2&#039;&#039;&#039; [https://mathegym.de/mathe/natuerliche-zahlen-runden/aufgabe/90 Zahlen runden]&lt;br /&gt;
* &#039;&#039;&#039;M3&#039;&#039;&#039; Umkehraufgaben bilden&lt;br /&gt;
* &#039;&#039;&#039;M4&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Längen umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Längen rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M5&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Gewichte umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Gewichten rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M6&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Geld umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Geld rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M7&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Zeitangaben umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Zeitangaben rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M8&#039;&#039;&#039; Sachaufgaben bearbeiten&lt;br /&gt;
&lt;br /&gt;
=== G: Geraden, Punkte, Koordinaten, Symmetrie ===&lt;br /&gt;
* &#039;&#039;&#039;G1&#039;&#039;&#039; [https://www.yout-ube.com/watch?v=vxCh6xw_TmI Das Geodreieck benutzen]&lt;br /&gt;
* &#039;&#039;&#039;G2&#039;&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;G3&#039;&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;G4&#039;&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;G5&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;G6&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Vielen Dank an [https://herr-kalt.de Herrn Kalt] für seine [https://herr-kalt.de/orga-unterricht/korrekturzeichen  Vorlage zu dieser Wiki-Seite].&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Korrektur_einer_Klassenarbeit&amp;diff=9956</id>
		<title>Korrektur einer Klassenarbeit</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Korrektur_einer_Klassenarbeit&amp;diff=9956"/>
		<updated>2024-12-18T12:06:29Z</updated>

		<summary type="html">&lt;p&gt;Ngb: /* Material zum Naschschlagen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Kasten|&amp;lt;center&amp;gt;{{Farbig|&#039;&#039;&#039;Mache die Verbesserung Deiner Klassenarbeit mit Köpfchen und lerne aus Deinen Fehlern!&#039;&#039;&#039;|#FFF}}&amp;lt;/center&amp;gt;|Farbe={{Farbe:Helmholtz}}}}&lt;br /&gt;
&lt;br /&gt;
== Korrekturzeichen ==&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
! Abkürzung !! Erklärung&lt;br /&gt;
|-&lt;br /&gt;
| 🙂 || Du hast die komplette Aufgabe ohen Fehler gelöst.&lt;br /&gt;
|-&lt;br /&gt;
| ✓ || Diese Teilaufgabe hast Du richtig gelöst.&lt;br /&gt;
|-&lt;br /&gt;
| (✓) || &amp;quot;Folgerichtig&amp;quot;: Du hast irgendwo in der Aufgabe einen Fehler gemacht, aber dann mit diesem falschen Ergebnis korrekt weiter gerechnet. &lt;br /&gt;
|-&lt;br /&gt;
| {{Inline|fehler.png|Fehler}} oder &amp;lt;span style=&amp;quot;color: #FF00FF&amp;quot;&amp;gt;___&amp;lt;/span&amp;gt; || Hier hast Du etwas falsch gemacht.&lt;br /&gt;
|-&lt;br /&gt;
| {{Inline|lupe.png|Lupe}} || Diesen Fehler solltest Du Dir noch einmal anschauen!&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color: #FF00FF&amp;quot;&amp;gt;f&amp;lt;/span&amp;gt;  || In dieser Teilaufgabe hast Du einen Fehler gemacht.&lt;br /&gt;
|-&lt;br /&gt;
| s.o. || &amp;quot;Wiederholungsfehler&amp;quot;: Du hast denselben Fehler weiter oben in der Aufgabe schon einmal gemacht.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Verbesserung ==&lt;br /&gt;
&lt;br /&gt;
{{Info:Start|Icon=lupe.png|Farbe=#00FF00}}&lt;br /&gt;
&#039;&#039;&#039;Fehler, die ich Dir am Rand mit einer grünen Lupe markiert habe, sind besonders wichtig, denn hier kannst Du viel lernen.&#039;&#039;&#039; Es sind zumeist Fehler, die Du häufig machst oder die für das Verständnis eines Themas entscheidend sind.&lt;br /&gt;
&lt;br /&gt;
Diese Fehler solltest Du mit besonderer Aufmerksamkeit korrigieren. Du kannst dazu so vorgehen:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Schlage das Thema nach&#039;&#039;&#039;&lt;br /&gt;
#* in den im Unterricht verwendeten Materialien&lt;br /&gt;
#* oder in dem von mir im Feedback angegebenen Material (siehe [[#Material zum Naschschlagen|Liste häufig vorgeschlagener Materialien]] unten).&lt;br /&gt;
# &#039;&#039;&#039;Lerne&#039;&#039;&#039; oder wiederhole das Thema.&lt;br /&gt;
# &#039;&#039;&#039;Verbessere und sichere die Inhalte schriftlich&#039;&#039;&#039;&lt;br /&gt;
#* Korrigiere den markierten Fehler in der Aufgabe und schreibe sie korrekt auf.&lt;br /&gt;
#* Überlege Dir &#039;&#039;&#039;zwei weitere Aufgaben&#039;&#039;&#039;, die zum Fehler passen, löse sie und notiere sie ebenfalls.&lt;br /&gt;
{{Info:End}}&lt;br /&gt;
&lt;br /&gt;
== Material zum Nachschlagen ==&lt;br /&gt;
&lt;br /&gt;
=== M: Mathematische Grundlagen ===&lt;br /&gt;
* &#039;&#039;&#039;M0&#039;&#039;&#039; Kopfrechnen: [https://mathe.aufgabenfuchs.de/kopfrechnen/addieren.shtml Addieren], [https://mathe.aufgabenfuchs.de/kopfrechnen/subtrahieren.shtml Subtrahieren], [https://mathe.aufgabenfuchs.de/kopfrechnen/multiplizieren.shtml Multiplizieren], [https://mathe.aufgabenfuchs.de/kopfrechnen/dividieren.shtml Dividieren]&lt;br /&gt;
* &#039;&#039;&#039;M1&#039;&#039;&#039; [https://easy-schule.de/grundrechenarten/#grundrechenarten-uebersicht Grundbegriffe der Grundrechenarten]&lt;br /&gt;
* &#039;&#039;&#039;M2&#039;&#039;&#039; [https://mathegym.de/mathe/natuerliche-zahlen-runden/aufgabe/90 Zahlen runden]&lt;br /&gt;
* &#039;&#039;&#039;M3&#039;&#039;&#039; Umkehraufgaben bilden&lt;br /&gt;
* &#039;&#039;&#039;M4&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Längen umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Längen rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M5&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Gewichte umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Gewichten rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M6&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Geld umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Geld rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M7&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Zeitangaben umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Zeitangaben rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M8&#039;&#039;&#039; Sachaufgaben bearbeiten&lt;br /&gt;
&lt;br /&gt;
=== G: Geraden, Punkte, Koordinaten, Symmetrie ===&lt;br /&gt;
* &#039;&#039;&#039;G1&#039;&#039;&#039; [https://www.yout-ube.com/watch?v=vxCh6xw_TmI Das Geodreieck benutzen]&lt;br /&gt;
* &#039;&#039;&#039;G2&#039;&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;G3&#039;&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;G4&#039;&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;G5&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;G6&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Vielen Dank an [https://herr-kalt.de Herrn Kalt] für seine [https://herr-kalt.de/orga-unterricht/korrekturzeichen  Vorlage zu dieser Wiki-Seite].&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Korrektur_einer_Klassenarbeit&amp;diff=9955</id>
		<title>Korrektur einer Klassenarbeit</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Korrektur_einer_Klassenarbeit&amp;diff=9955"/>
		<updated>2024-12-18T07:59:23Z</updated>

		<summary type="html">&lt;p&gt;Ngb: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Kasten|&amp;lt;center&amp;gt;{{Farbig|&#039;&#039;&#039;Mache die Verbesserung Deiner Klassenarbeit mit Köpfchen und lerne aus Deinen Fehlern!&#039;&#039;&#039;|#FFF}}&amp;lt;/center&amp;gt;|Farbe={{Farbe:Helmholtz}}}}&lt;br /&gt;
&lt;br /&gt;
== Korrekturzeichen ==&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
! Abkürzung !! Erklärung&lt;br /&gt;
|-&lt;br /&gt;
| 🙂 || Du hast die komplette Aufgabe ohen Fehler gelöst.&lt;br /&gt;
|-&lt;br /&gt;
| ✓ || Diese Teilaufgabe hast Du richtig gelöst.&lt;br /&gt;
|-&lt;br /&gt;
| (✓) || &amp;quot;Folgerichtig&amp;quot;: Du hast irgendwo in der Aufgabe einen Fehler gemacht, aber dann mit diesem falschen Ergebnis korrekt weiter gerechnet. &lt;br /&gt;
|-&lt;br /&gt;
| {{Inline|fehler.png|Fehler}} oder &amp;lt;span style=&amp;quot;color: #FF00FF&amp;quot;&amp;gt;___&amp;lt;/span&amp;gt; || Hier hast Du etwas falsch gemacht.&lt;br /&gt;
|-&lt;br /&gt;
| {{Inline|lupe.png|Lupe}} || Diesen Fehler solltest Du Dir noch einmal anschauen!&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color: #FF00FF&amp;quot;&amp;gt;f&amp;lt;/span&amp;gt;  || In dieser Teilaufgabe hast Du einen Fehler gemacht.&lt;br /&gt;
|-&lt;br /&gt;
| s.o. || &amp;quot;Wiederholungsfehler&amp;quot;: Du hast denselben Fehler weiter oben in der Aufgabe schon einmal gemacht.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Verbesserung ==&lt;br /&gt;
&lt;br /&gt;
{{Info:Start|Icon=lupe.png|Farbe=#00FF00}}&lt;br /&gt;
&#039;&#039;&#039;Fehler, die ich Dir am Rand mit einer grünen Lupe markiert habe, sind besonders wichtig, denn hier kannst Du viel lernen.&#039;&#039;&#039; Es sind zumeist Fehler, die Du häufig machst oder die für das Verständnis eines Themas entscheidend sind.&lt;br /&gt;
&lt;br /&gt;
Diese Fehler solltest Du mit besonderer Aufmerksamkeit korrigieren. Du kannst dazu so vorgehen:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Schlage das Thema nach&#039;&#039;&#039;&lt;br /&gt;
#* in den im Unterricht verwendeten Materialien&lt;br /&gt;
#* oder in dem von mir im Feedback angegebenen Material (siehe [[#Material zum Naschschlagen|Liste häufig vorgeschlagener Materialien]] unten).&lt;br /&gt;
# &#039;&#039;&#039;Lerne&#039;&#039;&#039; oder wiederhole das Thema.&lt;br /&gt;
# &#039;&#039;&#039;Verbessere und sichere die Inhalte schriftlich&#039;&#039;&#039;&lt;br /&gt;
#* Korrigiere den markierten Fehler in der Aufgabe und schreibe sie korrekt auf.&lt;br /&gt;
#* Überlege Dir &#039;&#039;&#039;zwei weitere Aufgaben&#039;&#039;&#039;, die zum Fehler passen, löse sie und notiere sie ebenfalls.&lt;br /&gt;
{{Info:End}}&lt;br /&gt;
&lt;br /&gt;
== Material zum Naschschlagen ==&lt;br /&gt;
&lt;br /&gt;
=== M: Mathematische Grundlagen ===&lt;br /&gt;
* &#039;&#039;&#039;M0&#039;&#039;&#039; Kopfrechnen: [https://mathe.aufgabenfuchs.de/kopfrechnen/addieren.shtml Addieren], [https://mathe.aufgabenfuchs.de/kopfrechnen/subtrahieren.shtml Subtrahieren], [https://mathe.aufgabenfuchs.de/kopfrechnen/multiplizieren.shtml Multiplizieren], [https://mathe.aufgabenfuchs.de/kopfrechnen/dividieren.shtml Dividieren]&lt;br /&gt;
* &#039;&#039;&#039;M1&#039;&#039;&#039; [https://easy-schule.de/grundrechenarten/#grundrechenarten-uebersicht Grundbegriffe der Grundrechenarten]&lt;br /&gt;
* &#039;&#039;&#039;M2&#039;&#039;&#039; [https://mathegym.de/mathe/natuerliche-zahlen-runden/aufgabe/90 Zahlen runden]&lt;br /&gt;
* &#039;&#039;&#039;M3&#039;&#039;&#039; Umkehraufgaben bilden&lt;br /&gt;
* &#039;&#039;&#039;M4&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Längen umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Längen rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M5&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Gewichte umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Gewichten rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M6&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Geld umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Geld rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M7&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Zeitangaben umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Zeitangaben rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M8&#039;&#039;&#039; Sachaufgaben bearbeiten&lt;br /&gt;
&lt;br /&gt;
=== G: Geraden, Punkte, Koordinaten, Symmetrie ===&lt;br /&gt;
* &#039;&#039;&#039;G1&#039;&#039;&#039; [https://www.yout-ube.com/watch?v=vxCh6xw_TmI Das Geodreieck benutzen]&lt;br /&gt;
* &#039;&#039;&#039;G2&#039;&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;G3&#039;&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;G4&#039;&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;G5&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;G6&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Vielen Dank an [https://herr-kalt.de Herrn Kalt] für seine [https://herr-kalt.de/orga-unterricht/korrekturzeichen  Vorlage zu dieser Wiki-Seite].&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Korrektur_einer_Klassenarbeit&amp;diff=9954</id>
		<title>Korrektur einer Klassenarbeit</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Korrektur_einer_Klassenarbeit&amp;diff=9954"/>
		<updated>2024-12-15T14:07:00Z</updated>

		<summary type="html">&lt;p&gt;Ngb: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Kasten|&amp;lt;center&amp;gt;&#039;&#039;&#039;Mache die Verbesserung Deiner Klassenarbeit mit Köpfchen und lerne aus Deinen Fehlern!&#039;&#039;&#039;&amp;lt;/center&amp;gt;|Farbe={{Farbe:Highlight2}}}}&lt;br /&gt;
&lt;br /&gt;
== Korrekturzeichen ==&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
! Abkürzung !! Erklärung&lt;br /&gt;
|-&lt;br /&gt;
| 🙂 || Du hast die komplette Aufgabe ohen Fehler gelöst.&lt;br /&gt;
|-&lt;br /&gt;
| ✓ || Diese Teilaufgabe hast Du richtig gelöst.&lt;br /&gt;
|-&lt;br /&gt;
| (✓) || &amp;quot;Folgerichtig&amp;quot;: Du hast irgendwo in der Aufgabe einen Fehler gemacht, aber dann mit diesem falschen Ergebnis korrekt weiter gerechnet. &lt;br /&gt;
|-&lt;br /&gt;
| {{Inline|fehler.png|Fehler}} oder &amp;lt;span style=&amp;quot;color: #FF00FF&amp;quot;&amp;gt;___&amp;lt;/span&amp;gt; || Hier hast Du etwas falsch gemacht.&lt;br /&gt;
|-&lt;br /&gt;
| {{Inline|lupe.png|Lupe}} || Diesen Fehler solltest Du Dir noch einmal anschauen!&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color: #FF00FF&amp;quot;&amp;gt;f&amp;lt;/span&amp;gt;  || In dieser Teilaufgabe hast Du einen Fehler gemacht.&lt;br /&gt;
|-&lt;br /&gt;
| s.o. || &amp;quot;Wiederholungsfehler&amp;quot;: Du hast denselben Fehler weiter oben in der Aufgabe schon einmal gemacht.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Verbesserung ==&lt;br /&gt;
&lt;br /&gt;
{{Info:Start|Icon=lupe.png|Farbe=#00FF00}}&lt;br /&gt;
&#039;&#039;&#039;Fehler, die ich Dir am Rand mit einer grünen Lupe markiert habe, sind besonders wichtig, denn hier kannst Du viel lernen.&#039;&#039;&#039; Es sind zumeist Fehler, die Du häufig machst oder die für das Verständnis eines Themas entscheidend sind.&lt;br /&gt;
&lt;br /&gt;
Diese Fehler solltest Du mit besonderer Aufmerksamkeit korrigieren. Du kannst dazu so vorgehen:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Schlage das Thema nach&#039;&#039;&#039;&lt;br /&gt;
#* in den im Unterricht verwendeten Materialien&lt;br /&gt;
#* oder in dem von mir im Feedback angegebenen Material (siehe [[#Material zum Naschschlagen|Liste häufig vorgeschlagener Materialien]] unten).&lt;br /&gt;
# &#039;&#039;&#039;Lerne&#039;&#039;&#039; oder wiederhole das Thema.&lt;br /&gt;
# &#039;&#039;&#039;Verbessere und sichere die Inhalte schriftlich&#039;&#039;&#039;&lt;br /&gt;
#* Korrigiere den markierten Fehler in der Aufgabe und schreibe sie korrekt auf.&lt;br /&gt;
#* Überlege Dir &#039;&#039;&#039;zwei weitere Aufgaben&#039;&#039;&#039;, die zum Fehler passen, löse sie und notiere sie ebenfalls.&lt;br /&gt;
{{Info:End}}&lt;br /&gt;
&lt;br /&gt;
== Material zum Naschschlagen ==&lt;br /&gt;
&lt;br /&gt;
=== M: Mathematische Grundlagen ===&lt;br /&gt;
* &#039;&#039;&#039;M0&#039;&#039;&#039; Kopfrechnen: [https://mathe.aufgabenfuchs.de/kopfrechnen/addieren.shtml Addieren], [https://mathe.aufgabenfuchs.de/kopfrechnen/subtrahieren.shtml Subtrahieren], [https://mathe.aufgabenfuchs.de/kopfrechnen/multiplizieren.shtml Multiplizieren], [https://mathe.aufgabenfuchs.de/kopfrechnen/dividieren.shtml Dividieren]&lt;br /&gt;
* &#039;&#039;&#039;M1&#039;&#039;&#039; [https://easy-schule.de/grundrechenarten/#grundrechenarten-uebersicht Grundbegriffe der Grundrechenarten]&lt;br /&gt;
* &#039;&#039;&#039;M2&#039;&#039;&#039; [https://mathegym.de/mathe/natuerliche-zahlen-runden/aufgabe/90 Zahlen runden]&lt;br /&gt;
* &#039;&#039;&#039;M3&#039;&#039;&#039; Umkehraufgaben bilden&lt;br /&gt;
* &#039;&#039;&#039;M4&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Längen umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Längen rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M5&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Gewichte umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Gewichten rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M6&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Geld umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Geld rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M7&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Zeitangaben umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Zeitangaben rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M8&#039;&#039;&#039; Sachaufgaben bearbeiten&lt;br /&gt;
&lt;br /&gt;
=== G: Geraden, Punkte, Koordinaten, Symmetrie ===&lt;br /&gt;
* &#039;&#039;&#039;G1&#039;&#039;&#039; [https://www.yout-ube.com/watch?v=vxCh6xw_TmI Das Geodreieck benutzen]&lt;br /&gt;
* &#039;&#039;&#039;G2&#039;&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;G3&#039;&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;G4&#039;&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;G5&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;G6&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Vielen Dank an [https://herr-kalt.de Herrn Kalt] für seine [https://herr-kalt.de/orga-unterricht/korrekturzeichen  Vorlage zu dieser Wiki-Seite].&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Korrektur_einer_Klassenarbeit&amp;diff=9953</id>
		<title>Korrektur einer Klassenarbeit</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Korrektur_einer_Klassenarbeit&amp;diff=9953"/>
		<updated>2024-12-15T14:06:52Z</updated>

		<summary type="html">&lt;p&gt;Ngb: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Kasten|&amp;lt;center&amp;gt;&#039;&#039;&#039;Mache die Verbesserung Deiner Klassenarbeit mit Köpfchen und lerne aus Deinen Fehlern!&#039;&#039;&#039;&amp;lt;/center&amp;gt;|Farbe={{Farbe:Highlight2}}}}&lt;br /&gt;
&lt;br /&gt;
== Korrekturzeichen ==&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
! Abkürzung !! Erklärung&lt;br /&gt;
|-&lt;br /&gt;
| 🙂 || Du hast die komplette Aufgabe ohen Fehler gelöst.&lt;br /&gt;
|-&lt;br /&gt;
| ✓ || Diese Teilaufgabe hast Du richtig gelöst.&lt;br /&gt;
|-&lt;br /&gt;
| (✓) || &amp;quot;Folgerichtig&amp;quot;: Du hast irgendwo in der Aufgabe einen Fehler gemacht, aber dann mit diesem falschen Ergebnis korrekt weiter gerechnet. &lt;br /&gt;
|-&lt;br /&gt;
| {{Inline|fehler.png|Fehler}} oder &amp;lt;span style=&amp;quot;color: #FF00FF&amp;quot;&amp;gt;___&amp;lt;/span&amp;gt; || Hier hast Du etwas falsch gemacht.&lt;br /&gt;
|-&lt;br /&gt;
| {{Inline|lupe.png|Lupe}} || Diesen Fehler solltest Du Dir noch einmal anschauen!&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color: #FF00FF&amp;quot;&amp;gt;f&amp;lt;/span&amp;gt;  || In dieser Teilaufgabe hast Du einen Fehler gemacht.&lt;br /&gt;
|-&lt;br /&gt;
| s.o. || &amp;quot;Wiederholungsfehler&amp;quot;: Du hast denselben Fehler weiter oben in der Aufgabe schon einmal gemacht.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Verbesserung ==&lt;br /&gt;
&lt;br /&gt;
{{Info:Start|Icon=lupe.png|Farbe=#00FF00}}&lt;br /&gt;
&#039;&#039;&#039;Fehler, die ich Dir am Rand mit einer grünen Lupe markiert habe, sind besonders wichtig, denn hier kannst Du viel lernen.&#039;&#039;&#039; Es sind zumeist Fehler, die Du häufig machst oder die für das Verständnis eines Themas entscheidend sind.&lt;br /&gt;
&lt;br /&gt;
Diese Fehler solltest Du mit besonderer Aufmerksamkeit korrigieren. Du kannst dazu so vorgehen:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Schlage das Thema nach&#039;&#039;&#039;&lt;br /&gt;
#* in den im Unterricht verwendeten Materialien&lt;br /&gt;
#* oder in dem von mir im Feedback angegebenen Material (siehe [[#Material zum Naschschlagen|Liste häufig vorgeschlagener Materialien]] unten).&lt;br /&gt;
# &#039;&#039;&#039;Lerne&#039;&#039;&#039; oder wiederhole das Thema.&lt;br /&gt;
# &#039;&#039;&#039;Verbessere und sichere die Inhalte schriftlich&#039;&#039;&#039;&lt;br /&gt;
#* Korrigiere den markierten Fehler in der Aufgabe und schreibe sie korrekt auf.&lt;br /&gt;
#* Überlege Dir &#039;&#039;&#039;zwei weitere Aufgaben&#039;&#039;&#039;, die zum Fehler passen, löse sie und notiere sie ebenfalls.&lt;br /&gt;
{{Info:End}}&lt;br /&gt;
&lt;br /&gt;
== Material zum Naschschlagen ==&lt;br /&gt;
&lt;br /&gt;
=== M: Mathematische Grundlagen ===&lt;br /&gt;
* &#039;&#039;&#039;M0&#039;&#039;&#039; Kopfrechnen: [https://mathe.aufgabenfuchs.de/kopfrechnen/addieren.shtml Addieren], [https://mathe.aufgabenfuchs.de/kopfrechnen/subtrahieren.shtml Subtrahieren], [https://mathe.aufgabenfuchs.de/kopfrechnen/multiplizieren.shtml Multiplizieren], [https://mathe.aufgabenfuchs.de/kopfrechnen/dividieren.shtml Dividieren]&lt;br /&gt;
* &#039;&#039;&#039;M1&#039;&#039;&#039; [https://easy-schule.de/grundrechenarten/#grundrechenarten-uebersicht Grundbegriffe der Grundrechenarten]&lt;br /&gt;
* &#039;&#039;&#039;M2&#039;&#039;&#039; [https://mathegym.de/mathe/natuerliche-zahlen-runden/aufgabe/90 Zahlen runden]&lt;br /&gt;
* &#039;&#039;&#039;M3&#039;&#039;&#039; Umkehraufgaben bilden&lt;br /&gt;
* &#039;&#039;&#039;M4&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Längen umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Längen rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M5&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Gewichte umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Gewichten rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M6&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Geld umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Geld rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M7&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Zeitangaben umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Zeitangaben rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M8&#039;&#039;&#039; Sachaufgaben bearbeiten&lt;br /&gt;
&lt;br /&gt;
=== G: Geraden, Punkte, Koordinaten, Symmetrie ===&lt;br /&gt;
* &#039;&#039;&#039;G1&#039;&#039;&#039; [https://www.yout-ube.com/watch?v=vxCh6xw_TmI Das Geodreieck benutzen]&lt;br /&gt;
* &#039;&#039;&#039;G2&#039;&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;G3&#039;&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;G4&#039;&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;G5&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;G6&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Vielen Dank an [https://herr-kalt.de Herrn Kalt] für seine [[https://herr-kalt.de/orga-unterricht/korrekturzeichen  Vorlage zu dieser Wiki-Seite].&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Korrektur_einer_Klassenarbeit&amp;diff=9952</id>
		<title>Korrektur einer Klassenarbeit</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Korrektur_einer_Klassenarbeit&amp;diff=9952"/>
		<updated>2024-12-15T14:05:39Z</updated>

		<summary type="html">&lt;p&gt;Ngb: /* M: Mathematische Grundlagen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Kasten|&amp;lt;center&amp;gt;&#039;&#039;&#039;Mache die Verbesserung Deiner Klassenarbeit mit Köpfchen und lerne aus Deinen Fehlern!&#039;&#039;&#039;&amp;lt;/center&amp;gt;|Farbe={{Farbe:Highlight2}}}}&lt;br /&gt;
&lt;br /&gt;
== Korrekturzeichen ==&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
! Abkürzung !! Erklärung&lt;br /&gt;
|-&lt;br /&gt;
| 🙂 || Du hast die komplette Aufgabe ohen Fehler gelöst.&lt;br /&gt;
|-&lt;br /&gt;
| ✓ || Diese Teilaufgabe hast Du richtig gelöst.&lt;br /&gt;
|-&lt;br /&gt;
| (✓) || &amp;quot;Folgerichtig&amp;quot;: Du hast irgendwo in der Aufgabe einen Fehler gemacht, aber dann mit diesem falschen Ergebnis korrekt weiter gerechnet. &lt;br /&gt;
|-&lt;br /&gt;
| {{Inline|fehler.png|Fehler}} oder &amp;lt;span style=&amp;quot;color: #FF00FF&amp;quot;&amp;gt;___&amp;lt;/span&amp;gt; || Hier hast Du etwas falsch gemacht.&lt;br /&gt;
|-&lt;br /&gt;
| {{Inline|lupe.png|Lupe}} || Diesen Fehler solltest Du Dir noch einmal anschauen!&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color: #FF00FF&amp;quot;&amp;gt;f&amp;lt;/span&amp;gt;  || In dieser Teilaufgabe hast Du einen Fehler gemacht.&lt;br /&gt;
|-&lt;br /&gt;
| s.o. || &amp;quot;Wiederholungsfehler&amp;quot;: Du hast denselben Fehler weiter oben in der Aufgabe schon einmal gemacht.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Verbesserung ==&lt;br /&gt;
&lt;br /&gt;
{{Info:Start|Icon=lupe.png|Farbe=#00FF00}}&lt;br /&gt;
&#039;&#039;&#039;Fehler, die ich Dir am Rand mit einer grünen Lupe markiert habe, sind besonders wichtig, denn hier kannst Du viel lernen.&#039;&#039;&#039; Es sind zumeist Fehler, die Du häufig machst oder die für das Verständnis eines Themas entscheidend sind.&lt;br /&gt;
&lt;br /&gt;
Diese Fehler solltest Du mit besonderer Aufmerksamkeit korrigieren. Du kannst dazu so vorgehen:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Schlage das Thema nach&#039;&#039;&#039;&lt;br /&gt;
#* in den im Unterricht verwendeten Materialien&lt;br /&gt;
#* oder in dem von mir im Feedback angegebenen Material (siehe [[#Material zum Naschschlagen|Liste häufig vorgeschlagener Materialien]] unten).&lt;br /&gt;
# &#039;&#039;&#039;Lerne&#039;&#039;&#039; oder wiederhole das Thema.&lt;br /&gt;
# &#039;&#039;&#039;Verbessere und sichere die Inhalte schriftlich&#039;&#039;&#039;&lt;br /&gt;
#* Korrigiere den markierten Fehler in der Aufgabe und schreibe sie korrekt auf.&lt;br /&gt;
#* Überlege Dir &#039;&#039;&#039;zwei weitere Aufgaben&#039;&#039;&#039;, die zum Fehler passen, löse sie und notiere sie ebenfalls.&lt;br /&gt;
{{Info:End}}&lt;br /&gt;
&lt;br /&gt;
== Material zum Naschschlagen ==&lt;br /&gt;
&lt;br /&gt;
=== M: Mathematische Grundlagen ===&lt;br /&gt;
* &#039;&#039;&#039;M0&#039;&#039;&#039; Kopfrechnen: [https://mathe.aufgabenfuchs.de/kopfrechnen/addieren.shtml Addieren], [https://mathe.aufgabenfuchs.de/kopfrechnen/subtrahieren.shtml Subtrahieren], [https://mathe.aufgabenfuchs.de/kopfrechnen/multiplizieren.shtml Multiplizieren], [https://mathe.aufgabenfuchs.de/kopfrechnen/dividieren.shtml Dividieren]&lt;br /&gt;
* &#039;&#039;&#039;M1&#039;&#039;&#039; [https://easy-schule.de/grundrechenarten/#grundrechenarten-uebersicht Grundbegriffe der Grundrechenarten]&lt;br /&gt;
* &#039;&#039;&#039;M2&#039;&#039;&#039; [https://mathegym.de/mathe/natuerliche-zahlen-runden/aufgabe/90 Zahlen runden]&lt;br /&gt;
* &#039;&#039;&#039;M3&#039;&#039;&#039; Umkehraufgaben bilden&lt;br /&gt;
* &#039;&#039;&#039;M4&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Längen umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Längen rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M5&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Gewichte umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Gewichten rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M6&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Geld umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Geld rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M7&#039;&#039;&#039; [https://mathe.aufgabenfuchs.de/groessen/einfache-groessen-umrechnen.shtml Zeitangaben umformen] und [https://mathe.aufgabenfuchs.de/groessen/gemischte-groessen-umrechnen.shtml mit Zeitangaben rechnen].&lt;br /&gt;
* &#039;&#039;&#039;M8&#039;&#039;&#039; Sachaufgaben bearbeiten&lt;br /&gt;
&lt;br /&gt;
=== G: Geraden, Punkte, Koordinaten, Symmetrie ===&lt;br /&gt;
* &#039;&#039;&#039;G1&#039;&#039;&#039; [https://www.yout-ube.com/watch?v=vxCh6xw_TmI Das Geodreieck benutzen]&lt;br /&gt;
* &#039;&#039;&#039;G2&#039;&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;G3&#039;&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;G4&#039;&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;G5&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;G6&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Korrektur_einer_Klassenarbeit&amp;diff=9951</id>
		<title>Korrektur einer Klassenarbeit</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Korrektur_einer_Klassenarbeit&amp;diff=9951"/>
		<updated>2024-12-15T13:55:46Z</updated>

		<summary type="html">&lt;p&gt;Ngb: /* M: Mathematische Grundlagen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Kasten|&amp;lt;center&amp;gt;&#039;&#039;&#039;Mache die Verbesserung Deiner Klassenarbeit mit Köpfchen und lerne aus Deinen Fehlern!&#039;&#039;&#039;&amp;lt;/center&amp;gt;|Farbe={{Farbe:Highlight2}}}}&lt;br /&gt;
&lt;br /&gt;
== Korrekturzeichen ==&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
! Abkürzung !! Erklärung&lt;br /&gt;
|-&lt;br /&gt;
| 🙂 || Du hast die komplette Aufgabe ohen Fehler gelöst.&lt;br /&gt;
|-&lt;br /&gt;
| ✓ || Diese Teilaufgabe hast Du richtig gelöst.&lt;br /&gt;
|-&lt;br /&gt;
| (✓) || &amp;quot;Folgerichtig&amp;quot;: Du hast irgendwo in der Aufgabe einen Fehler gemacht, aber dann mit diesem falschen Ergebnis korrekt weiter gerechnet. &lt;br /&gt;
|-&lt;br /&gt;
| {{Inline|fehler.png|Fehler}} oder &amp;lt;span style=&amp;quot;color: #FF00FF&amp;quot;&amp;gt;___&amp;lt;/span&amp;gt; || Hier hast Du etwas falsch gemacht.&lt;br /&gt;
|-&lt;br /&gt;
| {{Inline|lupe.png|Lupe}} || Diesen Fehler solltest Du Dir noch einmal anschauen!&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color: #FF00FF&amp;quot;&amp;gt;f&amp;lt;/span&amp;gt;  || In dieser Teilaufgabe hast Du einen Fehler gemacht.&lt;br /&gt;
|-&lt;br /&gt;
| s.o. || &amp;quot;Wiederholungsfehler&amp;quot;: Du hast denselben Fehler weiter oben in der Aufgabe schon einmal gemacht.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Verbesserung ==&lt;br /&gt;
&lt;br /&gt;
{{Info:Start|Icon=lupe.png|Farbe=#00FF00}}&lt;br /&gt;
&#039;&#039;&#039;Fehler, die ich Dir am Rand mit einer grünen Lupe markiert habe, sind besonders wichtig, denn hier kannst Du viel lernen.&#039;&#039;&#039; Es sind zumeist Fehler, die Du häufig machst oder die für das Verständnis eines Themas entscheidend sind.&lt;br /&gt;
&lt;br /&gt;
Diese Fehler solltest Du mit besonderer Aufmerksamkeit korrigieren. Du kannst dazu so vorgehen:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Schlage das Thema nach&#039;&#039;&#039;&lt;br /&gt;
#* in den im Unterricht verwendeten Materialien&lt;br /&gt;
#* oder in dem von mir im Feedback angegebenen Material (siehe [[#Material zum Naschschlagen|Liste häufig vorgeschlagener Materialien]] unten).&lt;br /&gt;
# &#039;&#039;&#039;Lerne&#039;&#039;&#039; oder wiederhole das Thema.&lt;br /&gt;
# &#039;&#039;&#039;Verbessere und sichere die Inhalte schriftlich&#039;&#039;&#039;&lt;br /&gt;
#* Korrigiere den markierten Fehler in der Aufgabe und schreibe sie korrekt auf.&lt;br /&gt;
#* Überlege Dir &#039;&#039;&#039;zwei weitere Aufgaben&#039;&#039;&#039;, die zum Fehler passen, löse sie und notiere sie ebenfalls.&lt;br /&gt;
{{Info:End}}&lt;br /&gt;
&lt;br /&gt;
== Material zum Naschschlagen ==&lt;br /&gt;
&lt;br /&gt;
=== M: Mathematische Grundlagen ===&lt;br /&gt;
* &#039;&#039;&#039;M0&#039;&#039;&#039; Kopfrechnen: [https://mathe.aufgabenfuchs.de/kopfrechnen/addieren.shtml Addieren], [https://mathe.aufgabenfuchs.de/kopfrechnen/subtrahieren.shtml Subtrahieren], [https://mathe.aufgabenfuchs.de/kopfrechnen/multiplizieren.shtml Multiplizieren], [https://mathe.aufgabenfuchs.de/kopfrechnen/dividieren.shtml Dividieren]&lt;br /&gt;
* &#039;&#039;&#039;M1&#039;&#039;&#039; Grundbegriffe beim Rechnen&lt;br /&gt;
* &#039;&#039;&#039;M2&#039;&#039;&#039; Zahlen runden&lt;br /&gt;
* &#039;&#039;&#039;M3&#039;&#039;&#039; Umkehraufgaben bilden&lt;br /&gt;
* &#039;&#039;&#039;M4&#039;&#039;&#039; Längen umformen und mit Längen rechnen&lt;br /&gt;
* &#039;&#039;&#039;M5&#039;&#039;&#039; Gewichte umformen und mit Gewichten rechnen&lt;br /&gt;
* &#039;&#039;&#039;M6&#039;&#039;&#039; Geld umformen und mit Geld rechnen&lt;br /&gt;
* &#039;&#039;&#039;M7&#039;&#039;&#039; Zeitangaben umformen und mit Zeitangaben rechnen&lt;br /&gt;
* &#039;&#039;&#039;M8&#039;&#039;&#039; Sachaufgaben bearbeiten&lt;br /&gt;
&lt;br /&gt;
=== G: Geraden, Punkte, Koordinaten, Symmetrie ===&lt;br /&gt;
* &#039;&#039;&#039;G1&#039;&#039;&#039; [https://www.yout-ube.com/watch?v=vxCh6xw_TmI Das Geodreieck benutzen]&lt;br /&gt;
* &#039;&#039;&#039;G2&#039;&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;G3&#039;&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;G4&#039;&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;G5&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;G6&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Korrektur_einer_Klassenarbeit&amp;diff=9950</id>
		<title>Korrektur einer Klassenarbeit</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Korrektur_einer_Klassenarbeit&amp;diff=9950"/>
		<updated>2024-12-15T13:53:58Z</updated>

		<summary type="html">&lt;p&gt;Ngb: /* G: Geraden, Punkte, Koordinaten, Symmetrie */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Kasten|&amp;lt;center&amp;gt;&#039;&#039;&#039;Mache die Verbesserung Deiner Klassenarbeit mit Köpfchen und lerne aus Deinen Fehlern!&#039;&#039;&#039;&amp;lt;/center&amp;gt;|Farbe={{Farbe:Highlight2}}}}&lt;br /&gt;
&lt;br /&gt;
== Korrekturzeichen ==&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
! Abkürzung !! Erklärung&lt;br /&gt;
|-&lt;br /&gt;
| 🙂 || Du hast die komplette Aufgabe ohen Fehler gelöst.&lt;br /&gt;
|-&lt;br /&gt;
| ✓ || Diese Teilaufgabe hast Du richtig gelöst.&lt;br /&gt;
|-&lt;br /&gt;
| (✓) || &amp;quot;Folgerichtig&amp;quot;: Du hast irgendwo in der Aufgabe einen Fehler gemacht, aber dann mit diesem falschen Ergebnis korrekt weiter gerechnet. &lt;br /&gt;
|-&lt;br /&gt;
| {{Inline|fehler.png|Fehler}} oder &amp;lt;span style=&amp;quot;color: #FF00FF&amp;quot;&amp;gt;___&amp;lt;/span&amp;gt; || Hier hast Du etwas falsch gemacht.&lt;br /&gt;
|-&lt;br /&gt;
| {{Inline|lupe.png|Lupe}} || Diesen Fehler solltest Du Dir noch einmal anschauen!&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color: #FF00FF&amp;quot;&amp;gt;f&amp;lt;/span&amp;gt;  || In dieser Teilaufgabe hast Du einen Fehler gemacht.&lt;br /&gt;
|-&lt;br /&gt;
| s.o. || &amp;quot;Wiederholungsfehler&amp;quot;: Du hast denselben Fehler weiter oben in der Aufgabe schon einmal gemacht.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Verbesserung ==&lt;br /&gt;
&lt;br /&gt;
{{Info:Start|Icon=lupe.png|Farbe=#00FF00}}&lt;br /&gt;
&#039;&#039;&#039;Fehler, die ich Dir am Rand mit einer grünen Lupe markiert habe, sind besonders wichtig, denn hier kannst Du viel lernen.&#039;&#039;&#039; Es sind zumeist Fehler, die Du häufig machst oder die für das Verständnis eines Themas entscheidend sind.&lt;br /&gt;
&lt;br /&gt;
Diese Fehler solltest Du mit besonderer Aufmerksamkeit korrigieren. Du kannst dazu so vorgehen:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Schlage das Thema nach&#039;&#039;&#039;&lt;br /&gt;
#* in den im Unterricht verwendeten Materialien&lt;br /&gt;
#* oder in dem von mir im Feedback angegebenen Material (siehe [[#Material zum Naschschlagen|Liste häufig vorgeschlagener Materialien]] unten).&lt;br /&gt;
# &#039;&#039;&#039;Lerne&#039;&#039;&#039; oder wiederhole das Thema.&lt;br /&gt;
# &#039;&#039;&#039;Verbessere und sichere die Inhalte schriftlich&#039;&#039;&#039;&lt;br /&gt;
#* Korrigiere den markierten Fehler in der Aufgabe und schreibe sie korrekt auf.&lt;br /&gt;
#* Überlege Dir &#039;&#039;&#039;zwei weitere Aufgaben&#039;&#039;&#039;, die zum Fehler passen, löse sie und notiere sie ebenfalls.&lt;br /&gt;
{{Info:End}}&lt;br /&gt;
&lt;br /&gt;
== Material zum Naschschlagen ==&lt;br /&gt;
&lt;br /&gt;
=== M: Mathematische Grundlagen ===&lt;br /&gt;
* &#039;&#039;&#039;M1&#039;&#039;&#039; Grundbegriffe beim Rechnen&lt;br /&gt;
* &#039;&#039;&#039;M2&#039;&#039;&#039; Zahlen runden&lt;br /&gt;
* &#039;&#039;&#039;M3&#039;&#039;&#039; Umkehraufgaben bilden&lt;br /&gt;
* &#039;&#039;&#039;M4&#039;&#039;&#039; Längen umformen und mit Längen rechnen&lt;br /&gt;
* &#039;&#039;&#039;M5&#039;&#039;&#039; Gewichte umformen und mit Gewichten rechnen&lt;br /&gt;
* &#039;&#039;&#039;M6&#039;&#039;&#039; Geld umformen und mit Geld rechnen&lt;br /&gt;
* &#039;&#039;&#039;M7&#039;&#039;&#039; Zeitangaben umformen und mit Zeitangaben rechnen&lt;br /&gt;
* &#039;&#039;&#039;M8&#039;&#039;&#039; Sachaufgaben bearbeiten&lt;br /&gt;
&lt;br /&gt;
=== G: Geraden, Punkte, Koordinaten, Symmetrie ===&lt;br /&gt;
* &#039;&#039;&#039;G1&#039;&#039;&#039; [https://www.yout-ube.com/watch?v=vxCh6xw_TmI Das Geodreieck benutzen]&lt;br /&gt;
* &#039;&#039;&#039;G2&#039;&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;G3&#039;&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;G4&#039;&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;G5&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;G6&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Korrektur_einer_Klassenarbeit&amp;diff=9949</id>
		<title>Korrektur einer Klassenarbeit</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Korrektur_einer_Klassenarbeit&amp;diff=9949"/>
		<updated>2024-12-15T13:51:34Z</updated>

		<summary type="html">&lt;p&gt;Ngb: /* Verbesserung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Kasten|&amp;lt;center&amp;gt;&#039;&#039;&#039;Mache die Verbesserung Deiner Klassenarbeit mit Köpfchen und lerne aus Deinen Fehlern!&#039;&#039;&#039;&amp;lt;/center&amp;gt;|Farbe={{Farbe:Highlight2}}}}&lt;br /&gt;
&lt;br /&gt;
== Korrekturzeichen ==&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
! Abkürzung !! Erklärung&lt;br /&gt;
|-&lt;br /&gt;
| 🙂 || Du hast die komplette Aufgabe ohen Fehler gelöst.&lt;br /&gt;
|-&lt;br /&gt;
| ✓ || Diese Teilaufgabe hast Du richtig gelöst.&lt;br /&gt;
|-&lt;br /&gt;
| (✓) || &amp;quot;Folgerichtig&amp;quot;: Du hast irgendwo in der Aufgabe einen Fehler gemacht, aber dann mit diesem falschen Ergebnis korrekt weiter gerechnet. &lt;br /&gt;
|-&lt;br /&gt;
| {{Inline|fehler.png|Fehler}} oder &amp;lt;span style=&amp;quot;color: #FF00FF&amp;quot;&amp;gt;___&amp;lt;/span&amp;gt; || Hier hast Du etwas falsch gemacht.&lt;br /&gt;
|-&lt;br /&gt;
| {{Inline|lupe.png|Lupe}} || Diesen Fehler solltest Du Dir noch einmal anschauen!&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color: #FF00FF&amp;quot;&amp;gt;f&amp;lt;/span&amp;gt;  || In dieser Teilaufgabe hast Du einen Fehler gemacht.&lt;br /&gt;
|-&lt;br /&gt;
| s.o. || &amp;quot;Wiederholungsfehler&amp;quot;: Du hast denselben Fehler weiter oben in der Aufgabe schon einmal gemacht.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Verbesserung ==&lt;br /&gt;
&lt;br /&gt;
{{Info:Start|Icon=lupe.png|Farbe=#00FF00}}&lt;br /&gt;
&#039;&#039;&#039;Fehler, die ich Dir am Rand mit einer grünen Lupe markiert habe, sind besonders wichtig, denn hier kannst Du viel lernen.&#039;&#039;&#039; Es sind zumeist Fehler, die Du häufig machst oder die für das Verständnis eines Themas entscheidend sind.&lt;br /&gt;
&lt;br /&gt;
Diese Fehler solltest Du mit besonderer Aufmerksamkeit korrigieren. Du kannst dazu so vorgehen:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Schlage das Thema nach&#039;&#039;&#039;&lt;br /&gt;
#* in den im Unterricht verwendeten Materialien&lt;br /&gt;
#* oder in dem von mir im Feedback angegebenen Material (siehe [[#Material zum Naschschlagen|Liste häufig vorgeschlagener Materialien]] unten).&lt;br /&gt;
# &#039;&#039;&#039;Lerne&#039;&#039;&#039; oder wiederhole das Thema.&lt;br /&gt;
# &#039;&#039;&#039;Verbessere und sichere die Inhalte schriftlich&#039;&#039;&#039;&lt;br /&gt;
#* Korrigiere den markierten Fehler in der Aufgabe und schreibe sie korrekt auf.&lt;br /&gt;
#* Überlege Dir &#039;&#039;&#039;zwei weitere Aufgaben&#039;&#039;&#039;, die zum Fehler passen, löse sie und notiere sie ebenfalls.&lt;br /&gt;
{{Info:End}}&lt;br /&gt;
&lt;br /&gt;
== Material zum Naschschlagen ==&lt;br /&gt;
&lt;br /&gt;
=== M: Mathematische Grundlagen ===&lt;br /&gt;
* &#039;&#039;&#039;M1&#039;&#039;&#039; Grundbegriffe beim Rechnen&lt;br /&gt;
* &#039;&#039;&#039;M2&#039;&#039;&#039; Zahlen runden&lt;br /&gt;
* &#039;&#039;&#039;M3&#039;&#039;&#039; Umkehraufgaben bilden&lt;br /&gt;
* &#039;&#039;&#039;M4&#039;&#039;&#039; Längen umformen und mit Längen rechnen&lt;br /&gt;
* &#039;&#039;&#039;M5&#039;&#039;&#039; Gewichte umformen und mit Gewichten rechnen&lt;br /&gt;
* &#039;&#039;&#039;M6&#039;&#039;&#039; Geld umformen und mit Geld rechnen&lt;br /&gt;
* &#039;&#039;&#039;M7&#039;&#039;&#039; Zeitangaben umformen und mit Zeitangaben rechnen&lt;br /&gt;
* &#039;&#039;&#039;M8&#039;&#039;&#039; Sachaufgaben bearbeiten&lt;br /&gt;
&lt;br /&gt;
=== G: Geraden, Punkte, Koordinaten, Symmetrie ===&lt;br /&gt;
* &#039;&#039;&#039;G1&#039;&#039;&#039; Das Geodreieck benutzen&lt;br /&gt;
* &#039;&#039;&#039;G2&#039;&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;G3&#039;&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;G4&#039;&#039;&#039; &lt;br /&gt;
* &#039;&#039;&#039;G5&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;G6&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Korrektur_einer_Klassenarbeit&amp;diff=9948</id>
		<title>Korrektur einer Klassenarbeit</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Korrektur_einer_Klassenarbeit&amp;diff=9948"/>
		<updated>2024-12-15T13:36:28Z</updated>

		<summary type="html">&lt;p&gt;Ngb: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Kasten|&amp;lt;center&amp;gt;&#039;&#039;&#039;Mache die Verbesserung Deiner Klassenarbeit mit Köpfchen und lerne aus Deinen Fehlern!&#039;&#039;&#039;&amp;lt;/center&amp;gt;|Farbe={{Farbe:Highlight2}}}}&lt;br /&gt;
&lt;br /&gt;
== Korrekturzeichen ==&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
! Abkürzung !! Erklärung&lt;br /&gt;
|-&lt;br /&gt;
| 🙂 || Du hast die komplette Aufgabe ohen Fehler gelöst.&lt;br /&gt;
|-&lt;br /&gt;
| ✓ || Diese Teilaufgabe hast Du richtig gelöst.&lt;br /&gt;
|-&lt;br /&gt;
| (✓) || &amp;quot;Folgerichtig&amp;quot;: Du hast irgendwo in der Aufgabe einen Fehler gemacht, aber dann mit diesem falschen Ergebnis korrekt weiter gerechnet. &lt;br /&gt;
|-&lt;br /&gt;
| {{Inline|fehler.png|Fehler}} oder &amp;lt;span style=&amp;quot;color: #FF00FF&amp;quot;&amp;gt;___&amp;lt;/span&amp;gt; || Hier hast Du etwas falsch gemacht.&lt;br /&gt;
|-&lt;br /&gt;
| {{Inline|lupe.png|Lupe}} || Diesen Fehler solltest Du Dir noch einmal anschauen!&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color: #FF00FF&amp;quot;&amp;gt;f&amp;lt;/span&amp;gt;  || In dieser Teilaufgabe hast Du einen Fehler gemacht.&lt;br /&gt;
|-&lt;br /&gt;
| s.o. || &amp;quot;Wiederholungsfehler&amp;quot;: Du hast denselben Fehler weiter oben in der Aufgabe schon einmal gemacht.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Verbesserung ==&lt;br /&gt;
&lt;br /&gt;
Verbessere nur die Fehler, die am Rand mit einer Lupe {{Inline|lupe.png|Lupe}} markiert sind.&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Korrektur_einer_Klassenarbeit&amp;diff=9947</id>
		<title>Korrektur einer Klassenarbeit</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Korrektur_einer_Klassenarbeit&amp;diff=9947"/>
		<updated>2024-12-15T13:35:51Z</updated>

		<summary type="html">&lt;p&gt;Ngb: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Kasten|&amp;lt;center&amp;gt;&#039;&#039;&#039;Mache die Verbesserung Deiner Klassenarbeit mit Köpfchen und lerne aus Deinen Fehlern!&#039;&#039;&#039;&amp;lt;/center&amp;gt;|Farbe={{Farbe:Highlight2}}}}&lt;br /&gt;
&lt;br /&gt;
== Korrekturzeichen ==&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
! Abkürzung !! Erklärung&lt;br /&gt;
|-&lt;br /&gt;
| 🙂 || Du hast die komplette Aufgabe ohen Fehler gelöst.&lt;br /&gt;
|-&lt;br /&gt;
| ✓ || Diese Teilaufgabe hast Du richtig gelöst.&lt;br /&gt;
|-&lt;br /&gt;
| (✓) || &amp;quot;Folgerichtig&amp;quot;: Du hast irgendwo in der Aufgabe einen Fehler gemacht, aber dann mit diesem falschen Ergebnis korrekt weiter gerechnet. &lt;br /&gt;
|-&lt;br /&gt;
| {{Inline|fehler.png|Fehler}} oder &amp;lt;span style=&amp;quot;color: #FF00FF&amp;quot;&amp;gt;___&amp;lt;/span&amp;gt; || Hier hast Du etwas falsch gemacht.&lt;br /&gt;
|-&lt;br /&gt;
| {{Inline|lupe.png|Lupe}} || Diesen Fehler solltest Du Dir noch einmal anschauen!&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color: #FF00FF&amp;quot;&amp;gt;f&amp;lt;/span&amp;gt;  || Hier hast Du eine Teilaufgabe falsch gerechnet.&lt;br /&gt;
|-&lt;br /&gt;
| s.o. || &amp;quot;Wiederholungsfehler&amp;quot;: Du hast denselben Fehler weiter oben in der Aufgabe schon einmal gemacht.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Verbesserung ==&lt;br /&gt;
&lt;br /&gt;
Verbessere nur die Fehler, die am Rand mit einer Lupe {{Inline|lupe.png|Lupe}} markiert sind.&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Korrektur_einer_Klassenarbeit&amp;diff=9946</id>
		<title>Korrektur einer Klassenarbeit</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Korrektur_einer_Klassenarbeit&amp;diff=9946"/>
		<updated>2024-12-15T13:34:41Z</updated>

		<summary type="html">&lt;p&gt;Ngb: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Kasten|&amp;lt;center&amp;gt;&#039;&#039;&#039;Mache die Verbesserung Deiner Klassenarbeit mit Köpfchen und lerne aus Deinen Fehlern!&#039;&#039;&#039;&amp;lt;/center&amp;gt;|Farbe={{Farbe:Highlight2}}}}&lt;br /&gt;
&lt;br /&gt;
== Korrekturzeichen ==&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
! Abkürzung !! Erklärung&lt;br /&gt;
|-&lt;br /&gt;
| 🙂 || Du hast die komplette Aufgabe ohen Fehler gelöst.&lt;br /&gt;
|-&lt;br /&gt;
| ✓ || Diese Teilaufgabe hast Du richtig gelöst.&lt;br /&gt;
|-&lt;br /&gt;
| (✓) || &amp;quot;Folgerichtig&amp;quot;: Du hast irgendwo in der Aufgabe einen Fehler gemacht, aber dann mit diesem falschen Ergebnis korrekt weiter gerechnet. &lt;br /&gt;
|-&lt;br /&gt;
| {{Inline|fehler.png|Fehler}} || Hier hast Du etwas falsch gemacht.&lt;br /&gt;
|-&lt;br /&gt;
| {{Inline|lupe.png|Lupe}} || Diese Fehler solltest Du Dir noch einmal anschauen!&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color: #FF00FF&amp;quot;&amp;gt;f&amp;lt;/span&amp;gt;  || Hier hast Du etwas falsch gemacht.&lt;br /&gt;
|-&lt;br /&gt;
| s.o. || &amp;quot;Wiederholungsfehler&amp;quot;: Du hast denselben Fehler weiter oben in der Aufgabe schon einmal gemacht.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Verbesserung ==&lt;br /&gt;
&lt;br /&gt;
Verbessere nur die Fehler, die am Rand mit einer Lupe {{Inline|lupe.png|Lupe}} markiert sind.&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Datei:Lupe.png&amp;diff=9945</id>
		<title>Datei:Lupe.png</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Datei:Lupe.png&amp;diff=9945"/>
		<updated>2024-12-15T13:34:25Z</updated>

		<summary type="html">&lt;p&gt;Ngb: Ngb lud eine neue Version von Datei:Lupe.png hoch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Datei:Fehler.png&amp;diff=9944</id>
		<title>Datei:Fehler.png</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Datei:Fehler.png&amp;diff=9944"/>
		<updated>2024-12-15T13:34:07Z</updated>

		<summary type="html">&lt;p&gt;Ngb: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Korrektur_einer_Klassenarbeit&amp;diff=9943</id>
		<title>Korrektur einer Klassenarbeit</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Korrektur_einer_Klassenarbeit&amp;diff=9943"/>
		<updated>2024-12-15T13:33:51Z</updated>

		<summary type="html">&lt;p&gt;Ngb: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Kasten|&amp;lt;center&amp;gt;&#039;&#039;&#039;Mache die Verbesserung Deiner Klassenarbeit mit Köpfchen und lerne aus Deinen Fehlern!&#039;&#039;&#039;&amp;lt;/center&amp;gt;|Farbe={{Farbe:Highlight2}}}}&lt;br /&gt;
&lt;br /&gt;
== Korrekturzeichen ==&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
! Abkürzung !! Erklärung&lt;br /&gt;
|-&lt;br /&gt;
| 🙂 || Du hast die komplette Aufgabe ohen Fehler gelöst.&lt;br /&gt;
|-&lt;br /&gt;
| ✓ || Diese Teilaufgabe hast Du richtig gelöst.&lt;br /&gt;
|-&lt;br /&gt;
| (✓) || &amp;quot;Folgerichtig&amp;quot;: Du hast irgendwo in der Aufgabe einen Fehler gemacht, aber dann mit diesem falschen Ergebnis korrekt weiter gerechnet. &lt;br /&gt;
|-&lt;br /&gt;
| {{Inline|fehler.png|Fehler}} || Hier hast Du etwas falsch gemacht.&lt;br /&gt;
|-&lt;br /&gt;
| {{Inline|lupe.png|Lupe}} || Diese Fehler solltest Du Dir noch einmal anschauen!&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color: #FFFF00&amp;quot;&amp;gt;f&amp;lt;/span&amp;gt;  || Hier hast Du etwas falsch gemacht.&lt;br /&gt;
|-&lt;br /&gt;
| s.o. || &amp;quot;Wiederholungsfehler&amp;quot;: Du hast denselben Fehler weiter oben in der Aufgabe schon einmal gemacht.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Verbesserung ==&lt;br /&gt;
&lt;br /&gt;
Verbessere nur die Fehler, die am Rand mit einer Lupe {{Inline|lupe.png|Lupe}} markiert sind.&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Datei:Lupe.png&amp;diff=9942</id>
		<title>Datei:Lupe.png</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Datei:Lupe.png&amp;diff=9942"/>
		<updated>2024-12-15T13:18:34Z</updated>

		<summary type="html">&lt;p&gt;Ngb: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
	<entry>
		<id>http://ngb.schule/hgwiki/index.php?title=Korrektur_einer_Klassenarbeit&amp;diff=9941</id>
		<title>Korrektur einer Klassenarbeit</title>
		<link rel="alternate" type="text/html" href="http://ngb.schule/hgwiki/index.php?title=Korrektur_einer_Klassenarbeit&amp;diff=9941"/>
		<updated>2024-12-15T13:18:21Z</updated>

		<summary type="html">&lt;p&gt;Ngb: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Kasten|&amp;lt;center&amp;gt;&#039;&#039;&#039;Mache die Verbesserung Deiner Klassenarbeit mit Köpfchen und lerne aus Deinen Fehlern!&#039;&#039;&#039;&amp;lt;/center&amp;gt;|Farbe={{Farbe:Highlight2}}}}&lt;br /&gt;
&lt;br /&gt;
== Verbesserung ==&lt;br /&gt;
&lt;br /&gt;
Verbessere nur die Fehler, die mit einer Lupe {{Inline|lupe.png|Lupe}} markiert sind.&lt;/div&gt;</summary>
		<author><name>Ngb</name></author>
	</entry>
</feed>