Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen 16OH21005 gefördert. Die Verantwortung für den Inhalt dieser Veröffentlichung liegt beim Autor/bei der Autorin. 1 In diesem Abschnitt geht es um das Programmieren mit der Programmiersprache SQL. Im Vordergrund steht die Praxis und der Umgang mit der SQL. Im einzelnen wollen wir dabei folgenden Fragen nachgehen: • Was ist SQL und was ist das besondere daran? • Wo kommt die Sprache SQL überhaupt her? • Und natürlich die Sprache selbst. Hier ist es wichtig zum einen die Syntax selbst zu erlernen und anhand von Übungen auch selbst anzuwenden. Sofern Sie es nicht bereits getan haben, ist jetzt der Zeitpunkt gekommen, die Datenbank H2 zu installieren. Ein entsprechende Kurzanleitung finden Sie in einem gesonderten Abschnitt in den Unterlagen. TIPP: • Der Abschnitt: „Überblick über die Sprache“, Listet die wichtigsten Elemente 2 in Tabellenform auf, die Sie zum Nachschlagen verwenden und ggf. ausducken sollten. • Für Android finden Sie unter anderem folgende nützlichen Apps a. Learn SQL : https://play.google.com/store/apps/details?id=com.sololearn.sql b. Learn SQL – Easy Way : https://play.google.com/store/apps/details?id=com.rfb.learnsql Diese beiden API eignen sich sehr gut zum Nachschlagen der jeweiligen SQL Sprach-Elemente 2 Zunächst: Was ist SQL überhaupt? SQL ist eine Abkürzung für „Structured Query Language“ Die Sprache ist so ausgelegt, dass man • sowohl die Tabellen in einer Datenbank anlegen und pflegen kann • als auch die Daten in den Tabellen bearbeiten kann. Es handelt sich um eine Programmiersprach, die speziell für die Programmierung von relationalen Datenbanken entwickelt wurde und sich dort sehr schnell zu einer Standard-Sprache entwickelt hat. 3 Die Anfänge von SQL gehen bis aus das Jahr 1974 zurück. Den ersten Standard gab es 1992. Jedoch deckt der SQL Standard nicht alles ab, was in der Praxis benötigt wird. Daher haben viele Datenbankhersteller eigene Spracherweiterungen eingeführt. Dies bedeutet, dass die SQL Skripte herstellerspezifisch sind und bei einem Wechsel es DB-Herstellers angepasst werden müssen. Innerhalb des Kurses werden wir nur auf die wichtigsten SQL StandardSprachelemente eingehen. Das Erlernen von herstellerspezifischen Sprachelementen würde den Rahmen der Grundlagen weit übersteigen, da wir uns dann auch mit den unterschiedlichen Paradigmen der einzelnen Hersteller auseinandersetzen müssten. 4 Was ist nun das Besondere an SQL? Um dies zu ergründen, schauen wir uns noch mal die unterschiedlichen Ansätze bei den Programmiersprachen an. Man unterscheidet im wesentlichen 2 Arten von Programmiersprachen. Da sind zum einen die imperativen Sprachen und zum anderen die deskriptive Sprachen: Imperative Sprachen: Imperative Sprachen basieren auf Sprachelementen wie Abfragen und Schleifen etc. Dies bedeutet, das man als Programmierer / Programmiererin genau spezifiziert, WIE der Programmablauf sein soll Wie in der Abbildung ersichtlich wird, findet man dieses Paradigma sowohl in klassischen prozedur-orientierten Programmiersprachen (wie zum Bespiel C ) als auch in objekt-orientierte Programmiersprachen ( wie zum Beispiel Java, C‘#) . Deskriptive Sprachen 5 Deskriptive Sprachen sind nicht prozedural. Sie beinhalten keine Anweisungen für Schleifenbildung. Stattdessen stellen sie Sprachelemente bereit, die es erlauben, genau zu spezifizieren, WAS das Ergebnis sein soll. Es bleibt dem Laufzeitsystem überlassen, wie das Ergebnis berechnet werden soll. SQL ist genau eine solche deskriptive Sprache. Sie wird oft als Sprache der 4ten Generation( 4GL) bezeichnet. 5 Bevor wir uns der Syntax und einzelnen Anweisungen zuwenden, schauen wir uns zunächst einmal an, für welche Aufgabenstellungen SQL geeignet ist bzw. entworfen wurde. Die Intention von SQL ist es, eine Programmiersprache bereitzustellen, die für folgende Aufgabengebiete verwendet werden kann. • Datenbankschema anlegen pflegen SQL DDL – Data Definition Language • Datenbankinhalte einfügen und bearbeiten SQL DML – Data Manipulation Language • Zugriffrechte auf Tabellen verwalten SQL DCL – Data Control Language SQL DDL DDL ist eine Abkürzung für „Data Definition Language“. Zu diesem Bereich gehören alle Anweisungen, um Tabelle anzulegen, zu ändern oder zu löschen. Es geht hier im wesentlich darum, wie kommt unser Datenmodell in die Datenbank. Mit anderen Worten: Wie können wir einem Datenbanksystem mitteilen, wie unser Datenmodell aussieht , damit das System die entsprechenden Regeln verwalten und überprüfen kann. 6 SQL DML DML ist eine Abkürzung für „Data Manipulation Language“. Zu diesem Bereich gehören alle Anweisungen, um die Inhalte von Tabellen zu lesen, zu ändern und auch Inhalte in Tabellen eintragen zu können. Hier steht im Mittelpunkt: • Daten in der Datenbank anzulegen • Die abgelegten Daten ändern oder auch löschen zu können • Das Suchen von bestimmten Daten innerhalb einer Datenbank SQL DCL DCL ist eine Abkürzung für „Data Control Language“. Zu diesem Bereich gehören alle Anweisungen, um Zugriffsrechte für Benutzer definieren zu können. Da nicht alle Daten einer Datenbank für alle Benutzer gleich sichtbar und zugreifbar sein sollen, ist es notwendig einem Datenbanksystem mitzuteilen,: • Wer darf auf eine Datenbank zugreifen Authentifizierung • Was darf ein Benutzer mit den Daten machen Autorisierung In diesem Bereich finden wir die meisten Unterschiede bei den einzelnen RDBMS Herstellern. 6 Diese Abbildung gibt Ihnen einen Überblick über die wichtigsten SQL Befehle in den jeweiligen Kategorien. SQL-DDL In diese Kategorie fallen • CREATE TABLE dient zum Anlegen von Tabellen (TabellenDefinitionen) • ALTER TABLE dient zum Ändern von Tabellen-Definitionen • DROP TABLE dient zum Löschen von Tabellen-Definitionen SQL-DML • SELECT .. FROM .. WHERE dient zum Lesen von Daten einer oder mehreren Tabellen • INSERT INTO dient zum Einfügen von Daten /Zeilen in eine Tabelle • UPDATE dient zum Ändern von Inhalten einer Tabelle • DELETE FROM dient zum Löschen von Daten/Zeilen aus einer Tabelle 7 SQL-DCL • GRANT dient zum Erteilen von Zugriffsrechten • REVOKE dient zum Entziehen von Zugriffsrechten 7 Für die Sprache selbst gelten die in der Abbildung aufgeführten Regeln. Hinweis: Ob bei Tabellennamen und Attributnamen die Groß- und Klein-Schreibweise unterschieden wird oder nicht, hängt von der Einstellung des jeweiligen Datenbanksystems ab. In der Praxis sind Datenbanken meist so konfiguriert, dass sie „Case-Insensitive“ ( Keine Unterscheidung) 8 In dieser Tabelle sehen Sie eine Liste der wichtigsten Datentypen für Attribute einer Tabelle. Hinweis: Viele Hersteller haben noch weitere Datentypen, die zum Teil auch herstellerspezifisch sind. Nützliche Quellen Einen Überblick über die Datentypen finden sie unter: • http://www.w3schools.com/sql/sql_datatypes_general.asp Angaben zum Wertebereich und Genauigkeit sind in der Dokumentation der jeweiligen Datenbankherstellern zu entnehmen. Hier einige Links: • MySQL: http://dev.mysql.com/doc/refman/5.7/en/data-type-overview.html • Oracle: https://docs.oracle.com/cd/B28359_01/server.111/b28318/datatype.htm • MS SQL: https://msdn.microsoft.com/de-de/library/ms187752.aspx 9 • H2: http://www.h2database.com/html/datatypes.html 9 Hier sehen Sie weitere Datentypen, die in der Praxis vielfach Anwendung finden. 10 In der Praxis kommt es sehr oft vor, dass Attribute immer einen Wert haben müssen. Damit das Datenbanksystem dies überprüfen kann, kann man bei der Definition von Attributen angeben, dass Werte angegeben werden müssen. Jedoch kommt es auch oft vor, dass Attribute nicht immer einen Wert haben müssen. Damit man unterscheiden kann, ob ein Attribut einen Wert besitzt oder nicht, gibt es die Definition von NULL. NULL ist ein ganz spezieller Wert der anzeigt, dass KEIN WERT vorhanden ist. Bei dem Anlegen eines Attributes für eine Tabelle kann man daher folgende Vorgaben machen • NOT NULL – dies bedeutet, dass NULL Werte nicht erlaubt sind. Eine Anwendung muss daher immer einen Wert angeben. Bei den meisten Datenbanken sind standardmäßig immer NULL Werte erlaubt und nur in den Fällen, bei denen keine NULL Wert erlaubt ist, kann man beim Anlegen die Bedingung „NOT NULL“ angeben. 11 In dieser Abbildung sind die wichtigsten Aussagen zur Verwendung von NULLWerten nochmals aufgeführt. 12 Wie wir später noch sehen werden, wenn es darum geht Daten zu suchen, müssen wir bestimmte Bedingungen angeben, um zu bestimmen, für welche Daten wir uns interessieren. In der Tabelle sehen Sie nun die wichtigsten Vergleichsoperatoren, die angewendet werden können. 13 In dieser Tabelle sehen Sie sogenannte Wildcard Zeichen. Diese werden verwendet, wenn wir nach Daten in Zeichenketten suchen, die einem bestimmten Muster unterliegen. 14 Dies Tabelle gibt Ihnen einen Überblick über die wichtigsten Funktionen, die wir verwenden können, um Daten zu „verdichten“ Hinweis: Eine vollständige Auflistung der H2 Funktionen finden Sie unter : http://www.h2database.com/html/functions.html 15 In dieser Tabelle sehen Sie die wichtigsten Funktionen für numerische Berechnungen Hinweis: Eine vollständige Auflistung der H2 Funktionen finden Sie unter : http://www.h2database.com/html/functions.html 16 In der Praxis sind String-Operationen sehr häufig anzutreffen. In dieser Tabelle werden daher die wichtigsten Funktionen aufgeführt, die dazu dienen Zeichenketten zu untersuchen bzw. zu manipulieren. Hinweis: Eine vollständige Auflistung der H2 Funktionen finden Sie unter : http://www.h2database.com/html/functions.html 17 Datum und Uhrzeit Operationen sind ebenfalls häufig in der Praxis anzutreffen. Die Tabelle enthält daher die wichtigsten Funktionen für den Umgang mit Datum und Uhrzeit. Hinweis Eine vollständige Auflistung der H2 Funktionen finden Sie unter : http://www.h2database.com/html/functions.html 18 Die abschließend wohl wichtigste Frage ist: Wie kann ich nun SQL Befehle auf einer Datenbank ausführen? Die einfachste Art SQL Anweisungen auszuführen, ist die Verwendung eines SQL Interpreters. Jedes DBMS (Datenbank-Managementsystem) stellt eine sogenannte SQLKonsole zur Verfügung. Wenn wir die SQL-Konsole starten, erhalten wir eine Eingabemöglichkeit, um SQL einzugeben und zur Ausführung zu bringen. Im einfachsten Fall ist die SQL Konsole, die es erlaubt auf einer Kommandozeile ein SQL Statement einzugeben. Beim SQL-Server verbirgt sich der SQL –Interpreter hinter der Anwendung osql.exe (Windows). In einigen Fällen (so auch wie bei unserer H2-Datenbank) wird auch die Möglichkeit gegeben mehrere SQL Anweisungen einzugeben und auszuführen 19 Hinweis: In dem Abschnitt „Schnittstellen“ kommen wir nochmals auf die SQL Konsole bzw. SQLInterpreter zurück. Die ist deshalb interessant, da man hierdurch mittels Batch-Scripts Datenbanken anlegen und verändern kann. Für diesen Kurs wird die Datenbank H2 empfohlen. Hier erhalten wir beim Starten von H2 ein Fenster in einem Web-Browser, über den wir die SQL Befehle eingeben und ausführen lassen können. Selbstverständlich wir dort auch das Ergebnis eines SQL Befehle sofort angezeigt. 19 20 21