SQL-Grundbefehle: Unterschied zwischen den Versionen

Aus IV1
K (Textersetzung - „mussswiki.idv.edu“ durch „mussswiki.idb.edu“)
 
(40 dazwischenliegende Versionen von 11 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
<div class='noprint'><yambe:breadcrumb>SQL|SQL</yambe:breadcrumb></div>
{{Kurzform|Die Datenbanksprache SQL dient nicht nur der Datenmanipulation (Hinzufügen, Löschen, Verändern, Lesen), sondern auch der Datenbank-Definition (dem Einrichten der Datenbank). Nachfolgend wird ein Überblick über die wichtigsten SQL-Anweisungen und der Funktion gegeben.}}
__TOC__
== Erstellen von Tabellen ==
== Erstellen von Tabellen ==


Die angeführten Beispiele beziehen sich auf das Modell der hinterlegten Übungsdatenbank. Manipulierende SQL-Anweisungen (solche, die den Inhalt oder die Struktur der Datenbank verändern) sind in der hinterlegten Übungs-Datenbank über den eigerichteten Web-Zugang nicht ausführbar. Die Syntax der dargestellten Beispiele orientiert sich an der SQL-Implementierung der Datenbankimplementierung [http://www.mysql.com/ MySQL].
Die angeführten Beispiele beziehen sich auf das Modell der hinterlegten Übungsdatenbank. Manipulierende SQL-Anweisungen (solche, die den Inhalt oder die Struktur der Datenbank verändern) sind in der hinterlegten Übungs-Datenbank über den eingerichteten Web-Zugang nicht ausführbar. Die Syntax der dargestellten Beispiele orientiert sich an der SQL-Implementierung der Datenbankimplementierung [http://www.mysql.com/ MySQL].


Eine neue Tabelle wird mit der Anweisung '''CREATE TABLE''' einer bestehenden Datenbank hinzugefügt. Im nachfolgenden Beispiel wird die Tabelle mit der Bezeichnung "Buch" erstellt, welche die Spalten (Datenbankfelder) ''Nr'', ''Autor'', ''Titel'', ''Preis'', ''Verlag'', ''Auslaufend'' und ''Bestand'' enthält.
Eine neue Tabelle wird mit der Anweisung '''CREATE TABLE''' einer bestehenden Datenbank hinzugefügt. Im nachfolgenden Beispiel wird die Tabelle mit der Bezeichnung "Buch" erstellt, welche die Spalten (Datenbankfelder) ''Nr'', ''Autor'', ''Titel'', ''Preis'', ''Verlag'', ''Auslaufend'' und ''Bestand'' enthält.
Zeile 12: Zeile 18:
Verlag CHAR (3) NOT NULL,
Verlag CHAR (3) NOT NULL,
Auslaufend CHAR (1) NOT NULL,
Auslaufend CHAR (1) NOT NULL,
Bestand SMALLINT (4) NOT NULL)</pre>
Bestand SMALLINT (4) )</pre>


Die Angaben nach der Bezeichnung der Spalte (des Datenbankfeldes) definieren den Datentyp. So erzeugt der Ausdruck "Nr SMALLINT (2) PRIMARY KEY," ein Datenbankfeld mit der Bezeichnung "Nr", welches nur ganzzahlige Werte aufnehmen kann, die einen Speicherplatz von 4 Byte nicht überschreiten. Es handelt sich um den Wertebereich (eine Domäne) von 0 bis 65535 aufnehmen kann. Die Komponente "PRIMARY KEY" weist darauf hin, dass das Feld "Nr" als Schlüsselfeld Verwendung findet. Das Schlüsselfeld dient der eindeutigen Kennzeichnung eines Datensatzes.
Die Angaben nach der Bezeichnung der Spalte (des Datenbankfeldes) definieren den Datentyp. So erzeugt der Ausdruck "Nr SMALLINT (2) PRIMARY KEY," ein Datenbankfeld mit der Bezeichnung "Nr", welches nur ganzzahlige Werte aufnehmen kann, die einen Speicherplatz von 4 Byte nicht überschreiten. Es handelt sich um den Wertebereich (eine Domäne) von 0 bis 65535. Die Komponente "PRIMARY KEY" weist darauf hin, dass das Feld "Nr" als Primärschlüssel Verwendung findet und einen eideutigen Wert enthalten muss.


Die Komponente "NOT NULL" bedeutet, dass dem betreffenden Feld ein Wert zugewiesen werden muss (Muss-Feld). Fehlt diese Komponente, kann das Feld auch "leer" bleiben (Kann-Feld), wie dies im Datenbankfeld "Bestand" der Fall ist. Leer belassene Felder haben einen undefinierten Inhalt. Man kann z.B. nicht davon ausgehen, dass ein undefiniertes Feld mit numerischen Datenformat, den Wert "0" aufweist.
Die Komponente "NOT NULL" bedeutet, dass dem betreffenden Feld ein Wert zugewiesen werden muss (Muss-Feld). Fehlt diese Komponente, kann das Feld auch "leer" bleiben (Kann-Feld), wie dies im Datenbankfeld "Bestand" der Fall ist. Leer belassene Felder haben einen undefinierten Inhalt. Man kann z. B. nicht davon ausgehen, dass ein undefiniertes Feld mit numerischem Datenformat den Wert "0" aufweist.


Vertiefende Informationen: http://dev.mysql.com/doc/refman/5.1/de/numeric-types.html
Vertiefende Informationen: http://dev.mysql.com/doc/refman/5.1/de/numeric-types.html
Zeile 22: Zeile 28:
Gängige Datenformate sind:
Gängige Datenformate sind:


* für Zahlen (z.B. SMALLINT, FLOAT, DECIMAL)
* für Zahlen (z. B. SMALLINT, FLOAT, DECIMAL)
* für Datum und Uhrzeit (z.B. DATE, DATETIME, TIME)
* für Datum und Uhrzeit (z. B. DATE, DATETIME, TIME)
* für Zeichenketten (z.B. CHAR, VARCHAR, BLOB)
* für Zeichenketten (z. B. CHAR, VARCHAR)
* für Audio- und Videoinhalte (z.B. BLOB)


Vertiefende Informationen:  http://dev.mysql.com/doc/refman/5.1/de/data-types.html
Vertiefende Informationen:  http://dev.mysql.com/doc/refman/5.1/de/data-types.html


Moderne RDBMS und Desktop-Datenbanken bieten benutzerfreundliche Werkzeuge zur Erstellung der Tabellen an. Diese generieren die erforderliche CREATE TABLE-Anweisung aus dem vorliegenden Datenmodell automatisch.
Moderne RDBMS und Desktop-Datenbanken bieten benutzerfreundliche Werkzeuge zur Erstellung der Tabellen an. Diese generieren die erforderliche CREATE TABLE-Anweisung aus vorliegenden Datenmodellen z.B. als ER-Diagramm, automatisch.
 
==Die Domäne==
 
Unter der '''Domäne''' (Domain) eines Feldes wird der gewählte Datentyp für sowie auch die erlaubten Inhalte verstanden. Die Domäne beschreibt den erlaubten Lösungsraum eines Feldes. Durch die, der Datenbank-Anwendung entsprechenden Zuweisung von Datenformaten, wird die Domäne eines Datenbankfeldes formal beschrieben. Aufgrund der formalen Beschreibung der Domäne durch eine Formatzuweisung, wird auch verhindert, dass unzulässige Werte (z.B. Texte in Spalten, die nur Zahlen enthalten dürfen) erfasst werden.
 
Die Komponente "SMALLINT (2) würde z.B. ausreichen um die 4-stelligen, österreichischen Postleitzahlen aufzunehmen (Wertebereich von 0 bis 65535). Um zu verhindern, dass trotzdem ungültige Postleitzahlen (z.B. 4711 oder 12345) erfasst werden, wäre es aber nötig, die zulässigen Werte neben der Zuweisung des Datenformates noch taxativ aufzuzählen.  


==Hinzufügen eines Feldes==
==Hinzufügen eines Feldes==
Zeile 45: Zeile 46:
== Einfügen von Datensätzen ==
== Einfügen von Datensätzen ==


Das Eintragen von Daten funktioniert mit '''INSERT'''. Nach INTO wird wieder die Tabelle angegeben und diesesmal zusätzlich in Klammer auch die Felder, in die Daten eingefügt werden sollen. Die einzufügenden Werte stehen dann nach VALUES in der zweiten Klammer.
Das Eintragen von Daten in eine Tabelle geschieht mit der Anweisung '''INSERT INTO'''. Als Argumente der Anweisung müssen der Name der Tabelle mit Liste der Spaltenbezeichnungen (Feldnamen) angegeben werden. Die zugehörigen Werte (Feldinhalte) folgen dem Schlüsselwort VALUES. Nachfolgendes Beispiel bezieht sich auf die Übungsdatenbank Buchhandel und würde bei Ausführung den Bestand an Kunden um einen Datensatz ergänzen.


<pre>INSERT INTO Kunde (Nr, Vorname, Nachname, Strasse, Plz)
<pre>INSERT INTO Kunde (Nr, Vorname, Nachname, Strasse, Plz)
VALUES (345,'Maria', 'Huber', 'Columbusstrasse 1492', 2034)</pre>
VALUES (345,'Maria', 'Huber', 'Columbusstrasse 1492', 2034)</pre>


Sind Werte für alle Felder angegeben, so müssen die Feldbezeichnungen (in der ersten Klammer) nicht explizit angeführt werden.
Werden Werte für alle Felder in eine Tabelle übertragen, so müssen die Feldbezeichnungen nicht explizit angeführt werden, es genügt die Nennung der Tabelle.


Die manuelle Eingabe eignet sich nicht für Massendaten, weshalb DBMS (Datenbank Management Systeme) formularorientierte Anwendungen zur direkten Eingabe der Datensätze bieten. Software für betriebliche Anwendungen nutzt eingebettete Datenbankschnittstellen, um Massendaten - die z.B. aus Tabellenkalkulations-Anwendungen stammen - automatisiert zu ergänzen.
Die singuläre Datenerfassung mittels INSERT INTO eignet sich nicht für Massendaten, weshalb DBMS (Datenbank Management Systeme) formularorientierte Anwendungen zur direkten Eingabe der Datensätze anbieten. Software für betriebliche Anwendungen nutzen überdies Datenbankschnittstellen, die den automatisierten Import von Daten, die z. B. aus Tabellenkalkulations-Anwendungen stammen, zulassen.


== Löschen von Datensätzen ==
== Löschen von Datensätzen ==


Wie auch bei der SELECT-Anweisung (siehe [[SQL-Abfragen]]) wird bei '''DELETE''' die Bedingung WHERE zur Auswahl des zu löschenden Datensatzes bestimmt. Normalerweise erfolgt dies durch die Angabe des Schlüsselfeldes des betreffenden Datensatzes. Nachfolgende Anweisung löscht den Datensatz mir der Nr "4", wobei angenommen wird, dass das Feld "Nr" als Schlüsselfeld dient.
Wie auch bei der SELECT-Anweisung (siehe [[SQL-Abfragen]]) wird bei '''DELETE''' die Bedingung WHERE zur Auswahl des zu löschenden Datensatzes bestimmt. Normalerweise erfolgt dies durch die Angabe des Schlüsselfeldes des betreffenden Datensatzes. Nachfolgende Anweisung löscht den Datensatz mit der Nr "4", wobei angenommen wird, dass das Feld "Nr" als Schlüsselfeld dient.


<pre>DELETE FROM Kunde
<pre>DELETE FROM Kunde
WHERE Nr=4</pre>
WHERE Nr=4</pre>


Ergibt die Bedingung eine Übereinstimmung in mehreren Datensätzen, so werden alle selektierten gelöscht. Nachfolgende Anweisung löscht alle Datensätze mit dem Vornamen "Michael":
Ergibt die Bedingung eine Übereinstimmung in mehreren Datensätzen, so werden alle selektierten gelöscht. Nachfolgende Anweisung löscht alle Datensätze mit dem Vornamen "Michael".


<pre>DELETE FROM Kunde
<pre>DELETE FROM Kunde
Zeile 68: Zeile 69:
== Ändern von Datensätzen ==
== Ändern von Datensätzen ==


Um Daten in einem Datensatz zu erneuern ist es nicht zwangsweise notwendig, diesen zuerst zu löschen und dann neu anzulegen. Hierfür bietet SQL die Möglichkeit, dies mit '''UPDATE''' zu tun. Auch hier wird die Bedingung WHERE benötigt, um den passenden Datensatz zu finden. Mit SET wird dann die Änderung der Inhalte der Datenbankfelder vorgenommen. Nachfolgend dargestellte Anweisung ändert im Datensatz mit der Nr "4" den Nachnamen auf "Mayer".
Nachfolgend dargestellte Anweisung ändert im Kunden-Datensatz mit der Nr "4" den bestehenden Nachnamen auf "Mayer".


<pre>UPDATE Kunde
<pre>UPDATE Kunde
SET Nachname='Mayer'
SET Nachname='Mayer'
WHERE Nr=4</pre>)
WHERE Nr=4</pre>


