Galileo Computing < openbook >
Galileo Computing - Professionelle Buecher. Auch fuer Einsteiger.
Galileo Computing - Professionelle Buecher. Auch fuer Einsteiger.


Kompendium der Informationstechnik
 von Sascha Kersken
EDV-Grundlagen, Programmierung, Mediengestaltung
Buch: Kompendium der Informationstechnik
gp Kapitel 7 Datenbanken
  gp 7.1 Übersicht über Datenbanktypen
    gp 7.1.1 Einzeltabellendatenbanken
    gp 7.1.2 Relationale Datenbanken
    gp 7.1.3 Objektorientierte Datenbanken
  gp 7.2 MySQL – ein konkretes DBMS
    gp 7.2.1 MySQL installieren und konfigurieren
    gp 7.2.2 Erste Schritte mit MySQL
  gp 7.3 SQL-Abfragen
    gp 7.3.1 Datenbanken und Tabellen erzeugen
    gp 7.3.2 Auswahlabfragen
    gp 7.3.3 Einfüge-, Lösch- und Änderungsabfragen
  gp 7.4 Grundlagen der Datenbankprogrammierung
  gp 7.5 Zusammenfassung

gp

Prüfungsfragen zu diesem Kapitel (extern)


Galileo Computing

7.3 SQL-Abfragen  downtop

In diesem Abschnitt werden einige Einzelheiten der Datenbankabfrage SQL näher erläutert. So gut wie alle relationalen Datenbanksysteme verstehen irgendeine Version dieser Sprache. Die hier vorgestellten SQL-Funktionen und -Merkmale funktionieren allesamt unter MySQL und sind konform zum SQL99-Standard. Bitte beachten Sie jedoch, dass SQL99 einige weitere Fähigkeiten besitzt, die von MySQL bisher noch nicht unterstützt werden. Alle Beispiele im vorliegenden Abschnitt sollten sich allerdings auch unter RDBMS wie PostgreSQL, Microsoft SQL Server oder Oracle ausführen lassen.

Abfragearten

Die Bezeichnung »Abfrage« (Query) ist ein wenig irreführend, weil Sie mit Hilfe von Abfragen nicht nur die Inhalte von Datenbanktabellen lesen, sondern auch ändern können. SQL unterstützt im Wesentlichen vier verschiedene Arten von Datenbankabfragen:

gp  Auswahlabfragen (Select Queries) liefern ausgesuchte Felder einer oder mehrerer Tabellen zurück; optional können Kriterien angegeben werden, nach denen die Datensätze gefiltert werden sollen.
gp  Einfügeabfragen (Insert Queries) fügen neue Datensätze in eine Tabelle ein.
gp  Änderungsabfragen (Update Queries) ändern die Werte bestimmter Felder nach bestimmten Regeln und Kriterien.
gp  Löschabfragen (Delete Queries) entfernen Datensätze, die bestimmte Bedingungen erfüllen.

Neben diesen grundlegenden Abfragetypen, die bereits bestehende Tabellen betreffen, bietet SQL Befehle zum Anlegen und Entfernen von Datenbanken und von Tabellen innerhalb dieser Datenbanken.

SQL unterscheidet nicht zwischen Groß- und Kleinschreibung. Außerdem ist es egal, in wie viele Zeilen Sie eine Abfrage unterteilen.


Galileo Computing

7.3.1 Datenbanken und Tabellen erzeugen  downtop

Um über SQL eine ganz neue Datenbank anzulegen, wird der Befehl CREATE DATABASE verwendet. Beispielsweise erzeugt die folgende Abfrage eine neue Datenbank namens SUPERMARKT, die anschließend die bereits besprochenen Tabellen ADRESSEN, ARTIKEL und KAEUFER enthalten soll:

CREATE DATABASE SUPERMARKT

Wenn Sie MySQL CC verwenden, müssen Sie nach dem manuellen Erstellen der Datenbank den Button Refresh betätigen, um die neue Datenbank in der Auswahl zu sehen. Wählen Sie den verschachtelten Unterpunkt Tables unterhalb von SUPERMARKT aus, bevor Sie im nächsten Schritt die drei Tabellen erstellen.

Tabellen erzeugen

