Docstoc

SQL

Document Sample
SQL Powered By Docstoc
					             Kerschensteiner Schule                                              Wachtmann
             BBSII Delmenhorst:                                                  Wittenberg
             Technische Assistenten Informatik
             Datenbanken – Informationen zum Thema SQL
                                                                                 2004




                                   SQL mit MySQL




                        1.                       Allgemeines


                        2.                       Informationen zur Architektur von MySQL


                        3.                       Anfragesprache SQL




07.12.2011                                   WT/WG                       Seite 1 von 25
              Kerschensteiner Schule                                                   Wachtmann
              BBSII Delmenhorst:                                                       Wittenberg
              Technische Assistenten Informatik
              Datenbanken – Informationen zum Thema SQL
                                                                                       2004


                                    1. Allgemeines


Was ist ein Datenbanksystem

      Datenbank:             Eine Datenbank ist die Zusammenfassung von Datenbeständen,
                             zu deren einzelnen Elementen nach unterschiedlichen Kriterien
                             zugegriffen werden kann.


      Datenbanksystem:       Ein Datenbanksystem ist die Gesamtheit aller Programme, die
                             für den Aufbau und die Verwaltung der Datenbestände sowie
                             die Sicherung und Wiedergewinnung der Daten erforderlich
                             sind.

                             Ein DBS (DBMS) enthält:
                                   Operationen zur Datenbankverwaltung
                                   (CREATE, DROP)
                                   Operationen zur Datenpflege
                                   (DELETE, INSERT, UPDATE)
                                   Abfragesprache (SELECT)
                                   Sicherungsroutinen / Protokollierung
                                   Recover - Verfahren




Unterschiedliche Architekturen

   Hierarchische
   Datenbanken:              Strenge Hierarchie der Satztypen (Baumförmig).
                             Nur 1:n Beziehungen sind möglich (inflexibel)


   Netzwerkdatenbanken       Speicherung der Daten in Netzform.
                             Nachteil: Der Anwender muß genau den Suchpfad bei Abfragen
                             vorgeben (Programmierkenntnisse erforderlich).


   Relationale Datenbanken Speicherung der Daten in Tabellen.
                           Anwenderfreundlich (einfach vorstellbar)
                           mächtige Anfragesprache SQL



07.12.2011                                    WT/WG                            Seite 2 von 25
              Kerschensteiner Schule                                                    Wachtmann
              BBSII Delmenhorst:                                                        Wittenberg
              Technische Assistenten Informatik
              Datenbanken – Informationen zum Thema SQL
                                                                                        2004




Hier einige große Datenbanksysteme

     DB2

     INFORMIX

     ORACLE

     SQL SERVER


Außerdem sei noch SAPDB (früher ADABAS) und MySQL genannt.

Datenbank-Anfragesprache SQL

Allgemeines zu SQL (Structured Query Language)
     entwickelt in den 70er Jahren von E.F. Codd bei IBM



Vorteile

     Mathematisch fundiert

     beschreibende Sprache, keine Informationen über die Speicherung der Objekte nötig

     leicht erlernbare Anfragesprache (keine Programmierkenntnisse erforderlich)

     Alle Ergebnisse von SQL-Abfragen sind wieder Tabellen

     Standard (ANSI - SQL)




07.12.2011                                    WT/WG                             Seite 3 von 25
                Kerschensteiner Schule                                             Wachtmann
                BBSII Delmenhorst:                                                 Wittenberg
                Technische Assistenten Informatik
                Datenbanken – Informationen zum Thema SQL
                                                                                   2004



SQL dient zur

     Datenbeschreibung (DDL – Data Definition Language)
      - Datenbank erstellen, löschen und selektieren
      - Tabellen erstellen, löschen und modifizieren
      - Indizes erstellen, löschen und modifizieren
-     - Statusinformationen über den Zustand der Datenbank erstellen

     Datenmanipulation
      - Einfügen, Ändern und Löschen von Daten(DML – Data Manipulation Language)
      - Anzeigen von Daten aus der Datenbank (DQL – Data Query Language)

     Datensicherheit
      - Zugriffberechtigungen (Data Control Language)
      - Ein-Befehls-Prinzip: Transaktionen
      - Protokollierung aller Aktivitäten
      - Wiederherstellung einer Datenbank nach z.B. einem Systemabsturz
        oder einem Plattenausfall




