Sie sind auf Seite 1von 60

SQL Sprache

Kurs 5+6+7

Lect. dr. Dana Boldeanu

SQL Sprache

Die strukturierte Abfragesprache SQL (englisch:

Structured Query Language) bildet einen Standard zur Formulierung von Abfragen.

Das SQL und das Abfragefenster bilden zwei verschiedene Darstellungsformen derselben

Abfrage.

Wenn man Einstellungen des Abfragefensters

ändern, aktualisiert Access automatisch den

korrespondierenden SQL-Befehl und umgekehrt.

Beispiel

Es gibt die Tabelle FIRMA mit folgende

Struktur:

FIRMA (Steuerkode,Name,Kapital)

Welche sind die Firmen mit den Kapital grösser als 20000 EUR?

4

4

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

Möglichkeit,

über

sogenannte Unterabfragen, eine komplexe

Anfrage in Teilen zu entwickeln.

 

SQL ist gleichzeitig DDL (Data Definition Language) und DML (Data Manipulation

Language).

SQL als DDL (Data Definition Language)

Mit Hilfe der DDL kann man wichtige Probleme lösen, u. zwar:

Schema Definition

Schemaänderung

Zugriffspfade zur Anfrageoptimierung

Generierung von Sichten.

Die wichtigsten Befehle sind:

CREATE TABLE

ALTER TABLE

CREATE INDEX

CREATE VIEW

DROP TABLE

DROP INDEX

DROP VIEW

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

7

Der Befehl CREATE TABLE

Der Befehl CREATE TABLE Bevor mit einer Tabelle gearbeitet werden kann, muss die Struktur der Daten

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

eine Tabelle

In

allgemeiner

Form

wird

folgendermaßen definiert:

CREATE TABLE Tabellenname

(Feld1 Datentyp[(Länge)] [NOT NULL], Feld2 Datentyp[(Länge)] [NOT NULL],

Feld3 Datentyp[(Länge)] [NOT NULL], …

[CONSTRAINT Indexname {PRIMARY KEY| UNIQUE|NOT NULL}]);

8

Beispiel 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

Create – > Query Design – > Show Table -> Close Query Tools - Design

Create > Query Design > Show Table -> Close

Query Tools - Design ->> Results -> SQL View

10
10

Wenn

dieser

Befehl ausgeführt

wird,

wird

in

Access

die

KONTO

Tabelle

mit

der

betreffenden Struktur gebildet

ausgeführt wird, wird in Access die KONTO Tabelle mit der betreffenden Struktur gebildet 11

Der Befehl ALTER TABLE

Der Befehl ALTER TABLE Bestehende Tabellen können geändert werden, indem ein neues Feld eingefügt wird: ALTER

Bestehende Tabellen können geändert werden, indem ein neues Feld eingefügt wird:

ALTER TABLE Tabellenname ADD COLUMN

Feldname Datentyp

Feldname Datentyp

Beispiele

/ DROP COLUMN

;

ALTER TABLE Konto ADD COLUMN Eröffnungsdatum DATE;

ALTER TABLE Personal DROP COLUMN Geburtsdatum;

Der Befehl CREATE INDEX

Die Idee, die hinter der Definition eines Zugriffspfades steckt

ist,

den Aufwand bei der Suche nach Daten zu den

Änderungs-operationen hin zu verlagern.

Die Methode besteht in der Definierung eines Indexes. Der Befehl 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 (höchstens einer pro Tabelle physisches

Gruppieren);

UNIQUE besagt, dass keine Duplikate möglich sind, kann zur Wahrung der Schlüssel Einzigkeit gebraucht werden.

Beispiel 1 CREATE INDEX Städtenamen ON Stadt(Name);

Beispiel 2

CREATE INDEX X ON Konto (Filiale,

KontoName ASC);

CREATE UNIQUE INDEX Y ON Konto(Filiale,Kontonr);

Der Befehl CREATE VIEW

Anstatt

Daten

physisch

in

ihrer