Eine Tabelle wird per SQL über die Funktion CREATE TABLE angelegt. In Klammern werden – durch Komma getrennt – die einzelnen Feldnamen, ihre Datentypen und Optionen aufgelistet. Indizes, mit Ausnahme des Primärschlüssels, werden nicht beim Erstellen des jeweiligen Felds, sondern separat über das Schlüsselwort INDEX angelegt.

Die SQL-Abfrage, mit deren Hilfe die Tabelle ADRESSEN eingerichtet wird, sieht folgendermaßen aus:

CREATE TABLE ADRESSEN (
   NR INT AUTO_INCREMENT PRIMARY KEY,
   NAME CHAR(50) NOT NULL,
   STRASSE CHAR(50) NOT NULL, 
   HAUSNR CHAR(10) NOT NULL, 
   PLZ CHAR(5) NOT NULL, 
   ORT CHAR(40) NOT NULL,
   INDEX (NAME),
   INDEX (ORT)
);

Das Semikolon hinter der letzten Klammer ist optional, solange nicht unmittelbar eine weitere Abfrage folgt.

Die Tabelle ARTIKEL wird mit Hilfe der folgenden Abfrage erstellt:

CREATE TABLE ARTIKEL (
   ARTNR INT AUTO_INCREMENT PRIMARY KEY,
   ARTNAME CHAR (30),
   PREIS INT,
   MWST ENUM ('7', '16'),
   INDEX (ARTNAME)
);

Schließlich wird noch die Tabelle KAEUFE benötigt, die durch die folgende Abfrage erstellt werden kann:

CREATE TABLE KAEUFE (
   KAUFNR INT AUTO_INCREMET PRIMARY KEY,
   NR INT,
   ARTNR INT,
   STUECK INT,
   DATUM DATE
);

Wenn Sie eine Tabelle wieder löschen möchten, wird die Funktion DROP TABLE verwendet. Die folgende SQL-Anweisung löscht beispielsweise die Tabelle UNWICHTIG:

DROP TABLE UNWICHTIG;

Analog dazu können Sie mittels DROP DATABASE eine ganze Datenbank löschen.

Felddatentypen und -optionen

Für jede Tabellenspalte, die Sie über eine CREATE TABLE-Abfrage einrichten, müssen Sie die folgenden Informationen angeben:

gp  Einen selbst gewählten Feldnamen. Dieser Name darf Buchstaben, Ziffern und Unterstriche enthalten, aber nicht mit einer Ziffer beginnen. Es wird nicht zwischen Groß- und Kleinschreibung unterschieden.
gp  Einen Felddatentyp. Die diversen möglichen Datentypen werden weiter unten aufgezählt.
gp  Weitere Optionen. Hier können Sie besondere Eigenschaften der Spalte angeben, beispielsweise PRIMARY KEY (Primärschlüssel), AUTO_INCREMENT (automatisches Durchnummerieren) oder NOT NULL (das Feld muss einen Wert besitzen).

SQL-Datentypen

Die verschiedenen in SQL definierten Datentypen sind folgende:

gp  Ganzzahlen verschiedener Wortbreite
    Je nach Bedarf können Sie sich einen der folgenden ganzzahligen Datentypen aussuchen. Die tatsächliche Wortbreite ist allerdings implementierungsabhängig. Die Angaben gelten für MySQL und können je nach konkretem Datenbanksystem abweichen:
       
TINYINT (8 Bit) SMALLINT (16 Bit) MEDIUMINT (24 Bit) INT (32 Bit) BIGINT (64 Bit)
gp  Fließkommazahlen verschiedener Genauigkeit
    SQL bietet zwei verschieden genaue Datentypen für Fließkommawerte an. In MySQL gelten die folgenden Wortbreiten:
       
FLOAT (4 Byte) DOUBLE (8 Byte)
    Ein zulässiges Synonym für DOUBLE ist übrigens REAL.
       
gp  Der Datentyp DECIMAL definiert eine Festkommazahl. Die Anzahl der Stellen vor dem Komma und der Nachkommastellen werden durch Komma getrennt in Klammern geschrieben. Beispielsweise wäre DECIMAL (4,2) für Währungsbeträge in Supermärkten geeignet.
    Festkommazahlen können eine beliebige Stellenzahl besitzen und werden intern als Strings gespeichert. Sie sollten sie nur in Ausnahmefällen verwenden, da ihre Rechenperformance sehr langsam ist.
       
gp  Datums- und Uhrzeitwerte
    SQL bietet verschiedene Datentypen für die Angabe von Kalenderdaten und Uhrzeiten:
       