07.12.2011                                      WT/WG                     Seite 4 von 25
               Kerschensteiner Schule                                                    Wachtmann
               BBSII Delmenhorst:                                                        Wittenberg
               Technische Assistenten Informatik
               Datenbanken – Informationen zum Thema SQL
                                                                                         2004


              2. Informationen zur Architektur von MySQL


MySQL - Produkte


Backend Produkte
Dienen zur Speicherung und Verwaltung der Datenbank

      mysqld-nt               (Standard)



Frontend Produkte
Anwendermodule. Diese kommunizieren mit dem Backend.

Beispiele:

         mysql.exe                   DOS Kommandozeilenprogramm (MySQL Monitor)
         MySQL Control Center        Grafisches Verwaltungswerkzeug
         PhpMyAdmin                  auf PHP basierender Web-Client für einen MySQL
Server


Weitere Informationen zur Installation der Komponenten sind aus den Arbeitsblättern zu
entnehmen.

Anlegen einer Datenbank

     CREATE DATABASE <dbname>;


Selektieren einer Datenbank

      USE <dbname>;


Löschen einer Datenbank

      DROP <dbname>;



07.12.2011                                     WT/WG                           Seite 5 von 25
              Kerschensteiner Schule                                                        Wachtmann
              BBSII Delmenhorst:                                                            Wittenberg
              Technische Assistenten Informatik
              Datenbanken – Informationen zum Thema SQL
                                                                                            2004



Anlegen einer Tabelle
      CREATE TABLE <Tabellenname>
       (Struktur);

      Zur Struktur gehört die Definition der Spalten einer Tabelle inkl. Datentyp

      Mögliche Datentypen:


Typ                          Beschreibung
TINYINT                      -128 .. 127
TINYINT UNSIGNED             0 .. 255
SMALLINT UNSIGNED            Integer-Zahl von -0 bis 65535 (= 216 - 1)
SMALLINT                     Integer-Zahl von –32768 (= -215) bis +32767 (= 215 - 1)
INT                          -2.147.483.648 .. 2.147.483.647
INT UNSIGNED                 0 .. 4.294.967.295
BIGINT                       -3402823e+31 .. 3402823e+31
DECIMAL(length,dec)          Kommazahl der Länge "length" und mit "dec" Dezimalstellen; die
                             Länge beträgt: Stellen vor dem Komma + 1 Stelle für Komma +
                             Stellen nach dem Komma
                             Achtung: Steht so in der Beschreibung, jedoch lässt z. B.
                             DECIMAL(5,2) werte bis 9999.99 zu.
VARCHAR(NUM)                 Zeichenkette mit max "NUM" Stellen (1<= NUM <=255). Alle
[BINARY]                     Leerstellen am Ende werden gelöscht. Solange nicht "BINARY"
                             angegeben wurde, wird bei Vergleichen nicht auf Groß-
                             /Kleinschreibung geachtet.
TEXT                         Text mit einer max. Länge von 65535 Zeichen
MEDIUMTEXT                   Text mit einer max. Länge von 16.777.216 Zeichen
TIME                         Zeit; Format: HH:MM:SS oder HHMMSS oder HHMM oder HH
DATE                         Datum; Format: YYYY-MM-DD, wobei "-" jedes nicht numerische
                             Zeichen sein kann
TIMESTAMP                    setzt einen Datumswert beim Einfügen/Updaten einzelner Felder
                             automatisch auf das Systemdatum. Format:
                             YYYYMMDDHHMMSS. Wenn mehrere Felder den Typ
                             "TIMESTAMP" haben, wird immer nur das erste automatisch
                             geändert!




07.12.2011                                    WT/WG                                 Seite 6 von 25
              Kerschensteiner Schule                                                    Wachtmann
              BBSII Delmenhorst:                                                        Wittenberg
              Technische Assistenten Informatik
              Datenbanken – Informationen zum Thema SQL
                                                                                        2004



Beispiel:

Erstellung einer Tabelle mit dem Namen "angebote" mit fünf Spalten.