Struktur

zu

ändern,

erlauben

relationale

Systeme

mittels

des

Sichtenkonzepts

Änderungen.

(engl.

VIEWS)

auch

logische

Views (Sichten) sind das Ergebnis einer Query, auf dem

weitere Operationen durchgeführt werden. Sie sind

virtuelle 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];

15

Mit

dem

Klausel

WITH

CHECK

OPTION

kann

unbefugtes Aktualisieren verhindert werden.

Beispiel 1

Zu

Tabellen

LAND(Name, Einwohnerzahl, Hauptstadt,

LKode) und STADT(Name, Einwohnerzahl,

Lkode) soll mit Hilfe des Sichtenkonzepts eine

den

bereits

existierenden

Tabelle "Hauptstadt" angelegt werden.

Diese

soll

sowohl

den

Name

als

auch

den

prozentualen Anteil der Bevölkerung der

Hauptstadt an der Gesamtbevölkerung des

Zugehörigen Landes beinhalten:

CREATE VIEW Hauptstadt(Name, Bevölkerungsanteil)

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);

Der Befehl DROP TABLE

Der Befehl DROP TABLE Zum löschen der Schemadefinition benutzt man das Befehl DROP TABLE Tabellenname; Beispiel

Zum löschen 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 Löschen der Basistabellen werden die darauf definierten Sichten und Index - Strukturen auch gelöscht. Um unbedachte Fehler zu vermeiden, verbieten einige Systeme das Löschen von Relationen, die noch Tupel enthalten oder als Basis für Sichten dienen.

18

Der Befehl DROP INDEX Rolle: Löschen von Zugriffspfaden.

DROP INDEX Indexbezeichner;

Beispiel: DROP INDEX Y;

Der Befehl DROP VIEW

Rolle: Löschen von Sichten.

DROP VIEW Sichtenname;

Durch die Entfernung von Sichten keine Tupel gelöscht werden.

Beispiel: DROP VIEW Kundschaft;

SQL als DML (Data Manipulation Language)

Zur Verarbeitung der Daten betrachtet man im Rahmen der DML die

Punkte:

Suchen

Einfügen

Verändern

Löschen

Suchen der Daten

Man benutzt eine Basisstruktur, mit 3 Klauseln:

SELECT Felderliste entspricht der Projektion und zählt die

gewünschten Felder in der Zieltabelle auf;

FROM Tabellenliste entspricht dem Kartesischen Produkt der Tabellen;

WHERE Bedingungen entspricht dem Selektionsprädikat und

bezieht sich auf die Tabellen in der FROM Klausel. Die Bedingung

kann auch die Verknüpfungskriterien enthalten.

SQL-Query

SELECT [DISTINCT] select - liste FROM relation - liste WHERE bedingung GROUP BY spalten-liste HAVING bedingung ORDER BY spaltenliste [ ASC | DESC ]

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 * möglich, d.h. alle Attribute der

Relationen aus relation-liste.

