7. Lehreinheit

From DHVLab

Revision as of 15:54, 20 March 2017 by Jschulz (talk | contribs) (Übungsaufgaben)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

SQL: Theoretische Vorbemerkung

Im vorangehenden Abschnitt haben wir uns mit der Oberfläche des DBMS phpMyAdmin und ihren zentralen Funktionen (Import/Export, Anlegen neuer Tabellen, Einfügen und Bearbeiten von Datensätzen) vertraut gemacht. Dabei sind wir an einer Stelle bereits mit der Datenbanksprache SQL in Kontakt gekommen. Im Folgenden werden wir uns mit den Grundzügen dieser für uns sehr wichtigen Sprache auseinandersetzen[A 1]. Die Abfragen/Befehle der Datenbanksprache SQL lassen sich in drei Kategorien unterteilen:

  • Data Control Language (DCL)[A 2]
  • Data Definition Language (DDL)
  • Data Manipulation Language (DML) (wichtigste SQL-Bereich für Sie als Kursteilnehmer)

Praktischer Einstige in SQL

DDL

Mit DDL können Veränderungen verschiedener Art an der bestehenden Tabellenstruktur vorgenommen werden. Hierfür kommt das Statement "ALTER" zum Einsatz, beispielsweise um eine Tabellenspalte zu ergänzen oder zu löschen:
~ ALTER TABLE personen_sqluebung ADD sterbejahr_alt varchar(4) AFTER sterbejahr
→ Die Tabelle 'personen_sqluebung' wird um eine Spalte namens 'sterbejahr_alt' mit einer Länge von vier Zeichen ergänzt. ~ ALTER TABLE personen_sqluebung DROP COLUMN sterbejahr_alt
→ Die Spalte 'sterbejahr_alt' wird aus der Tabelle 'personen_sqluebung' entfernt.

DML - SELECT

Die Datenbearbeitungssprache DML ermöglicht uns das Auswählen (SELECT), Einfügen (INSERT INTO), Ändern (UPDATE) und Löschen (DELETE FROM/TRUNCATE TABLE) von Daten innerhalb von Tabellen. Der "SFW"-Block (SELECT, FROM, WHERE) bzw. die "WHERE-Klausel" erlauben eine Selektion einzelner Zeilen aus einer Tabelle, deren Inhalte einem bestimmten Muster entsprechen[A 3].

Anwendungsfall 1:
~ Geben Sie Funktion, Name und Geburtsjahr aller Personen aus, die zwischen 1200 und 1500 geboren wurden.
→ SELECT funktion, name, geburtsjahr FROM personen_sqluebung WHERE geburtsjahr >= "1200" AND geburtsjahr <= "1500"

Anwendungsfall 2:
~ Geben Sie Funktion, Name und Geburtsjahr aller Personen aus, die zwischen 1200-1209 und 1500 geboren wurden.
→ SELECT funktion, name, geburtsjahr FROM personen_sqluebung WHERE geburtsjahr >= "120_" AND geburtsjahr <= "1500"
_ genau ein beliebiges Zeichen trunkieren
 % beliebig große Anzahl an Zeichen trunkieren

Anwendungsfall 3:
~ Geben Sie Funktion, Name und Geburtsjahr aller Personen aus, die zwischen 1200 und 1500 geboren wurden, sortiert nach dem Geburtsjahr in absteigender Reihenfolge:
→ SELECT funktion, name, geburtsjahr FROM personen_sqluebung WHERE geburtsjahr >= "1200" AND geburtsjahr <= "1500" ORDER BY geburtsjahr DESC
Ohne den Zusatz DESC erfolgt die Sortierung immer aufsteigend (ASC)

Anwendungsfall 4:
~ Verwendung von sog. "Korrelationsnamen", wenn man Spaltennamen mit alternativem Namen ausgeben möchte. Dies ist insbesondere dann sinnvoll, wenn man mehrere Tabellen miteinander verknüpft, die ähnliche oder gleiche Spaltennamen besitzen (z.B. "name" → "Herrschername")
→ SELECT funktion "Titel", name "Herrschername", geburtsjahr FROM personen_sqluebung WHERE geburtsjahr >= "1200" AND geburtsjahr <= "1500"

DML - INSERT INTO

~ Einfügen eines oder mehrerer Datensätze in eine bestehende Tabelle:
→ INSERT INTO `personen_sqluebung` (`funktion`, `name`) VALUES (Fürst, Franz), (Kaiserin, Sissi)
Es müssen nicht alle Tabellenfelder befüllt werden; die Felder, welche befüllt werden sollen, müssen genannt werden.

~ Import von Datensätzen aus einer Tabelle 1 in eine Tabelle 2:
→ INSERT INTO tabelle2 (id, spalte2, spalte3) SELECT id, spalte2, spalte3 FROM tabelle1 WHERE id < 2;

DML - UPDATE

~ Aktualisierung eines Wertes in einer bestehenden Tabelle:
→ UPDATE `personen_sqluebung` SET geburtsjahr = "1837" WHERE name = "Sissi"
~ UPDATE, mehrere Spalten betreffend: → UPDATE `personen_sqluebung` SET geburtsjahr = "1837", sterbejahr = "1900" WHERE name = "Sissi"

DML - DELETE

~ Löschen von Inhalten, beispielsweise nach einem fälschlicherweise ausgeführten INSERT INTO-Statement, bei dem in der Folge alle Einträge ab einer bestimmten ID gelöscht werden müssen:
→ DELETE FROM `personen_sqluebung` WHERE id_person > 29

Übungsaufgaben

Zur Anwendung des Erlernten bearbeiten Sie bitte folgende SQL-Übungsaufgaben:

  1. Geben Sie aus der Tabelle "personen_sqluebung" alle weiblichen Personen aus!
  2. Geben Sie aus der Tabelle "personen_sqluebung" alle Personen aus, deren Name mit dem Buchstaben "R" beginnt!
  3. Geben Sie aus der Tabelle "personen_sqluebung" alle Personen aus, bei denen es sich entweder um einen König oder Kaiser handelt.
  4. In der Kursdatenbank befindet sich die Tabelle "personen_zusatz". Sie möchten die Datensätze dieser Tabelle in die Tabelle "personen_sqluebung" importieren (Name, Funktion, Geburts- und Sterbejahr). (Hinweis: Kopieren Sie die Tabelle "personen_zusatz zunächst in Ihre persönliche DB)
  5. Benennen Sie "Rudolf III. (I.)" (ID = 5) um in "Rudolf I.". Verwenden Sie hierzu einen UPDATE-Befehl.
  6. Löschen Sie die letzten drei Datensätze aus Ihrer Personen-Tabelle (ID's 27, 28, 29)

Bitte senden Sie zur Überprüfung des Lernerfolges die hierfür benötigten SQL-Abfragen Ihrem Kursleiter zu.

Anmerkungen

  1. Für einen umfassenden Einstieg in die Datenbanksprache SQL vgl. den entsprechenden Abschnitt im Handbuch "Erlernen einer Datenbanksprache: Structured Query Language (SQL) I".
  2. Auf DCL wird an dieser Stelle nicht weiter eingegangen, da sie nicht zum "alltäglichen Handwerkszeug" des Datenbanknutzers gehört (z.B. User-Rechte-Vergabe).
  3. Für die Erklärung des Aufbaus einer Datenbankabfrage vgl. den entsprechenden Abschnitt im Handbuch: Erlernen einer Datenbanksprache: Structured Query Language (SQL) I#Grundform einer Datenbankanfrage