CREATE TABLE angebote
 (
  ang_lfr_nr INT NOT NULL,
  ang_lfr_art_nr CHAR(10) NOT NULL,
  ang_art_nr INT NOT NULL,
  ang_lfr_zeit INT,
  ang_preis DECIMAL(5,2)
 );

      Definition pro Spalte, ob ein Index vergeben werden soll bzw. ob NULL-Values erlaubt
      sind. NULL ist hier ein "nicht definierter Wert", d.h. die Spalte eines Datenbsatzes
      enthält keinen Wert (auch nicht Space oder "0"). Soll immer ein Wert festgelegt
      werden, so kann diese Spalte mit NOT NULL gekennzeichnet werden.

Beispiel zur Erstellung eines Index für die Tabelle "angebote":

CREATE UNIGUE INDEX ix101_1
   ON angebote (ang_lfr_nr, ang_lfr_art_nr, ang_art_nr);

Hiermit wird ein zusammengesetzter Index mit dem Namen "ix101" erstellt, der eindeutig
(UNIQUE) ist und aus den Spalten "ang_lfr_nr", "ang_lfr_art_nr", "ang_art_nr" der tabelle
besteht.

      Indizes dienen dem schnellen Zugriff auf große Datenmengen. Indizes über mehrere
      Felder sind möglich.




07.12.2011                                    WT/WG                             Seite 7 von 25
               Kerschensteiner Schule                                                 Wachtmann
               BBSII Delmenhorst:                                                     Wittenberg
               Technische Assistenten Informatik
               Datenbanken – Informationen zum Thema SQL
                                                                                      2004




Übungsdatenbank "gartenbank"
In den Beispielen und Übungen wird eine Gartenhandlung simuliert. Es handelt sich dabei um
die Bestellseite der Gartenhandlung mit einem Artikelstamm (Pflanzen), Lieferanten,
Angeboten und Bestellungen. Dies sind folgende Tabellen:

Tabelle pflanzen:
pfl_art_nr                    int           not null           Index
pfl_name                      char (17),
pfl_sorte                     char (9),
pfl_farbe                     char (8),
pfl_hoehe                     int
pfl_bl_beg                    int
pfl_bl_end                    int
pfl_preis                     decimal (5,2)

Tabelle pflanzschema:
s_pfl_kat                     char (10)
s_hoehe_1                     int
s_hoehe_2                     int
s_abstand                     int

Tabelle lieferanten:
lfr_nr                        int            not null          Index
lfr_name                      char (20)
lfr_str                       char (20)
lfr_ort                       char (20)

Tabelle angebote:
ang_lfr_nr                    int           not null           Index
ang_lfr_art_nr                char (10)     not null           Index
ang_art_nr                    int           not null           Index
ang_lfr_zeit                  int
ang_preis                     decimal (5,2)

Tabelle bestellungen:
bst_nr                        int           not null           Index
bst_lfr_nr                    int                              Index
bst_dat                       date
bst_lfr_dat                   date
bst_wert                      decimal (6,2)




07.12.2011                                     WT/WG                          Seite 8 von 25
               Kerschensteiner Schule                                                    Wachtmann
               BBSII Delmenhorst:                                                        Wittenberg
               Technische Assistenten Informatik
               Datenbanken – Informationen zum Thema SQL
                                                                                         2004



Tabelle bestell_pos:
pos_bst_nr                    int           not null             Index
pos_lfr_art_nr                char (10)     not null             Index
pos_bst_menge                 int
pos_bst_preis                 decimal (5,2)

Zwischen den Tabellen bestehen verschiedene Beziehungen, so wird in einer Bestellung nicht
der komplette Lieferantendatensatz aufgeführt, sondern nur seine Lieferantenummer
(Normalisierung wegen Datenredundanz). Bei verschiedenen Anfragen ist aber eine
Verbindung dieser Tabellen wieder sinnvoll (z.B. Druck einer Bestellung).

Die Verbindungsfelder (JOIN-Felder) im Überblick:

pflanzen       lieferanten angebote              bestellungen bestell_pos         pflanzschema
Join-Felder:
pfl_art_nr                     ang_art_nr
               lfd_nr          ang_lfr_nr        bst_lfr_nr
                                                 bst_nr        pos_bst_nr
                               ang_lfr_art_nr                  pos_lfr_art_nr

