1 In diesem Abschnitt wollen wir uns mit den SQL Befehlen beschäftigen, mit denen wir • Inhalte in Tabellen ( Zeilen) einfügen • nach Tabelleninhalten suchen • die Inhalte ändern • und ggf. auch löschen können. Es geht also im die SQL – Data Manipulation Language. 2 Wenn es um das Ändern von Datenbankinhalten geht, dann wird meist der Begriff CRUD verwendet. C – Steht für Create also das Einfügen von neuen Zeilen in eine Tabelle R – steht for Read also das Lesen von Daten aus einer oder mehreren Tabellen U – steht für update als das Ändern von Attributen in einer oder mehreren Zeilen D – steht für Delete also das Löschen einer oder mehrerer Zeilen in einer Tabelle 3 Zunächst müssen wir erst einmal Daten in eine Datenbank eintragen. Dies erfolgt mittels des SQL Befehls INSERT INTO 4 Der SQL Befehl INSERT INTO kann in zwei verschiedenen Varianten angewendet werden. Variant 1 In Variante 1 werden zunächst die Spaltennamen aufgelistet, die wir mit Werten belegen wollen. ( erster Klammerausdruck). Anschließend kommt nach dem Schlüsselwort VALUES eine weitere Klammer, welche die Liste der Werte enthält. Hierbei gilt folgende Regel. Der erste Wert wird in die Spalte mit dem ersten Spaltennamen eingetragen Der zweite Wert wird in die Spalte mit dem zweiten Spaltennamen eingetragen usw. Es ist somit offensichtlich, 1. dass die Liste der Werte genau so viele Werte enthält, wie Spaltennamen aufgeführt sind. 2. Die Datentypen der aufgeführten Werte auch zu den Datentypen zu den Spalten passen, so wie sie in der aktuellen Tabelle-Definition hinterlegt sind. 5 Variante 2 In Variante 2 sind die Spalten und Werte in der Form spaltenName = Wert explizit aufgeführt. Die einzelnen Zuweisungen sind durch Komma getrennt. Für welche Variante sie sich entscheiden, hängt im wesentlichen von den persönlichen Präferenzen ab. Aber auch hierbei gilt, wie bei der Variante 1, dass die Datentypen der Werte zu den Datentypen aus der Tabellendefinition passen (gleicher Datentyp). TIPP: Führen Sie alle Übungen aus dem Übungsbuch durch, zu dem Thema „Daten in Tabellen einfügen“. 5 Als nächstes schauen wir uns näher an, wie wir Daten aus einer Datenbank auslesen können. Hierzu verwenden wir die SELECT Anweisung. Wie der Name dabei schon andeutet, können wir hiermit festlegen, welche Daten wir selektieren wollen. Am Beispiel der SELECT Anweisung wird es offensichtlich, dass SQL eine deskriptive Sprache ist. Da wir nur angeben, für WELCHE Daten wir uns interessieren, aber nicht WIE man die Datenmenge bestimmt. Wie sie dann auch gleich feststellen werden, ist die SELECT Anweisung eines der mächtigsten und damit auch eines der komplexesten Anweisung in SQL: Wir werden uns hier nur die wichtigsten Grundformen ansehen und auch in Übungen ausprobieren. Die Komplexität werden sie leicht selbst feststellen können, wenn Sie versuchen, das Basis-Konzept der einzelnen Varianten miteinander zu kombinieren. Auch das ist möglich. 6 Wie schauen uns hier die drei wichtigsten Varianten an Variante 1: Dient zum Lesen aller Attribute und aller Reihen aus einer Tabelle Variante 2: Dient zum Lesen von bestimmten Attributen ( column1, column2,..) aus einer Tabelle. Es werden dabei alle Zeilen gelesen. Es kann dabei vorkommen, dass doppelte Zeilen gemeldet werden. HINWEIS: hier sehen Sie, dass SQL an dieser Stelle nicht streng dem relationalen Modell folgt, nach dem alle Element einer Menge unterscheidbar sind. Variante 3: Dient zum Lesen von bestimmten Attributen ( column1, column2,..) aus einer Tabelle. Es werden dabei alle Zeilen gelesen. 7 Es kann dabei aber NICHT vorkommen, dass doppelte Zeilen gemeldet werden. Dies wird durch das Schlüsselwort DISTINCT sichergestellt. 7 In den wenigsten Fällen will man in der Praxis immer alle Datensätze einer Tabelle lesen. Um dies zu erreichen, kann man bei der SELECT ANWEISUNG eine sogenannte WHERE-Klausel angeben. In der WHERE-Klausel kann man nun Bedingungen angeben, die die Datensätze erfüllen müssen, In der Abbildung sind die beiden wichtigsten Varianten dargestellt. Variante 1 In dieser Variante werden in der WHERE-KLAUSE unter <condition> logische Ausdrücke der Form spaltenName <operator> wert Eine Liste der möglichen Operatoren finden Sie in dem Abschnitt „Einführung in SQL“ Diese sind unter anderem =, like , >, >= , < , <= 8 Beispiel: Select * from Mitarbeiter where gehalt >= 450 Schlüsselwort sind FETT dargestellt Variante 2 Die Variante 2 ist eine Erweiterung von Variante 1. Hier werden einzelne Spaltennamen miteinander verknüpft. Beispiel: Select * from Mitarbeiter where gehalt >= 450 AND abteilung like ‚Einkauf‘ Schlüsselwort sind FETT dargestellt. TIPP: Führen Sie jetzt die Übungen aus dem Übungsbuch zu dem Thema SELECT durch. 8 In dieser Abbildung sehen Sie zwei weitere Varianten einer SELECT Anweisung mit erweiterten Möglichkeiten / Bedingungen in der WHERE-Klausel Variante 1 In dieser Variante wird angegeben, dass der Wert einer Spalte in der Menge enthalten sein muss , die innerhalb der runden Klammern nach dem Schlüsselwort IN aufgeführt ist. In der Syntax in der Abbildung sind als mögliche Werte einzelne Werte explizit aufgeführt. Beispiel: select * from Persons where degree like ‚Bachelor*‘ and country IN (‘Deutschland‘, ‘ Schweiz‘ ) Bei weitergehenden Betrachtungen der Sprach-Syntax werden Sie feststellen, dass es auch die Möglichkeit gibt, anstatt die Werte explizit aufzuführen, innerhalb der Klammer auch ein eigenständiges SELECT Statement zu definieren. Dies bedeutet, dass die Menge zur Laufzeit bestimmt wird. In diesem Fall 9 bezeichnet man die Select-Anweisung innerhalb der Klammer auch als SUB-QUERY Ein Beispiel für ein für eine solche Form sieht wie folgt aus: select * from Persons where degree like ‚Bachelor*‘ and country IN ( select name from Countries where location = `EUROP` ) Schlüsselworte in FETT Variante 2 Die Variante 2 dient dazu eine Bedingung anzugeben, bei dem ein Wert einer Spalte innerhalb eines bestimmten Bereiche liegen muss. Ein Beispiel für ein für eine solche Form sieht wie folgt aus: select * from Mitarbeiter where jahresGehalt BETWEEN 20000 AND 45000 Schlüsselworte in FETT 9 Nun lernen wir eine weitere Möglichkeit kennen, um SELECT Anweisungen zu erweitern, die es uns ermöglicht eine selektierte Datenmenge auch gleich sortiert auslesen zu können. Hierzu erweitert man ein Select-Anweisung, um ein ORDER BY Klausel, so kann erreicht werden, dass die Ausgabemenge sortiert ausgegeben wird. Die ORDER BY Klause enthält dabei die Angabe, ob die Datenmenge aufsteigend oder absteigend sortiert werden soll. ASC bedeutet dabei – AUFSTEIGENDE Sortierung DESC bedeute dabei - ABSTEIGENDE Sortierung Besonderheiten • Bei nummerischen Wert entspricht die Ordnung wie in der Mathematik üblich. • Bei Zeichenketten wird dabei die lexikalische Ordnung zu Grunde gelegt. • Gibt man in der ORDER BY Klause mehr als einen Spaltennamen an, so legt die erste Spalte das Kriterium fest, welches als erstes überprüft wird. Sind die Werte der Spalten aus zwei Zeilen gleich, so wird als nächstes Kriterium die Spalte verwendet, die als zweites in der ORDER BY Klause angegeben wurde, usw… 10 Beispiel select name, gehalt from Persons oder by gehalt ASC Schlüsselworte in FETT 10 In der Abbildung sehen Sie nun eine weitere Form einer SELECT Anweisung. Wie Sie sehen, kann man eine SELECT Anweisung mit einer GROUP BY Klausel erweitern. Dies ist eine besonders mächtige Klausel. Durch sie kann man erreichen, dass die selektierten Zeilen in Gruppen zusammengefasst werden, um dann auf dieser Gruppe eine Funktion auszuführen. Eine Liste der Funktionen finden Sie in dem Abschnitt „Einführung in SQL“ Am besten verdeutlichen wir uns die Verwendung anhand eines Beispiels. Beispiel select abteilung , sum( gehalt) from Persons group by abteilung Schlüsselworte in FETT dargestellt 11 Was wir dadurch erreichen, ist folgendes. Es werden alle Zeilen der Tabelle Personen gelesen. Die Personen die in der Spalte ‚abteilung‘ den gleichen Wert haben, werden zu einer Gruppe zusammengefasst. In der Ausgabemenge steht nun die Funktion sum(gehalt) . Die legt fest, dass alle Gehälter der Personen, die in der gleichen Abteilung sind, aufsummiert werden . TIPP: Führen Sie jetzt die Übungen aus dem Übungsbuch zu dem Thema „Daten Lesen …“ durch 11 Mittels der DELETE Anweisung können wir Zeilen aus einer Tabelle löschen. 12 Hier gibt es wieder zwei Varianten. Wie Sie der Abbildung entnehmen können, ist in der Variante 1 keine WHERE Klause vorhanden. Während in der zweiten Variante eine Wehere Klause angeben wird. Variante 1 Dies ist die einfachste Variante. Da keine Bedingung angegeben wurde, werden also ALLE Zeilen einer Tabelle gelöscht. Variante 2 Diese Variante dient zum Löschen der Eintrage in einer Tabelle für die die Bedingung in der WHERE Klausel zutrifft. TIPP: Führen Sie jetzt die Übungen aus dem Übungsbuch zu dem Thema „Löschen von Einträgen“ durch 13 Mittel einer SQL UPDATE Anweisung können wir die Werte von Attributen ändern. 14 Die wichtigsten beiden Varianten für das Ändern von Attributwerten sind in der Abbildung aufgeführt Variante 1 In dieser Variante fehlt eine WHERE Klausel. Somit werden alle Zeilen einer Tabelle geändert. Das Zuweisen der Werte zu den Spalten ist analog wie bei der INSERT Anweisung Variante 2 Die zweite Variante dient zum Ändern der Einträge in einer Tabelle für die die Bedingung in der WHERE Klausel zutrifft. Das Zuweisen der Werte zu den Spalten ist analog wie bei der INSERT Anweisung bzw. wie bei Variante 1. TIPP: Führen Sie jetzt die Übungen aus dem Übungsbuch zu dem Thema „ÄNDERN von Werten“ durch 15 16