Es können auch mehrere Datensätze gleichzeitig mit der UPDATE Anweisung geändert werden. Nachfolgende Anweisung ändert in jedem Datensatz, welcher den Nachnamen "Mayer" vorweist, selbigen auf "Neumayer".
Es können auch mehrere Datensätze gleichzeitig mit der UPDATE-Anweisung geändert werden. Nachfolgende Anweisung ändert in jedem Datensatz, welcher den Nachnamen "Mayer" vorweist, selbigen auf "Neumayer".


<pre>UPDATE Kunde
<pre>UPDATE Kunde
Zeile 80: Zeile 81:
WHERE Nachname='Mayer'</pre>
WHERE Nachname='Mayer'</pre>


Nicht nur eine Spalte lässt sich in mehreren Datensätzen auf einmal ändern, sondern auch mehrere Felder in einem Datensatz. Nachfolgende Anweisung ändert im Datensatz mit der ID "1" die PLZ auf "4055" und die Straße auf "Pinselweg 12".
Nicht nur eine Spalte lässt sich in mehreren Datensätzen auf einmal ändern, sondern auch mehrere Felder in einem Datensatz. Nachfolgende Anweisung ändert im Datensatz mit der Nr "56" die PLZ auf "4055" und die Straße auf "Pinselweg 12".


