kurs 5+6+7 - sql sprache
TRANSCRIPT
-
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