Datenbank Abfrage Sprache SQL

Aggregatfunktionen sind Funktionen die Werte zussammenfassen. Eine Aggregatfunktion ist z:b: Summenbildung oder das Ihnen bereits bekannte COUNT(). Neben COUNT() gibt es noch SUM() AGV() MAX() MIN(), die f6uuml;r die Summenbildung, Durchschnittsberechnung, Maximal und Minimal Werte stehen.
Arithmetische Ausdrcke

Normalerweise wird die Ergebnisstabelle einer Anfrage aus der Ausgabetabelle durch Anwendung der projektionsoperationen erstellt. Sie setzt sichdann aus einer Teilmenge der Spalten der Ausgabetabelle zusammen.
Es besteht aber auch die M6oml;glichkeit, die Ergebnistabelle zusammen zu erweitern, die entweder

a. ) durch Anwendung von aruthmetischen Operationen aus den bereits bestehenden Spalten herleitet
b. ) oder 6uuml;ber eine Aggregatfunktion aus ( den Spalten) einer Zwischentabelle abgeleitet
c. ) oder durch eine Unterabfrage berechnet werden.

Mit diesem zus6auml;tzlichen Feature kann man jeder Anwendung ihre eigene Sicht auf die Daten zugestehen.
Eine Datenbank besteht aus einer Menge von Tabellen, die wiederum aus gleichartig strukturierten Zeilen bestehen. Jede Zeile besitzt eine Menge von Spalten, wobei die Werte jeder Spalte einem festgelegten atomaren Datentyp entsprechen müssen. Der mit einem Datensatz einer Spalte Spaltentyp genannt wird.

Die Basisbefehle der DDL zum ädern und löschen sind für eine
      Datenbank erstellen löschen
      erstellen = CREATE TABLE,
      ändern = ALTER TABLE,

      Tabelle erstellen löschen ändern
      erstellen = CREATE TABLE,
      ändern = ALTER TABLE,
      löschen = DROP TABLE

      Datentyp erstellen löschen ändern
      erstellen = CREATE DOMAIN,
      ändern = ALTER DOMIAN,
      löschen = DROP DOMAIN

Die Datenmanipulationssprache DML

Mit Hilfe der Die Datenmanipulationssprache DML kann der Datenbestand einer Datenbank geändert werden. Änderungen können allerdings grundsätzlich nur auf den Basistabellen der Datenbank ausgeführt werden.

SQL unterstützt die folgende drei Änderungsoperationen

1. Einfügen in Basistabellen können über INSERT - Anweisung durcheführt werden.

INSERT INTO table [ ( column [, ...] ) ]
{ DEFAULT VALUES | VALUES ( { expression | DEFAULT } [, ...] ) [, ...] | query }
[ RETURNING * | output_expression [ AS output_name ] [, ...] ]

INSERT erlaubt es, neue Zeilen in eine Tabelle einzufügen. Man kann eine einzige Zeile auf einmal oder mehrere Zeilen einfügen als Ergebnis einer Abfrage.Die Spalten in der Zielliste in beliebiger Reihenfolge aufgeführt werden. Jede Spalte nicht in der Zielliste eingefügt ein Standardwert verwendet wird, entweder das erklärte Standardwert oder null. Wenn der Ausdruck fü1 jede Spalte ist nicht vom richtigen Datentyp, wird die automatische Typkonvertierung versucht werden.
Sie müssen das Zugriffsrecht INSERT auf eine Tabelle, um in sie einzufügen. Wenn Sie die Abfrage-Klausel, um Zeilen aus einer Abfrage einfügen verwenden, müssen Sie auch das Zugriffsrecht SELECT für jede Tabelle in der Abfrage verwendet haben.

Beispiel : Eine Spalte einfügen

INSERT INTO films VALUES
('UA502', 'Bananas', 105, '1971-07-13', 'Comedy', '82 minutes');

Beispiel : Mehre Spalten einfügen

INSERT INTO films (code, title, did, date_prod, kind)
VALUES ('T_601', 'Yojimbo', 106, '1961-06-16', 'Drama');

Beispiel: Fügt Spalten ein Mit Bedinung

INSERT INTO films SELECT * FROM tabelle;

2. Über die UPDATE - Anweisung können bereits in der Datenbank existierenden Zeilen verändert weden.

UPDATE [ ONLY ] table SET column = { expression | DEFAULT } [, ...]
[ FROM fromlist ]
[ WHERE condition ]