<pre>UPDATE Kunde
<pre>UPDATE Kunde
SET Plz=4055, Strasse='Pinselweg 12'
SET Plz=4055, Strasse='Pinselweg 12'
WHERE ID=1</pre>
WHERE Nr='56'</pre>


== Sonstige Anweisungen und Datenbank-Werkzeuge ==
== Sonstige Anweisungen und Datenbank-Werkzeuge ==
Zeile 90: Zeile 91:
Die Anweisungen INSERT, DELETE und UPDATE gehören zu den wichtigsten und gehören zur Gruppe der '''Data Manipulation Language''' ('''DML'''). Daneben gibt es noch eine Vielzahl Aufgaben, Datenbanken einzurichten oder zu pflegen, die mit entsprechenden Funktionen oder Programmen unterstützt werden:
Die Anweisungen INSERT, DELETE und UPDATE gehören zu den wichtigsten und gehören zur Gruppe der '''Data Manipulation Language''' ('''DML'''). Daneben gibt es noch eine Vielzahl Aufgaben, Datenbanken einzurichten oder zu pflegen, die mit entsprechenden Funktionen oder Programmen unterstützt werden:


*Datenbankinstallation [http://dev.mysql.com/doc/refman/5.1/de/installing.html Vertiefende Quelle]
== Literatur ==
*Datenbankoptimierung [http://dev.mysql.com/doc/refman/5.1/de/optimization.html Vertiefende Quelle]
 
*Datenbankverwaltung [http://dev.mysql.com/doc/refman/5.1/de/optimization.html Vertiefende Quelle]
 
=== Weiterführende Links ===
 
* [http://dev.mysql.com/doc/ MySQL.com - MySQL Documentation]
* [http://dev.mysql.com/doc/refman/5.1/de/installing.html MySQL.com - Installation von MySQL]
* [http://dev.mysql.com/doc/refman/5.1/de/optimization.html MySQL.com - Optimierung]
 
== Zitiervorschlag ==
''Mittendorfer'' in ''Höller'', Informationsverarbeitung I, SQL-Grundbefehle (mussswiki.idb.edu/iv1)

Aktuelle Version vom 1. Oktober 2018, 15:09 Uhr

<yambe:breadcrumb>SQL|SQL</yambe:breadcrumb>
Die Datenbanksprache SQL dient nicht nur der Datenmanipulation (Hinzufügen, Löschen, Verändern, Lesen), sondern auch der Datenbank-Definition (dem Einrichten der Datenbank). Nachfolgend wird ein Überblick über die wichtigsten SQL-Anweisungen und der Funktion gegeben.


Erstellen von Tabellen

Die angeführten Beispiele beziehen sich auf das Modell der hinterlegten Übungsdatenbank. Manipulierende SQL-Anweisungen (solche, die den Inhalt oder die Struktur der Datenbank verändern) sind in der hinterlegten Übungs-Datenbank über den eingerichteten Web-Zugang nicht ausführbar. Die Syntax der dargestellten Beispiele orientiert sich an der SQL-Implementierung der Datenbankimplementierung MySQL.

Eine neue Tabelle wird mit der Anweisung CREATE TABLE einer bestehenden Datenbank hinzugefügt. Im nachfolgenden Beispiel wird die Tabelle mit der Bezeichnung "Buch" erstellt, welche die Spalten (Datenbankfelder) Nr, Autor, Titel, Preis, Verlag, Auslaufend und Bestand enthält.

CREATE TABLE Buch
(Nr SMALLINT (2) PRIMARY KEY,
Autor VARCHAR (20) NOT NULL,
Titel VARCHAR (30) NOT NULL,
Preis DECIMAL (3.2) NOT NULL,
Verlag CHAR (3) NOT NULL,
Auslaufend CHAR (1) NOT NULL,
Bestand SMALLINT (4) )

Die Angaben nach der Bezeichnung der Spalte (des Datenbankfeldes) definieren den Datentyp. So erzeugt der Ausdruck "Nr SMALLINT (2) PRIMARY KEY," ein Datenbankfeld mit der Bezeichnung "Nr", welches nur ganzzahlige Werte aufnehmen kann, die einen Speicherplatz von 4 Byte nicht überschreiten. Es handelt sich um den Wertebereich (eine Domäne) von 0 bis 65535. Die Komponente "PRIMARY KEY" weist darauf hin, dass das Feld "Nr" als Primärschlüssel Verwendung findet und einen eideutigen Wert enthalten muss.

Die Komponente "NOT NULL" bedeutet, dass dem betreffenden Feld ein Wert zugewiesen werden muss (Muss-Feld). Fehlt diese Komponente, kann das Feld auch "leer" bleiben (Kann-Feld), wie dies im Datenbankfeld "Bestand" der Fall ist. Leer belassene Felder haben einen undefinierten Inhalt. Man kann z. B. nicht davon ausgehen, dass ein undefiniertes Feld mit numerischem Datenformat den Wert "0" aufweist.

Vertiefende Informationen: http://dev.mysql.com/doc/refman/5.1/de/numeric-types.html

Gängige Datenformate sind:

  • für Zahlen (z. B. SMALLINT, FLOAT, DECIMAL)
  • für Datum und Uhrzeit (z. B. DATE, DATETIME, TIME)
  • für Zeichenketten (z. B. CHAR, VARCHAR)
  • für Audio- und Videoinhalte (z.B. BLOB)

Vertiefende Informationen: http://dev.mysql.com/doc/refman/5.1/de/data-types.html

Moderne RDBMS und Desktop-Datenbanken bieten benutzerfreundliche Werkzeuge zur Erstellung der Tabellen an. Diese generieren die erforderliche CREATE TABLE-Anweisung aus vorliegenden Datenmodellen z.B. als ER-Diagramm, automatisch.

Hinzufügen eines Feldes

Das nachträgliche Hinzufügen einer Spalte wird mit der Anweisung ALTER TABLE bewirkt. Nachfolgende Anweisung fügt der Tabelle Buch die Spalte (das Datenbankfeld) Rabatt hinzu.

ALTER TABLE Buch
ADD Rabatt INT (2) NOT NULL


Einfügen von Datensätzen

Das Eintragen von Daten in eine Tabelle geschieht mit der Anweisung INSERT INTO. Als Argumente der Anweisung müssen der Name der Tabelle mit Liste der Spaltenbezeichnungen (Feldnamen) angegeben werden. Die zugehörigen Werte (Feldinhalte) folgen dem Schlüsselwort VALUES. Nachfolgendes Beispiel bezieht sich auf die Übungsdatenbank Buchhandel und würde bei Ausführung den Bestand an Kunden um einen Datensatz ergänzen.

INSERT INTO Kunde (Nr, Vorname, Nachname, Strasse, Plz)
VALUES (345,'Maria', 'Huber', 'Columbusstrasse 1492', 2034)

Werden Werte für alle Felder in eine Tabelle übertragen, so müssen die Feldbezeichnungen nicht explizit angeführt werden, es genügt die Nennung der Tabelle.

Die singuläre Datenerfassung mittels INSERT INTO eignet sich nicht für Massendaten, weshalb DBMS (Datenbank Management Systeme) formularorientierte Anwendungen zur direkten Eingabe der Datensätze anbieten. Software für betriebliche Anwendungen nutzen überdies Datenbankschnittstellen, die den automatisierten Import von Daten, die z. B. aus Tabellenkalkulations-Anwendungen stammen, zulassen.

Löschen von Datensätzen

Wie auch bei der SELECT-Anweisung (siehe SQL-Abfragen) wird bei DELETE die Bedingung WHERE zur Auswahl des zu löschenden Datensatzes bestimmt. Normalerweise erfolgt dies durch die Angabe des Schlüsselfeldes des betreffenden Datensatzes. Nachfolgende Anweisung löscht den Datensatz mit der Nr "4", wobei angenommen wird, dass das Feld "Nr" als Schlüsselfeld dient.

DELETE FROM Kunde
WHERE Nr=4

Ergibt die Bedingung eine Übereinstimmung in mehreren Datensätzen, so werden alle selektierten gelöscht. Nachfolgende Anweisung löscht alle Datensätze mit dem Vornamen "Michael".

DELETE FROM Kunde
WHERE Vorname='Michael'

Ändern von Datensätzen

Nachfolgend dargestellte Anweisung ändert im Kunden-Datensatz mit der Nr "4" den bestehenden Nachnamen auf "Mayer".

UPDATE Kunde
SET Nachname='Mayer'
WHERE Nr=4

Es können auch mehrere Datensätze gleichzeitig mit der UPDATE-Anweisung geändert werden. Nachfolgende Anweisung ändert in jedem Datensatz, welcher den Nachnamen "Mayer" vorweist, selbigen auf "Neumayer".

UPDATE Kunde
SET Nachname='Neumayer'
WHERE Nachname='Mayer'

Nicht nur eine Spalte lässt sich in mehreren Datensätzen auf einmal ändern, sondern auch mehrere Felder in einem Datensatz. Nachfolgende Anweisung ändert im Datensatz mit der Nr "56" die PLZ auf "4055" und die Straße auf "Pinselweg 12".

UPDATE Kunde
SET Plz=4055, Strasse='Pinselweg 12'
WHERE Nr='56'

Sonstige Anweisungen und Datenbank-Werkzeuge

Die Anweisungen INSERT, DELETE und UPDATE gehören zu den wichtigsten und gehören zur Gruppe der Data Manipulation Language (DML). Daneben gibt es noch eine Vielzahl Aufgaben, Datenbanken einzurichten oder zu pflegen, die mit entsprechenden Funktionen oder Programmen unterstützt werden:

Literatur

Weiterführende Links

Zitiervorschlag

Mittendorfer in Höller, Informationsverarbeitung I, SQL-Grundbefehle (mussswiki.idb.edu/iv1)