Datenfelder:
pfl_preis    lfr_name          ang_preis         bst_dat       pos_bst_preis      s_pfl_kat
pfl_name     lfr_str           ang_lfr_zeit      bst_lfr_dat   pos_bst_menge      s_hoehe_1
pfl_sorte    lfr_ort                             bst_wert                         s_hoehe_2
pfl_farbe                                                                         s_abstand
pfl_hoehe
pfl_bl_beg
pfl_bl_end


Achtung:
Die Join-Felder werden nicht fest im Datenmodell definiert. Erst bei der Anfrage selbst gibt
der Anwender die zu verbindenen Felder an. Es sind theoretisch alle Kombinationen denkbar
(auch z.B. sinnlose wie Lieferanten-Ort mit Pfalnzen-Nr.).




07.12.2011                                      WT/WG                            Seite 9 von 25
             Kerschensteiner Schule                                                  Wachtmann
             BBSII Delmenhorst:                                                      Wittenberg
             Technische Assistenten Informatik
             Datenbanken – Informationen zum Thema SQL
                                                                                     2004


                             3. Anfragesprache SQL


Lesen von Daten aus einer gefüllten Datenbank

Zum Lesen von Daten aus einer Datenbank wird der mächtige SELECT-Befehl verwendet.

SYNTAX:      SELECT                select - klausel                  Muß
             FROM                  from - klausel             Muß
             [WHERE                where - klausel]           Optional
             [GROUP BY             group by - klausel]        Optional
             [HAVING               having - Klausel]          Optional
             [ORDER BY             order by - Klausel]        Optional
             [INTO                 into - Klausel]            Nicht MySQL sonst Opt.



Select - Klausel (muß)
Angabe, was (welche Spalten) ausgegeben werden soll.

Syntax: SELECT [ ALL] | DISTINCT ] select-liste

ALL:         Datensätze, die in der Ergebnisrelation doppelt vorkommen, werden
             nicht gelöscht
DISTINCT:    doppelte Sätze werden gelöscht



Erlaubte Werte der Select-liste sind:
     Spaltennamen der in der from-Klausel angegebenen Tabellen
     alphanumerische oder numerische Konstanten
     Teile von alphanumerischen Daten
     Aggregatfunktionen angewand auf Spalten der angegebenen Tabellen
     Mathematische Formeln




07.12.2011                                   WT/WG                          Seite 10 von 25
               Kerschensteiner Schule                                                   Wachtmann
               BBSII Delmenhorst:                                                       Wittenberg
               Technische Assistenten Informatik
               Datenbanken – Informationen zum Thema SQL
                                                                                        2004


From - Klausel (muß)
Angabe, wo (in welcher Tabelle) die zu suchenden Daten stehen.

Syntax: FROM (tab_name [tab_pseudonym], ...)


Beispiele:

Liste alle Pflanzen auf:

       SELECT          *                                              (sel1)
       FROM            pflanzen


       SELECT          pfl_art_nr, pfl_name, pfl_sorte, pfl_farbe,    (sel2)

       FROM            pflanzen


Zeige alle Orte der Lieferanten an:

       SELECT                                                         (sel3)
       FROM            lieferanten

       SELECT                                                         (sel4)
       FROM            lieferanten


Gesucht sind die ersten 3 Buchstaben aller Orte der Lieferanten

       SELECT                                                         (sel5)
       FROM            lieferanten


Neben diesem Kürzel soll der ganze Ortsname erscheinen. Dabei soll über den einzelnen
Spalten die Überschriften 'kuerzel' und 'ort' stehen.

       SELECT                                                         (sel6)
       FROM            lieferanten




07.12.2011                                      WT/WG                          Seite 11 von 25
              Kerschensteiner Schule                                                        Wachtmann
              BBSII Delmenhorst:                                                            Wittenberg
              Technische Assistenten Informatik
              Datenbanken – Informationen zum Thema SQL
                                                                                            2004


Aggregatsfunktionen:
      COUNT (*)              Anzahl der Zeilen der Ergebnisrelation
      SUM (x)                Summe der Spalte x der Ergebnisrelation
      AVG (x)                Durchschnitt der Spalte (x) der Ergebnisrelation
      MIN (x)                Minimum der Spalte x der Ergebnisrelation
      MAX (x)                Maximun der Spalte x der Ergebnisrelation


Beispiele:

Wieviele Pflanzen sich gespeichert ?

       SELECT        COUNT (*)                                           (sel7)
       FROM          pflanzen