UPDATE ändert die Werte der angegebenen Spalten in allen Zeilen, die die Bedingung erfüllen. Nur die Spalten angepasst werden müssen, in der SET-Klausel genannt werden; Spalten nicht explizit geändert behalten ihre vorherigen Werte.

Parameter

table : Der Name (optional Schema qualifiziert) der Tabelle zu aktualisieren.

Spalte : Der Name einer Spalte der Tabelle. Der Spaltenname kann mit einem Namen oder Unterfeld Array-Index qualifiziert werden, wenn nötig.

Ausdruck. Ein Ausdruck, der in der Spalte zugewiesen werden. Der Ausdruck kann die alten Werte von diesem und anderen Spalten in der Tabelle.

DEFAULT : Stellen Sie die Spalte auf den Standardwert (die NULL sein, wenn kein bestimmter Standard Ausdruck hat es zugewiesen wurde).

fromlist: Eine Liste der Tisch Ausdrücke, wodurch Spalten aus anderen Tabellen in der WHERE-Bedingung und die Aktualisierung Ausdrücke erscheinen. Dies ist vergleichbar mit der Liste der Tabellen, die in der FROM-Klausel einer SELECT-Anweisung angegeben werden. Beachten Sie, dass die Zieltabelle müssen nicht in der fromlist erscheinen, wenn Sie einen Self-Join (in diesem Fall muss es mit einem Alias ??im fromlist erscheinen) beabsichtigen.

Zustand: Ein Ausdruck, der einen Wert vom Typ boolean zurückgibt. Nur Zeilen, für die dieser Ausdruck gibt true wird aktualisiert.

Beispiel Ändern Sie das Wort Theater zu Dramatic Art in der Spalte der Tabelle Filme:

UPDATE films SET kind = 'Dramatic' WHERE kind = 'Drama';

Beispiel Stellen Sie Temperatur und Einträge zurückgesetzt Niederschlag auf den Standardwert in einer Zeile der Tabelle Wetter:

UPDATE weather SET temp_lo = temp_lo+1, temp_hi = temp_lo+15, prcp = DEFAULT
WHERE city = 'San Francisco' AND date = '2003-07-03';

Beispiel Erhöhen Sie die Anzahl der Verkäufe der Verkäufer, der das Konto fr Acme AG verwaltet, mit der FROM-Klausel Syntax:

UPDATE employees SET sales_count = sales_count + 1 FROM accounts
WHERE accounts.name = 'Acme Corporation'
AND employees.id = accounts.sales_person;

Beispiel Führen Sie den gleichen Vorgang mit einem sub-select in der WHERE-Klausel:

UPDATE employees SET sales_count = sales_count + 1 WHERE id =
(SELECT sales_person FROM accounts WHERE name = 'Acme Corporation');

Beispiel Versuchen Sie, ein neues Lager Artikel zusammen mit der Menge auf Lager legen. Wenn das Element bereits vorhanden ist, stattdessen die Lager Zählung der vorhandenen Artikel. Um dies ohne zu scheitern die gesamte Transaktion zu tun, verwenden Sicherungspunkte.

BEGIN;
-- other operations
SAVEPOINT sp1;
INSERT INTO wines VALUES('Chateau Lafite 2003', '24');
-- Assume the above fails because of a unique key violation,
-- so now we issue these commands:
ROLLBACK TO sp1;
UPDATE wines SET stock = stock + 24 WHERE winename = 'Chateau Lafite 2003';
-- continue with other operations, and eventually
COMMIT;


3. Die DELETE - Anweisung ermöglicht das löschen aus Basistabellen.

DELETE -- delete rows of a table

[ WITH [ RECURSIVE ] with_query [, ...] ]
DELETE FROM [ ONLY ] table_name [ * ] [ [ AS ] alias ]
[ USING using_list ]
[ WHERE condition | WHERE CURRENT OF cursor_name ]
[ RETURNING * | output_expression [ [ AS ] output_name ] [, ...] ]


Beschreibung

DELETE löscht Zeilen, die die WHERE-Klausel aus der angegebenen Tabelle zu befriedigen. Wenn die WHERE-Klausel nicht vorhanden ist, ist die Wirkung, um alle Zeilen in der Tabelle zu löschen. Das Ergebnis ist ein gültiger, aber leere Tabelle.

Es gibt zwei Möglichkeiten, um Zeilen in einer Tabelle mit Informationen in anderen Tabellen in der Datenbank enthaltenen löschen: mit sub-wählt, oder Sie zusätzliche Tabellen in der USING-Klausel. Welche Technik ist mehr geeignet ist, hängt von den konkreten Umständen.

