Wiki: Mathe und Info

Unterrichtsmaterialien für Mathematik und Informatik

Benutzer-Werkzeuge

Webseiten-Werkzeuge


info:sek-ii:q2:sql:lektion4

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.


Vorhergehende Überarbeitung
info:sek-ii:q2:sql:lektion4 [2024-02-25 12:49] (aktuell) – [BetterBox#3] christian.weber
Zeile 1: Zeile 1:
 +====== Verändern von Datenbankeinträgen ======
  
 +<grid>
 +<info w1|**Verändern von Datenbankeinträgen**>
 +
 +Um die Daten in Datenbanken verändern zu können, benötigt man drei grundlegende Operationen:
 +
 +  * Einfügen neuer Datensätze
 +  * Bearbeiten bestehender Datensätze
 +  * Löschen überflüssiger Datensätze
 +
 +Hierfür bietet SQL die DML (Data Manipulation Language). Diese besteht aus den drei Befehlen ''INSERT INTO'', ''UPDATE'' und ''DELETE FROM'', die wir im folgenden kennen lernen werden.
 +
 +Wir gehen in den folgenden Beispielen von dieser Datenbank aus:
 +
 +<bbox center|**Personen**(__ID__, Name, Geburtstag)>
 +{{ :info:sek-ii:q2:sql:lektion4-christian.weber-2024-02-25-11-28-01.png?nolink }}
 +</bbox>
 +
 +</info>
 +<aufgabe w1|**Aufgabe 1**>
 +
 +**a)** Lade dir die Datei {{ :info:sek-ii:q2:sql:personen.sqlite3 }} herunter und öffne [[https://sql.wiki-mathe-info.de|sql.wiki-mathe-info.de]]. Importiere anschließend die heruntergeladene Datei! Die folgenden Beispiele beziehen sich hierauf!
 +
 +**b)** Wenn ihr die Befehle unten nacheinander ausprobiert, werdet ihr nicht direkt die Ergebnisse sehen. Stattdessen seht ihr eine Erfolgs- oder Fehlermeldung.
 +
 +<grid>
 +<bbox w2>
 +{{ :info:sek-ii:q2:sql:lektion4-christian.weber-2024-02-25-12-30-50.png?nolink }}
 +</bbox>
 +<bbox w2>
 +{{ :info:sek-ii:q2:sql:lektion4-christian.weber-2024-02-25-12-31-36.png?nolink }}
 +</bbox>
 +</grid>
 +
 +Um die manipulierten Datensätze anzuschauen, einfach einen ''SELECT *'' auf die bearbeitete Tabelle machen oder auf den Namen der Tabelle im Relationenschema klicken!
 +
 +**c)** Speichert euch im Gruppendokument eine Übersicht über die verschiedenen Fehlermeldungen die ihr erhaltet. Diese besprechen wir am Ende der Stunde!
 +
 +</aufgabe>
 +<beispiel w1|''**INSERT INTO**''>
 +<grid>
 +<bbox w2>
 +<code sql>
 +INSERT INTO Personen(ID, Name, Geburtstag)
 +VALUES (5, 'Hans', '1969-01-01');
 +</code>
 +</bbox>
 +<bbox w2>
 +{{ :info:sek-ii:q2:sql:lektion4-christian.weber-2024-02-25-11-29-18.png }}
 +</bbox>
 +</grid>
 +
 +Der ''Insert''-Befehl spezifiziert zunächst die Tabelle und die Attribute, die eingefügt werden sollen. **Dies müssen nicht zwangsläufig alle sein!**
 +
 +<grid>
 +<bbox w2>
 +<code sql>
 +INSERT INTO Personen(ID, Name)
 +VALUES (6, 'Bernd');
 +</code>
 +</bbox>
 +<bbox w2>
 +{{ :info:sek-ii:q2:sql:lektion4-christian.weber-2024-02-25-11-30-11.png?nolink }}
 +</bbox>
 +</grid>
 +
 +**Vorsicht!** Manche Spalten wurden so definiert, dass sie ''NULL''-Werte nicht zulassen. Der folgende Befehl würde im Beispiel mit der Fehlermeldung ''NOT NULL constraint failed: Personen.Name'' fehlschlagen.
 +
 +<code sql>
 +INSERT INTO Personen (ID, Geburtstag)
 +VALUES (12, '1999-01-01')
 +</code>
 +
 +Man kann auch mehrere Datensätze mit einem einzigen Befehl einfügen. Die Beispieldatenbank wurde so erstellt:
 +
 +<code sql>
 +INSERT INTO Personen(ID, Name, Geburtstag)
 +VALUES (1, 'Horst', '1957-03-25'),
 +       (2, 'Gerlinde', '1953-02-11'),
 +       (3, 'Else', '1964-11-21'),
 +       (4, 'Hubert', NULL);
 +</code>
 +
 +</beispiel>
 +<beispiel w1|''**UPDATE**''>
 +<grid>
 +<bbox w2>
 +<code sql>
 +UPDATE Personen
 +SET Name = 'Heinz'
 +WHERE ID = 1
 +</code>
 +</bbox>
 +<bbox w2>
 +{{ :info:sek-ii:q2:sql:lektion4-christian.weber-2024-02-25-11-37-43.png?nolink }}
 +</bbox>
 +</grid>
 +
 +Der ''UPDATE''-Befehl spezifiziert zunächst die Tabelle, die angepasst werden soll. Anschließend werden mit der ''SET''-Klausel die zu verändernden Daten angegeben. Die ''WHERE''-Klausel spezifiziert wie beim ''SELECT'', welche Datensätze angepasst werden sollen. **Dies können auch mehrere gleichzeitig sein!**
 +
 +<grid>
 +<bbox w2>
 +<code sql>
 +UPDATE Personen
 +SET Geburtstag = '1900-01-01'
 +WHERE Geburtstag IS NULL
 +</code>
 +</bbox>
 +<bbox w2>
 +{{ :info:sek-ii:q2:sql:lektion4-christian.weber-2024-02-25-11-38-54.png }}
 +</bbox>
 +</grid>
 +
 +</beispiel>
 +<beispiel w1|''**DELETE FROM**''>
 +<grid>
 +<bbox w2>
 +<code sql>
 +DELETE FROM Personen
 +WHERE ID = 2
 +</code>
 +</bbox>
 +<bbox w2>
 +{{ :info:sek-ii:q2:sql:lektion4-christian.weber-2024-02-25-11-40-41.png?nolink }}
 +</bbox>
 +</grid>
 +
 +Der ''DELETE''-Befehl spezifiziert zunächst die Tabelle, aus der Daten gelöscht werden sollen. Im Anschluss wird mit einer ''WHERE''-Klausel wie beim ''SELECT'' spezifiziert, welche Datensätze zum Löschen ausgewählt werden sollen. **Dies können ebenso mehrere sein!**
 +
 +<grid>
 +<bbox w2>
 +<code sql>
 +DELETE FROM Personen
 +WHERE Geburtstag = '1900-01-01'
 +</code>
 +</bbox>
 +<bbox w2>
 +{{ :info:sek-ii:q2:sql:lektion4-christian.weber-2024-02-25-11-42-43.png?nolink }}
 +</bbox>
 +</grid>
 +
 +**VORSICHT!** Die ''WHERE''-Klausel ist **optional**! Dieser Befehl löscht **ALLE** Datensätze der Tabelle:
 +
 +<code sql>
 +DELETE FROM Personen;
 +</code>
 +
 +</beispiel>
 +<aufgabe w1|**Aufgabe 2**>
 +
 +<bbox tomato>
 +
 +Speichert die **Ergebnisse von Aufgabe 2** jeweils nach dem Schema __personen_mit_essen_NAME.sqlite3__ bzw. __schule_NAME.sqlite3__ in unserem geteilten Ordner **in der NextCloud!** Dazu einfach im Editor auf Export klicken, Datei umbenennen und in die NextCloud kopieren / verschieben!
 +\\
 +\\
 +Speichert euch im **Gruppendokument** eine **Übersicht über die verschiedenen Fehlermeldungen** die ihr erhaltet. Diese besprechen wir am Ende der Stunde bzw. in Aufgabe c).
 +</bbox>
 +
 +**a)** Lade dir die Datei {{ :info:sek-ii:q2:sql:personen_mit_essen.sqlite3 }} herunter und öffne sie in [[https://sql.wiki-mathe-info.de|sql.wiki-mathe-info.de]].
 +
 +  * Die Datenbank hat das folgende Schema:
 +<grid><bbox w6></bbox>
 +<bbox w6-5>
 +**Personen**(__ID__, Name, Geburtstag)\\
 +**Lieblingsessen**(↑__PersonID__, __Essen__)
 +</bbox></grid>
 +  * Verschaffe dir einen Überblick über die Datenbank und lösche die Beispieldaten!
 +  * Erstellt eine Geburtstagsliste des Kurses! Wer seinen Geburtstag nicht angeben möchte, muss das nicht!
 +  * Sammelt die Lieblingsessen des Kurses und speichert diese! Hier sind auch Mehrfachnennungen möglich!
 +
 +**b)** Lade dir die Datei {{ :info:sek-ii:q2:sql:schule.sqlite3 }} herunter und öffne sie in [[https://sql.wiki-mathe-info.de|sql.wiki-mathe-info.de]].
 +
 +  * Die Datenbank hat das folgende Schema:
 +<grid><bbox w6></bbox>
 +<bbox w6-5>
 +**Schüler**(__ID__, Nachname, Vorname, Geburtsdatum, StrasseNr, PLZ, Ort)\\
 +**Kurs**(__ID__, Fach, Thema, Art, Halbjahr, Stunden)\\
 +**belegt**(↑__SchülerID__, ↑__KursID__, Punkte)\\
 +</bbox></grid>
 +  * Verschaffe dir einen Überblick über die Datenbank und lösche die Beispieldaten!
 +  * Erstellt für eure Kleingruppe eine Belegungsliste eurer Kurse!
 +
 +**c)** Erstellt euch im Gruppendokument ein **Cheat Sheet**!
 +
 +  * Hieraus soll die Syntax der vier verschiedenen SQL-Befehle (''SELECT'', ''INSERT'', ''UPDATE'' und ''DELETE'') deutlich werden.
 +  * Schreibe zu jeder Befehlsvariante (''SELECT'' hat ganz viele verschiedene Varianten) ein sinnvolles Beispiel! Beziehe dich in den Beispielen auf die bekannten Datenbanken (CIA, Northwind, Chinook, etc.)
 +  * Ergänzt im Cheat Sheet die verschiedenen Fehlermeldungen und deren Ursachen!
 +
 +</aufgabe>
 +
 +</grid>