Wie hoch ist der maximale Preis einer Pflanze ?

       SELECT                                                            (sel8)
       FROM          pflanzen


Gesucht sind der maximale Preis, der minimale Preis, der Durchschnittspreis einer Pflanze,
die Anzahl aller Pflanzen und die Summe der einzelnen Preise.

       SELECT                                                            (sel9)


       FROM          pflanzen


Die Anfrage von eben soll noch um neue Namen für die einzelnen Werte ergänzt werden.

       SELECT                                                            (sel10)




       FROM          pflanzen




07.12.2011                                    WT/WG                                Seite 12 von 25
                 Kerschensteiner Schule                                                     Wachtmann
                 BBSII Delmenhorst:                                                         Wittenberg
                 Technische Assistenten Informatik
                 Datenbanken – Informationen zum Thema SQL
                                                                                            2004


Arithmetische Funktionen:
      +                 Addition
      -                 Subtraktion
      *                 Multiplikation
      /                 Division


Beispiele:

Gesucht ist pro Pflanze der Name, der Preis, die hinzukommende Steuer von 15% und der
Endpreis.

          SELECT        pfl_name, pfl_preis preis_netto,                 (sel11)
                        pfl_preis * 0.16 mehrwertsteuer,
                        pfl_preis * 1.16 preis_brutto
          FROM          pflanzen


Gesucht ist pro Bestellposition die Bestellnummer, der Einzelpreis, die Stückzahl und der
Endpreis pro Artikel.

          SELECT                                                         (sel12)

          FROM




07.12.2011                                       WT/WG                             Seite 13 von 25
              Kerschensteiner Schule                                                     Wachtmann
              BBSII Delmenhorst:                                                         Wittenberg
              Technische Assistenten Informatik
              Datenbanken – Informationen zum Thema SQL
                                                                                         2004


Order by - Klausel (optional)
Dient zur Sortierung der Ergebnismenge nach einer oder mehrerer Spalten. Alle angegebenen
Spalten müssen in der select - Klausel aufgeführt sein.

Syntax: ORDER BY (spalten_name [ ASC | DESC ], ... )

ASC:          Sortierung in aufsteigender Reihenfolge (Default-Wert)
DESC:         Sortierung in absteigender Reihenfolge


Beispiele:

Zeige alle Pflanzen sortiert nach ihrem Namen an.

        SELECT   pfl_name                                                (order1)
        FROM     pflanzen
        ORDER BY pfl_name


Zeige alle Pflanzennamen und ihre Preise sortiert nach den Preisen an. Der höchste Preis soll
zuerst ausgegeben werden. Bei gleichen Preisen soll nach Namen aufsteigend sortiert werden.


        SELECT                                                           (order2)
        FROM
        ORDER BY


oder

        SELECT                                                           (order3)
        FROM
        ORDER BY


Als Spalte in der ORDER BY-Klausel ist auch die Angabe der Spaltennummer oder eines
Synonym für eine Spalten möglich.

Beispiel order2:

        SELECT                                                           (order4)
        FROM
        ORDER BY




07.12.2011                                    WT/WG                             Seite 14 von 25
              Kerschensteiner Schule                                                 Wachtmann
              BBSII Delmenhorst:                                                     Wittenberg
              Technische Assistenten Informatik
              Datenbanken – Informationen zum Thema SQL
                                                                                     2004


Beispiel sel11 sortiert nach Bruttopreis absteigend (mit Synonym):

       SELECT                                                        (order5)


       FROM
       ORDER BY




07.12.2011                                    WT/WG                         Seite 15 von 25
               Kerschensteiner Schule                                                   Wachtmann
               BBSII Delmenhorst:                                                       Wittenberg
               Technische Assistenten Informatik
               Datenbanken – Informationen zum Thema SQL
                                                                                        2004


Where - Klausel (optional)
Angabe von Bedingungen, die für die Ergebnismenge gelten sollen.

Syntax: WHERE [ NOT ] bedingung [ { AND | OR } [ NOT ] bedingung, ... ]

NOT:           Negation der angegebenen Bedingung
AND:           Sowohl die Bedingung auf der linken Seite als auch die Bedingung auf
               der rechten Seite muß erfüllt sein
OR:            Mindestens eine Bedingungen auf der linken oder rechten Seite muß erfüllt
sein