Die optionale RÜCKKEHR Klausel bewirkt, ENTF, um berechnen und zurückzugeben Wert (e) basierend auf jeder Zeile tatsächlich gelöscht. Jeder Ausdruck mit den Spalten der Tabelle und / oder Spalten in anderen Tabellen VERWENDUNG erwähnt, berechnet werden können. Die Syntax des zurückkehrenden Liste ist identisch mit der Ausgabe der Liste SELECT.

Sie müssen das Zugriffsrecht DELETE fü:r die Tabelle, um aus ihr zu löschen, sowie die Berechtigung SELECT für jede Tabelle in der USING-Klausel oder deren Werte werden in dem Zustand zu lesen.

Parameter

with_query: Die WITH-Klausel ermöglicht es Ihnen, eine oder mehrere Unterabfragen, die namentlich in der DELETE Abfrage verwiesen werden soll. Siehe Abschnitt 7.8 und SELECT für Details.

table_name: Der Name (optional Schema qualifiziert) der Tabelle, um Zeilen aus zu löschen. Wenn nur vor dem Tabellennamen angegeben wird, werden passende Zeilen der benannten Tabelle nur gelöscht werden. Wenn nur nicht angegeben wird, werden übereinstimmende Zeilen auch aus allen Tabellen Erben von der benannten Tabelle gelöscht. Optional kann * hinter dem Namen ausdrücklich darauf hinzuweisen, dass Nachkomme Tabellen enthalten sind, angegeben werden.

Alias : Ein Ersatz Namen für die Zieltabelle. Wenn ein Alias ??vorhanden ist, sie vollständig verdeckt die tatsächlichen Namen der Tabelle. Zum Beispiel muss gegeben DELETE FROM foo AS f, der Rest der DELETE-Anweisung auf diese Tabelle als nicht f foo beziehen.

using_list: Eine Liste der Tisch Ausdrücke, wodurch Spalten aus anderen Tabellen in der WHERE-Bedingung erscheinen. Dies ist vergleichbar mit der Liste der Tabellen, die in der FROM-Klausel einer SELECT-Anweisung angegeben werden können, z. B. ein Alias ??für die Tabelle Name angegeben werden. Wiederholen Sie nicht die Zieltabelle in der using_list, wenn Sie die Einrichtung eines selbst beitreten möchten.

condition: Ein Ausdruck, der einen Wert vom Typ boolean zurückgibt. Nur Zeilen, für die dieser Ausdruck true zurückgibt, werden gelöscht.

cursor_name: Der Name des Cursors in einer WHERE CURRENT OF Zustand verwenden. Die Zeile, die gelöscht werden soll, dem zuletzt holte aus diesen Cursor. Der Cursor muss eine nicht-Gruppierungsabfrage auf Löschen der Zieltabelle sein. Beachten Sie, dass WHERE CURRENT OF kann nicht zusammen mit einem booleschen Bedingung angegeben werden. Siehe DECLARE für weitere Informationen über die Verwendung von Cursor mit WHERE CURRENT OF.

output_expression: Ein Ausdruck, der berechnet und durch den Befehl Löschen nach jeder Zeile zurückgegeben werden gelöscht. Der Ausdruck kann keine Spaltennamen der Tabelle Tabellenname oder Tabelle (n) in VERWENDUNG gelistet benannt. Schreiben * um alle Spalten zurück.

output_name: Ein Name, der für eine Spalte zurückgegeben verwenden.

Outputs
Bei erfolgreichem Abschluss gibt eine DELETE-Befehl einen Befehl tag der Form

DELETE count

Das ist die Anzahl der gelöschten Zeilen. Beachten Sie, dass die Zahl kann kleiner sein als die Anzahl der Zeilen, die die Bedingung trifft zu, wenn Löschungen ein BEFORE DELETE-Trigger unterdrückt wurden. Wenn count 0 ist, wurden keine Zeilen von der Abfrage (dies wird nicht als Fehler) gelöscht.

Notes

PostgreSQL können Sie auf Spalten anderer Tabellen in der WHERE-Bedingung, indem Sie die anderen Tabellen in der USING-Klausel. Zum Beispiel, um alle Filme von einem bestimmten Hersteller hergestellt löschen, was man tun kann:

DELETE FROM Filme VERWENDUNG Produzenten
WHERE producer_id = producers.id UND producers.name = 'foo';

Was ist hier passiert ist im Wesentlichen eine zwischen Filmen und Produzenten kommen, mit allen erfolgreich beigetreten Filme Reihen zum Löschen markiert. Diese Syntax ist nicht Standard. Eine normale Weg, es zu tun ist:

