RQBE-Abfragen mit FoxPro 2.5

MATNR NAME LEHRST
ABCX1 Müller DB
FRSR2 Gross BS
GFDS7 Meier RS
OUZT9 Klein IS
TTHC9 Meier DB

Tabelle 1 PRO1 (Einschreibliste 1)

MATNR NAME LEHRST
FRSR2 Gross BS
GOJK4 Baum SWT
NIKT7 Bauer IS
TTHC9 Meier DB
ZTRE5 Klein RS

Tabelle 2 PRO2 (Einschreibliste 2)

MATNR NAME ORT DATUM
ABCX1 Müller Berlin 27.03.73
FRSR2 Gross Halle 14.09.70
GFDS7 Meier Dresden 02.07.71
GOJK4 Baum Leipzig 01.08.73
NIKT7 Bauer Chemnitz 27.04.69
OUZT9 Klein Berlin 19.11.70
TTHC9 Meier Dresden 23.09.71
ZTRE5 Klein Erfurt 22.11.70

Tabelle 3 IMMA (Immatrikulation von Studenten)

LST LNAME LEITER TITEL VORGESETZTER GEHALT
BS Betriebssysteme Hubricht Dr. tec Richter 2.677,45 DM
DB Datenbanken Richter Prof. Dr. sc.   4.681,00 DM
IS Informationssysteme Franke Diplominformatker Richter 3.722,00 DM
RS Rechnersysteme Müller   Hubricht 2.741,56 DM
SWT Softwaretechnologie Reinhardt Dr. sc Müller 2.321,89 DM

Tabelle 4 LS (Bezeichnungen und Leiter der Lehrstühle)

MATNR LST DB
ABCX1 DB 1
FRSR2 BS 4
GFDS7 RS 3
GOJK4 SWT 2
NIKT7 IS 4
OUZT9 IS 5
TTHC9 DB 3
ZTRE5 RS 3

Tabelle 5 NOTEN (Noten von Studenten verschiedener Lehrstühle im Fach "Datenbanken")

PRNUMMER MATNR1 MATNR2 VON BIS BESTANDEN
01/GRA-5 ZTRE5 OUZT9 01.12.96 18.12.96 Nein
14/INF-4 NIKT7 GFDS7 23.04.95 10.10.96 Ja
23/RET-3 ZTRE5 GFDS7 11.03.95 04.04.95 Ja

Tabelle 6 PRAKTIKUM

Es wird auf die Beispielrelationen PR01, PRO2, IMMA, LS, NOTEN und PRAKTIKUM zurückgegriffen. Alle Erklärungen beziehen sich auf Standard-SQL und können in RQBE oder ACCESS voneinander abweichen!!!

Projektion und Selektion bezüglich einer Tabelle

1. Gesucht sind Matrikelnummer und Lehrstuhl aller Studenten!

SELECT DISTINCT Noten.matnr, Noten.lst;
FROM Noten

8 relevante Zieldatensätze

Ausdrücke in der RQBE

2. Gesucht sind Noten aller Studenten im Fach Datenbanken nach einem Ausdrucksfeld "Note im fach Datenbanken"!

Fenster zur Festlegung des Ausdrucks - hier: Note im Fach Datenbanken

SELECT DISTINCT "Note im Fach Datenbanken", Noten.db;
FROM Noten

8 relevante Zieldatensätze

Bedingungen in der WHERE-Klausel

allgemein: WHERE <search condition> (true oder false)

3. Gesucht sind die Namen aller Studenten, welche aus Halle kommen!

SELECT Imma.name;
FROM Imma;
WHERE Imma.ort = 'Halle'

Hinweis: Distinct ist deshalb nicht geschalten, weil es möglich ist, daß mehrere Studenten mit gleichem Namen aus Halle kommen und eine Unterdrückung dieser Anzeige das Ergebnis verfälschen würde!

1 relevanter Zieldatensatz

4. Gesucht sind die Namen aller Studenten, deren Namen mit "M" beginnt!

SELECT Imma.name;
FROM Imma;
WHERE Imma.name = "M"

3 relevante Zieldatensätze

5. Gesucht sind die Namen aller Studenten, deren Matrikelnummer eine "1" enthält!

SELECT Imma.matnr;
FROM Imma;
WHERE Imma.matnr LIKE "%1%"

1 relevanter Zieldatensatz