Möglichkeiten für Bedingungen:

       Vergleiche

       Veknüpfungen mehrerer Tabellen (JOIN Operation)


Beispiele

a) ausdruck Vergleichsoperator ausdruck

Mögliche Vergleichsoperatoren:

       =                      gleich
       !=                     ungleich
       <>                     ungleich
       >                      größer
       <                      kleiner
       >=                     größer gleich
       <=                     kleiner gleich


        SELECT        *
        FROM          pflanzen

        WHERE         pfl_hoehe = 15                                    (vergl1a)
        WHERE         pfl_hoehe >= 15                                   (vergl1b)


b) ausdruck [ NOT ] BETWEEN ausdruck1 AND ausdruck2

        WHERE         pfl_hoehe between 10 AND 20                       (vergl2)



07.12.2011                                     WT/WG                           Seite 16 von 25
              Kerschensteiner Schule                                           Wachtmann
              BBSII Delmenhorst:                                               Wittenberg
              Technische Assistenten Informatik
              Datenbanken – Informationen zum Thema SQL
                                                                               2004



c) ausdruck [ NOT ] IN ( wert1, wert2, ...)

       WHERE         pfl_preis IN (1.8, 1.25, 2)               (vergl3)

   Achtung: Dezimalpunkte müssen als Punkt aufgeführt werden
           (amerikanische Schreibweise)



d) ausdruck [ NOT ] LIKE ”zeichenkette”

       Joker: %      steht für kein oder mehrere Zeichen
              _      steht für genau ein Zeichen

       WHERE         pfl_name LIKE ”A%”                        (vergl4a)
       WHERE         pfl_name NOT LIKE ”A%”                    (vergl4b)
       WHERE         pfl_name LIKE ”Aster”                     (vergl4c)
       WHERE         pfl_name LIKE ”Aste_”                     (vergl4d)


e) ausdruck IS [ NOT ] NULL

       WHERE         pfl_farbe IS NULL                         (vergl6a)
       WHERE         pfl_farbe IS NOT NULL                     (vergl6b)




07.12.2011                                    WT/WG                   Seite 17 von 25
              Kerschensteiner Schule                                                     Wachtmann
              BBSII Delmenhorst:                                                         Wittenberg
              Technische Assistenten Informatik
              Datenbanken – Informationen zum Thema SQL
                                                                                         2004


Group by - Klausel (optional)
Gruppierung der Ergebniszeilen nach bestimmten Spalten der Ergebnismenge.

Syntax: GROUP BY ( spalten_name [ ASC | DESC ] , ... )

Bemerkungen:

      Alle Spalten der Select - Klausel müssen in der Group by - Klausel aufgeführt werden.
      Alle Spalten der Group by - Klausel müssen als Spalten der Select - Klausel aufgeführt
      werden.
      Statt der Spaltennamen können auch entsprechende Zahlen in der Group by - Klausel
      aufgeführt werden.


Beispiele:

Welche Wohnorte treten in der Lieferantentabelle auf ?

       SELECT         lfr_ort                                            (group1)
       FROM           lieferanten

=> doppelte Wohnorte

       SELECT   lfr_ort                                                  (group2)
       FROM     lieferanten
       GROUP BY lfr_ort

(alternativ mit DISTINCT)


Vorteile von GROUP BY:
Zu jeder so definierten Gruppe können die Aggregatsfunktionen zu weiteren Auswertungen
benutzt werden.

Welche Wohnorte treten wie oft in der Lieferantentabelle auf ?

       SELECT                                                            (group3)
       FROM     lieferanten
       GROUP BY




07.12.2011                                    WT/WG                             Seite 18 von 25
              Kerschensteiner Schule                                                     Wachtmann
              BBSII Delmenhorst:                                                         Wittenberg
              Technische Assistenten Informatik
              Datenbanken – Informationen zum Thema SQL
                                                                                         2004



Für die Sorten "Baum", "Heide" und "Ranke", unterschieden jeweils nach deren Farben, soll
der Minimalpreis ermittelt werden.

       SELECT                                                          (group4)
       FROM          pflanzen
       WHERE                                                   AND

       GROUP BY
       ORDER BY


Zusätzlich sollen nun noch der Maximalpreis und die Differenz (Maximalpreis -
Minimalpreis) sortiert nach der Differenz (absteigend) angezeigt werden.


       SELECT                                                          (group5)


       FROM          pflanzen
       WHERE                                                   AND

       GROUP BY
       ORDER BY