DELETE FROM Filme
WHERE IN producer_id (SELECT id FROM Produzenten WHERE name = 'foo');

In einigen Fällen kann die Verknüpfung Stil ist einfacher zu schreiben oder schneller ausführen als die sub-select Stil.
Beispiele

Löschen Sie alle Filme, aber Musicals:

DELETE FROM WHERE Art Filme <> 'Musical';

Deaktivieren Sie die Tabelle Filme:

DELETE FROM Filme;

Löschen erledigten Aufgaben, wiederkehrende vollständige Angaben zu den gelöschten Zeilen:

DELETE FROM WHERE status = Aufgaben RÜCKKEHR * 'Fertig';

Löschen Sie die Zeile der Aufgaben auf dem der Cursor gerade befindet c_tasks:

DELETE FROM Aufgaben WHERE CURRENT OF c_tasks;

Mit Gruppierungen GROUP BY können Sie in der Ausgabe Werte in Gruppen zusammenfassen. Dann können Sie auch Berechnungen, die sich auf Gruppen beziehen, durchführen
Das Element GROUP By sorgt für die Gruppierung. Es folgt immer nach WHERE wenn ein solches vorhanden ist. Es kann selber noch durch HAVING eingeschrnkt werden. HAVING folgt immer dem GROUP BY und kann nicht als Ersatz fr die WHERE verwendet werden.
Komplexe Anfragen sind Anfragen die aus allen möglichen teilen von Operanden bestehen, wie z.B. Unterabfragen. Mengen Operationen Aritmetische Ausdrücke Agregatfunktionen.
Mengenoperationen (UNION, INERSECT, EXCEPT/MINUS)

Aus der Mengenlehre sind Ihnen vieleicht noch die Begriffe Vereinigungs-, Durschnitts-, Differenzmenge in Erinnerung. Da mit ernem SELECT - Befehl eine Menge von Datensätzen aus der Datenbank ausgewählt werden, lassen sich die Mengeoperationen auch auf die Ausgabe von Datensätzen anwenden.
Auf Datensätze von Tabellen bozogen sind folgende Mengenoperationen möglich.

UNION
Bei einer Vereinigung enthält die Ergebnissmenge alle Datensätze, die Tabelle1 oder Tabelle 2 oder in beiden Tabellen enthalten sind IN SQL Werden Durschnittsmengen mit dem Schl%uuml;sselwort UNION erzeugt.

INERSECT
Bei der Durchschinttsmenge erhält das Ergebniss nur die jenigen Datensätze, die sowohl in Tabelle 1 und in Tabelle 2 enthalten sind. In SQL Verwendet man dazu das Schlüsselwort INTERSECT

EXCEPT, MINUS
Die Differnzmenge enthält alle Datensätze der Tabelle 1, die nicht in der Tabelle 2 enthalten sind. Hier für verwendet SQL das Schlüsselwort EXCEPT bzw. auch MINUS

Unterabfragen lassen sich nicht nur in select sondern auch bei delete update und insert Anweisungen benutzen.
Unterabfragen die nur eine Wert zurückgeben benutzen die Vergleichsoperatoren wie =, <, <=, >, >=, und <>
Es gibt aber auch Unterabfragen die mehr als einen Wert zurückgeben.

Dazu gehören All, ANY, IN, EXISTS

All Prüft, ob die angebenen Bedingungen auf Datensätze der Unterabfrage zutrifft. All wird immer wird immer mit einem Vergleichsoperator wie <, >, <=, >=,<> verwendet.

Any Prüft ob die angebene Bedingung auf irgend einen Datensatz der Unterabfrage zu trifft Any wird immer wird immer mit einem Vergleichsoperator wie <, >, <=, >=,<> verwendet.

IN prüft ob ein Wert in der Unterabfrage enthalten ist

EXSISTS prüft, ob die Bedingung auf mindestens einen Datensatz der Unterabfrage zutrifft, also mindestens einen Datensatz selectiert wird Rückgabe ist TRUE oder FALSE.
Eine einfache Anfrage, kann man sich an eine Datenbank wie folgt vorstellen.

1. ) Spezifikationen der Tabelle, auf die sich die Anfrage bezieht (Ausgangstabelle)

2. ) Spezifkationen der Bedingungen, die die Zeilender Ausgangstabelle erfüllen müssen, damit sie in die Ergebnistabelle übernommen werden. (Selection)

