Not logged in

Grundlegendes zu SQL

Die Abkürzung SQL kommt von Structured Query Language. SQL ist eine deskriptive Sprache (auch WAS-Sprache genannt, da sie für das WAS ist als Ergebnis gewünscht verwendet wird). Die deskriptiven Sprachen stehen ganz im Gegensatz zu den normalerweise bekannten konventionellen Sprachen, welche das WIE wird ein Ergebnis erreicht behandeln.
SQL weist auch noch die Eigenschaft einer non-prozeduralen und einer mengenverabeitenden Sprache auf.
SQL ist jedoch nur ein Industriestandard. Dies hat den Nachteil, daß jedes Produkt seinen eigenen SQL-Dialekt verwendet. Somit also spezielle Befehle nur bei speziellen Produkten anwendbar sind.

SELECT felder FROM tabellen WHERE bedingungen ORDER BY sortierungen

  • Die Sortierung von ORDER BY kann sowohl aufwärts wie auch abwärts erfolgen. Um eine spezielle Sortierung festzulegen, muss nach der Sortierung entweder asc (aufsteigend) oder dsc (absteigend) angegeben werden (z.B. SELECT * FROM tabelle ORDER BY name asc).
  • Es ist möglich Tupelvariable zu vergeben. Dazu muss nach dem Tabellennamen einfach der Variablenname angegeben werden (z.B. SELECT test.* FROM tabelle test). Diesen Tupelvariablen kann man sehr gut für Zwischenergebnisse verwenden (z.B. SELECT ergebnis.wert FROM (tabelle1 JOIN tabelle2) AS ergebnis).
  • Es lassen sich auch die Felder umbenennen. Mit dem Befehl AS nach dem Feldnamen und dem nachfolgenden neuen Namen erhält das Feld einen neuen Namen (z.B.SELECT feld1 AS test FROM tabelle)
  • Mit dem Befehl DISTINCT werden Wertepaare nicht doppelt angezeigt (z.B. SELECT DISTINCT ... ).
  • Mit dem Befehl HEAVING wird es ermöglicht, daß ein auszugebender Wert eingeschränkt wird. So wird z.B. durch SELECT name FROM tabelle HAVING name="Klaus" nur der Name Klaus ausgegeben (in diesem Beispiel wäre das selbe Ergebnis auch mit SELECT name FROM tabelle WHERE name="Klaus" zu erreichen).
  • Der Befehl GROUP BY ermöglicht es, Gruppierungen zu erstellen. Dies ist z.B. beim Zählen sehr wichtig, dann damit kann eingegrenzt werden über welche Werte die Zählung erfolgen soll und welchen Werte diese Ergebnis zuzuordnen ist. So wird z.B. mit SELECT name, COUNT (*) FROM namenstabelle, adresstabelle WHERE namenstabelle.nameID=adresstabelle.nameID GROUP BY name ermöglicht,

Vergleichsoperatoren

Es können die Operatoren "=", "<", ">", "<=", ">=" "<>" und BETWEEN (attribut BETWEEN konst1 AND konst2) verwendung finden.
    SELECT felder FROM tabelle WHERE name <'G'
    SELECT felder FROM tabelle WHERE name BETWEEN 'F' AND 'H'
Es können auch sogenannte Ungewißheitsselektionen erfolgen. Dies ist mit dem Operator LIKE möglich. Dabei spielt ein Zeichen einen Wildcard (normalerweise ist dieses Zeichen das "%", bei MS-ACCESS ist es das Zeichen "*"). Damit lassen sich z.B. alle Namen welche den Teil "ber" enthalten folgendermaßen erfassen:
    SELECT name FROM tabelle WHERE name LIKE '%ber%'.

Mögliche Verbindungen zwischen mehreren Tabellen

Karthesisches Produkt

    SELECT felder FROM tabelle, tabelle2
    SELECT felder FROM tabelle1 CROSS JOIN tabelle2

Verbund über Verbindungen

    SELECT felder FROM tabelle1, tabelle2 WHERE verbindung