07.12.2011                                    WT/WG                             Seite 19 von 25
              Kerschensteiner Schule                                                   Wachtmann
              BBSII Delmenhorst:                                                       Wittenberg
              Technische Assistenten Informatik
              Datenbanken – Informationen zum Thema SQL
                                                                                       2004


Having - Klausel (optional)
Die Having - Klausel bezieht sich auf eine vorangegangende Group by - Klausel und erlaubt,
die Ergebnisdaten weiter einzuschränken (bezogen auf die Aggregatsfunktionen).

Syntax: HAVING bedingung

Dabei dürfen als Bedingung nur Aggregatsfunktionen verwendet werden.


Beispiele:

Welche Wohnorte treten in der Lieferantentabelle mindestens zweimal auf ?

       SELECT        lfr_ort, COUNT (*)                                (having1)
       FROM          lieferanten
       GROUP BY      lfr_ort
       HAVING        COUNT (*) >= 2


Wie bereits oben (group4) soll für die Pflanzensorten "Baum", "Heide" und "Ranke" bzw.
deren Farben der Minimalpreis berechnet werden. Zusätzlich interessieren nur die
Minimalpreise, die zwischen 3 EURO und 11 EURO liegen.

       SELECT                                                          (group4)
       FROM          pflanzen
       WHERE                                                    AND

       GROUP BY
       HAVING
       ORDER BY




07.12.2011                                    WT/WG                           Seite 20 von 25
              Kerschensteiner Schule                                                     Wachtmann
              BBSII Delmenhorst:                                                         Wittenberg
              Technische Assistenten Informatik
              Datenbanken – Informationen zum Thema SQL
                                                                                         2004



Into temp - Klausel (optional) Nicht bei MySQL
Mittels der Into temp - Klausel werden die Resultate einer Suche in einer temporären Tabelle
gespeichert.

Syntax: INTO TEMP

Beispiele:

       SELECT    DISTINCT ang_art_nr                                            (into)
       FROM      angebote
       INTO TEMP angebote_art_nr

Eine Alternative zu INTO bietet die folgende Syntax:

CREATE TABLE <Tabellenname> AS SELECT ……
       CREATE TABLE    angebote_art_nr                                          (as_for_into)
       AS SELECT DISTINCT ang_art_nr
       FROM      angebote;




07.12.2011                                    WT/WG                             Seite 21 von 25
               Kerschensteiner Schule                                                 Wachtmann
               BBSII Delmenhorst:                                                     Wittenberg
               Technische Assistenten Informatik
               Datenbanken – Informationen zum Thema SQL
                                                                                      2004



Tabellenverknüpfungen
Eine Verknüpfung verbindet zwei oder mehrere Tabellen miteinander. Diese Bedingung wird
daher auch Verbundoperation oder JOIN genannt.

Beispiel:

Tabelle Lieferanten:

Lief-Nr       Name
5             Meier
9             Müller


Tabelle Bestellungen:

Bestell-Nr.        Lief-Nr.          Bestelldatum
47                 5                 01.04.2003
120                9                 11.11.2003
34                 5                 28.02.2003


JOIN dieser zwei Tabellen (kartesisches Produkt) ohne JOIN-Bedigung:

Bestell-Nr.        Lief-Nr.           Bestelldatum         Lief-Nr     Name
47                 5                  01.04.2003           5           Meier
47                 5                  01.04.2003           9           Müller
120                9                  11.11.2003           5           Meier
120                9                  11.11.2003           9           Müller
34                 5                  28.02.2003           5           Meier
34                 5                  28.02.2003           9           Müller

Gewünscht sind aber natürlich nur die Datensätze mit gleichen Lieferantennummern.

Ergebnis:

Bestell-Nr.        Lief-Nr.           Bestelldatum         Lief-Nr     Name
47                 5                  01.04.2003           5           Meier
120                9                  11.11.2003           9           Müller
34                 5                  28.02.2003           5           Meier




07.12.2011                                     WT/WG                         Seite 22 von 25
              Kerschensteiner Schule                                                      Wachtmann
              BBSII Delmenhorst:                                                          Wittenberg
              Technische Assistenten Informatik
              Datenbanken – Informationen zum Thema SQL
                                                                                          2004