DATE ist ein Datum im Format 2003-04-17. Der zulässige Bereich ist 1000-01-01 bis 9999-12-31. TIME enthält eine Uhrzeitangabe im Format 18:59:37. DATETIME kombiniert eine Datums- und eine Uhrzeitangabe. YEAR enthält eine Jahreszahl zwischen 1900 und 2155. TIMESTAMP ist ein spezielles Feld, das beim Erstellen oder Ändern des zugehörigen Datensatzes automatisch ausgefüllt wird. Das Format schreibt Jahr, Monat, Tag, Stunden, Minuten und Sekunden einfach ohne Trennzeichen hintereinander. Beispielsweise ist 20030418203918 der 18. April 2003, 20:39:18 Uhr.
gp  Textdatentypen
    Für Textinformationen existieren verschiedene Datentypen, die hier aufgelistet werden:
       
CHAR(n) ist eine Zeichenkette mit einer festen Länge von n Zeichen. Der angegebene Wert darf höchstens 255 sein. »Feste Länge« bedeutet, dass auf jeden Fall die angegebene Anzahl von Zeichen gespeichert wird, selbst wenn der eigentliche Text kürzer sein sollte. VARCHAR(n) gibt eine Zeichenkette variabler Länge mit bis zu n (maximal 255) Zeichen an. Ein VARCHAR-Feld belegt nur so viel Speicher, wie es tatsächlich Zeichen enthält. Dafür werden VARCHAR-Felder langsamer gefunden als CHAR-Felder. TINYTEXT ist ein Synonym für VARCHAR (255). TEXT gibt Text variabler Länge mit bis zu 65.535 Zeichen an. MEDIUMTEXT darf maximal über 16,7 Millionen Zeichen enthalten. LONGTEXT darf sogar über 4 Milliarden Zeichen enthalten.
gp  Binärdaten
    Zum sicheren Abspeichern von Binärdaten wie Bildern, Audiodaten und sonstigen proprietären Datenformaten wird von SQL das BLOB-Format (Binary Large OBject) angeboten. Es gibt folgende Ausprägungen von BLOBs unterschiedlicher Größe:
       
TINYBLOB (bis zu 255 Byte) BLOB (bis zu 65.535 Byte) MEDIUMBLOB (über 16,7 Millionen Byte) LONGBLOB (über 4 Milliarden Byte)
gp  Aufzählungstypen
    Mitunter ist es effektiver, eine Liste vorgefertigter Werte anzugeben als ein frei ausfüllbares Textfeld einzurichten. SQL definiert zu diesem Zweck die beiden folgenden Aufzählungstypen:
       
ENUM ist eine Aufzählung von maximal 65.535 verschiedenen Zeichenketten. SET enthält dagegen eine Aufzählung von maximal 255 verschiedenen Zeichenketten.
    Beide Arten von Listen werden hinter dem Datentyp in Klammern und durch Komma getrennt angegeben. Das folgende Beispiel zeigt, wie es funktioniert:
       
STEUERKLASSE SET ('I', 'II', 'III', 'IV', 'V', 'VI')

Feldoptionen

Hinter der Angabe des Datentyps können die folgenden Optionen für Felder angegeben werden:

gp  BINARY ist eine Option, die Textdatentypen in Binärtypen umwandelt, in denen das Abspeichern binärer Daten unabhängig von Zeichensätzen und Zeilenumbruchlogik sicher möglich ist.
gp  UNSIGNED sorgt dafür, dass der Wertebereich eines ganzzahligen Typs ohne Vorzeichen betrachtet wird. Beispielsweise besitzt ein TINYINT dadurch nicht mehr den Wertebereich -128 bis +127, sondern 0 bis 255.
gp  ZEROFILL füllt alle Felder, die sonst keinen Wert haben, mit 0 auf.
gp  NULL oder NOT NULL legen fest, ob ein Feld leer sein darf (NULL) oder nicht (NOT NULL). Der Standard ist NULL.
gp  DEFAULT gibt einen Standardwert für jedes Feld einer Spalte vor, das keinen sonstigen Wert besitzt.
gp  AUTO_INCREMENT richtet eine Spalte so ein, dass Werte dieser Spalte bei der Erzeugung neuer Zeilen automatisch fortlaufende Werte erhalten. Dies ist beispielsweise für Primärschlüssel gut geeignet.
gp  PRIMARY KEY richtet ein Feld als Primärschlüssel ein, und zwar nur genau eines pro Tabelle.