bedingung Logische Prädikate (Attr op const oder Attr1 op Attr2, mit op aus (<, >, =, <=, >=, <>) kombiniert durch AND, OR und NOT.

DISTINCT ist ein optionales Schlüsselwort, um Duplikate im Resultat zu unterdrücken. Standardmäßig werden Duplikate nicht eliminiert!

Die minimale Struktur einer SQL Anfrage ist:

SELECT [ALL|DISTINCT|DISTINCTROW|TOP n]

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

FROM Tabelle1,Tabelle2,…Tabelle m

WHERE Bedingung;

Bemerkungen

ALL das Ergebnis wird alle Datensätze enthalten;

 

DISTINCT die doppelten Werte des betreffenden

Feldes werden im Ergebnis nicht eingetragen;

 

DISTINCTROW beseitigt die doppelten Datensaetze aus der Datenquelle erhalten durch die Vereinigung der Tabellen;

TOP

n

Im

Ergebnis

werden

nur

die

ersten

„n“

Datensätze angezeigt;

 

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

Die

WHERE

Klausel

enthält

auch

die

JOIN

Bedingungen.

 

Die

Bedingungen

dürfen

nicht

Agregatfunktionen

enthalten.

 

Die FROM Klausel kann auch Abfragennamen enthalten.

Beispiele

Es gibt die Tabelle

STADT(Name, Einwohner, Lcode)

Erste Frage:

Städte ?

Welche sind die Namen und Einwohnerzahlen aller

Lösung:

SELECT Name, Einwohnerzahl FROM Stadt;

Zweite Frage: Welche Länder (Lcode) sind in der Tabelle Stadt abgelegt?

Lösung:

SELECT DISTINCT Landeskode FROM Stadt;

Dritte Frage: Alle Informationen aus Tabelle LAND.

Lösung:

SELECT * FROM Land;

Beispiele

Frage: Welche Städte mit mehr als 2 Millionen Einwohner gibt es ? Lösung:

SELECT Name, Einwohnerzahl FROM Stadt WHERE Einwohnerzahl > 2000000;

Bemerkung Innerhalb des Prädikates sind im allgemeinen Folgende Operatoren zugelassen:

Vergleichsoperatoren : >=, <, =, >, >=, <> (ungleich);

BETWEEN

IN

NOT IN

IS NUL ; IS NOT NULL

Vergleichsoperator von Zeichenketten: LIKE

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;

Beispiel 2

Man soll eine Liste der Studenten im zweiten, dritten oder vierten Jahr anzeigen, deren Name mit dem Buchstaben A anfängt und die bei der Informatikprüfung 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

27

ORDER BY Student.Name ASC;

Standardfunktionen Erweiterung der Relationenoperationen durch Standardfunktionen

COUNT (*)

COUNT ( [DISTINCT] A) Anzahl (verschiedener) Werte in A

SUM ( [DISTINCT] A)

AVG ( [DISTINCT] A) MAX (A) MIN (A)

Anzahl Zeilen

Summe (verschiedener) Werte in A

Durchschnitt (versch.) Werte in A Maximal-Wert in Spalte A Minimal-Wert in Spalte A

Finde die Anzahl allen Studenten.

SELECT COUNT (*)

FROM Student

Finde das Durchschnittsalter allen Studenten

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

Finde das Minimalter allen Studenten mit Kategorie Steuer:

SELECT Min(Year(Date())-Year([Geburtsdatum])) AS Alter

FROM Student WHERE Kategorie=“Steuer";

Agregatfunktionen

Frage: Welche ist die Summe der Einwohnerzahlen aller Städte aus Deutschland?

Stadt (Stadtcode, StadtName, Einwohnerzahl)

Lösung:

SELECT SUM(Einwohnerzahl) As Gesamt

FROM Stadt

WHERE StadtName Like „*Deutschland*“;

Frage: Ermittelt die Anzahl aller Städte.

Lösung:

SELECT COUNT(*) As Staedtezahl FROM Stadt;

Bemerkung .

Die Funktion COUNT

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

29

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

Vertraege (VertragNr, Erklaerungen, Vdatum, Vwert)

Lösung:

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? Lösung:

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

Mittelwert FROM Vertraege WHERE Month([Vertragsdatum])=8;

30

Frage: Welche ist die grösste, bzw. die kleinste Anzahl der Abwesenheiten, die vom Anfang des

Jahres bis zum 31 März 2009 von den

Angestellten im Wirtschaftsbereich registriert wurden?

Lösung:

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“;

31

Gruppierung der Ergebnisstabelle

Man braucht noch zwei Klauseln: GROUP BY

und HAVING.

Frage: Wie viele Städte gibt es in den

einzelnen Ländern ?

Stadt (Stadtcode, StadtName, Einwohnerzahl, Landscode)

Lösung:

SELECT Stadtcode, COUNT(*) FROM Stadt GROUP BY Landescode;

Problem: Finden Sie alle Länder, die mehr als 4 Städte mit mehr als 1 Million Einwohner

haben.

Stadt (Stadtcode, StadtName, Einwohnerzahl, Landscode)

Lösung:

SELECT Landescode FROM Stadt,

Count(Stadtcode) as Nr

WHERE Einwohnerzahl > 1000000

GROUP BY Landescode HAVING COUNT(*) > 4;

33

Problem: Man ermittle die durschschnittliche bzw.

die gesamte Anzahl der Aktien, welche in den

Städten Bukarest und Ploiesti ausgestellt

wurden, eingeteilt nach ihrem Nennwert. Kapital (ID, Nennwert, Anz-Akt, Stadt)

Lösung:

SELECT Stadt, Nennwert, AVG([Anz_Akt]) AS Durchschnitt,

SUM([Anz_Akt]) AS Total FROM Kapital

GROUP BY Stadt, Nennwert

HAVING Stadt IN(„Bukarest“, „Ploiesti“);

Problem: Man soll die Liste der schlecht

zahlenden Kunden erhalten, welche

unbezahlte Rechnungen in einem Wert

höher als 2000 RON haben.

Lösung:

SELECT KName,

SUM([unbez_Wert]) AS Total

FROM Forderungen

GROUP BY KName

HAVING SUM(unbez_Wert) > 2000;

Problem: Man soll eine Übersicht derjenigen

Gebäudearten erhalten die durchschnittlich einen Versicherungswert von höher als 30000 RON haben

und für welche mehr als 50 Personen eine

Versicherung abschliessen wollen.

Versicherungen

Versich_Wert)