Syntax: SELECT select-klausel FROM tab1, [ OUTER ] tab2, ...
        WHERE bedingung


Er gelten die gleichen Operationen wie oben.


Beispiele:

Für welche Pflanzen existieren Angebote?

       SELECT        *                                                 (join1)
       FROM          pflanzen, angebote
       WHERE         pfl_art_nr = ang_art_nr


Für welche Pflanzen existieren Angebote? Suchen sie die Pflanzennamen und die
Lieferantennummer aus dem Angebot.

       SELECT        pfl_name, ang_lfr_nr                              (join2)
       FROM
       WHERE


       SELECT        pfl_name, ang_lfr_nr                              (join2a)
       FROM          pflanzen p, angebote a
       WHERE


Für welche Pflanzen, für die der Angebotspreis über 8.50 EURO liegt, existieren Angebote?

       SELECT                                                          (join3)
       FROM
       WHERE                                              AND



Welche Pflanzen, die weniger als 1 EURO kosten, sind als niedrig einzustufen?

       SELECT                                                          (join4)
       FROM
       WHERE                                  AND               AND




07.12.2011                                     WT/WG                             Seite 23 von 25
              Kerschensteiner Schule                                                       Wachtmann
              BBSII Delmenhorst:                                                           Wittenberg
              Technische Assistenten Informatik
              Datenbanken – Informationen zum Thema SQL
                                                                                           2004


In wievielen Angeboten werden Astern angeboten?

       SELECT                                                           (join5)
       FROM
       WHERE



Welche Lieferanten liefern die Wasserpflanze "Froschbiss"?

       SELECT                                                           (join6)
       FROM
       WHERE



INNER/Outer Join:
Syntax: SELECT select-klausel FROM tab1 INNER JOIN tab2, ...
        ON tab1.attribut = tab2.attribut

Syntax: SELECT select-klausel FROM tab1 LEFT [OUTER] JOIN tab2, ...
        ON tab1.attribut = tab2.attribut


Aufgabe:
Darstellung aller Lieferantenangebote plus, falls vorhanden, die Daten möglicher
Bestellungen. Der Angebotspreis soll zwischen 1.00 EURO und 1.50 EURO liegen.

Falsch:

       SELECT                                                           (join7a)
       FROM
       WHERE

       SELECT                                                           (join7b)
       FROM                          INNER JOIN
       ON

Problem: Es werden nur die Angebote angezeigt, für die eine Bestellung vorliegt, alle anderen
Angebote ohne Bestellung nicht.

Richtig:

       SELECT                                                           (join8)
       FROM
       ON
07.12.2011                                    WT/WG                               Seite 24 von 25
                Kerschensteiner Schule                                          Wachtmann
                BBSII Delmenhorst:                                              Wittenberg
                Technische Assistenten Informatik
                Datenbanken – Informationen zum Thema SQL
                                                                                2004


Datenmanipulation mit SQL
Daten einfügen:

Syntax: INSERT INTO tabname [ (spalten_name, ...) ]
            { VALUES (wert1, wert2, ...) | SELECT - Anweisung }

Beispiele:

       INSERT INTO pflanzen                                    (insert1)
       VALUES (4712, "Rose", "Blume", "rot", 45, 6, 9, 2.45)

       INSERT INTO pflanzen (pfl_art_nr, pfl_name)             (insert2)
       VALUES (4713, "Tulpe")


Daten löschen:

Syntax: DELETE FROM tabname [ WHERE-Bedingung ]

Beispiele:

       DELETE FROM angebote_art_nr                             (delete1)

       DELETE FROM pflanzen                                    (delete2)
       WHERE pfl_art_nr = ‘4712’


Daten ändern:

Syntax: UPDATE tabname
        SET spalten_name = Ausdruck
            {, spalten_name = Ausdruck, ……}
        [ WHERE-Bedingung ]


Beispiele:

       UPDATE          pflanzen                                (update1)
       SET             pfl_preis = 1.50,
                       pfl_hoehe = 25
       WHERE           pfl_name = "Aster"




07.12.2011                                      WT/WG                  Seite 25 von 25

				
DOCUMENT INFO
Shared By:
Categories:
Tags:
Stats:
views:6
posted:12/7/2011
language:German
pages:25