Wie bereits erwähnt, werden Indizes außer dem Primärschlüssel erst nach dem Erstellen der Spalten selbst eingerichtet. Neben dem Schlüsselwort INDEX, das einen einfachen Index einleitet, werden die alternativen Angaben UNIQUE (ein bestimmter Feldwert nur einmal in der Tabelle vorkommen) und FULLTEXT für die Volltextsuche unterstützt.


Galileo Computing

7.3.2 Auswahlabfragen  downtop

Um Daten aus einer Datenbank zu lesen, wird die SQL-Anweisung SELECT verwendet. Schematisch sieht ein solcher Aufruf folgendermaßen aus:

SELECT FELD1, FELD2, ... FROM TABELLE1, TABELLE2, ...
WHERE KRITERIUM

Diese Abfrage wählt die Felder FELD1, FELD2 und so weiter derjenigen Datensätze aus den Tabellen TABELLE1, TABELLE2 und folgenden aus, auf die die KRITERIEN zutreffen.

Statt der einzelnen Felder können Sie auch * schreiben, um alle Felder einer Tabelle auszuwählen. Die folgende Abfrage zeigt beispielsweise die gesamte Tabelle ADRESSEN an:

SELECT * FROM ADRESSEN;

Einzelne Felder auswählen

Benötigen Sie dagegen nur die Namen und die Postleitzahlen der Kunden, dann wird die folgende Schreibweise verwendet:

SELECT NAME, PLZ FROM ADRESSEN;

Wenn Sie Werte aus mehreren Tabellen auswählen (bevorzugt über die Verknüpfung durch die weiter unten erläuterten Joins), müssen Sie denjenigen Spaltenbezeichnungen den Tabellennamen voranstellen, die in mehreren Tabellen identisch vorkommen. Beispielsweise müssten Sie ADRESSEN.NR und KAEUFE.NR schreiben, wenn beide in derselben Abfrage vorkämen.

Häufiger werden Auswahlabfragen verwendet, bei denen über die WHERE-Klausel Bedingungen angegeben werden. Die Bedingungen vergleichen in der Regel die Werte einzelner Felder mit bestimmten Ausdrücken oder miteinander. Beispielsweise liefert die folgende Abfrage den Namen, die Postleitzahl und den Ort aller Kunden aus der Tabelle ADRESSEN, die in Köln wohnen:

SELECT NAME, PLZ, ORT FROM ADRESSEN WHERE ORT="Köln";

Die folgende Abfrage wählt dagegen die vollständigen Daten aller Kunden mit Postleitzahlen aus, die mit einer 5 beginnen:

SELECT * FROM adressen WHERE PLZ LIKE "5%"

Mustervergleiche

Die LIKE-Klausel vergleicht den Wert eines Felds mit einem einfachen Muster, in dem ein % für beliebig viele Zeichen und ein _ für genau ein Zeichen steht. Hier sehen Sie einige Beispiele für solche Muster:

gp  NAME LIKE "a%" liefert alle Personen, deren Name mit A anfängt.
gp  NAME LIKE "%b%" gibt alle Personen zurück, in deren Namen mindestens ein B vorkommt.
gp  STRASSE LIKE "%weg" liefert alle Straßenangaben, die auf »-weg« enden.
gp  NAME LIKE "Me_er" steht für alle Kunden, die Meier oder Meyer heißen.
gp  NAME LIKE "M%r" gibt alle Leute zurück, die Maier, Mayer, Meier, Meyer oder Mayr heißen; natürlich werden auch Müller, Mecker, Monster und so weiter gefunden.

Für einfache Wertüberprüfungen, die keinen Mustervergleich verwenden, können Sie die Operatoren =, <, >, <=, >=, und <> (ungleich) benutzen. Mehrere Überprüfungen können Sie mit AND oder OR verknüpfen.

Übrigens können Sie sowohl bei der SELECT-Anweisung selbst als auch bei der WHERE-Klausel beliebige Berechnungen ausführen. Bei WHERE müssen Sie allerdings darauf achten, dass das Endergebnis ein boolescher Wahrheitswert sein muss. Beispielsweise ist die Klausel WHERE PREIS * 2 unvollständig und damit verboten; WHERE PREIS * 2 < 10 ist dagegen zulässig und gibt alle Felder zurück, deren doppelter Preis kleiner als 10 ist.