Lösung:

(Versich_code, Versich_datum, Art,

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;

36

Sortierung der Ergebnisstabelle

Sortierung der Ergebnisstabelle

Die Tabellen sind per Definition ungeordnet. Für

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], ];

Bemerkung : Als Ordnungskriterium sind auch

Felderkombinationen,

über

Namen

oder

Spaltenposition in der Ausgaberelation

spezifizierbar.

dem

Einwohnerzahl

aufsteigend geordnet an:

Problem:

Zeig

alle

Städte

dass

nach

die

mit

Buchstaben

S beginnen

Stadt (Stadtcode, StadtName, Einwohnerzahl)

Lösung:

SELECT StadtName, Einwohnerzahl FROM Stadt WHERE StadtName like „S*“ ORDER BY Einwohnerzahl;

38

Problem: Ermittelt alle Länder nach Anzahl der

Städte sortiert. Bei gleicher Anzahl von Städten sortiert aufsteigend nach Ländernamen.

Land (Lcode, Lname)

Stadt(StadtCode, SName, Lcode) Lösung:

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

39

ORDER BY COUNT(*), Land.Name ist unmöglich!

JOIN

Für 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;

Problem: Namen und Einwohnerzahl aller

Hauptstädte.

Land (Lcode, Lname)

Stadt(StadtCode, SName, Typ, Lcode)

Lösung:

SELECT Stadt.Name, Stadt.Einwohnerzahl

FROM Stadt INNER JOIN Land ON

Land.Lcode=Stadt.Lcode

WHERE Stadt.Typ=„Hauptstadt“;

Problem: Finde alle Staaten, zu denen

mindestens eine Beschreibung einer Stadt

vorhanden ist. Land (Lcode, Lname)

Stadt (StadtCode, SName, Lcode)

Lösung:

SELECT DISTINCT Land.LName

FROM Stadt, Land

WHERE Stadt.Lcode=Land.Lcode;

Problem: Man soll alle, an die Kunden monatlich gezahlten Zinsen berechnen und anzeigen, je

nach den angesammelten Summen bei einer

jährlichen Zinsenrate von 11%. Kunden (KCode, Kname, KAdresse)

Konto (KontoNr, KontoDatum, Summe, KCode)

Lösung:

SELECT KUNDEN.KName,

KONTO.Summe*(0.11/12) AS Zinsen