3. ) Auswahl der Spalten, die der Ergebnisstabelle angehören sollen.
In der Datenbankabfragesprache (DRL) gibt es den sogenannte SFW- Block. Der bezeichnet einen sogenannte Abfrage Block mit folgender Syntax :

(SFW - Block) ::=
SELECT (Ergebnist Tabelle)
FROM (Ausgangs Tabelle)
[WHERE (KomplexesPrädikat)]
Das Kartesiche Produkt

Verbundoperration : Kartenisches Produkt (Kreuzprodukt)
Bezeichnung in SQL : CROSS JOIN
Aufbau resultirende Tabelle : Alle urspünglichen Spalten

Bei der gegen über der einfachen Basistabelle komplexe Variante wird die Ausgangstabelle mit Hilfe des Kartesischen Produktes aus mehren Basistabellen zusammen gesetzt. SQL - 89 kennt nur diese beiden Grundvarianten( nur eine Basistabelle und das latesische Produkt). Weiter Operanten stehen zur Bildung der Ausgangstabelle, beispielsweise andere Verbundoerrationen, strehen nicht zur Verfügung. SQL - 92 hat hier erheblich zu gelegt, indem sich jede Art von Verbndoperanten direkt in der FROM - Klausel formulieren lässt.
Das Kartenische Produkt kann entweder nach der alten Variante über Kommata (,) oder nach den Vorschlag über die Schlüsselw%ouml;rter CROSS JOIN gebildet werden.

Der natürliche Verbund

Verbundoperration : natürlicher Verbund
Bezeichnung in SQL : NATURAL [INNER] JOIN
Aufbau resultirende Tabelle : Alle urspünglichen Spalten, keine mehrfach

Die neben dem Kartesischen Produkt einfachste Verknüpfung ist der Nartürliche Verbund NATURAL JOIN, bei dem Tabellen über ihre übereinstimmenden Spaltennamen verbunden werden. Dabei werden die doppelt vorkommende Spaltennamen nur einmal in die Ausgangstabelle übernommen.

Der Spaltennamensverbund

Verbundoperration : Spaltennamensverbund (colum name join)
Bezeichnung in SQL : [INNER] JOIN .. USING {(SpaltenNameN)}
Aufbau resultirende Tabelle : Alle urspünglichen Spalten; die die inder USING - Klausel genannte werde nur einfach

Der Spaltennamensverbund ist im Prinzip eine Verallgemeinerung des natürlichen Verbundes. Statt den Verbund grundsätzlich über alle über ein stimmenden Spaltennamen durchzuführen, müssen bei dieser Variante über die USING - Klausel explizit die für die Vebungregelung vorgesehenen Spaltengenannt werden. Damit kann auch eine Teilmenge der übereinstimmenden Spaltenname ausgewählt werden. Alle Regeln des natürlichen Verbund gelten damit auch für den Spaltenverbund

Der Bedingungsverbund (Thetaverbund)

Verbundoperration : Thetaverbund (condition join)
Bezeichnung in SQL : [INNER] JOIN .. ON {(VergleichsPrädekatE)}
Aufbau resultirende Tabelle : Alle urspünglichen Spalten

Der Vebund unterscheidet sich in drei Punkten von den voher besprochenen Verbundoperationen :
  • 1. ) Das Prädekat, über das der Verbund hergestellt werden soll, muss nicht ausschließlich auf dem Gleichheitstest beruhen. Statt dessen kann eine belibiger Vergleichoperator benutzt werden.

  • 2. ) Es ist nicht mehr notwendig, den Verbund nur über ber ein stimmende Spaltennamen abzuwickeln. Der Vergleich darf über belibige Typ kompatible Spalten laufen.

  • 3. ) Der Bedingungsverbund blendet keine Spalten aus. Auch die Spalten, die in der Verbundbedingung genutzt werden, bleiben (redudant) erhahlten.


Verbundoperration : linker äußerer Verbund
Bezeichnung in SQL : LEFT OUTER JOIN
Aufbau resultirende Tabelle : Alle urspünglichen Spalten der links stehenden Tabelle

Verbundoperration : rechter äußerer Verbund
Bezeichnung in SQL : RiGTH OURT JOIN
Aufbau resultirende Tabelle : Alle urspünglichen Spalten der lrechts stehenden Tabelle

Verbundoperration : voller äußerer Verbund
Bezeichnung in SQL : FULL OUTER JOIN
Aufbau resultirende Tabelle : Alle urspünglichen Spalten

Verbundoperration : Vereinigungsverbund
Bezeichnung in SQL : UNION JOIN
Aufbau resultirende Tabelle : Alle urspünglichen Spalten