Berechnete Spalten

Wenn Sie in der SELECT-Anweisung keine einzelnen Felder auswählen, sondern Berechnungen anstellen, können Sie der Ergebnisspalte über die AS-Klausel einen Namen zuweisen. Beispielsweise könnten Sie folgendermaßen die Nettopreise aller Waren in der Tabelle ARTIKEL ermitteln:

SELECT ARTNAME, PREIS / (100 + MWST) * 100 AS NETTO
FROM ARTIKEL

Der entsprechende Mehrwertsteuersatz wird also zu 100 addiert; das Teilen des Preises durch diesen Gesamtwert und die Multiplikation mit 100 ergibt natürlich den Nettopreis. Die Spalte in der Ergebnistabelle der Abfrage wird als NETTO bezeichnet, was erheblich lesefreundlicher ist als PREIS / (100 + MWST) * 100.

SQL-Funktionen

Neben den einfachen arithmetischen Berechnungen bietet SQL auch eine Reihe von Funktionen an. Da diese die Anzahl der zurückgegebenen Datensätze verkleinern können, weil sie mehrere zusammenfassen, werden sie als Aggregatfunktionen bezeichnet. Die wichtigsten sind:

gp  SUM gibt die Summe der Werte in der Spalte zurück, auf die SUM angewendet wird. Wenn Sie weitere Spalten in das SELECT aufnehmen, erhalten Sie so viele Einzelergebnisse, wie es unterschiedliche Wertepaare in diesen Spalten gibt. Beispielsweise ergibt die folgende Abfrage die Summe aller Artikelpreise in der Tabelle ARTIKEL:
SELECT SUM(PREIS) AS SUMME FROM ARTIKEL
    Diese Abfrage liefert dagegen die Summen der beiden Artikelgruppen mit unterschiedlicher Mehrwertsteuer getrennt:
       
SELECT SUM(PREIS) AS SUMME, MWST FROM ARTIKEL
    Sinnvollere Beispiele erfordern die Kombination mehrerer Tabellen, Sie finden sie im folgenden Unterabschnitt, Joins.
       
gp  MIN gibt den kleinsten Wert eines Felds innerhalb einer Gruppe zurück.
gp  MAX liefert entsprechend das Feld mit dem höchsten Wert.
gp  COUNT schließlich gibt die Anzahl der Felder einer Spalte oder Gruppe zurück. Beispielsweise gibt die folgende Abfrage die Anzahl aller Kunden zurück:
SELECT COUNT(NR) AS KUNDENZAHL FROM ADRESSEN
    Wenn Sie die Anzahlen der Artikel mit den beiden unterschiedlichen Mehrwertsteuersätzen getrennt voneinander erhalten möchten, funktioniert dies folgendermaßen:
       
SELECT COUNT(ARTNR) AS ANZAHL, MWST FROM ARTIKEL

Ergebnisse sortieren

Wichtig ist noch, wie Sie die Ergebnisdatensätze in einer Auswahlabfrage sortieren können. Dies funktioniert mit Hilfe der ORDER BY-Klausel. Anzugeben ist dabei die Spalte, nach deren Werten sortiert werden soll, sowie ASC (ascending) für aufsteigende Reihenfolge und DESC für absteigende Reihenfolge. Das folgende Beispiel zeigt, wie Sie die Kunden nach ihren Namen alphabetisch sortieren können:

SELECT * FROM ADRESSEN
ORDER BY NAME ASC

Joins

Zu guter Letzt ist es wichtig, das Konzept der Joins zu verstehen, um überhaupt Verknüpfungen zwischen mehreren Tabellen durchführen zu können. Der Beziehungstyp, der bei einer 1:n-Relation zwischen dem Primärschlüssel der einen und einem Fremdschlüssel in der anderen Tabelle besteht, wird als Inner Join bezeichnet.

Um beispielsweise die Namen aller Kunden auszugeben, die überhaupt etwas gekauft haben, wird folgende Syntax verwendet:

SELECT NAME FROM ADRESSEN
INNER JOIN ADRESSEN.NR ON KAEUFE.NR

Joins durch WHERE