6. Gesucht sind die Namen aller Studenten, welche vor 1971 geboren wurden!

SELECT Imma.name;
FROM Imma;
WHERE Imma.datum < CTOD("01.01.71")

4 relevante Zieldatensätze

7. Gesucht alle Immatrikulations-Angaben zu den Studenten, welche "Meier" heißen!

SELECT Imma.name, Imma.matnr, Imma.ort, Imma.datum;
FROM Imma;
WHERE Imma.name == "Meier"

2 relevante Zieldatensätze

8. Gesucht sind die Matrikelnummern aller Studenten, deren Leistungen im Fach Datenbanken 1 oder 4 betragen!

SELECT Noten.matnr;
FROM Noten;
WHERE Noten.db = 1;
OR (Noten.db = 4)

3 relevante Zieldatensätze

9. Gesucht sind die Name und Lehrstuhl-Bezeichnung der Leiter, die über keinen akademischen Grad verfügen!

SELECT Ls.lst, Ls.leiter;
FROM Ls;
WHERE Ls.titel NOT LIKE "%"

1 relevanter Zieldatensatz

10. Gesucht sind Matrikelnummer und Lehrstuhl aller Studenten, deren Note im Fach Datenbanken besser als 2 ist!

SELECT Noten.matnr, Noten.lst;
FROM Noten;
WHERE Noten.db < 2

1 relevanter Zieldatensatz

11. Gesucht sind die Matrikelnummern der Studenten mit Namen "Müller", des Lehrstuhles Datenbanken der Einschreibliste 1!

SELECT Pro1.matnr;
FROM Pro1;
WHERE Pro1.name = "Müller"

1 relevanter Zieldatensatz

12. Gesucht sind die Namen aller Studenten, deren Namen mit "M" beginnt und welche nicht aus Dresden kommen!

 

SELECT DISTINCTROW IMMA.NAME

FROM IMMA

WHERE (((IMMA.NAME) Like "M*") AND (Not (IMMA.ORT)="Dresden"));

1 relevanter Zieldatensatz

13. Gesucht sind die Namen der Leiter aller Lehrstühle, die einen akademischen Abschluß haben und nicht "Hubricht" heißen!

SELECT DISTINCTROW LS.LEITER

FROM LS

WHERE ((Not (LS.LEITER)="Hubricht") AND (Not (LS.TITEL) Is Null));

3 relevante Zieldatensätze

  1. Komplexe Bedingungen mit Vorrangregelung

14. Gesucht ist der Name der Studenten, die Meier heißen, und aus Dresden oder Halle kommen!

SELECT DISTINCTROW IMMA.NAME

FROM IMMA

WHERE (IMMA.NAME="Meier") AND (IMMA.ORT="Dresden") OR (IMMA.ORT="Halle");

3 relevante Zieldatensätze (falsch)

SELECT DISTINCTROW IMMA.NAME

FROM IMMA

WHERE (IMMA.NAME="Meier") AND ((IMMA.ORT="Dresden") OR (IMMA.ORT="Halle"));

2 relevante Zieldatensätze (richtig)

  1. IN-Prädikat:

SELECT <projection> FROM join WHERE bezeichner IN ('ausdruck1','ausdruck2');

15. Gesucht alle Angaben zu den Studenten, welche "Meier", "Bauer" oder "Groß" heißen!

SELECT DISTINCTROW IMMA.MATNR, IMMA.NAME, IMMA.ORT

FROM IMMA

WHERE (((IMMA.NAME) In ("Meier","Bauer","Groß")));

4 relevante Zieldatensätze

  1. BETWEEN-Prädikat:

SELECT <projection> FROM <join> WHERE <bezeichner> BETWEEN (<ausdruck1> AND <ausdruck2>);

16. Gesucht sind alle Angaben zu den Studenten, welche im Fach Datenbanken mit einer Note zwischen 1 bis 4 abgeschlossen haben!

SELECT DISTINCTROW NOTEN.MATNR

FROM NOTEN

WHERE (((NOTEN.DB) Between 1 And 4));

7 relevante Zieldatensätze

  1. JOINS in der FROM-Klausel - allgemein: FROM <tabelle_1> JOIN <tabelle_2>

17. Gesucht sind Namen, Vornamen, der Lehrstuhl sowie die Note im Fach Datenbanken aller Studenten!

SELECT DISTINCTROW IMMA.MATNR, IMMA.NAME, NOTEN.LST, NOTEN.DB