Verbundoperator

  • SELECT felder FROM tabelle1 JOIN tabelle2 ON verbindung

  • SELECT felder FROM tabelle1 JOIN tabelle2 USING verbindung
    Gleichverbund
  • SELECT felder FROM tabelle1 NATURAL JOIN tabelle2

  • Natürlicher Verbund
  • SELECT felder FROM tabelle1 INNER JOIN tabelle2 ON verbindung
  • SELECT felder FROM tabelle1 OUTER JOIN tabelle2 ON verbindung

  • Falls Zeilen in einer Tabelle aber nicht in der anderen vorhanden sind, so werden trozdem alle möglichen Zeilen angezeigt. Bei den fehlenden Teilen wird ein Nullwert angezeigt.
  • SELECT felder FROM tabelle1 FULL OUTER JOIN tabelle2 ON verbindung

  • Falls Zeilen in einer Tabelle aber nicht in der anderen vorhanden sind, so werden trozdem alle möglichen Zeilen angezeigt. Bei den fehlenden Teilen wird ein Nullwert angezeigt.
  • SELECT felder FROM tabelle1 LEFT OUTER JOIN tabelle2 ON verbindung

  • Es werden alle Wert aus tabelle1 und bei fehlenden in tabelle2 anstelle des zugehörigen Wertes der tabelle2 Nullwerte angezeigt.
  • SELECT felder FROM tabelle1 RIGHT OUTER JOIN tabelle2 ON verbindung

  • Es werden alle Wert aus tabelle2 und bei fehlenden in tabelle1 anstelle des zugehörigen Wertes der tabelle1 Nullwerte angezeigt.

Verschachtelungen

  • Das Prädikat IN prüft also ob ein Wert in einer inneren Abfrage enthalten ist.

  • SELET werte1 FROM tabelle1 WHERE wert1 IN (SELECT wert2 FROM tabellen2 WHERE bedingung)
    Dieser Ausdruck ermöglicht das verschachteln zweier Abfragen ineinander. Sie hat den Erfolg, daß wert1 nur noch jene Werte enthält, welche auch in wert2 enthalten sind. Es ist anstelle von IN auch NOT IN möglich. Dis hätte genau den umgekehrten Effekt, was bedeuten würde, daß wert1 nur jene Werte enthält welche nicht in wert2 sind.
  • Mit dem Prädikat EXISTS ist es möglich, abzufragen ob eine innere Abfrage leer oder nicht leer ist.

Vereinigung

UNION

Durchschnitt

INTERSECT

Differenz

EXCEPT

Tabellenmanipulation

Tabellen erstellen

    CREATE TABLE tabellenname
        ( attribut1 attributtyp1 [NOT NULL
          [, attribut2 attributtyp2, ...]
          [, PRIMARY KEY (primarykey1[, primarykey2]), ...]
          [, FOREIGN KEY (foreignkey1[, foreignkey2, ...])
              REFERENCES tabelle (attribut1[, attribut2, ...])]
        )
    
    Ein Primary Key ist automatisch mit NOT NULL belegt.

    Zus�tzliche Parameter:

    DEFAULT defaultwert
    CHECK (VALUE IN (wert1[, wert2, ...]))
    CHECK (wert1 < wert2)
    CHECK (wert1 = wert2)
    CHECK (wert1 > wert2)

    Erstellen eines benutzerdefinierten Wertebereichs:

    CREATE DOMAIN domain attributtyp

Tabellen verändern

    attribute zu Tabellen hinzuf�gen

    ALTER TABLE tabelle ADD attribut attributtyp
    Es sind natürlich auch CHECK-Klauseln erlaubt.

    attribute aus Tabellen entfernen

    ALTER TABLE tabelle DROP attribut [RESTRICT / CASCADE]

Tabellen löschen

    DROP TABLE tabelle [RESTRICT / CASCADE]

Indizes

    CREATE [UNIQUE][NOT IS NULL] 
      INDEX indexname 
      ON tabelle (attribut1 [ASC / DESC][, attribut2 ...])
    UNIQUE: Schlüssel ist eindeutig
    NOT IS NULL: Schlüssel kann keinen Nullwert annehmen

Vereinigung

    Falls Sie die Daten zweier Tabellen vereinigen (aneinander hängen) wollen so gibt es nur die eine (folgende) Möglichkeit:
    SELECT werte1 
      FROM tabellen1 
      UNION SELECT werte2 
      FROM tabellen2

Rechenoperationen

    Anzahl

    COUNT ([DISTINCT / ALL] attribut)
    COUNT (*)

    Summe

    SUM ([DISTINCT / ALL] attribut)

    Maximum

    MAX ([DISTINCT / ALL] attribut)

    Minimum

    MIN ([DISTINCT / ALL] attribut)

    arithmetisches Mittel

    AVG ([DISTINCT / ALL] attribut)
0.0s
File last modified 2011-04-26 21:56:34 Webmail | Could | Privat | Firma | Imkern | HW | Admin | Domains