Erstellung_eines_Screen_Videos_zum_Thema_?Grundlagen_von_SQL? Hochschule: Standort: Studiengang: Veranstaltung: Betreuer: Typ: Themengebiet: Autor(en): Studienzeitmodell: Semesterbezeichnung: Studiensemester: Bearbeitungsstatus: Prüfungstermin: Abgabetermin: Fallstudienarbeit Hochschule für Oekonomie & Management Dortmund Bachelor Wirtschaftsinformatik Fallstudie / Wissenschaftliches Arbeiten Prof._Dr._Uwe_Kern Fallstudienarbeit Blended Learning Sebastian Koch, Simon Sprenger, Antonio Porco Abendstudium SS12 2 Bearbeitung abgeschlossen 23.06.12 10.06.12 Inhaltsverzeichnis • 1 Abkürzungsverzeichnis • 2 Abbildungsverzeichnis • 3 Tabellenverzeichnis • 4 Einleitung ♦ 4.1 Zielsetzung ♦ 4.2 Vorgehensweise • 5 Technologieauswahl • 6 Kurzfassung des Inhalts ♦ 6.1 Grundlagen ◊ 6.1.1 Relationale Datenbanken ◊ 6.1.2 Data Manipulation Language (DML) ◊ 6.1.3 Data Definition Language (DDL) ◊ 6.1.4 Data Control Language (DCL) ◊ 6.1.5 Primär und Fremdschlüssel ◊ 6.1.6 Datentypen ◊ 6.1.7 Grundlegende SQL Befehle ⋅ 6.1.7.1 CREATE ⋅ 6.1.7.2 ALTER ⋅ 6.1.7.3 DROP Inhaltsverzeichnis 1 Erstellung_eines_Screen_Videos_zum_Thema_?Grundlagen_von_SQL? ⋅ 6.1.7.4 INSERT ⋅ 6.1.7.5 SELECT ⋅ 6.1.7.6 DELETE ⋅ 6.1.7.7 UPDATE ⋅ 6.1.7.8 WHERE ⋅ 6.1.7.9 ORDER BY ◊ 6.1.8 Aggregatfunktionen ◊ 6.1.9 Erweiterte SQL Befehle ⋅ 6.1.9.1 AND ⋅ 6.1.9.2 OR ⋅ 6.1.9.3 LIKE ⋅ 6.1.9.4 IN ♦ 6.2 Transaktionen ♦ 6.3 Funktionen • 7 Bewertung • 8 Schlussbetrachtung • 9 Anhang ♦ 9.1 Screencast ♦ 9.2 Kontrollfragen ♦ 9.3 Fußnoten • 10 Literatur- und Quellverzeichnis 1 Abkürzungsverzeichnis Abkürzung ANSI ASC DBMS DCL DDL DESC DML DQL FOM Bedeutung American National Standards Institute ascending Datenbankmanagementsystem Data Control Language Data Definition Language descending Data Manipulation Language Data Query Language Fachhochschule für Ökonomie und Management 1 Abkürzungsverzeichnis 2 Erstellung_eines_Screen_Videos_zum_Thema_?Grundlagen_von_SQL? IBM ISO MAC MS PDF RDBMS SEQUEL SQL TCL International Business Machines Corporation International Organization for Standards Apple Macintosh Microsoft Portable Document Format (Adobe) relationales Datenbankmanagementsystem Structured English Query Language Structured Query Language Transaction Control Language 2 Abbildungsverzeichnis Abb.Nr. 1 2 3 Bezeichnung Ebenen eines Datenbanksystems Datenbankmodelldiagramm - Beispiel für falsche Schlüsselvergabe Datenbankmodelldiagramm - Beispiel für richtige Schlüsselvergabe 3 Tabellenverzeichnis Tabelle Nr. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 Bezeichnung Gegenüberstellung von relationalen- und SQL-Begriffen Beispielrelation "Mitarbeiter" Datentypen - Kategorie "Genaue numerische Werte" Datentypen - Kategorie "Ungefähre numerische Werte" Datentypen - Kategorie "Datum und Uhrzeit" Datentypen - Kategorie "Zeichenfolgen" Datentypen - Kategorie "Unicode Zeichenfolgen" Datentypen - Kategorie "Binär Zeichenfolgen" Selektionsergebnis: Alle Mitarbeiter mit Vor- und Nachnamen Selektionsergebnis: Alle Mitarbeiter Selektionsergebnis mit dem Zusatz DISTINCT Selektionsergebnis ohne den Zusatz DISTINCT Ausgangstabelle vor dem Löschen Tabelle nach dem Löschen Vergleichsoperatoren Basis Aggregatfunktionen Mitarbeiter Beispieltabelle Ergebnis der Aggregatfunktion "AVG" Ergebnis der Aggregatfunktion "MAX" Ergebnis der Aggregatfunktion "MIN" Ergebnis der Aggregatfunktion "MAX" mit Zusatz GROUP-BY Ergebnis der Aggregatfunktion "MIN" mit Zusatz GROUP-BY 2 Abbildungsverzeichnis 3 Erstellung_eines_Screen_Videos_zum_Thema_?Grundlagen_von_SQL? 23 24 25 26 27 28 29 30 Wahrheitstabelle vom AND-Operator Selektionsergebnis mit AND-Operator Wahrheitstabelle vom OR-Operator Selektionsergebnis mit OR-Operator Verfügbare Platzhalter für den LIKE-Operator Ergebnis mit LIKE-Operator Ergebnisselektion mit IN-Operator Ergebnis der Addiere-Funktion 4 Einleitung Diese Fallstudie ist ein Baustein von vielen anderen, welche dem Projekt des ?Blended Learning? an der FOM (Fachhochschule für Ökonomie und Management) angehören und von den Kommilitonen im Sommersemester 2012 durchgeführt wurden. Die Fallstudie ist dem Bereich des Datenbankmanagements untergeordnet und befasst sich ausschließlich mit den Grundlagen von SQL, welche mittels eines Screenvideos erläutert werden sollen. SQL steht für "Structured Query Language". SQL ist eine Datenbanksprache, welche von dem American National Standards Institute (ANSI) im Jahre 1986 standardisiert wurde. Anschließend wurde der ANSI-Standard im Jahre 1987 von der International Organization for Standards (ISO) als internationaler Standard akzeptiert. Hierbei handelt es sich um eine Datenbankensprache, welche zum Abfragen von Datensätzen angewendet wird. SQL gehört zu der Familie der deklarativen Sprachen. Edgar Frank Codd, Mitglied des IBM Research Laboratory, veröffentlichte in den 70er Jahren den Artikel "A Relational Model of Data for Large Shared Data Bank", welcher den Grundstein für die Erstellung von SEQUEL setzte. So wurden im Laufe der 70er Jahre mehrere relationale Sprachen entwickelt, jedoch hat sich aus heutiger Sicht lediglich SEQUEL durchgesetzt. Die erste Implementierung von SEQUEL fand im Jahr 1974/75 statt. 1976/77 fand eine Überarbeitung der Sprache statt und diese wurde dann mit SEQUEL/2 definiert. Anschließend wurde der Name jedoch in SQL umgeändert.[1] Die Bedeutung von SQL wird in der heutigen Zeit immer wichtiger, da durch das erhöhte Aufkommen von Daten in der heutigen Zeit, der richtige Umgang mit Datenbanken und den dazugehörigen Abfragen unumgänglich ist. 4.1 Zielsetzung Ziel dieser Fallstudie ist es, den Lesern theoretisches Wissen zu vermitteln. Den Lesern soll auf einer gut verständlichen Art und Weise, grundlegende SQL Statements erläutert werden. Nachdem sich ein Leser mit dieser Fallstudie auseinander gesetzt hat, soll dieser in der Lage sein, einfache Befehle selbst schreiben zu können und ein gutes Fundament an Grundkenntnissen zu besitzen auf welches er jeder Zeit aufbauen kann. Die Erstellung eines Screenvideos zum Thema "Grundlagen SQL" mit einer zusätzlichen Kurzfassung des Themas im Wirtschaftsinformatik-Wiki der FOM und der abschließenden wissenschaftlichen Präsentation komplettieren die Zielsetzung. 4.2 Vorgehensweise Diese Fallstudie ist so aufgebaut, dass dem Leser die theoretischen Grundlagen von SQL erläutert und anschließend anhand von Beispielen untermautert werden. Anhand der Beispiele ist für den Leser erkenntlich, wie die SQL Syntax aussieht und welche Auswirkungen die Befehle auf die Datensätze in einer Datenbank haben. Zum Schluss dieser Fallstudie findet der User noch einige Kontrollfragen um selbstständig kontrollieren zu 3 Tabellenverzeichnis 4 Erstellung_eines_Screen_Videos_zum_Thema_?Grundlagen_von_SQL? können, ob sich die Inhalten bereits eingeprägt haben oder nicht. 5 Technologieauswahl Die Erstellung eines Screenvideos umfasst mehrere Punkte wie die Präsentationserstellung, Audioaufnahme und die Erstellung des eigentlichen Videos aus der Präsentation. Die Auswahl fiel auf die Präsentationssoftware Keynote, welche sich zwischen Microsoft Powerpoint und OpenOffice durchgesetzt hatte. Das ausschlaggebende Ergebnis war die schon vorhandene Version von Keynote, welche in dieser Projektgruppe bereits vorhanden war. So mussten keine weiteren Kosten für Microsoft Powerpoint für MAC ausgegeben werden und OpenOffice bietet weniger Funktionalität, sodass die Videoerstellung zusätzlich noch mit einem weiteren Programm erstellt werden müsste. Keynote deckt alle technischen Anforderungen zur Erstellung von Präsentation und Video mit Audioaufnahme ab und muss für das Projekt nicht erst neu erworben werden. Die Software ist Bestandteil von iWorks und kann hier gekauft werden. Die nachfolgenden Beispiele und SQL-Anweisungen werden anhand der Microsoft SQL-Server 2012 Syntax gezeigt, da der aktuelle SQL-Standard nur die Hauptbefehle in einfachster Weise unterstützt. So gibt es unterschiedliche Ausprägungen der SQL-Anweisungen, welche sich aber in anderen SQL-Versionen sehr ähneln werden. Die Beispiele können mit der kostenlosen SQL-Server 2012 Express Version, welche hier heruntergeladen werden kann, ausgetestet werden. Die abschließende wissenschaftliche Präsentation wird mit Microsoft Powerpoint auf einem Windows-Computer erstellt, da durch die Referenten-Ansicht zusätzliche Informationen auf einen zweiten Bildschirm dargestellt werden können. Zusätzlich werden Microsoft Excel und Microsoft Visio für die Erstellung der Abbildungen genutzt. 6 Kurzfassung des Inhalts 6.1 Grundlagen In diesem Kapitel werden die wichtigsten Befehle, deren Bedeutung und weitere theoretischen Grundlagen zu SQL erläutert. An Hand von Beispielen und Beispieldaten werden die nächsten Kapitel die Einführung in SQL so bildlich und anschaulich wie möglich gestalten. 6.1.1 Relationale Datenbanken Relationale Datenbanken bestehen aus Relationen, Attributen und Tupel.[2] Folgende Tabelle zeigt die Bedeutung der Begriffe: relational SQL Relation Tabelle Tupel Zeile Attribut Spalte Domäne 4.2 Vorgehensweise 5 Erstellung_eines_Screen_Videos_zum_Thema_?Grundlagen_von_SQL? Wertebereich der Attribute (Datentypen) Tabelle 1: Gegenüberstellung von relationalen- und SQL-Begriffen In Anlehnung an: Kuhlmann; Müllmerstadt (2004), S. 17 Abb. 1: Ebenen eines Datenbanksystems Eine relationale Datenbank ist eine Sammlung von Relationen (Tabellen), in denen Datensätze (Tupel) gespeichert sind. Jedes Tupel besteht aus mehreren Attributen oder auch Eigenschaften genannt. Jeder Datensatz muss eindeutig über einen Schlüssel identifiziert werden können. Beziehungen zwischen Relationen werden ebenfalls in separaten eigenen Relationen abgebildet. Das Datenbankmanagementsystem für ein relationales Datenbankmodell nennt man relationales Datenbankmanagementsystem (RDBMS). Im Folgenden wird ein Mitarbeiter eines Unternehmens durch folgende Attribute beschrieben: MitarbeiterID, Vorname, Nachname, Geburtsdatum, Urlaubsanspruch und Gehalt. In dieser Mitarbeiter-Relation ist der eindeutige Schlüssel die MitarbeiterID, wodurch ein einzelner Datensatz identifiziert werden kann. MitarbeiterID Vorname Nachname Geburtsdatum Urlaubsanspruch Gehalt 1 Klaus Apfel 08.05.1967 30 3200,00 2 Max Mustermann 26.06.1957 24 3800,00 3 Klaus Pohl 29.05.1990 30 2600,00 4 Manfred Lehmann 12.11.1978 28 4800,00 5 Max Kehl 24.10.1966 30 5200,00 Tabelle 2: Beispielrelation "Mitarbeiter" 6.1.2 Data Manipulation Language (DML) Zu der Data Manipulation Language gehören alle Befehle, um Daten zu schreiben (INSERT), zu lesen (SELECT), zu löschen (DELETE) und zu ändern (UPDATE).[3] Da diese Befehle in Abfragen mit logischen Operatoren, Unterabfragen und verschiedenen Parametern kombiniert und verschachtelt werden können, können sie dadurch lang und unübersichtlich werden.[4] Die Abfragebefehle SELECT, WHERE etc. werden oft auch in eine separate Kategorie namens DQL (Data Query Language) gesteckt. 6.1.1 Relationale Datenbanken 6 Erstellung_eines_Screen_Videos_zum_Thema_?Grundlagen_von_SQL? 6.1.3 Data Definition Language (DDL) Mit der Data Definition Language gehören alle Befehle, mit denen man Datenbanken bzw. Datenbankobjekte in Datenbankmangementsystemen (DBMS) erstellen (CREATE), löschen (DROP) oder ändern (ALTER) kann.[5] Zu den Datenbankobjekten zählen neben Tabellen auch Views (Sichten), Funktionen, Prozeduren und Schemata. Wie bei der Data Manipulation Language werden diese Befehle in einer oder mehrere Abfragen ausgeführt. 6.1.4 Data Control Language (DCL) Data Control Language ist die Datenüberwachungssprache, worunter alle sicherheitsrelevanten Befehle wie GRANT, REVOKE und DENY fallen.[6] Dadurch lassen sich verschiedene Berechtigungen auf Benutzer- und Rollenebene (Zusammenfassung mehrerer Benutzer) vergeben, um den Zugriff auf die Daten und Datenbankobjekte zu steuern. 6.1.5 Primär und Fremdschlüssel In Datenbanken gibt es viele Tabellen mit vielen Inhalten. Um diese Tabellen zu verknüpfen oder bestimmte Datensätze wiederzufinden, werden Schlüssel, sog. Keys, verwendet.[7] Michael Ebner beschreibt den Inhalt von Tabellen in "einer relationalen Datenbank [..] nicht sequentziell organisiert [...], es gibt also nicht den ersten, den letzten, den 385. Datensatz".[8] Der eindeutige Schlüssel, welcher sich aus einen oder mehreren Attributen (Spalten) zusammensetzen kann, ermöglicht es einen einzelnen Datensatz identifizieren zu können. Diesen Schlüssel bezeichnet man als Primärschlüssel. Ein Primärschlüssel ist im einfachsten Fall eine fortlaufende Nummer (z.B. Kundennummer oder Bestellnummer), welches aber nicht zwingend notwendig ist.[7] Die Attribute eines Primärschlüssels dürfen sich nicht ändern. Im folgenden Datenbankmodelldiagramm sind zwei Relationen dargestellt. Die Mitarbeiter-Relation mit dem primären Schlüssel über die Spalten Vorname, Nachname und Geburtsdatum und die zugehörige Beziehungsrelation IstChefVon. Abbildung 2: Datenbankmodelldiagramm - Beispiel für falsche Schlüsselvergabe Wenn man den Primärschlüssel über diese Spalten erstellt, gibt es aber folgende Nachteile: 6.1.3 Data Definition Language (DDL) 7 Erstellung_eines_Screen_Videos_zum_Thema_?Grundlagen_von_SQL? • Da solche Schlüssel als Verbindung von Tabellen genutzt werden (Beziehung, Referenz), müssen diese drei Spalten in die andere Tabelle implementiert werden (siehe Tabelle IstChefVon) ♦ Der Speicherbedarf der Beziehungstabelle IstChefVon ist größer ♦ Bei Änderung des Namens, beispielsweise durch Heirat, müssen in der Mitarbeiter-Stammtabelle, sowohl in der Beziehungstabelle die Datensätze des Mitarbeiters angepasst werden • In großen Unternehmen kann es vorkommen, dass es mehrere Mitarbeiter mit gleichen Vornamen, Nachnamen und Geburtsdatum gibt ♦ Dadurch wird das Hinzufügen des gleichen Mitarbeiter-Datensatzes verhindert Fügt man eine Spalte MitarbeiterID ein, welches fortlaufende Nummern enthält, beseitigt man die Nachteile: Abbildung 3: Datenbankmodelldiagramm - Beispiel für richtige Schlüsselvergabe Die Spalten Chef_MitarbeiterID und Angestellter_MitarbeiterID sind zusammen der Primärschlüssel der Tabelle IstChefVon und zusätzlich Fremdschlüssel, da sie sich auf die Spalte MitarbeiterID aus der Mitarbeiter Tabelle beziehen. Fremdschlüssel beziehen sich also auf die Primärschlüssel der anderen Tabellen um eine Verbindung zu dieser herstellen zu können. [9] Über diesen Fremdschlüssel können die Tabellen in Abfragen miteinander verknüpft werden, so dass man z.B. die zugehörigen Namen und Gehälter der Chefs dazu bekommt. 6.1.6 Datentypen Der Datentyp legt die Art und die Länge der enthaltenen Daten fest. [10] Jeder einzelne Wert in der Datenbank besitzt einen Datentyp. Sobald man eine Tabelle erstellt, muss man in der Tabellendefinition die Datentypen der Spalten angeben. Aber auch die Rückgabewerte von Funktionen und Prozeduren besitzen einen Datentyp. SQL kategorisiert die Datentypen in unterschiedliche Bereiche. Hier die wichtigsten Datentypen: Genaue numerische Werte Datentyp bigint Wertebereich Beschreibung -263 (-9.223.372.036.854.775.808) bis 263-1 Eine ganze Zahl mit einer Größe von 8 (9.223.372.036.854.775.807) Bytes. 6.1.5 Primär und Fremdschlüssel 8 Erstellung_eines_Screen_Videos_zum_Thema_?Grundlagen_von_SQL? smallint decimal(p, s) numeric(p, s) -215 (-32.768) bis 215-1 (32.767) -1038+1 und 1038-1 Eine ganze Zahl mit einer Größe von 2 Bytes. Eine Zahl mit fester Genauigkeit und mit fester Anzahl von Dezimalstellen. Der Parameter p steht für Precision (Genauigkeit). Dieser gibt die Gesamtzahl der zu speichernden Dezimalstellen an (sowohl links als auch rechts vom Dezimalkomma). Der Wert muss zwischen 1-36 liegen. Der Standardwert beträgt 18. Der Parameter s gibt die maximalen Dezimalstellen rechts vom Dezimalkomma an. Der Wert muss zwischen 0 und p liegen. Mit decimal(6, 2) wird eine Zahl deklariert, die insgesamt sechs Stellen enthält, zwei davon als Nachkommastellen. So bleiben 4 Zahlen vor dem Komma. Das Format ist: 0000,00. money -922.337.203.685.477,5808 bis 922.337.203.685.477,5807 Währungswerte mit einer Größe von 8 Bytes. smallmoney -214.748,3648 bis 214.748,3647 Währungswerte mit einer Größe von 4 Bytes. bit 0 oder 1 SQL-Server verwendet keine boolische Datentypen für WAHR und FALSCH. Hierfür wird dieser Datentyp verwendet, der nur die Werte 0 (FALSCH) und 1 (WAHR) unterstützt. int -231 (-2.147.483.648) bis 231-1 (2.147.483.647) Eine ganze Zahl mit einer Größe von 4 Bytes. tinyint 0 bis 255 Eine ganze Zahl mit einer Größe von 1 Byte. Tabelle 3: Datentypen - Kategorie "Genaue numerische Werte"[11] Ungefähre numerische Werte Datentyp Wertebereich Beschreibung float(n) -1,79e308 bis 1,79e308 Speichert Gleitkommazahlen (Näherungswerte). Der Parameter n gibt an, wie viel Bits zur Speicherung benutzt werden sollen. Der Standardwert beträgt 53. real -3,40e38 bis 3,40e38 Speichert Gleitkommazahlen mit einer Größe von 4 Bytes. Tabelle 4: Datentypen - Kategorie "Ungefähre numerische Werte"[11] Datum und Uhrzeit 6.1.6 Datentypen 9 Erstellung_eines_Screen_Videos_zum_Thema_?Grundlagen_von_SQL? Datentyp date datetimeoffset datetime2 Wertebereich Beschreibung Datum: 0001-01-01 bis 9999-12-31 Speichert Daten des gregorianischen Kalenders im Format YYYY-MM-DD. Die Speichergröße beträgt 3 Bytes. Datum: 0001-01-01 bis 9999-12-31 Zeit: 00:00:00 bis 23:59:59.9999999 Speichert Daten mit Uhrzeit des gregorianischen Kalenders im Format YYYY-MM-DD hh:mm:ss.nnnnnnn. Die Speichergröße beträgt 10 Bytes. Es wird die Zeitzone beachtet. Datum: 0001-01-01 bis 9999-12-31 Zeit: 00:00:00 bis 23:59:59.9999999 Erweiterung vom Datentyp datetime. Besitzt eine größere Genauigkeit im Datumsbereich und Sekundenbruchteilbereich, die vom Nutzer angegeben werden kann. Datum: 1900-01-01 bis 2079-06-06 smalldatetime Zeit: 00:00:00 bis 23:59:59 Speichert das Datum kombiniert mit der Uhrzeit ab, wobei es keine Sekundenbruchteile gibt. Die Speichergröße beläuft sich auf 4 Bytes. datetime Datum: 1753-01-01 bis 9999-12-31 Zeit: 00:00:00 bis 23:59:59.997 Speichert das Datum kombiniert mit der Uhrzeit inkl. Sekundenbruchteilen ab. Die Speichergröße ist 8 Bytes. time Zeit: 00:00:00.0000000 bis 23:59:59.9999999 Definiert eine Uhrzeit im 24-Stunden-Format ohne Beachtung der Zeitzonen. Tabelle 5: Datentypen - Kategorie "Datum und Uhrzeit"[11] Zeichenfolgen Datentyp Wertebereich Beschreibung 1 bis 8.000 Speichert eine Zeichenkette (kein Unicode) fester Länge, wobei der Parameter n die Länge der Zeichenkette angibt. Die Speichergröße beträgt n Bytes. varchar(n) 1 bis 8.000 oder MAX (maximaler Speicherplatz (2 GB) wird genutzt) Speichert eine Zeichenkette (kein Unicode) variabler Länge, wobei der Parameter n die Länge der Zeichenkette angibt. Die Speichergröße ist die tatsächlich eingegebene Länge + 2 Bytes. text 231-1 (2.147.483.647) Bytes (~ 2 GB) Nicht-Unicode-Daten variabler Länge. Wird in neuen SQL-Server Versionen durch varchar(MAX) abgelöst. char(n) Tabelle 6: Datentypen - Kategorie "Zeichenfolgen"[11] Unicode Zeichenfolgen Datentyp 6.1.6 Datentypen Wertebereich Beschreibung 10 Erstellung_eines_Screen_Videos_zum_Thema_?Grundlagen_von_SQL? 1 bis 4.000 Speichert eine Unicode-Zeichenkette fester Länge, wobei der Parameter n die Länge der Zeichenkette angibt. Die Speichergröße beträgt zweimal n Bytes. nvarchar(n) 1 bis 4.000 oder MAX (maximaler Speicherplatz (2 GB) wird genutzt) Speichert eine Unicode-Zeichenkette variabler Länge, wobei der Parameter n die Länge der Zeichenkette angibt. Die Speichergröße ist zweimal die tatsächlich eingegebene Länge + 2 Bytes. ntext 230-1 (1.073.741.823) Bytes (~ 1 GB) Unicode-Daten variabler Länge. Wird in neuen SQL-Server Versionen durch nvarchar(MAX) abgelöst. nchar(n) Tabelle 7: Datentypen - Kategorie "Unicode Zeichenfolgen"[11] Binär Zeichenfolgen Datentyp binary(n) Wertebereich 1 bis 8.000 varbinary(n) 1 bis 8.000 oder MAX image Beschreibung Binärdaten fester Länge, wobei der Parameter n die Länge angibt. Die Speichergröße beträgt n Bytes. Binärdaten variabler Länge, wobei der Parameter n die Länge angibt. Die Speichergröße beträgt n Bytes. Die Speichergröße ist die tatsächlich eingegebene Länge + 2 Bytes. 0 bis 231 - 1 (2.147.483.647) Bytes (~ 2 GB) Binärdaten variabler Länge. Tabelle 8: Datentypen - Kategorie "Binär Zeichenfolgen"[11] 6.1.7 Grundlegende SQL Befehle 6.1.7.1 CREATE Mit dem Befehl CREATE erstellt man Datenbankobjekte wie z.B. Tabellen, Views, Prozeduren und Funktionen.[12] Die SQL-Anweisung um z.B. eine Tabelle zu erstellen lautet: CREATE TABLE Tabellenname Nach dem Tabellennamen folgt die Tabellendefinition in geschweiften Klammern. Die Tabellendefinition beinhaltet alle Tabellenspalten mit dem jeweiligen Datentyp und der Spaltenbedingung, welche innerhalb der geschweiften Klammern mit Kommata getrennt aufgelistet werden.[13] Folgende SQL-Anweisung erstellt eine Tabelle Kunde mit der Spalte KundenNr als eindeutigen Schlüssel: CREATE TABLE Kunde ( KundenNr int NOT NULL PRIMARY KEY, 6.1.7 Grundlegende SQL Befehle 11 Erstellung_eines_Screen_Videos_zum_Thema_?Grundlagen_von_SQL? Anrede CHAR(4) NULL, Name VARCHAR(150) NOT NULL, Strasse VARCHAR(100) NOT NULL, PLZ VARCHAR(20) NOT NULL, Ort VARCHAR(50) NOT NULL, TelefonNr VARCHAR(50) ) Der Tabellenname darf nicht länger als 128 Zeichen sein und keine Sonderzeichen enthalten.[14] Die Spaltenbedingung NOT NULL legt fest, dass in diesen Spalten unbedingt Werte einzugeben sind. Die Bedingung NULL oder das Weglassen dieser Bedingung bewirkt das Gegenteil und kennzeichnet die Werteingabe als optional.[13] 6.1.7.2 ALTER Der ALTER-Befehl steht für das Ändern von Datenbankobjekten. Mit diesem Befehl lassen sich Funktionen und Prozeduren anpassen, als auch Spalten zu einer vorhandenen Tabelle hinzufügen oder entfernen.[12] Folgende Anweisung fügt eine Spalte Geburtsdatum zu der Tabelle Mitarbeiter. Die Spalte ist vom Typ datetime und erlaubt NULL-Werte. ALTER TABLE Mitarbeiter ADD Geburtsdatum DATETIME NULL Folgende Syntax entfernt diese Spalte wieder: ALTER TABLE Mitarbeiter DROP COLUMN Geburtsdatum 6.1.7.3 DROP Mit dem SQL-Befehl DROP können Datenbankobjekte, wie z.B. Tabellen, Funktionen und Prozeduren gelöscht werden.[15] Diese Anweisung löscht die Tabelle Mitarbeiter: DROP TABLE Mitarbeiter Dieser SQL-Befehl löscht die komplette Datenbank Datapool: DROP DATABASE Datapool 6.1.7.4 INSERT Der INSERT-Befehl fügt Datensätze in eine Tabelle ein. Die Anweisung sieht folgendermaßen aus: INSERT INTO Tabelle VALUES() Um einen Datensatz vollständig in die Tabelle einzugeben, ist die Angabe der Spalten irrelevant. Die Werte werden nach Reihenfolge der Spalten angegeben [16]: INSERT INTO Mitarbeiter VALUES(5, 'Max', 'Mustermann', '29.05.1990', 30, 4000.00) 6.1.7.1 CREATE 12 Erstellung_eines_Screen_Videos_zum_Thema_?Grundlagen_von_SQL? Die Tabellenspalten sind in folgender Reihenfolge: MitarbeiterID, Vorname, Nachname, Geburtsdatum, Urlaubsanspruch und Gehalt. Die Werte werden zwischen den Klammern eingegeben. Dabei ist zu beachten, dass die Datentypen der angegebenen Werte mit denen in der Tabelle übereinstimmen. Zeichenketten und Datumswerte werden zusätzlich noch in Hochkommata (') eingeschlossen.[17] Folgende Anweisung würde einen Datensatz nur mit Werten in den Spalten MitarbeiterID, Vorname und Nachname erzeugen: INSERT INTO Mitarbeiter (MitarbeiterID, Vorname, Nachname) VALUES (6, 'Moritz', 'Hofmann') Die Angabe der Spaltennamen erfolgt hinter dem Tabellennamen in geschweiften Klammern. Folgende Anweisung würde die Tabelle Mitarbeiter mit Datensätzen aus einer anderen Tabellen befüllen: INSERT INTO Mitarbeiter (MitarbeiterID, Vorname, Nachname) SELECT fGetNewId('Mitarbeiter'), Vorname, Nachname FROM Mitarbeiter_Schweiz Solche Abfragen können Funktionen (hier z.B.: fGetNewId) enthalten, die die Werte während des Einfügens berechnen. 6.1.7.5 SELECT Die Hauptaufgabe von Datenbanken ist neben dem Speichern und Verwalten von großen Datenmengen auch die Informationsgewinnung durch das Abfragen von Daten. Mit dem SELECT-Befehl können Daten aus Tabellen abgefragt werden.[18] Mit Hilfe von Selektionskriterien in der WHERE-Klausel (LIKE, AND, OR, etc.) und das Verknüpfen von Tabellen können gezielte Datensätze ermittelt werden. Folgende SQL-Syntax gibt alle Mitarbeiter mit Vor- und Nachnamen zurück: SELECT Vorname, Nachname FROM Mitarbeiter Ergebnis: Vorname Nachname Klaus Apfel Max Mustermann Klaus Pohl Manfred Lehmann Max Kehl Tabelle 9: Selektionsergebnis: Alle Mitarbeiter mit Vor- und Nachnamen Die Spaltennamen stehen mit Kommata getrennt nach dem SELECT. Anstelle aller Spaltennamen, kann man auch den Platzhalter * (Star) verwenden: 6.1.7.4 INSERT 13 Erstellung_eines_Screen_Videos_zum_Thema_?Grundlagen_von_SQL? SELECT * FROM Mitarbeiter Ergebnis: MitarbeiterID Vorname Nachname Geburtsdatum Urlaubsanspruch Gehalt 1 Klaus Apfel 08.05.1967 30 3200,00 2 Max Mustermann 26.06.1957 24 3800,00 3 Klaus Pohl 29.05.1990 30 2600,00 4 Manfred Lehmann 12.11.1978 28 4800,00 5 Max Kehl 24.10.1966 30 5200,00 Tabelle 10: Selektionsergebnis: Alle Mitarbeiter Durch den Zusatz DISTINCT wird die Mehrfachausgabe gleicher Werte unterdrückt.[19] In diesem Beispiel wird also nur einmal der Vorname Max und Klaus ausgegeben: SELECT DISTINCT Vorname FROM Mitarbeiter Ergebnis: Vorname Klaus Max Manfred Tabelle 11: Selektionsergebnis mit dem Zusatz DISTINCT Ohne den Zusatz DISTINCT: SELECT Vorname FROM Mitarbeiter Ergebnis: Vorname Klaus Max Klaus Manfred Max Tabelle 12: Selektionsergebnis ohne den Zusatz DISTINCT 6.1.7.5 SELECT 14 Erstellung_eines_Screen_Videos_zum_Thema_?Grundlagen_von_SQL? 6.1.7.6 DELETE Mit der DELETE-Anweisung werden die Datensätze aus einer Tabelle gelöscht.[20] Die Syntax sieht folgendermaßen aus: DELETE [FROM] Tabelle [WHERE-Klausel] Das Schlüsselwort FROM ist bei dem MS SQL-Server optional. Um nur bestimmte Zeilen zu entfernen, kann eine WHERE-Bedingung eingefügt werden. Diese Bedingung ist ebenfalls optional. Wenn man diese Klausel weglässt, werden einfach alle Zeilen der Tabelle gelöscht. Folgende SQL-Anweisung löscht aus der Tabelle Mitarbeiter alle Mitarbeiter, welche den Vornamen Klaus besitzen: DELETE FROM Mitarbeiter WHERE Vorname = 'Klaus' Vorher: MitarbeiterID Vorname Nachname 1 Klaus Apfel 2 Max Mustermann 3 Klaus Pohl 4 Manfred Lehmann 5 Max Kehl Tabelle 13: Ausgangstabelle vor dem Löschen Nacher: MitarbeiterID Vorname Nachname 2 Max Mustermann 4 Manfred Lehmann 5 Max Kehl Tabelle 14: Tabelle nach dem Löschen 6.1.7.7 UPDATE Der UPDATE-Befehl ist für das Ändern von Datensätzen zuständig.[21] Die Struktur des SQL-Befehls lautet: UPDATE Tabelle SET Spalte1 = Wert, Spalte2 = Wert WHERE Bedingung Die WHERE-Bedingung, die im späteren Kapitel näher behandelt wird, kann man auch ganz weglassen. Das hat zur Folge, dass die angegebenen Spalten aller Datensätze verändert werden. Wie bei der SELECT-Anweisung kann man neben der WHERE-Bedingung auch noch Tabellen verknüpfen, welches dann als Bedingung dient. Es können mehrere Spalten gleichzeitig geändert werden, indem man mehrere Spalten nach dem SET mit Kommata 6.1.7.6 DELETE 15 Erstellung_eines_Screen_Videos_zum_Thema_?Grundlagen_von_SQL? auflistet. In der Tabelle Mitarbeiter wird der Urlaubsanspruch für alle Mitarbeiter, welche noch keine 30 Urlaubstage haben, auf 30 erhöht: UPDATE Mitarbeiter SET Urlaubsanspruch = 30 WHERE Urlaubsanspruch < 30 Der Mitarbeiter Manfred bekommt zusätzliche 2 Tage Urlaub im Jahr: UPDATE Mitarbeiter SET Urlaubsanspruch = Urlaubsanspruch + 2 WHERE MitarbeiterID = 4 Mit dieser Anweisung erhöht man den aktuellen Wert um 2. 6.1.7.8 WHERE Der WHERE-Befehl ist für das Filtern von Datensätzen zuständig. Die Syntax sieht folgendermaßen aus: SELECT * FROM Mitarbeiter WHERE Spalte operator value Operatoren sind Symbole für eine ausführende Operation. Es gibt verschiedene Arten von Operatoren. [22] Hier ist eine Tabelle mit den Vergleichsoperatoren: Operator Bedeutung = gleich < kleiner als > größer als <> ungleich <= kleiner gleich >= größer gleich In Anlehnung an: Kuhlmann; Müllmerstadt (2004), S. 80[23] Tabelle 15: Vergleichsoperatoren Weitere Operatoren sind z.B. IN, BETWEEN und LIKE, welche in späteren Kapiteln behandelt werden. Im folgenden Beispiel werden alle Mitarbeiter mit einem Gehalt von mindestens 3.000 ? ausgegeben: SELECT * FROM Mitarbeiter WHERE Gehalt >= 3000 6.1.7.7 UPDATE 16 Erstellung_eines_Screen_Videos_zum_Thema_?Grundlagen_von_SQL? Mit dieser Abfrage gibt es für alle Mitarbeiter mit einem Gehalt unter 3.000 ? eine Gehaltserhöhung um 5 %: UPDATE Mitarbeiter SET Gehalt = Gehalt * 1.05 WHERE Gehalt < 3000 6.1.7.9 ORDER BY In vielen Fällen müssen die Daten sortiert ausgegeben werden. Dies geschieht mit dem Zusatz ORDER-BY.[24] Die SQL-Syntax sieht folgendermaßen aus: SELECT * FROM Tabelle [WHERE Bedingung] ORDER BY Spalte1 [ASC, DESC] [, Spalte2 [ASC, DESC], ...] Die Anweisungen in eckigen Klammern ([]) sind optional. Die ORDER-BY Klausel steht immer am Ende einer SELECT-Anweisung. ASC (ascending) bedeuted, das die Ergebnisse in aufsteigender und DESC (descending) in absteigender Reihenfolge angezeigt werden. Wird keines von beiden angegeben ist es standardmäßig ASC.[25] Es besteht auch, wie in der Syntax zu sehen, die Möglichkeit, mehrere Spalten zu sortieren. Diese werden einfach Komma separiert aufgelistet. Folgendes Beispiel listet alle Mitarbeiter, sortiert nach dem Geburtsdatum (Älteste zuerst), auf: SELECT * FROM Mitarbeiter ORDER BY Geburtsdatum DESC 6.1.8 Aggregatfunktionen Aggregatfunktionen führen Berechnungen für eine Wertemenge durch. Sie werden meistens mit der SQL-Klausel GROUP BY verwendet. Es gibt folgende Basisfunktionen: Funktion Beschreibung COUNT Gibt die Anzahl von Einträgen zurück. MIN Gibt den kleinsten Wert, in z.B. einer Spalte, zurück. MAX Gibt den größten Wert, z.B. einer Spalte, zurück. SUM Gibt die Summe aller Werte, z.B. in einer Spalte, zurück. AVG Gibt den Mittelwert aller Werte, z.B. in einer Spalte, zurück. Tabelle 16: Basis Aggregatfunktionen[26] Unsere Mitarbeitertabelle für die unten genannten Beispiele: 6.1.7.8 WHERE 17 Erstellung_eines_Screen_Videos_zum_Thema_?Grundlagen_von_SQL? MitarbeiterID Vorname Nachname Geburtsdatum Urlaubsanspruch Gehalt 1 Klaus Apfel 08.05.1967 30 3200,00 2 Max Mustermann 26.06.1957 24 3800,00 3 Klaus Pohl 29.05.1990 30 2600,00 4 Manfred Lehmann 12.11.1978 28 4800,00 5 Max Kehl 24.10.1966 30 5200,00 Tabelle 17: Mitarbeiter Beispieltabelle Im folgendem Beispiel wird das durchschnittliche, maximale und minimale Gehalt aus unserer Mitarbeitertabelle ausgegeben: SELECT AVG(Gehalt) [durchschnittliche Gehalt] FROM Mitarbeiter SELECT MAX(Gehalt) [max. Gehalt] FROM Mitarbeiter SELECT MIN(Gehalt) [min. Gehalt] FROM Mitarbeiter Die eckigen Klammern ([]) ermöglichen einen Spaltennamen mit Leerzeichen als Ausgabe. Ergebnisse: durchschnittliche Gehalt 3920,00 Tabelle 18: Ergebnis der Aggregatfunktion "AVG" max. Gehalt 5200,00 Tabelle 19: Ergebnis der Aggregatfunktion "MAX" min. Gehalt 2600,00 Tabelle 20: Ergebnis der Aggregatfunktion "MIN" Hier wird der Zusatz GROUP BY verwendet, um nicht aggregierte Spalten mit ausgeben zu können. In diesem Beispiel der Vorname und Nachname: SELECT Vorname, Nachname, MAX(Gehalt) [max. Gehalt] FROM Mitarbeiter GROUP BY Vorname, Nachname SELECT Vorname, Nachname, MIN(Gehalt) [min. Gehalt] FROM Mitarbeiter GROUP BY Vorname, Nachname Ergebnisse: Vorname Nachname Max Kehl max. Gehalt 5200,00 Tabelle 21: Ergebnis der Aggregatfunktion "MAX" mit Zusatz GROUP-BY 6.1.8 Aggregatfunktionen 18 Erstellung_eines_Screen_Videos_zum_Thema_?Grundlagen_von_SQL? min. Gehalt Vorname Nachname Klaus Pohl 2600,00 Tabelle 22: Ergebnis der Aggregatfunktion "MIN" mit Zusatz GROUP-BY 6.1.9 Erweiterte SQL Befehle 6.1.9.1 AND Der AND-Operator wird für Filteraktionen benutzt, wenn mehr als eine Bedingung überprüft werden soll. Dieser Operator liefert die boolischen Werte WAHR (TRUE) oder FALSCH (FALSE) zurück.[27] Es gilt folgende Wahrheitstabelle: AND TRUE FALSE UNKNOWN TRUE TRUE FALSE UNKNOWN FALSE FALSE FALSE FALSE UNKNOWN UNKNOWN FALSE UNKNOWN In Anlehnung an: Skulschus (2007), S. 95[28] Tabelle 23: Wahrheitstabelle vom AND-Operator Die SQL-Syntax sieht folgendermaßen aus: SELECT * FROM Mitarbeiter WHERE 1. Bedingung [AND 2. Bedingung] Es können beliebig viele Bedingungen mit AND angehangen werden. Es müssen laut Wahrheitstabelle dann alle Bedingungen zutreffen, um Ergebnisse zu bekommen. Im folgenden Beispiel werden nur Mitarbeiter selektiert, welche den Vornamen Max haben und einen Urlaubsanspruch von unter 30 Tagen haben. SELECT * FROM Mitarbeiter WHERE Vorname = "Max" AND Urlaubsanspruch < 30 Ergebnis: MitarbeiterID Vorname Nachname Geburtsdatum Urlaubsanspruch 2 Max Mustermann 26.06.1957 24 Gehalt 3800,00 Tabelle 24: Selektionsergebnis mit AND-Operator Es wird nur der Mitarbeiter mit der ID 2 ausgegeben, da der andere Mitarbeiter mit dem Vornamen Max einen Urlaubsanspruch von 30 Tagen hat. Ohne die zweite Bedingung würden beide Mitarbeiter ausgegeben werden. 6.1.9 Erweiterte SQL Befehle 19 Erstellung_eines_Screen_Videos_zum_Thema_?Grundlagen_von_SQL? 6.1.9.2 OR Der OR-Operator ist wie der AND-Operator. Der Unterschied liegt nur darin, dass mindestens nur eine Bedingung wahr sein muss (Anders als bei dem AND-Operator, wo alle Bedingungen zutreffen müssen).[27] Es gilt folgende Wahrheitstabelle: OR TRUE FALSE UNKNOWN TRUE TRUE TRUE TRUE FALSE TRUE FALSE UNKNOWN UNKNOWN TRUE UNKNOWN UNKNOWN In Anlehnung an: Skulschus (2007), S. 95[28] Tabelle 25: Wahrheitstabelle vom OR-Operator Die SQL-Syntax sieht folgendermaßen aus: SELECT * FROM Mitarbeiter WHERE 1. Bedingung [OR 2. Bedingung] Im folgenden Beispiel werden alle Mitarbeiter selektiert, welche den Vornamen Max oder einen Urlaubsanspruch von mehr als 25 Tagen besitzen. SELECT * FROM Mitarbeiter WHERE Vorname = 'Max' OR Urlaubsanspruch > 25 Ergebnis: MitarbeiterID Vorname Nachname Geburtsdatum Urlaubsanspruch Gehalt 1 Klaus Apfel 08.05.1967 30 3200,00 2 Max Mustermann 26.06.1957 24 3800,00 3 Klaus Pohl 29.05.1990 30 2600,00 4 Manfred Lehmann 12.11.1978 28 4800,00 5 Max Kehl 24.10.1966 30 5200,00 Tabelle 26: Selektionsergebnis mit OR-Operator In diesem Beispiel werden alle Mitarbeiter selektiert, da alle Mitarbeiter einen Urlaubsanspruch von mehr als 25 Tagen haben, bis auf der Mitarbeiter mit der ID 2. Dieser heißt aber Max und wird deshalb mit selektiert. Wird die erste Bedingung abgeändert, so dass z.B. Klaus gesucht wird, so würde der Mitarbeiter Max mit der ID 2 nicht ausgegeben werden, da dieser weder Klaus heißt noch einen Urlaubsanspruch von mehr als 25 Tagen besitzt. 6.1.9.2 OR 20 Erstellung_eines_Screen_Videos_zum_Thema_?Grundlagen_von_SQL? 6.1.9.3 LIKE Der LIKE-Operator ist ein weiteres Schlüsselwort in der WHERE-Klausel. Dieser Operator ermöglicht eine Suche nach einer Zeichenfolge, welches mit einem bestimmtem Muster übereinstimmt. Ein Muster kann normale Zeichen oder Platzhalter enthalten.[29] In dieser Tabelle sind alle verfügbaren Muster/Platzhalter für den LIKE-Operator aufgelistet: Platzhalter % Beschreibung Beispiel WHERE Name LIKE '%Max%' findet alle Eine Zeichenfolge aus null Namen, die das Wort Max enthalten (Max, oder mehr Zeichen Maximilian, Maxim, ...) _ Ein einzelnes Zeichen WHERE Vorname LIKE '_ean' findet alle Vornamen mit vier Buchstaben, die auf ean enden (Dean, Sean, ...) [] Beliebiges einzelnes Zeichen im angegebenen Bereich ([a-f]) oder in der angegebenen Menge ([abcdef]). WHERE Vorname LIKE '[C-P]arsen' findet alle Namen, die auf 'arsen' enden und mit einem einzelnen Zeichen zwischen C und P beginnen (Carsen, Larsen, Karsen, ...) [^] Beliebiges einzelnes Zeichen, das sich nicht im WHERE Name LIKE 'de[^l]%' findet alle angegebenen Bereich Namen, die mit 'de' beginnen und deren dritter ([^a-f]) oder in der Buchstabe nicht l ist. angegebenen Menge ([^abcdef]) befindet. In Anlehnung an: MSDN - LIKE Operator[30] Tabelle 27: Verfügbare Platzhalter für den LIKE-Operator Dieses Beispiel gibt alle Mitarbeiter zurück, welche mit dem Nachnamen auf "mann" enden: SELECT Vorname, Nachname FROM Mitarbeiter WHERE Nachname LIKE '%mann%' Ergebnis: Vorname Nachname Max Mustermann Manfred Lehmann Tabelle 28: Ergebnis mit LIKE-Operator 6.1.9.3 LIKE 21 Erstellung_eines_Screen_Videos_zum_Thema_?Grundlagen_von_SQL? 6.1.9.4 IN Der IN-Operator ist der letzte hier besprochene Operator. Dieser Operator erlaubt mehrere Werte in der WHERE-Klausel.[31] Die Syntax ist sehr simpel: SELECT * FROM Tabelle WHERE Spalte IN (value1, value2, ...) Wie bereits beim Einfügen von Datensätzen müssen die Werte den entsprechenden Datentyp der Spalte gleichen. So sind Zeichenketten und Daten zusätzlich mit Hochkommata (') umschlossen. Folgende Anweisung selektiert alle Mitarbeiter mit folgenden Vornamen: Max und Manfred: SELECT Vorname, Nachname FROM Mitarbeiter WHERE Vorname IN ('Max', 'Manfred') Ergebnis: Vorname Nachname Max Mustermann Manfred Lehmann Max Kehl Tabelle 29: Ergebnisselektion mit IN-Operator 6.2 Transaktionen Eine Transaktion kann man als eine Arbeitseinheit bezeichnen. Jede ausgeführte SQL-Anweisung ist eine implizite Transaktion. Transaktionen werden mit den Befehlen COMMIT und ROLLBACK gesteuert. Alle Anweisungen in einer Transaktion müssen erfolgreich durchlaufen, denn es werden entweder alle oder keine Anweisungen in die Datenbank abgesetzt.[32] Der COMMIT-Befehl beendet eine Transaktion, so dass die Änderungen in die Datenbank geschrieben werden. Mit dem ROLLBACK-Befehl werden die Änderungen wieder rückgängig gemacht. Diese Befehle werden in die Kategorie der TCL (Transaction Control Language) eingruppiert. Eine zusätzliche Besonderheit bei dem MS SQL-Server ist, dass diese Transaktionsanweisungen zusätzlich noch nach dem SQL-Befehl BEGIN TRANSACTION stehen. Ein Beispiel für eine Transaktion wäre z.B. bei den Mitarbeitern das Gehalt zu verändern. Die TCL wird in den folgenden SQL-Anweisungen noch einmal verdeutlicht: BEGIN TRANSACTION GO UPDATE Mitarbeiter SET Gehalt = Gehalt + 500 WHERE MitarbeiterID = 5 GO COMMIT TRANSACTION 6.1.9.4 IN 22 Erstellung_eines_Screen_Videos_zum_Thema_?Grundlagen_von_SQL? In dieser Anweisung wird die Änderung in der Datenbank abgespeichert, sodass der Mitarbeiter eine Gehaltserhöhung bekommen hat. BEGIN TRANSACTION GO UPDATE Mitarbeiter SET Gehalt = Gehalt + 500 WHERE MitarbeiterID = 5 GO ROLLBACK TRANSACTION Diese Anweisung wird die Änderung nicht in die Datenbank abspeichern. 6.3 Funktionen Neben den Aggregatfunktionen und weiteren Funktionen wie z.B. ROUND (Werte runden) oder LEN (Länge einer Zeichenkette ausgeben) können auch eigene Funktionen geschrieben werden. Folgende Syntax erstellt eine eigene Funktion: CREATE FUNCTION Funktionsname (Parameter) RETURNS (Datentyp) AS SQL-Anweisung RETURN Rückgabewert Im nächsten Beispiel wird eine Addiere-Funktion geschrieben, welche zwei Werte miteinander addiert und zurückgibt. CREATE FUNCTION Addiere ( @Zahl1 FLOAT NOT NULL, @Zahl2 FLOAT NOT NULL ) RETURNS (FLOAT) AS DECLARE @ergebnis float SET @ergebnis = @Zahl1 + @Zahl2 RETURN @ergebnis In dieser Funktion haben wir zwei Parameter, welche mit einem @ vor dem Namen deklariert wurden. Beide Parameter sind vom Datentyp float und es müssen beide Parameter übergeben werden. Die Ausgabe: SELECT Addiere(10, 10.5) Ergebnis Ergebnis: 6.2 Transaktionen 23 Erstellung_eines_Screen_Videos_zum_Thema_?Grundlagen_von_SQL? Ergebnis 20,50 Tabelle 30: Ergebnis der Addiere-Funktion Jede Funktion kann über den SQL-Befehl ALTER wieder geändert oder über den Befehl DROP gelöscht werden. Funktionen können in jedem SQL-Statement benutzt werden, was bei Prozeduren nicht der Fall ist. Prozeduren sind wie Funktionen vorgefertigte Routinen, welche weder einen Rückgabewert besitzen noch in eine SQL-Anweisung integriert werden können. Sie werden für Routinen z.B. in Nachtverarbeitungen für die Sicherung von Daten oder das Befüllen von Tabellen benutzt. 7 Bewertung Ziel dieser Fallstudie war es, den Lesern die Grundlagen von SQL zu vermitteln. Zurückblickend lässt sich festhalten, dass in den vorherigen Punkten die wichtigsten Grundlagen genannt und anhand von Beispielen verdeutlicht wurden. Die wichtigsten Befehle wurden erläutert, so dass anschließend kleinere SQL Statements selbstständig durchgeführt werden können. Das Hauptaugenmerk dieser Fallstudie liegt jedoch auf den grundlegenden SQL-Befehlen. Die Erstellung des Screenvideos ist der andere Teilbereich der Zielsetzung. Diese Dokumentation im Wiki dient als Unterstützung zum Screenvideo und bildet zusammen ein grundlegendes Verständnis in den Einstieg von SQL. Es dient als Kurzüberblick über die wichtigsten grundlegenden Befehle. Um sich einen besseren Einblick über den Aufbau und die Struktur von Datenbanken zu verschaffen ist weitere Literatur notwendig. Ebenso werden nur die einfachsten SQL-Anweisungen aufgeführt. Für komplexere Aufgaben ist ebenfalls weitere Literatur ratsam. 8 Schlussbetrachtung Zu Beginn dieser Fallstudie wurden dem Leser die wichtigsten Grundlagen und Begriffe zu Datenbanken erläutert. In den Abschnitten 6.1.1 bis 6.1.6 wurden grundlegende Begriffe zu der Struktur und zu dem Aufbau von Datenbanken aufgeführt. Dies begann mit dem Begriff der relationalen Datenbank. Hier ist es notwendig zu wissen wie Datenbanken aufgebaut sind. Eine relationale Datenbank besteht aus Relationen, Tupel, Attributen und Domänen. Anschließend wurden dem Leser die drei verschiedenen Kategorien in SQL vorgestellt. Hierbei gibt es einmal die Data Manipulation Language (DML). Die DML beinhaltet die Befehle zum Schreiben, Löschen, Lesen und Ändern von Daten. Die Data Definition Language (DDL) hingegen beinhaltet Befehle zum Erstellen, Löschen oder Ändern von Daten. Die Data Control Language (DCL) enthält die Befehle die zur Vergabe von Berechtigungen benötigt werden. Die einzelnen Anweisungen wurden anschließend in dem Abschnitt 6.1.7 im Einzelnen aufgeführt und beschrieben. Die Tabellen einer Datenbank stehen untereinander in Beziehung. Die Verknüpfung der Tabellen erfolgt anhand der Primär- und Fremdschlüssel. Anschließend wurden im Abschnitt 6.1.6 die Datentypen erläutert. Der Datentyp definiert die Art (Ganzzahl, Kommazahl, Zeichenkette) und den Wertebereich der Daten. Nachdem grundlegende Kenntnisse zu dem Aufbau und der Struktur von Datenbanken gewonnen wurden, wurden im Folgendem die grundlegenden SQL-Befehle aufgeführt. Die Befehle CREATE, UPDATE, ALTER, DROP, DELETE, INSERT dienen dazu, vorhandene Daten zu verändern, zu löschen oder neue Daten anzulegen. Der SELECT-Befehl dient dazu, eine Hauptaufgabe von Datenbanken ausführen zu können. Datenbanken dienen neben der Datensammlung auch zur Informationsgewinnung. Für diesen Zweck müssen Abfragen ausgeführt 6.3 Funktionen 24 Erstellung_eines_Screen_Videos_zum_Thema_?Grundlagen_von_SQL? werden, die gezielt einzelne Daten aus einer Fülle von Daten heraus filtern können. Dies geschieht mit Hilfe des SELECT-Befehls. Die Befehle ORDER BY und WHERE können hierzu unterstützend eingesetzt werden. Anhand von ORDER BY lassen sich die Daten nach Belieben sortieren. Der WHERE-Befehl sorgt dafür, dass ein Filter bzw. eine Abgrenzung auf einzelne Datensätze stattfindet, so dass nicht alle Datensätze ausgegeben werden. Im nächsten Abschnitt wurden die Basis-Aggregatfunktionen erläutert. Dies sind Funktionen die Berechnungen durchführen um so beispielsweise den Durchschnittswert, das Maximum oder auch das Minimum ermitteln zu können. Im Abschnitt 6.1.9 ?Erweiterte SQL Befehle? wurden die Befehle AND, LIKE, IN und OR erläutert. Diese Befehle dienen dazu weitere Filteraktionen durchzuführen und unterstützen somit ebenfalls den SELECT-Befehl. Über die grundlegenden SQL-Statements hinaus gibt es noch sogenannte Transaktionen (Abschnitt 6.2). Transaktionen können mit dem Befehl COMMIT oder ROLLBACK versehen werden. COMMIT schließt eine Transaktion erfolgreich ab. Hierbei werden die Änderungen gespeichert. Der Befehl ROLLBACK hingegen setzt die Änderungen wieder zurück, sodass keine Werte verändert werden. Der letzte Punkt der sich mit den Grundlagen von SQL befasst hat waren die Funktionen. SQL erlaubt es eigenen Funktionen zu schreiben. Funktionen können gezielt eingesetzt werden um z.B. SELECT?Abfragen zu vereinfachen. Diese Fallstudie bediente sich der MS SQL-Server 2012 Syntax. Neben dem SQL-Server von Microsoft gibt es noch weitere Datenbankmanagementsysteme von z.B. Oracle und IBM (DB2). Die SQL-Befehle unterscheiden sich nur minimal von den anderen Systemen und so können die Befehle auch in anderen Systemen angewandt werden. Um tiefer in SQL einsteigen zu können ist weitere Fachliteratur notwendig. Microsoft liefert außerdem mit der SQL-Server 2012 Installation neben der Einsteiger-Beispieldatenbank AdventureWorks noch viele vorgefertigte SQL-Anweisungen mit, womit man sich über die Grundlagen hinhaus weiter qualifizieren kann. 9 Anhang 9.1 Screencast Das Screenvideo befindet sich hier (Youtube). 9.2 Kontrollfragen Die Kontrollfragen zum Erfassen des Kenntnisstandes können unter diesem Formular (Google Docs Formular) aufgerufen werden. Die Lösungen zu den Fragen befinden sich hier (Adobe Acrobat PDF Datei). 9.3 Fußnoten 1. ? Vgl. Date; Darwen (1998), S. 27 f. 2. ? Vgl. Matthiessen; Unterstein (2007), S. 32 3. ? Vgl. Konopasek (2010), S. 151 4. ? Vgl. Geisler (2011), S. 211 5. ? Vgl. Geisler (2011), S. 210 6. ? Vgl. Oppel; Sheldon (2008), S. 19 7. ? 7,0 7,1 Vgl. Ebner (2002), S. 20 f. 8 Schlussbetrachtung 25 Erstellung_eines_Screen_Videos_zum_Thema_?Grundlagen_von_SQL? 8. ? Ebner (2002), S. 20 9. ? Vgl. Ebner (2002), S. 23 10. ? Vgl. Weber; Schmeling (2007), S. 71 11. ? 11,0 11,1 11,2 11,3 11,4 11,5 Vgl. Weber; Schmeling (2007), S. 71 ff. 12. ? 12,0 12,1 Vgl. Geisler (2011), S. 210 13. ? 13,0 13,1 Vgl. Kuhlmann; Müllmerstadt (2004), S. 28 f. 14. ? Vgl. MSDN - Datenbankbezeichner (2012) 15. ? Vgl. Geisler (2011), S. 210 f. 16. ? Vgl. Kuhlmann; Müllmerstadt (2004), S. 31 17. ? Vgl. Kuhlmann; Müllmerstadt (2004), S. 32 18. ? Vgl. Matthiessen; Unterstein (2007), S. 201 f. 19. ? Vgl. Kuhlmann; Müllmerstadt (2004), S. 78 20. ? Vgl. Matthiessen; Unterstein (2007), S. 200 f. 21. ? Vgl. Geisler (2011), S. 212 f. 22. ? Vgl. Kuhlmann; Müllmerstadt (2004), S. 79 f. 23. ? Kuhlmann; Müllmerstadt (2004), S. 80 24. ? Vgl. Konopasek (2010), S. 179 f. 25. ? Vgl. Kuhlmann; Müllmerstadt (2004), S. 188 26. ? Vgl. MSDN - Aggregatfunktionen (2012) 27. ? 27,0 27,1 Vgl. Kuhlmann; Müllmerstadt (2004), S. 84 f. 28. ? 28,0 28,1 Vgl. Skulschus (2007), S. 95 29. ? Vgl. Kuhlmann; Müllmerstadt (2004), S. 131. 30. ? Vgl. MSDN - LIKE Operator (2012) 31. ? Vgl. Kuhlmann; Müllmerstadt (2004), S. 134 f. 32. ? Vgl. Geisler (2011), S. 318 10 Literatur- und Quellverzeichnis Date, Chris J.; Darwen, Hugh: SQL- der Standard: SQL/92 mit den Erweiterungen CLI und PSM, 3. Auflage, Addison-Wesley Verlag, München 1998 Matthiessen, Günter; Unterstein, Michael: Relationale Datenbanken und Matthiessen; Unterstein Standard-SQL: Konzepte der Entwicklung und Anwendung, aktualisierte Neuauflage, (2007) Addison-Wesley Verlag, München 2007 Konopasek, Klemens: SQL Server 2008 R2- Der schnelle Einstieg: Abfragen, Konopasek (2010) Transact-SQL, Entwicklung und Verwaltung, 4. Auflage, Addison-Wesley Verlag, München 2010 Geisler (2011) Geisler, Frank: Datenbanken- Grundlagen und Design, 4. Auflage, mitp Verlag, 2011 Oppel, Andy; Sheldon, Robert: SQL: A Beginner's Guide, 3. Auflage, Mcgraw-Hill Oppel; Sheldon (2008) Professional Verlag, 2008 Ebner (2002) Ebner, Michael: SQL lernen, 2. Auflage, Addison-Wesley Verlag, 2002 Weber, Sebastian; Schmeling, Holger: Datenbankentwicklung mit dem Microsoft SQL Weber; Schmeling (2007) Server 2005, 1. Auflage, Hanser Verlag, 2007 Kuhlmann, Gregor; Müllmerstadt Friedrich; Moos, Ludwig (Hrsg.): SQL - Der Kuhlmann; Müllmerstadt Schlüssel zu relationalen Datenbanken, 2. Auflage, Rowohlt Taschenbuch Verlag, (2004) Hamburg 2004 Skulschus, Marco: SQL und relationale Datenbanken, 1. Auflage, Comelio Verlag, Skulschus (2007) 2007 Date; Darwen (1998) 9.3 Fußnoten 26 Erstellung_eines_Screen_Videos_zum_Thema_?Grundlagen_von_SQL? MSDN Datenbankbezeichner (2012) MSDN Aggregatfunktionen (2012) o. V.: Microsoft Developer Network: Datenbankbezeichner, http://msdn.microsoft.com/de-de/library/ms175874.aspx (31.05.2012 18:13) (Quellbeleg) o. V.: Microsoft Developer Network: Aggregatfunktionen, http://msdn.microsoft.com/de-de/library/ms173454.aspx (31.05.2012 18:16) (Quellbeleg) o. V.: Microsoft Developer Network: LIKE Operator, MSDN - LIKE Operator http://msdn.microsoft.com/de-de/library/ms179859.aspx (31.05.2012 18:14) (2012) (Quellbeleg) 10 Literatur- und Quellverzeichnis 27