FROM IMMA INNER JOIN NOTEN ON IMMA.MATNR = NOTEN.MATNR;

8 relevante Zieldatensätze

18. Wer ist wessen Leiter?

SELECT DISTINCTROW LS.LEITER, LS_1.LEITER

FROM LS INNER JOIN LS AS LS_1 ON LS.VORGESETZTER = LS_1.LEITER;

4 relevante Zieldatensätze

19. Wer ist verdient mehr als sein Chef?

SELECT DISTINCTROW LS.LEITER

FROM LS INNER JOIN LS AS LS_1 ON LS.VORGESETZTER = LS_1.LEITER

WHERE (((LS.GEHALT)>[LS_1].[Gehalt]) AND ((LS_1.LEITER)<>[LS].[Leiter]));

1 relevanter Zieldatensatz

20. Welche Studenten haben miteinander Praktikum gemacht und dieses nicht bestanden?

SELECT DISTINCTROW IMMA.NAME, IMMA_1.NAME

FROM (IMMA INNER JOIN PRAKTIKUM ON IMMA.MATNR = PRAKTIKUM.MATNR2) INNER JOIN IMMA AS IMMA_1 ON PRAKTIKUM.MATNR1 = IMMA_1.MATNR

WHERE (((PRAKTIKUM.BESTANDEN)=False));

1 relevanter Zieldatensatz

25. Welche Studenten sind in den Immatrikulationslisten PRO1 und PRO2eingetragen?

SELECT PRO1.MATNR, PRO1.NAME, PRO1.LEHRST

FROM PRO1

UNION SELECT DISTINCTROW PRO2.MATNR, PRO2.NAME, PRO2.LEHRST

FROM PRO2;

8 relevante Zieldatensätze

  1. Berechnete Abfragen:

26. Gesucht ist die Höhe des Beitrages an die Gesellschaft für Informatik" der Lehrstuhlleiter, wenn der Monatsbeitrag 2,7% vom Bruttogehalt beträgt!

SELECT DISTINCTROW LS.TITEL, LS.LEITER, [LS]![Gehalt]/100*2.7

AS [Beitrag Gesellschaft für Informatik]

FROM LS;

5 relevante Zieldatensätze

  1. Aggregierende (zusammenfassende) Funktionen: HAVING <function>

27. Gesucht ist das Durchschnittsgehalt der Professoren!

SELECT DISTINCTROW Avg(LS.GEHALT) AS [Das Durchschnittsgehalt]

FROM LS;

1 relevanter Zieldatensatz

28. Gesucht ist das Geburtsdatum des ältesten Studenten!

SELECT DISTINCTROW Max(IMMA.DATUM) AS [ältester Student]

FROM IMMA;

1 relevanter Zieldatensatz

  1. Sortierungen: ORDER BY <feldname>

29. Gesucht ist eine Liste der Lehrstuhlleiter-Gehälter aufsteigend sortiert!

SELECT DISTINCTROW LS.TITEL, LS.LEITER, LS.GEHALT

FROM LS

ORDER BY LS.GEHALT;

5 relevante Zieldatensätze

30. Gesucht ist eine Liste der Namen von immatrikulierten Studenten, wobei der jüngste zuerst geführt wird!

SELECT DISTINCTROW IMMA.NAME, IMMA.DATUM

FROM IMMA

ORDER BY IMMA.DATUM DESC;

8 relevante Zieldatensätze

  1. Gruppierungsfunktionen: GROUP BY <feldname>

31. Gesucht ist eine Liste der Wohnorte der immatrikulierten Studenten sowie die Angabe der Zahl von Studenten, die aus dem gleichen Ort stammen!

SELECT Count(IMMA.NAME) AS [Anzahl von NAME], IMMA.ORT

FROM IMMA

GROUP BY IMMA.ORT

ORDER BY Count(IMMA.NAME);

8 relevante Zieldatensätze

32. Gesucht ist der Name des Studenten mit der besten Note im Fach Datenbanken!

SELECT DISTINCTROW Avg(LS.GEHALT) AS [Das Durchschnittsgehalt]

FROM LS;

1 relevanter Zieldatensatz

  1. Quantifizierende Prädikate

ALL

ANY

SOME

EXISTS

  1. Subqueries

ALL

ANY

SOME

EXISTS

  1. Aktionsabfragen