Eine relationale Tabelle (Basis- oder Abfrageergebnis) repräsentiert eine Anwendungsbeziehung/Assoziation. Es enthält die Zeilen, deren Werte so miteinander verknüpft sind. Dh, dass aus einem charakterisierenden Prädikat (Anweisungsvorlage) eine echte Aussage (Aussage) wird.
Ihre Basis-Prädikate & Tabellen sind so etwas wie:
-- ID identifies a person named FNAME LNAME and ...
Personnel(id, fname, lname, ...)
-- equipment ID was added by person AID and rented by person RID and ...
Equipment(id, aid, rid, ...)
Wir ein Abfrageergebnis Prädikat aus Basis Prädikate, logische Operatoren und Bedingungen bauen. Damit der Abfrageausdruck Zeilen zurückgibt, die dieses Prädikat erfüllen, ersetzen wir Basisprädikate durch entsprechende Basisnamen und logische Operatoren durch entsprechende Beziehungsoperatoren.
Zeilen, bei denen eine Person mit Vornamen Namen hinzugefügt Ausrüstung 77:
/* rows where
for some e.ID, ..., p.ID, ...,
p.FNAME = NAME
and equipment e.ID was added by person e.AID and rented by person e.RID and ...
and p.ID identifies a person named p.FNAME p.LNAME and ...
and p.ID = e.AID
and e.ID = 77
*/
select p.fname as name
from Equipment e join Personnel p on p.id = e.aid
where e.id = 77
Zeilen, bei denen Personen-ID mit Nachnamen Namen Mietgegenstände von Person AID mit Nachnamen ANAME hinzugefügt:
/* rows where
for some e.ID, ..., r.ID, ..., a.ID, ...,
r.ID = ID and r.LNAME = NAME and a.ID = AID and a.LNAME = ANAME
and equipment e.ID was added by person e.AID and rented by person e.RID and ...
and r.ID identifies a person named r.FNAME r.LNAME and ...
and r.ID = e.RID
and a.ID identifies a person named a.FNAME a.LNAME and ...
and a.ID = e.AID
*/
select r.id, r.lname as name, a.id as aid, a.lname as aname
from Equipment e
join Personnel r on r.id = e.rid
join Personnel a on a.id = e.aid
Der Prädikat für eine Basistabelle unter Verwendung von Spalten, denen ein Alias vorangestellt ist, wird der Tabellenname AS dieser Alias. Das UND von Basisprädikaten wird JOIN. Das UND einer Bedingung wird EIN oder WO. Die Gleichheit der Ergebnisspalten mit vorangestellten Spalten wird zu einem impliziten oder expliziten AS. Is there any rule of thumb to construct SQL query from a human-readable description?
FKs (Fremdschlüssel) werden häufig, aber fälschlicherweise als "Beziehungen" bezeichnet. Sie müssen nicht wissen, welche FKs abgefragt werden sollen. Sie teilen dem DBMS nur mit, dass Werte für bestimmte Spalten auch Werte für bestimmte andere Spalten sein müssen. (Für Integrität und Optimierung.) FK entspricht tatsächlich Instanzen einer Meta Beziehung/Zuordnung Tabellen. (Gleichwertig, auf Prädikate. Äquivalent, auf Beziehungen/Zuordnungen.) Wie durch bestimmte DBMS Metadatentabellen mit Prädikaten über Werte für bestimmte Spalten dargestellt, die auch Werte für bestimmte andere Spalten sein müssen.
Bitte fügen Sie das Schema Ihrer Tabellen zu Ihrer Frage hinzu. – reaanb
... und einige Abfragen und Beispieltabellenwerte für Eingabe, Ausgabe und gewünschte Ausgabe. Lesen Sie über [fragen] und [mcve] s. PS Fremdschlüssel ("Beziehungen") haben nichts mit Abfragen zu tun. Sie teilen dem DBMS nur mit, dass Werte für einige Spalten auch Werte für andere Spalten sein müssen. Eine Tabelle (Basis- oder Abfrageergebnis) repräsentiert eine Anwendungsbeziehung/Assoziation. Geben Sie für jede Tabelle (Basis und Abfrage) das an, indem Sie angeben, was eine Zeile über die Anwendung sagt, indem Sie in der Tabelle sind. – philipxy