SQL steht für "Structured Query Language" und wird für das Ansprechen der meisten Datenbanken (PostgreSQL, MySQL, Adabas, Oracle, ...) benutzt.
SQL ist eine standardisierte Datenbank-Abfragesprache, die das Speichern, Updaten und den Zugriff auf Informationen erleichtert. Beispielsweise kann man Produktinformationen eines Kunden auf einem SQL-Server speichern und abrufen.
Inhaltsverzeichnis
Externe Doku
Aufbau einer SQL-Abfrageanweisung
Schlüsselwort SELECT vor der Liste der Namen der abgefragten Spalten
- Sind die Inhalte aller Spalten anzuzeigen, so genügt das Sternchen "*".
Werden gleichnamige Spalten in mehreren Tabellen angesprochen, so muss man die qualifizierende Schreibweise verwenden: Tabellenname.Spaltenname
- In Standard SQL darf ein Name keine Leerzeichen enthalten.
DISTINCTROW: besagt, dass jede Ausgabezeile sich von der anderen unterscheiden muss.
Standard-SQL: DISTINCT.
- auch: UNIQUE
Tabellenangabe
FROM: d.h. welche Tabellen ausgewertet werden sollen z.B.: FROM Lieferer, Artikel, Artikel_Lieferer
- Innere Verknüpfung von Tabellen:
- JOIN: um Tabellen logisch miteinander zu verknüpfen.
- die Art der Verbindung wird durch den Zusatz JOIN ...
- JOIN: um Tabellen logisch miteinander zu verknüpfen.
(hier fehlt ein Stück Text!)
- ... ist der INNER JOIN. (z.B.:
SELECT DISTINCTROW Artikel_Lieferer.ArtNr, Artikel.ArtBez, Artikel_Lieferer.LiefNr, Artikel_Lieferer.AngPreis FROM Artikel INNER JOIN Artikel_Lieferer ON Artikel.ArtNr = Artikel_Lieferer.ArtNr WHERE (((Artikel_Lieferer.AngPreis)>20 AND Artikel_Lieferer.AngPreis)<23));
- Hinter dem ON werden die Spalten angegeben, über deren Inhalt die Verbindung hergestellt wird. z.B.:
Artikel_Lieferer INNER JOIN Artikel ON (Artikel.ArtNr = Artikel_Lieferer.ArtNr)
- Der obige SELECT entspricht auch dem folgenden:
SELECT DISTINCT Artikel_Lieferer.ArtNr, Artikel.ArtBez, Artikel_Lieferer.LiefNr, Artikel_Lieferer.AngPreis FROM Artikel, Artikel_Lieferer WHERE Artikel_Lieferer.AngPreis>20 AND Artikel_Lieferer.AngPreis<23 AND Artikel_Lieferer.ArtNr = Artikel.ArtNr;
- WHERE-Klausel
- Größenvergleich:
WHERE Artikel_Lieferer.ArtNr = 1616
WHERE Artikel_Lieferer.AngPreis > 20
WHERE Artikel. IstBest <= 2 * Artikel.MinBest
- Mustervergleich:
WHERE PLZ WIE 4*SQL=WHERE PLZ LIKE 4%
Bemerkung: PLZ ist wegen führender 0 meist ein VARCHAR, dann muss es heissen: WHERE PLZ LIKE "4%"
- Bereichsabfrage:
WHERE ArtNr BETWEEN 1500 AND 2000
- Elementabfrage:
WHERE ArtNr IN (1120;1616;4630) (oder auch mit kommas, z.B. (1120,1616,4630) )
- "Kein Eintrag"-Abfrage:
WHERE ArtNr is Null
- Größenvergleich:
AND oder OR: Mehrere Einzelbedingungen können durch diese beiden Ausdrücke verbunden werden, z.B.: WHERE Artikel_Lieferer.AngPreis > 20 AND Artikel_Lieferer.AngPreis < 23
NOT: hiermit kann man eine Bedingung negieren, z.B. WHERE Lieferer.PLZ NOT LIKE ?4%?
In einem Bedingungsausdruck weist man also das Datenbankprogramm an, jede Zeile einer Tabelle darauf hin zu überprüfen, ob in der angegebenen Spalte die gesetzte Bedingung erfüllt ist. Führt der Vergleich zum Ergebnis wahr bzw. true, wird die betreffende Zeile ausgegeben.
In der WHERE Klausel kann man auch Bedingungen für das Verknüpfen von Tabellen formulieren, z.B.:
SELECT DISTNCTORW Artikel_Lieferer.ArtNr, ArtBez, AngPreis FROM Artikel, Artikel_Lieferer WHERE Artikel_Lieferer.ArtNr = Artikel.ArtNr AND AngPreis > 20 AND AngPreis < 23;
Die Verknüpfung zwischen den beiden Tabellen z.B. Artikel und Artikel_Lieferer wird hier durch WHERE Artikel_Lieferer.ArtNr = Artikel.ArtNr hergestellt.
Sortierungsanweisung
ORDER BY: wird die sortierte Ausgabe der Daten gewünscht und nach welchem Begriff zu sortieren ist, z.B.:
SELECT LiefNr, LiefName FROM Lieferer ORDER BY LiefName
DESC: erreicht die fallende Sortierfolgen, z.B.: ORDER BY LiefName DESC
Man kann also in einer ORDER BY sowohl aufsteigende als auch absteigende Sortierkriterien vorgeben.
Weitere Infos in SQL/SelectFürFortgeschrittene
SQL-Anweisungen zur Manipulation von Daten
Daten einfügen
INSERT: hiermit werden Daten in die Spalten der angegebenen Tabelle eingetragen, z.B.:
INSERT INTO Tabellenname(Spaltenname1, Spaltenname2,......) VALUES(WertinSpalte1, WertinSpalte2, ....);
Aktualisieren
Bei der Aktualisierung werden in eine oder mehrere Spalten neue Werte eingesetzt, z.B.:
UPDATE Tabellenname SET Spaltennamen = Ausdruck WHERE Aktualisierungsbedingung
Neue Tabelle anlegen
Die neue Tabelle übernimmt die Spaltennamen, wie man sie in der SELECT Liste angegeben hat. Natürlich kann man die Namen der Spalten in der neuen Tabelle auch durch einen AS-Zusatz neu benennen, wie man aus dem prinzipiellen Aufbau der Tabellenerstellungsabfrage ersehen kann, z.B.:
SELECT Spaltenname1 AS SpName1, Spaltenname2 AS SpName2,..... INTO Neue Tabelle FROM Datenherkunftstabelle WHERE?..
Löschen
Das Löschen erfolgt Satzweise, z.B.:
DELETE FROM Tabelle WHERE Löschbedingung
Tabellen erstellen, ändern und löschen
Tabelle erzeugen
Beispiel: Einige Lieferanten kündigen an, dass sie künftig Mengenrabatte einführen wollen. So soll beispielsweise für die Abnahme von 1000 bis 9999 Blatt ein Rabatt von 9%, bei einer Abnahme von 10000 bis 20000 Blatt ein Rabatt von 15% gewährt werden. Um diese Informationen aufnehmen zu können, wird eine Tabelle mit folgenden Attributen benötigt: Artikelnummer, Lieferernummer, untere Mengenangabe, obere Mengenangabe sowie Rabattsatz.
CREATE TABLE Rabattstaffel (ArtNr LONG, LiefNr LONG, UntereMenge LONG, ObereMenge LONG, Rabattsa SINGLE, CONSTRAINT alindex UNIQUE (ArtNr, LiefNr));
Beim Datentyp LONG INTEGER ist zu beachten, dass er in einer CREATE-Anweisung mit LONG bezeichnet wird. Spalten, die Zeichenketten aufnehmen, können durch die Angabe der Stellenzahl in ihrer Breite begrenzt werden. Mittels TEXT(30) wird die Breite einer Textspalte auf 30 Stellen festgesetzt.
CONSTRAINT: weist das Datenbanksystem an, einen aus der Artikelnummer und der Lieferernummer zusammengesetzten eindeutigen Schlüssel (UNIQUE) zu binden.
ALINDEX: damit wird sichergestellt, dass kein doppelter Schlüssel in die Tabelle Rabattstaffel eingegeben werden kann.
Tabelle ändern
ALTER: mit dieser Anweisung können sie den Aufbau einer Tabelle Verändern, z.B.:
ALTER TABLE Rabattstaffel ADD Kommentar Text(40);
ADD: ist für das Hinzufügen von Spalten zuständig.
DROP: soll eine Spalte aus der Tabelle entfernt werden, wird ebenfalls die ALTER-Anweisung verwendet, z.B.:
ALTER TABLE Rabattstaffel DROP Kommentar;
Tabelle löschen
Um eine Tabelle aus der Datenbank zu entfernen, verwendet man die Anweisung DROP, z.B. DROP TABLE Rabattstaffel;
Rechte
Die Rechte werden mit dem grant-Befehl definiert:
GRANT rechte (spalten) ON ebene TO giltfür IDENTIFIED BY "passwort" WITH optionen
Tabellenrechte: ALTER CREATE DELETE DROP INDEX INSERT REFERENCES SELECT UPDATE
Aktionsrechte: FILE PROCESS RELOAD SHUTDOWN
Sammelrechte: ALL USAGE
Ebene: datenbank.tabelle.spalte (auch mit Joker '*')
GiltFür: benutzer@host
- Host: Angabe eines Hosts, Netzes, einer IP-Adresse (mit Joker '*'), Alle: %
Beispiele: {{{grant all on *.* to admin@% identified by "NaJa"; grant ALL on lager.* to lagerist@localhost identified by "pw"; grant CREATE,INSERT,UDATE on lager.* to lagerist@192.168.0.* identified by "pw"; grant SELECT on lager.* to lagerist@% identified by "pw"; }}}
Anmerkung: Folgende Joker kann MySQL nicht:
- * in IP-Adressen
- % als Host
ToDo: überarbeiten / fehlende Passage ergänzen
Beitragende: Sofia Matos, ThomasWaldmann, JonesHamatoma