FROM Kunden,Konto WHERE KUNDEN.Kcode = KONTO.KCode ORDER BY KUNDEN.KCode;

Problem: Man soll eine Übersicht erstellen,

welche die fakturierten bzw. die einkassierten Summen für jede Rechnung und jeden Kunden

anzeigt.

Lösung:

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;

Bemerkung Der "normale" Join erzeugt nur Datensätze in der Ergebnistabelle, wenn der Schluesselwert der ersten Tabelle in der zweiten Tabelle vorkommt. Dieser Join wird in Access INNER JOIN genannt.

Im Gegensatz dazu erzeugt der OUTER_JOIN in der

Ergebnistabelle zumindest alle Tupel einer der beiden

Tabellen: linker Outer Join (LEFT JOIN) oder rechter Outer JOIN (RIGHT JOIN).

Die Verknüpfung der Tabellen kann mit Hilfe der WHERE Klausel (wie in vorherigen Beispielen) oder mit Hilfe der FROM Klausel definiert sein.

Inner-join

Es seien die Tabellen

FIRMA (Steuer code, Name, Kapital) Und KONTO (Kontonr, Summe, Zinsprozent, Geldeinheit, Kundencode)

seien die Tabellen FIRMA (Steuer code, Name, Kapital) Und KONTO (Kontonr, Summe, Zinsprozent, Geldeinheit, Kundencode) 46

46

Problem:

Anzeige

alphabetische

Liste

aus

Kunden zu denen mindestens ein Konto

haben und zeigen die berechnete Zinsen an.

Lösung:

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
48

Left outer join

Problem: Ermittelt vollständige Informationen über

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

ihre Zinsen. Lösung:

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
50

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;

AS Zinsen FROM FIRMA RIGHT JOIN KONTO ON FIRMA.[Steuer code]=KONTO.Kundencode ORDER BY FIRMA.Name; 51

Make Table Query

Problem:

Erstellen Sie eine neue Tabelle, die alle Verträge

März 2013 unterzeichnet enthält.

Vertrag (Vertragsnummer, Anfangsdatum, Ablaufsdatum, Informationen, Steuerkode) Lösung:

SELECT * INTO Vertraege_maerz

FROM Vertrag

WHERE Month([Anfangsdatum])=3 and

Year([Anfangsdatum])=2013;

Append Query

Problem:

Fügen Sie der Tabelle „verträge aus märz“ alle Datensätze aus Vertrag von Februar 2013 und mit Information „ohne Zins. Vertrag (Vertragsnummer, Anfangsdatum, Ablaufsdatum, Informationen, Steuerkode) Lösung:

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 Query

Problem:

Sie aktualisieren den Basispreis mit 10% für alle Produkte als Parameter eingefügt mit

Masseinheit „St“.

Produkt (Produktkode, Produktname, Masseinheit, Basispreis)

Lösung:

UPDATE Produkt SET Basispreis =

[Basispreis]*1.1

WHERE Produktname=[Geben Sie das

Produktname] and Masseinheit Like “St*”;

54

Delete Query

Problem: Löschen sie alle Datensätze wohin Ablaufdatum ist groesser als aktuellen

Datum.

Lösung:

DELETE Ablaufsdatum

FROM Vertrag

WHERE Ablaufsdatum>Date();

Wiederholung

Es gibt die folgenden Beziehungen:

Wiederholung Es gibt die folgenden Beziehungen: 56

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. Überprüfen

Sie

die

Liste

der

Produkte

in

einer

bestimmten

als

Parameter

angegeben

Rechnung

enthalten

3. Überprüfen Sie den Rechnungen, die mehr als 5 Produkte in April 2014 in Rechnung enthalten

4. Für Jahres 2013 soll für jedes Produkt der Gesamtwert aller in Rechnung gestellten Beträge angezeigt werden.

der

5. Aktualisieren

Sie

um

5%

den

Verkaufspreis

Produkte in der Kategorie Lebensmittel”, die nach dem

1. März 2014 bestellt wurden.

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();

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;

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;