Kurs 5+6+7 - SQL Sprache

60
SQL Sprache Kurs 5+6+7 Lect. dr. Dana Boldeanu 1

Transcript of Kurs 5+6+7 - SQL Sprache

  • SQL SpracheKurs 5+6+7

    Lect. dr. Dana Boldeanu

    1

  • 2SQL Sprache

    Die strukturierte Abfragesprache SQL (englisch:Structured Query Language) bildet einenStandard zur Formulierung von Abfragen.

    Das SQL und das Abfragefenster bilden zweiverschiedene Darstellungsformen derselbenAbfrage.

    Wenn man Einstellungen des Abfragefenstersndern, aktualisiert Access automatisch denkorrespondierenden SQL-Befehl und umgekehrt.

  • 3Beispiel

    Es gibt die Tabelle FIRMA mit folgende

    Struktur:

    FIRMA (Steuerkode,Name,Kapital)

    Welche sind die Firmen mit den Kapital

    grsser als 20000 EUR?

  • 4

  • 5

  • 6 SQL ist eine deskriptive Anfragesprache.Es wird nicht spezifiziert, wie ein Ergebnis

    bestimmt werden soll, sondern was als

    Ergebnis erwartet wird.

    In SQL besteht die Mglichkeit, bersogenannte Unterabfragen, eine komplexe

    Anfrage in Teilen zu entwickeln.

    SQL ist gleichzeitig DDL (Data DefinitionLanguage) und DML (Data Manipulation

    Language).

  • 7SQL als DDL (Data Definition Language)

    Mit Hilfe der DDL kann man wichtige Probleme lsen, u. zwar:

    Schema Definition Schemanderung Zugriffspfade zur Anfrageoptimierung Generierung von Sichten.

    Die wichtigsten Befehle sind:

    CREATE TABLE ALTER TABLE CREATE INDEX CREATE VIEW DROP TABLE DROP INDEX DROP VIEW

  • 8Der Befehl CREATE TABLE

    Bevor mit einer Tabelle gearbeitet werden kann,muss die Struktur der Daten vereinbart werden(also der Feldname, Datentyp und Lnge).

    In allgemeiner Form wird eine Tabellefolgendermaen definiert:

    CREATE TABLE Tabellenname

    (Feld1 Datentyp[(Lnge)] [NOT NULL],

    Feld2 Datentyp[(Lnge)] [NOT NULL],

    Feld3 Datentyp[(Lnge)] [NOT NULL], [CONSTRAINT Indexname {PRIMARY KEY|

    UNIQUE|NOT NULL}]);

  • 9Beispiel 1

    Man definiert die Tabelle LIEFERANT mit 4 Attributen (Feldern):

    CREATE TABLE LIEFERANT

    (Lieferantkode INTEGER NOT NULL,

    Lieferantname TEXT(25),

    LieferantAdresse Text (50),

    Rechtsform Text (4),

    PRIMARY KEY (Lieferantkode));

    Beispiel 2

    Man definiert die Tabelle

    KONTO (filiale,kontonr,kname,saldo)

    mit Hilfe des DBVS Access

  • 10

    Create > Query Design > Show Table -> Close

    Query Tools - Design ->>

    Results -> SQL View

  • 11

    Wenn dieser

    Befehl ausgefhrt

    wird, wird in

    Access die

    KONTO Tabelle

    mit der

    betreffenden

    Struktur gebildet

  • 12

    Der Befehl ALTER TABLEBestehende Tabellen knnen gendert werden, indem ein

    neues Feld eingefgt wird:

    ALTER TABLE Tabellenname ADD COLUMN

    Feldname Datentyp ... / DROP COLUMN

    Feldname Datentyp ...;

    Beispiele

    ALTER TABLE Konto

    ADD COLUMN Erffnungsdatum DATE;

    ALTER TABLE Personal

    DROP COLUMN Geburtsdatum;

  • 13

    Der Befehl CREATE INDEX

    Die Idee, die hinter der Definition eines Zugriffspfades stecktist, den Aufwand bei der Suche nach Daten zu dennderungs-operationen hin zu verlagern.

    Die Methode besteht in der Definierung eines Indexes. DerBefehl ist:

    CREATE [UNIQUE] INDEX Indexbezeichner

    ON Tabellenname (Feldname [order]

    [, Feldname [order]]) [CLUSTER];wobei:

    ORDER kann ASC (Default) oder DESC sein; CLUSTER besagt dass der Index ein clustering index

    ist (hchstens einer pro Tabelle physischesGruppieren);

    UNIQUE besagt, dass keine Duplikate mglich sind, kannzur Wahrung der Schlssel Einzigkeit gebraucht werden.

  • 14

    Beispiel 1

    CREATE INDEX Stdtenamen ON

    Stadt(Name);

    Beispiel 2

    CREATE INDEX X ON Konto (Filiale,

    KontoName ASC);

    CREATE UNIQUE INDEX Y

    ON Konto(Filiale,Kontonr);

  • 15

    Der Befehl CREATE VIEW

    Anstatt Daten physisch in ihrer Struktur zu ndern,erlauben relationale Systeme mittels desSichtenkonzepts (engl. VIEWS) auch logischenderungen.

    Views (Sichten) sind das Ergebnis einer Query, auf demweitere Operationen durchgefhrt werden. Sie sindvirtuelle Relationen.

    Der Befehl ist:

    CREATE VIEW Sichtenname (S1, S2, Sn)AS SELECT F1, F2, Fn

    FROM T1 [, , Tk][WHERE Bedingung]

    [GROUP BY Feldname, ][WITH CHECK OPTION];

  • 16

    Mit dem Klausel WITH CHECK OPTION kann

    unbefugtes Aktualisieren verhindert werden.

    Beispiel 1

    Zu den bereits existierenden Tabellen

    LAND(Name, Einwohnerzahl, Hauptstadt,

    LKode) und STADT(Name, Einwohnerzahl,

    Lkode) soll mit Hilfe des Sichtenkonzepts eine

    Tabelle "Hauptstadt" angelegt werden.

    Diese soll sowohl den Name als auch den

    prozentualen Anteil der Bevlkerung der

    Hauptstadt an der Gesamtbevlkerung des

    Zugehrigen Landes beinhalten:

  • 17

    CREATE VIEW Hauptstadt(Name, Bevlkerungsanteil)

    AS SELECT Land.Haupstadt,

    Stadt.Einwohnerzahl/Land.Einwohnerzahl * 100

    FROM Stadt, Land

    WHERE Land.Hauptstadt=Stadt.Name;

    Beispiel 2

    Bilde die Sicht aller Kunden und der Filialen, bei denen diese entweder einen Kredit oder ein Konto haben.

    CREATE VIEW Kundschaft AS

    (SELECT filiale, kname FROM Konto)

    UNION

    (SELECT filiale, kname FROM Kredit);

  • 18

    Der Befehl DROP TABLE

    Zum lschen der Schemadefinition benutzt man das Befehl

    DROP TABLE Tabellenname;

    Beispiel

    DROP TABLE Land;

    DROP TABLE Konto;

    Bemerkung. Mit diesem Befehl entfernt man eine gesamte Tabelle. Bei Lschen der Basistabellen werden die darauf definierten Sichten und Index - Strukturen auch gelscht. Um unbedachte Fehler zu vermeiden, verbieten einige Systeme das Lschen von Relationen, die noch Tupel enthalten oder als Basis fr Sichten dienen.

  • 19

    Der Befehl DROP INDEX

    Rolle: Lschen von Zugriffspfaden.

    DROP INDEX Indexbezeichner;

    Beispiel: DROP INDEX Y;

    Der Befehl DROP VIEW

    Rolle: Lschen von Sichten.

    DROP VIEW Sichtenname;

    Durch die Entfernung von Sichten keine Tupel gelscht werden.

    Beispiel: DROP VIEW Kundschaft;

  • 20

    SQL als DML (Data Manipulation Language)

    Zur Verarbeitung der Daten betrachtet man im Rahmen der DML diePunkte:

    Suchen Einfgen Verndern Lschen

    Suchen der Daten

    Man benutzt eine Basisstruktur, mit 3 Klauseln:

    SELECT Felderliste entspricht der Projektion und zhlt diegewnschten Felder in der Zieltabelle auf;

    FROM Tabellenliste entspricht dem Kartesischen Produkt derTabellen;

    WHERE Bedingungen entspricht dem Selektionsprdikat undbezieht sich auf die Tabellen in der FROM Klausel. Die Bedingungkann auch die Verknpfungskriterien enthalten.

  • 21

    SQL-Query

    relation-liste Eine Liste mit Namen von Tabellen oder Sichten (Views), eventuell mit einem Alias nach dem Namen.

    select-liste Eine Liste von Attributen von Relationen aus der relation-liste. Wahlweise auch * mglich, d.h. alle Attribute der

    Relationen aus relation-liste.

    bedingung Logische Prdikate (Attr op const oder Attr1 opAttr2, mit op aus (, =, =, )

    kombiniert durch AND, OR und NOT.

    DISTINCT ist ein optionales Schlsselwort, um Duplikate im

    Resultat zu unterdrcken. Standardmig werden Duplikate

    nicht eliminiert!

    SELECT [DISTINCT] select-listeFROM relation-listeWHERE bedingungGROUP BY spalten-listeHAVING bedingungORDER BY spaltenliste [ ASC | DESC ]

  • 22

    Die minimale Struktur einer SQL Anfrage ist:

    SELECT

    [ALL|DISTINCT|DISTINCTROW|TOP n]

    {*|Feld1 [AS alias][,Feld2]}

    FROM Tabelle1,Tabelle2,Tabelle m

    WHERE Bedingung;

  • 23

    Bemerkungen ALL das Ergebnis wird alle Datenstze enthalten; DISTINCT die doppelten Werte des betreffenden

    Feldes werden im Ergebnis nicht eingetragen;

    DISTINCTROW beseitigt die doppelten Datensaetzeaus der Datenquelle erhalten durch die Vereinigung derTabellen;

    TOP n Im Ergebnis werden nur die ersten nDatenstze angezeigt;

    * - Wenn * statt einer Felderliste angegeben wird,werden alle Felder der Tabellen angezeigt.

    Die WHERE Klausel enthlt auch die JOINBedingungen.

    Die Bedingungen drfen nicht Agregatfunktionenenthalten.

    Die FROM Klausel kann auch Abfragennamen enthalten.

  • 24

    Beispiele

    Es gibt die Tabelle

    STADT(Name, Einwohner, Lcode)

    Erste Frage: Welche sind die Namen und Einwohnerzahlen aller Stdte ?

    Lsung:

    SELECT Name, Einwohnerzahl FROM Stadt;

    Zweite Frage: Welche Lnder (Lcode) sind in der Tabelle Stadt abgelegt?

    Lsung:

    SELECT DISTINCT Landeskode FROM Stadt;

    Dritte Frage: Alle Informationen aus Tabelle LAND.

    Lsung:

    SELECT * FROM Land;

  • 25

    Beispiele

    Frage: Welche Stdte mit mehr als 2 Millionen Einwohner gibt es ?

    Lsung:

    SELECT Name, Einwohnerzahl

    FROM Stadt

    WHERE Einwohnerzahl > 2000000;

    Bemerkung

    Innerhalb des Prdikates sind im allgemeinen Folgende Operatoren zugelassen:

    Vergleichsoperatoren : >=, , >=, (ungleich); BETWEEN IN NOT IN IS NUL ; IS NOT NULL Vergleichsoperator von Zeichenketten: LIKE

  • 26

    Beispiel 1

    Man soll eine Liste mit den gelagerten

    Waren aus den Lager 2 und 3 erhalten, die

    die Preise bestimmt haben.

    Tabelle Lager (Lnr, Benenung, Preis, Menge)

    SELECT Benennung, Preis

    FROM Lager

    WHERE Lnr IN(2,3) AND Menge > 0 AND

    Preis IS NOT NULL;

  • 27

    Beispiel 2

    Man soll eine Liste der Studenten im zweiten, dritten oder

    vierten Jahr anzeigen, deren Name mit dem Buchstaben

    A anfngt und die bei der Informatikprfung Noten

    zwischen 8 und 10 erhalten haben.

    Tabellen Student (StudentCode, Sname)

    Leistungsspiegel (LID, StudentJahr, Note, StudentCode)

    SELECT Student.Name, Leistungsspiegel.Note

    FROM Student INNER JOIN Leistungsspiegel ON

    Student.StudentCode=Leistungsspiegel.Student

    Code

    WHERE Leistungsspiegel.StudentYahr IN (2,3,4)

    AND Student.Name LIKE A* AND Leistungsspiegel.Note BETWEEN 8 AND 10

    ORDER BY Student.Name ASC;

  • 28

    Standardfunktionen

    COUNT (*) Anzahl ZeilenCOUNT ( [DISTINCT] A) Anzahl (verschiedener) Werte in ASUM ( [DISTINCT] A) Summe (verschiedener) Werte in AAVG ( [DISTINCT] A) Durchschnitt (versch.) Werte in AMAX (A) Maximal-Wert in Spalte AMIN (A) Minimal-Wert in Spalte A

    Erweiterung der Relationenoperationen durch Standardfunktionen

    SELECT Min(Year(Date())-Year([Geburtsdatum])) AS AlterFROM StudentWHERE Kategorie=Steuer";

    SELECT COUNT (*)FROM Student

    Finde die Anzahl allen Studenten.

    Finde das Minimalter allen Studenten mit Kategorie Steuer:

    SELECT Avg(Year(Date())-Year([Geburtsdatum])) AS AlterFROM Student;

    Finde das Durchschnittsalter allen Studenten

  • 29

    Frage: Welche ist die Summe der Einwohnerzahlen aller Stdte aus Deutschland?

    Stadt (Stadtcode, StadtName, Einwohnerzahl)

    Lsung:

    SELECT SUM(Einwohnerzahl) As Gesamt

    FROM Stadt

    WHERE StadtName Like *Deutschland*;

    Frage: Ermittelt die Anzahl aller Stdte.

    Lsung:

    SELECT COUNT(*) As Staedtezahl FROM Stadt;Bemerkung.

    Die Funktion COUNT

    - COUNT (*) liefert die Anzahl der Saetze in der Ergebnistabelle;

    Agregatfunktionen

  • 30

    Frage: Wie viele Kunden haben Leasingvertrge mit der Firma X in der Zeitspanne 130 Juni 2013 unterschrieben?

    Vertraege (VertragNr, Erklaerungen, Vdatum, Vwert)

    Lsung:

    SELECT COUNT(*) AS Nr_Vertraege

    FROM Vertraege

    WHERE VDatum BETWEEN #01/06/2013# AND #30/06/2013#;

    Frage: Welche sind die Gesamtausgaben des Monats August? Aber durchschnittliche Ausgaben?

    Lsung:

    SELECT SUM(VWert) AS Gesamtwert, AVG(VWert) AS Mittelwert

    FROM Vertraege

    WHERE Month([Vertragsdatum])=8;

  • 31

    Frage: Welche ist die grsste, bzw. die kleinsteAnzahl der Abwesenheiten, die vom Anfang desJahres bis zum 31 Mrz 2009 von denAngestellten im Wirtschaftsbereich registriertwurden?

    Lsung:

    SELECT MAX([nr_abw]) AS Max_abw, MIN([nr_abw]) AS Min_abw

    FROM Personal

    WHERE Month([PerDatum]) IN(1,2,3) AND Year([PerDatum])=2009 AND Bereich = Wirtschaft;

  • 32

    Gruppierung der Ergebnisstabelle

    Man braucht noch zwei Klauseln: GROUP BY

    und HAVING.

    Frage: Wie viele Stdte gibt es in den

    einzelnen Lndern ?

    Stadt (Stadtcode, StadtName, Einwohnerzahl, Landscode)

    Lsung:

    SELECT Stadtcode, COUNT(*)

    FROM Stadt

    GROUP BY Landescode;

  • 33

    Problem: Finden Sie alle Lnder, die mehr als

    4 Stdte mit mehr als 1 Million Einwohner

    haben.

    Stadt (Stadtcode, StadtName, Einwohnerzahl,

    Landscode)

    Lsung:

    SELECT Landescode FROM Stadt,

    Count(Stadtcode) as Nr

    WHERE Einwohnerzahl > 1000000

    GROUP BY Landescode

    HAVING COUNT(*) > 4;

  • 34

    Problem: Man ermittle die durschschnittliche bzw.

    die gesamte Anzahl der Aktien, welche in den

    Stdten Bukarest und Ploiesti ausgestellt

    wurden, eingeteilt nach ihrem Nennwert.

    Kapital (ID, Nennwert, Anz-Akt, Stadt)

    Lsung:

    SELECT Stadt, Nennwert,

    AVG([Anz_Akt]) AS Durchschnitt,

    SUM([Anz_Akt]) AS Total

    FROM Kapital

    GROUP BY Stadt, Nennwert

    HAVING Stadt IN(Bukarest, Ploiesti);

  • 35

    Problem: Man soll die Liste der schlecht

    zahlenden Kunden erhalten, welche

    unbezahlte Rechnungen in einem Wert

    hher als 2000 RON haben.

    Lsung:

    SELECT KName,

    SUM([unbez_Wert]) AS Total

    FROM Forderungen

    GROUP BY KName

    HAVING SUM(unbez_Wert) > 2000;

  • 36

    Problem: Man soll eine bersicht derjenigenGebudearten erhalten die durchschnittlich einenVersicherungswert von hher als 30000 RON habenund fr welche mehr als 50 Personen eineVersicherung abschliessen wollen.

    Versicherungen (Versich_code, Versich_datum, Art,Versich_Wert)

    Lsung:

    SELECT Art, AVG(Versich_Wert) AS Durchschnitt,

    COUNT(*) AS Versich_Gesamtanzahl

    FROM Versicherungen

    GROUP BY Art

    HAVING AVG(Versich_Wert) > 30000 AND

    COUNT(Versich_code) > 50;

  • 37

    Sortierung der ErgebnisstabelleDie Tabellen sind per Definition ungeordnet. Fr

    eine bestimmte Reihenfolge festzulegen,benutzt man eine ORDER BY Klausel.

    SELECT [Bereich] Felderliste

    FROM Tabellenliste

    [WHERE Bedingung]

    [GROUP BY...]

    [HAVING ... ]

    [ORDER BY Feld1 [ASC/DESC]

    [, Feld2 [ASC/DESC],..];

  • 38

    Bemerkung: Als Ordnungskriterium sind auch

    Felderkombinationen, ber Namen oder

    Spaltenposition in der Ausgaberelation

    spezifizierbar.

    Problem: Zeig alle Stdte dass die mit dem

    Buchstaben S beginnen nach Einwohnerzahl

    aufsteigend geordnet an:

    Stadt (Stadtcode, StadtName, Einwohnerzahl)

    Lsung:

    SELECT StadtName, Einwohnerzahl

    FROM Stadt

    WHERE StadtName like S*

    ORDER BY Einwohnerzahl;

  • 39

    Problem: Ermittelt alle Lnder nach Anzahl derStdte sortiert. Bei gleicher Anzahl von Stdtensortiert aufsteigend nach Lndernamen.

    Land (Lcode, Lname)

    Stadt(StadtCode, SName, Lcode)

    Lsung:

    SELECT Land.LName, COUNT(*)

    FROM Stadt, Land

    WHERE Stadt.Lcode = Land.Lcode

    GROUP BY Land.LName

    ORDER BY 2, Land.LName;

    Die Zahl 2 legt die zweite Spalte als Ordnungskriterium fest.

    Eine Formulierung der Art

    ORDER BY COUNT(*), Land.Name ist unmglich!

  • 40

    JOIN

    Fr Join die allgemeine Form (Equijoin)

    lautet:

    SELECT Feldernliste

    FROM T1,T2, Tm

    WHERE Ti.Feldname = Tj.Feldname AND

    Tq.Feldname = Tk.Feldname AND

    Tm-1.Feldname = Tm.Feldname;

  • 41

    Problem: Namen und Einwohnerzahl allerHauptstdte.

    Land (Lcode, Lname)

    Stadt(StadtCode, SName, Typ, Lcode)

    Lsung:

    SELECT Stadt.Name,

    Stadt.Einwohnerzahl

    FROM Stadt INNER JOIN Land ON Land.Lcode=Stadt.Lcode

    WHERE Stadt.Typ=Hauptstadt;

  • 42

    Problem: Finde alle Staaten, zu denen

    mindestens eine Beschreibung einer Stadt

    vorhanden ist.

    Land (Lcode, Lname)

    Stadt (StadtCode, SName, Lcode)

    Lsung:

    SELECT DISTINCT Land.LName

    FROM Stadt, Land

    WHERE Stadt.Lcode=Land.Lcode;

  • 43

    Problem: Man soll alle, an die Kunden monatlichgezahlten Zinsen berechnen und anzeigen, jenach den angesammelten Summen bei einerjhrlichen Zinsenrate von 11%.

    Kunden (KCode, Kname, KAdresse)

    Konto (KontoNr, KontoDatum, Summe, KCode)

    Lsung:

    SELECT KUNDEN.KName,

    KONTO.Summe*(0.11/12) AS Zinsen

    FROM Kunden,Konto

    WHERE KUNDEN.Kcode =

    KONTO.KCode

    ORDER BY KUNDEN.KCode;

  • 44

    Problem: Man soll eine bersicht erstellen,welche die fakturierten bzw. die einkassiertenSummen fr jede Rechnung und jeden Kundenanzeigt.

    Lsung:

    SELECT Rechnung.RNr, Kunde.KKode,

    Rechnung.RSumme,

    Einkassierungen.ESumme

    FROM Rechnung, Kunde, Einkassierungen

    WHERE Rechnung.KKode= Kunde.KKode

    AND Kunde.KKode= Einkassierungen.KKode

    ORDER BY Kunde.KKode;

  • 45

    Bemerkung Der "normale" Join erzeugt nur Datenstzein der Ergebnistabelle, wenn der Schluesselwert derersten Tabelle in der zweiten Tabelle vorkommt. DieserJoin wird in Access INNER JOIN genannt.

    Im Gegensatz dazu erzeugt der OUTER_JOIN in derErgebnistabelle zumindest alle Tupel einer der beidenTabellen: linker Outer Join (LEFT JOIN) oder rechterOuter JOIN (RIGHT JOIN).

    Die Verknpfung der Tabellen kann mit Hilfe der WHEREKlausel (wie in vorherigen Beispielen) oder mit Hilfe derFROM Klausel definiert sein.

  • 46

    Inner-join

    Es seien die Tabellen

    FIRMA (Steuer code, Name, Kapital)

    Und

    KONTO (Kontonr, Summe, Zinsprozent,

    Geldeinheit, Kundencode)

  • 47

    Problem: Anzeige alphabetische Liste ausKunden zu denen mindestens ein Kontohaben und zeigen die berechnete Zinsen an.

    Lsung:

    SELECT FIRMA.Name, KONTO.Geldeinheit, KONTO.Summe, (KONTO.Summe*KONTO.Zinsprozent/12)/100 AS Zinsen

    FROM FIRMA INNER JOIN KONTO ON

    FIRMA.[Steuer code]=KONTO.Kundencode

    ORDER BY FIRMA.Name ASC;

  • 48

  • 49

    Left outer join

    Problem: Ermittelt vollstndige Informationen ber

    die Kunden (Firmen) (mit- oder ohne Konto) und

    ihre Zinsen.

    Lsung:

    SELECT FIRMA.[Steuer code], FIRMA.Name,

    FIRMA.Kapital, KONTO.Kontonr, KONTO.Geldeinheit,

    (KONTO.Summe*KONTO.Zinsprozent/12)/100 AS Zinsen

    FROM FIRMA LEFT JOIN KONTO ON

    FIRMA.[Steuer code]=KONTO.Kundencode

    ORDER BY FIRMA.Name;

  • 50

  • 51

    Right outer join

    SELECT FIRMA.[Steuer code], FIRMA.Name,

    FIRMA.Kapital, KONTO.Kontonr, KONTO.Geldeinheit,

    (KONTO.Summe*KONTO.Zinsprozent/12)/100 AS Zinsen

    FROM FIRMA RIGHT JOIN KONTO

    ON FIRMA.[Steuer code]=KONTO.Kundencode

    ORDER BY FIRMA.Name;

  • Make Table QueryProblem:

    Erstellen Sie eine neue Tabelle, die alle Vertrge

    Mrz 2013 unterzeichnet enthlt.

    Vertrag (Vertragsnummer, Anfangsdatum,

    Ablaufsdatum, Informationen, Steuerkode)

    Lsung:

    SELECT * INTO Vertraege_maerz

    FROM Vertrag

    WHERE Month([Anfangsdatum])=3 and

    Year([Anfangsdatum])=2013;

    52

  • Append QueryProblem:

    Fgen Sie der Tabelle vertrge aus mrz alle Datenstzeaus Vertrag von Februar 2013 und mit Information ohneZins.

    Vertrag (Vertragsnummer, Anfangsdatum, Ablaufsdatum,

    Informationen, Steuerkode)

    Lsung:

    INSERT INTO Vertraege_maerz (Vertragsnummer,

    Anfangsdatum, Ablaufsdatum, Informationen, Steuerkode )

    SELECT Vertragsnummer, Anfangsdatum, Ablaufsdatum,

    Informationen, Steuerkode

    FROM Vertrag

    WHERE Anfangsdatum Between #2/1/2013# And

    #2/28/2013# AND Informationen="ohne Zins"; 53

  • Update QueryProblem:

    Sie aktualisieren den Basispreis mit 10% fr

    alle Produkte als Parameter eingefgt mit

    Masseinheit St.

    Produkt (Produktkode, Produktname,

    Masseinheit, Basispreis)

    Lsung:

    UPDATE Produkt SET Basispreis =

    [Basispreis]*1.1

    WHERE Produktname=[Geben Sie das

    Produktname] and Masseinheit Like St*;54

  • Delete Query

    Problem: Lschen sie alle Datenstze wohin

    Ablaufdatum ist groesser als aktuellen

    Datum.

    Lsung:

    DELETE Ablaufsdatum

    FROM Vertrag

    WHERE Ablaufsdatum>Date();

    55

  • Wiederholung

    56

    Es gibt die folgenden Beziehungen:

  • Wiederholung

    1. Es soll in alphabetischer Reihenfolge die Liste der

    Kunden aus Bukarest und Iasi angezeigt werden,

    welche im aktuellen Monat Produkte bestellt haben.

    2. berprfen Sie die Liste der Produkte in einer

    bestimmten als Parameter angegeben Rechnung

    enthalten

    3. berprfen Sie den Rechnungen, die mehr als 5

    Produkte in April 2014 in Rechnung enthalten

    4. Fr Jahres 2013 soll fr jedes Produkt der Gesamtwert

    aller in Rechnung gestellten Betrge angezeigt werden.

    5. Aktualisieren Sie um 5% den Verkaufspreis der

    Produkte in der Kategorie Lebensmittel, die nach dem1. Mrz 2014 bestellt wurden.

    57

  • 1. SELECT KUNDEN.[Kunden name],

    KUNDEN.[Kunden adresse],

    BESTELLUNGEN.Bestellungsnr

    FROM KUNDEN INNER JOIN

    BESTELLUNGEN ON KUNDEN.Steuercode

    = BESTELLUNGEN.Steuerkode

    WHERE (KUNDEN.[Kunden adresse] Like

    "*Bucuresti*" Or KUNDEN.[Kunden adresse]

    Like "*Sibiu") AND

    Month([BESTELLUNGEN].[Datum der

    Bestellung])=Month(Date();

    58

  • 2. SELECT PRODUKTE.[Produkt name]

    FROM PRODUKTE INNER JOIN [INHALT DER RECHNUNG]

    ON PRODUKTE.Produktkode = [INHALT DER

    RECHNUNG].Produktkode

    WHERE [INHALT DER RECHNUNG].Rechnungsnr=[Geben

    Sie die Rechnungsnummer];

    3. SELECT RECHNUNGEN.Rechnungsnr

    FROM RECHNUNGEN INNER JOIN [INHALT DER

    RECHNUNG] ON RECHNUNGEN.Rechnungsnr = [INHALT

    DER RECHNUNG].Rechnungsnr

    WHERE RECHNUNGEN.[Datum der Rechnung] Between

    #4/1/2014# And #4/30/2014#

    GROUP BY RECHNUNGEN.Rechnungsnr

    HAVING Count([INHALT DER RECHNUNG].Produktkode)>5;59

  • 4. SELECT [INHALT DER RECHNUNG].Produktkode,

    Sum([RQuantitaet]*[Erwerbungspreis]) AS Gesamtwert

    FROM RECHNUNGEN INNER JOIN [INHALT DER

    RECHNUNG] ON RECHNUNGEN.Rechnungsnr = [INHALT

    DER RECHNUNG].Rechnungsnr

    WHERE Year([Datum der Rechnung])=2013

    GROUP BY [INHALT DER RECHNUNG].Produktkode;

    5. UPDATE PRODUKTE, BESTELLUNGEN, [INHALT DER

    BESTELLUNG]

    SET Preis = [Preis]*1.1

    WHERE PRODUKTE.Kategorie="Lebensmittel" AND

    BESTELLUNGEN.[Datum der Bestellung]>#3/1/2014# and

    BESTELLUNGEN.Bestellungsnr = [INHALT DER

    BESTELLUNG].Bestellungsnr and PRODUKTE.Produktkode

    = [INHALT DER BESTELLUNG].Produktkode;

    60