Dies gibt eine Liste der Kundennamen in der Reihenfolge aus, in der die Kunden in der Tabelle KAEUFE über das Feld NR referenziert werden. Eine alternative Schreibweise, die auch zu älteren und seltener verwendeten Datenbanksystemen kompatibel ist, verwendet eine WHERE-Klausel statt der INNER JOIN-Angabe. Die obige Abfrage lässt sich auch folgendermaßen formulieren:

SELECT NAME FROM ADRESSEN
WHERE ADRESSEN.NR = KAEUFE.NR

Auf dieselbe Art und Weise erhalten Sie auch den Gesamtpreis jedes einzelnen Kaufs:

SELECT PREIS * STUECK FROM ARTIKEL, KAEUFE
WHERE ARTIKEL.ARTNR = KAEUFE.ARTNR

Auch Aggregatfunktionen lassen sich mit Joins kombinieren. Das folgende Beispiel gibt den Gesamtumsatz jedes einzelnen Tages aus:

SELECT SUM(PREIS * STUECK) AS TAGESUMSATZ, DATUM FROM ARTIKEL, KAEUFE
WHERE ARTIKEL.ARTNR = KAEUFE.ARTNR

Nun sind Sie auch in der Lage, das umfangreiche Beispiel aus dem MySQL-Abschnitt zu verstehen:

SELECT KAUFNR, NAME, ARTNAME, STUECK, STUECK * PREIS AS GESAMTPREIS 
FROM ADRESSEN, ARTIKEL, KAEUFE 
WHERE ADRESSEN.NR = KAEUFE.NR AND ARTIKEL.ARTNR = KAEUFE.ARTNR

Das Ergebnis dieser Abfrage können Sie sich weiter oben in Tabelle 7.5 ansehen.


Galileo Computing

7.3.3 Einfüge-, Lösch- und Änderungsabfragen  toptop

Einfügeabfragen

Mit Hilfe von INSERT werden Daten in eine Datenbanktabelle eingefügt. Die Syntax lautet folgendermaßen:

INSERT INTO TABELLE (SPALTE1, SPALTE2, ...) VALUES (WERT1, WERT2, ...)

Beachten Sie, dass Sie mindestens alle Spalten nennen müssen, die die Bedingung NOT NULL aufweisen. Die folgende Anweisung fügt beispielsweise einen neuen Artikel hinzu:

INSERT INTO ARTIKEL (ARTNAME, PREIS, MWST)
VALUES ("Gurke", 39, "7")

Falls alle Spalten der Tabelle einen Wert erhalten sollen, funktioniert auch die folgende Kurzfassung:

INSERT INTO TABELLE VALUES (WERT1, WERT2, ...)

Löschabfragen

Um Datensätze aus einer Tabelle zu löschen, wird die Anweisung DELETE verwendet. Welche Datensätze Sie entfernen möchten, können Sie wie bei einer Auswahlabfrage über eine WHERE-Klausel angeben:

DELETE FROM TABELLE
WHERE KRITERIUM

Wenn Sie beispielsweise alle Kunden aus der Tabelle ADRESSEN löschen möchten, die nicht im PLZ-Gebiet 5 wohnen, funktioniert dies folgendermaßen:

DELETE FROM ADRESSEN
WHERE PLZ NOT LIKE "5%"

Änderungsabfragen

Wenn Sie die Werte von Feldern ändern möchten, geschieht dies durch die Anweisung UPDATE. Wichtig ist auch hier die WHERE-Klausel, damit Sie dem gewünschten Feld nicht einfach in allen Datensätzen einen neuen Wert zuweisen. Angenommen, der Kunde Schmidt ist aus dem Kleinen Weg 1 in die Große Allee 25 gezogen. Eine entsprechende Änderungsabfrage sieht folgendermaßen aus:

UPDATE ADRESSEN
SET STRASSE="Große Allee", HAUSNR="25"
WHERE NR=1

Selbstverständlich müssen Sie auf den Kunden über die Kundennummer zugreifen, da der Name doppelt vorkommen könnte.

Die folgende Abfrage zeigt dagegen ein Beispiel, in dem bewusst mehrere Datensätze geändert werden – alle Artikel mit 7% Mehrwertsteuer werden für eine Sonderaktion um 20% billiger:

UPDATE ARTIKEL
SET PREIS = 0.8 * PREIS
WHERE MWST = "7"
  

Einstieg in PHP 5

Einstieg in Java

C von A bis Z

Einstieg in C++

Einstieg in Linux

Einstieg in XML

Apache 2




Copyright © Galileo Press GmbH 2004
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de