Datenbanksystemkonzepte (Chinesisch, sechste Ausgabe) – Antworten auf die Fragen der Lektion in Kapitel 3

Tippen ist nicht einfach, klicken Sie auf ein kostenloses „Gefällt mir“! ! !

3.1 Schreiben Sie im Universitätsmodus die folgende Abfrage in SQL. (Es wird empfohlen, diese Abfragen tatsächlich in einer Datenbank auszuführen und dabei die Beispieldaten zu verwenden, die wir auf der Website des Buchs, db-book.com, bereitstellen. Dort finden Sie auch Anweisungen zum Einrichten einer Datenbank und zum Laden der Beispieldaten.) Klassenzimmer (
Gebäude, Raumnummer, Kapazität)

Abteilung(Abteilungsname, Gebäude, Budget)

Kursinformationen (Kurs-ID, Titel, Abteilungsname, Credits).

Registrierung von Lehrerinformationen (ID, Name, Abteilungsname, Gehalt) für den Lehrer

Abschnitt (Kurs-ID, Sek.-ID, Semester, Jahr, Gebäude, Raumnummer, Zeitfenster-ID) Kursinformationen

Lehrt (ID, Kurs-ID, Sek.-ID, Semester, Jahr) Lehrinformationen

Student (ID, Name, Abteilungsname, Gesamtkredit)

Nimmt Kursauswahlinformationen (ID, Kurs-ID, Sek.-ID, Semester, Jahr, Note) entgegen

Informationen zum Berater (s_ID, i_ID).

Time_slot(time_slot_id, day, start_time, end_time)

Prereq(course_id, prereq_id)

A. Suchen Sie nach dem Namen eines 3-Credit-Kurses, der von der Comp.Sci.-Abteilung angeboten wird.

Titel auswählen

Formkurs

Wheredept_name = 'Comp.Sci.' und Credits = 3;

B. Finden Sie die Kennungen aller Schüler, die von einem Lehrer namens Einstein unterrichtet wurden, und stellen Sie sicher, dass die Ergebnisse keine Duplikate enthalten.

Ursprüngliche Antwort:

Wählt_ID aus

Von(Name auswählen, s_ID

Formlehrer, Berater

Whereinstructor.ID = Advisor.i_ID)

       Wobei Name = 'Einstein'

       Geänderte Antwort:

       Grund für die Änderung: Das obige Screening richtet sich an Schüler unter dem Namen eines Lehrers namens Einstein als Berater. Die Frage sollte so verstanden werden, dass sie sich auf die Schüler bezieht, die in dem von dem Lehrer namens Einstein angebotenen Kurs unterrichtet werden. Daher wird die SQL-Abfrageanweisung wie folgt geändert:

       Lehrerbeziehung:

              Abschnitt naturaljoin unterrichtet Natural-Join-Lehrer

              (Kurs-ID, Sek.-ID, Semester, Jahr, Gebäude, Raumnummer, Zeitfenster-ID, ID, Name, Abteilungsname, Gehalt)

       Kursauswahl für Studierende

              Studentnatural Join Takes

              (ID, Name, Abteilungsname, Gesamtkredit, Kurs-ID, Sek.-ID, Semester, Jahr, Note)

       Der Hauptcode, der einen Kurs bestimmt, ist (Kurs-ID, Sek_ID, Semester, Jahr).

       Daher muss die Lehrerbeziehung mithilfe des Hauptcodes des Kurses mit der Schülerbeziehung verknüpft werden. Anschließend können die von einem bestimmten Lehrer unterrichteten Schüler herausgefiltert werden.

       Die vollständige SQL-Anweisung lautet wie folgt:

       Wählen Sie „distinctstudent.ID“ aus

       Von (Abschnitt naturaljoin unterrichtet Natural-Join-Ausbilder)

                     Beitreten (Student nimmt natürlichen Beitritt an)

                            Verwendung von (Kurs-ID, Sek.-ID, Semester, Jahr)

       Wo section.name = 'Einstein';

C. Finden Sie das höchste Gehalt für Lehrer heraus

Implementiert mit Set-Vergleichsanweisungen:

Gehalt auswählen

Formlehrer

Wheresalary >= all (Gehalt auswählen

VonAusbilder);

Implementiert mit Aggregatfunktionen:

Wählen Sie max(Gehalt)

VonAusbilder;

D. Finden Sie alle Lehrer mit dem höchsten Gehalt (es kann mehr als einen Lehrer mit demselben Gehalt geben).

SelectID, Name

Vom Lehrer

Wheresalary = (max(Gehalt) auswählen

VonAusbilder);

E. Finden Sie die Anzahl der Teilnehmer für jeden im Herbst 2009 angebotenen Kursabschnitt.

Ursprüngliche Antwort:

Selectcourse_id, count(eindeutige ID)

Fromtakes Natural-Join-Abschnitt

Dabei ist Semester = „Herbst“ und Jahr = 2009

Group bycourse_id;

Geänderte Antwort:

Selectcourse_id,sec_id, count(eindeutige ID)

Fromtakes Natural-Join-Abschnitt

Dabei ist Semester = „Herbst“ und Jahr = 2009

Group bycourse_id, sec_id;

Filterung für das Attribut sec_id hinzugefügt, da derselbe Kurs im Herbst 2009 möglicherweise zweimal angeboten wird und wir das Kurssegment berücksichtigen müssen.

F. Von allen im Herbst 2009 angebotenen Kursabschnitten finden sich die meisten Kursteilnehmer.

Ursprüngliche Antwort:

Withmax_student (course_id, sec_id,num) as

(Wählen Sie course_id,sec_id, count (distinctID)

Von nimmt natürlichen Join-Abschnitt

Wobei Semester = „Herbst“ und Jahr = 2009

Gruppieren Sie nach Kurs-ID, Sek.-ID

)

              Wählen Sie max(num)

              Von max_student;

Beachten Sie die Verwendung von with...as... zum Definieren temporärer Beziehungen

Verwenden Sie eine andere Schreibweise

     Wählen Sie max. (Einschreibung)

  Von (Wählen Sie die Anzahl (eindeutige ID) als Registrierung aus

Von nimmt natürlichen Join-Abschnitt

Wobei Semester = „Herbst“ und Jahr = 2009

Gruppieren nach course_id, sec_id);

G. Finden Sie den Kursabschnitt mit den meisten Einschreibungen im Herbst 2009.

Withmax_student (course_id, sec_id,num) as

(Wählen Sie course_id,sec_id, count (distinctID)

Von nimmt natürlichen Join-Abschnitt

Wobei Semester = „Herbst“ und Jahr = 2009

Gruppieren Sie nach Kurs-ID, Sek.-ID

)

              Selectcourse_id, sec_id

              Frommax_student

              Wobei num = (select max(num)

Von max_student);

3.2 Angenommen, Sie erhalten eine Beziehung grade_points(note, Punkte), die die Umrechnung von Buchstabennoten in das Verhältnis zu numerischen Punktzahlen ermöglicht. Beispielsweise kann die Note „A“ 4 Punkten, „A-“ 3,7 Punkten, „B+“ 3,3 Punkten, „B“ 3 Punkten usw. zugeordnet werden. Der Notenwert, den ein Student in einem bestimmten Kurs (Kursabschnitt) erhält, ist definiert als die Punktzahl, die sich aus der Anzahl der Credits multipliziert mit der Zahl ergibt, die der Note entspricht, die der Student im Kursabschnitt erhalten hat. Schreiben Sie angesichts der oben genannten Beziehungen und unseres Universitätsschemas jede der folgenden Abfragen in SQL. Der Einfachheit halber kann davon ausgegangen werden, dass kein Tupel einen Nullwert für die Note annimmt.
A. Ermitteln Sie die Summe der Notenpunkte, die der Student mit der ID 12345 auf Grundlage aller vom Studenten belegten Kurse erreicht hat.

Summe auswählen (Credits*Punkte)

Von nimmt Natural Joincourse Natural Join Grade_Points

Wobei ID = '12345'

Um zu verhindern, dass der Student irgendwelche Kurse wählt, kann die obige Antwort wie folgt verbessert werden:

(Summe auswählen(Credits*Punkte)

Von nimmt Natural Join Kurs Natural Join Grade_Points

Wobei ID = '12345')

Union

(Wählen Sie 0

Vom Studenten

Wo nimmt.ID = '12345' und existiert nicht (wählen Sie *

Aus Takes

Wo nimmt.ID= '12345'));

Beachten Sie die Verwendung von Union-Operationen und die Verwendung der Existenzerkennung

B. Ermitteln Sie den durchschnittlichen Notendurchschnitt (GPA) der oben genannten Studenten, indem Sie die Summe der Notenpunkte durch die Gesamtzahl der Credits in den relevanten Kursen dividieren.

Wählen Sie (Summe (Credits*Punkte))/ (Summe(Credits))

Von nimmt Natural Joincourse Natural Join Grade_Points

Wobei ID = '12345';

C. Ermitteln Sie den Durchschnitt der Ausweise und Notenwerte jedes Schülers.

ID auswählen, (Summe(Credits*Punkte)) / (Summe(Credits))

Von nimmt Natural Joincourse Natural Join Grade_Points

Nach ID gruppieren;

3.3 Schreiben Sie im Universitätsmodus die folgenden Anweisungen zum Einfügen, Löschen und Aktualisieren in SQL.
A. Geben Sie jedem Lehrer in der Comp.Sci.-Abteilung eine Gehaltserhöhung von 10 %.

Update-Instruktor

Setsalary = Gehalt*1.1

Wheredept_name = 'Comp.Sci.';

B. Löschen Sie alle Kurse, die nicht angeboten wurden (d. h. nicht in der Abschnittsbeziehung erscheinen).

Aus Kurs löschen

Wherecourse.course_id nicht in (wählen Sie course_id aus

Formularabschnitt);

C. Fügen Sie jeden Schüler mit einem Wert über 100 im Attribut „tot_cred“ als Lehrer in derselben Abteilung mit einem Gehalt von 10.000 US-Dollar ein.

Einfügen in den Lehrer

SelectID, Name, Abteilungsname, 10000

VonStudent

Wheretot_cred > 10000;

3.4 Betrachten Sie die Datenbank der Versicherungsgesellschaft in Abbildung 3-18, wobei der Unterstrich der Primärschlüssel ist. Erstellen Sie die folgende SQL-Abfrage für diese relationale Datenbank:
A. Ermitteln Sie die Gesamtzahl der Personen, deren Fahrzeuge im Jahr 2009 in Verkehrsunfälle verwickelt waren.

Ursprüngliche Antwort:

Selectcount (eindeutige Fahrer-ID)

Vom beteiligtennatürlichen Beitrittsunfall

WoDatum = 2009;

Antwort ändern:

Beachten Sie, dass die Uhrzeit (Datum) nicht das Jahr (Jahr) darstellt. Ändern Sie die Antwort daher wie folgt

Selectcount (eindeutige Fahrer-ID)

Vonbeteiligter natürlicher Beitrittsunfall

Datum zwischen dem Datum „00.00.2009“ und dem Datum „31.12.2009“.

B. Fügen Sie der Datenbank einen neuen Vorfall hinzu und legen Sie für jedes erforderliche Attribut einen beliebigen Wert fest.

Diese Frage kann zunächst einige Parameter annehmen. Nach Abschluss des Datenbank-Hinzufügungsvorgangs können alle Attribute geändert werden.

Einfügung in einen Unfall

       Werte(4007, '2009-09-01', 'Berkeley')

Einfügen in Teilgenommen

       Wählen Sie 4007, c.license, P.driver_id, 3000

       Von (Person als p) natürlich beitreten (besitzt aso) natürlich beitreten (Auto als c)

       Wobei p.name ='Jones';

C. Entfernen Sie den Mazda von „John Smith“.

Aus dem Auto löschen

Wheremodel = 'Mazda' und Lizenz in (Lizenz auswählen

Von besitzt natürliche verbundene Person

Wobei Name = 'John Smith');

Person(Fahrer_ID,Name,Adresse)Versicherte Person

Auto (Führerschein, Modell, Jahr) versichertes Auto

Unfallinformationen (Berichtsnummer, Datum, Ort).

Owns(driver_id,license)Die Beziehung zwischen der versicherten Person und dem versicherten Auto

Details zum beteiligten Unfall (Berichtsnummer, Führerschein, Fahrer-ID, Schadenshöhe).

3.5 Angenommen, es besteht eine Beziehung zwischen den Noten (ID, Punktzahl) und wir hoffen, Schüler anhand der folgenden Kriterien zu benoten: wenn Punktzahl <40, erhalten Sie F; wenn 40≤Punktzahl<60, erhalten Sie C; wenn 60≤Punktzahl<80 , bekomme B; wenn 80≤score Habe ein A. Schreiben Sie eine SQL-Abfrage, um die folgenden Vorgänge abzuschließen:
A. Zeigt die Note jedes Schülers basierend auf der Notenbeziehung an.

SelectID,

              Fall

                     Wenn die Punktzahl <40 ist, dann „F“

                     Wenn die Punktzahl <60 ist, dann „C“

                     Wenn die Punktzahl <80 ist, dann „B“

                     Sonst 'A'

              Ende

Frommarks;

B. Finden Sie die Anzahl der Schüler in jeder Stufe.

Mit Noten wie (ID auswählen,

              Fall

                     Wenn die Punktzahl <40 ist, dann „F“

                     Wenn die Punktzahl <60 ist, dann „C“

                     Wenn die Punktzahl <80 ist, dann „B“

                     Sonst'A'

              Ende als Note

Von Noten)

Selectgrade-Anzahl (eindeutige ID)

Fromgrades

Gruppenweise;

3.6 Beim SQL-Operator „like“ wird die Groß-/Kleinschreibung beachtet, aber die Funktion „lower()“ für eine Zeichenfolge kann verwendet werden, um eine Übereinstimmung ohne Berücksichtigung der Groß-/Kleinschreibung zu erreichen. Um die Funktionsweise zu veranschaulichen, schreiben Sie eine Abfrage, die Systeme findet, deren Namen die Teilzeichenfolge „sci“ enthalten, wobei die Groß- und Kleinschreibung ignoriert wird.
Wählen Sie den Abteilungsnamen aus

Von der Abteilung

Wo niedriger(Abteilungsname) wie '%sci%';

3.7 Betrachten Sie die SQL-Abfrage
Selectdistinct p.a1

Fromp,r1,r2

Wobei p.a1=r1.a1 oder p.a1=r2.a1

Unter welchen Bedingungen wählt diese Abfrage p.a1-Werte aus, die entweder in r1 oder r2 liegen? Untersuchen Sie sorgfältig die Situation, in der r1 oder r2 leer sein könnten.

P, r1, r2 sind nicht leer

3.8 Betrachten Sie die Bankdatenbank in Abbildung 3-19, in der der unterstrichene Schlüssel der Primärschlüssel ist. Erstellen Sie die folgende SQL-Abfrage für diese relationale Datenbank:
A. Finden Sie alle Kunden der Bank, die Konten, aber keine Kredite haben.

Ursprüngliche Antwort

Wählen Sie Kundenname aus

Vom Einleger

Wherecustomer_name nicht in (wählen Sie den Kundennamen aus

Vom Kreditnehmer);

Ändern Sie die Schreibweise

(Wählen Sie den Kundennamen aus

VonEinleger)

Außer

(Wählen Sie den Kundennamen aus

Vom Kreditnehmer)

Achten Sie auf die Verwendung der Außer-Differenz-Operation

B. Finden Sie die Namen aller Kunden, die in derselben Stadt und in derselben Straße wie „Smith“ wohnen.

Ursprüngliche Antwort:

Wählen Sie Kundenname aus

Vom Kunden

Where(customer_street,customer_city) = (select customer_street,customer_city

Vom Kunden

Wo customer_name = 'Smith');

Eine andere Möglichkeit, es zu schreiben:

Wählen Sie F.Kundenname aus

From(customer as F) join (customer as S) using(ustomer_street,customer_city)

WhereS.customer_name = 'Smith';

C. Finden Sie die Namen aller Filialen, in denen Konten von Kunden mit Wohnsitz in „Harrison“ eröffnet wurden.

Wählen Sie einen eindeutigen Filialnamen aus

Fromaccount natural beitreten Einzahler natural beitreten Kunde

Wherecustomer_city = 'Harrison';

Filialinformationen (Branchenname, Filialstadt, Assets-Assets).

Kunde (Kundenname, Kundenstraße, Kundenstadt)Kundeninformationen

Kreditinformationen (Kreditnummer, Name der Filiale, Betrag).

Kreditnehmer (Kundenname, Kreditnummer)Kreditgeberinformationen

Kontoinformationen (Kontonummer, Filialname, Kontostand).

Einleger (Kundenname, Kontonummer) Informationen zur Kontoperson

Abbildung 3-19

3.9 Betrachten Sie die Mitarbeiterdatenbank in Abbildung 3-20, in der die Primärschlüssel unterstrichen sind. Schreiben Sie SQL-Ausdrücke für jede der folgenden Abfragen:
Employee(employee_name,street,city)

Werke(Mitarbeitername,Firmenname,Gehalt)

Firma(Firmenname,Stadt)

Manager(Mitarbeitername,Managername)

Abbildung 3-20

A. Hier finden Sie die Namen aller Mitarbeiter, die für „First Bank Corporation“ arbeiten, sowie deren Wohnort.

Wählen Sie Mitarbeitername und Stadt aus

Von den natürlichen Verbindungen der Mitarbeiter

Wo Firmenname = 'FirstBank Corporation';

B. Finden Sie den Namen, die Straße und den Wohnort aller Mitarbeiter, die für „First Bank Corporation“ arbeiten und deren Gehalt 10.000 US-Dollar übersteigt.

Wählen Sie Mitarbeitername, Straße und Stadt aus

Von den natürlichen Verbindungen der Mitarbeiter

Wobei Firmenname = „FirstBank Corporation“ und Gehalt >10000;

C. Finden Sie in der Datenbank alle Mitarbeiter, die nicht für „First Bank Corporation“ arbeiten.

(Wählen Sie den Mitarbeiternamen aus

Vom Mitarbeiter)

Außer

(wählen Sie Mitarbeitername aus

Von den natürlichen Verbindungen der Mitarbeiter

Wo Firmenname = 'FirstBank Corporation');

D. Finden Sie in der Datenbank alle Mitarbeiter, die ein höheres Gehalt haben als jeder Mitarbeiter bei „Small Bank Corporation“.

Wählen Sie Mitarbeitername aus

Aus Werken

Wo Gehalt > (selectmax(salary)

Aus Werken

Wobei Firmenname = „Kleine Bankgesellschaft“

Gruppieren nach Firmenname);

E. Angenommen, ein Unternehmen kann Niederlassungen in mehreren Städten haben. Finden Sie alle Unternehmen in allen Städten, in denen „Small Bank Corporation“ ansässig ist.

Ursprüngliche Antwort

Wählen Sie Firmenname aus

Firma gründen

Wo Stadt in (Stadt auswählen

Von der Firma

Wo Firmenname = 'SmallBank Corporation');

       Überarbeitete Antwort

       Der zuletzt generierte Firmenname in der ursprünglichen Antwort enthält „Small Bank Corporation“, vielleicht möchten wir „Small Bank Corporation“ nicht einbeziehen

(Wählen Sie den Firmennamen aus

Firma gründen

Wo Stadt in (Stadt auswählen

Von der Firma

Wobei Firmenname = 'SmallBank Corporation'))

       Außer

(Wählen Sie den Firmennamen aus

Von der Firma

Wobei Firmenname = 'Small Bank Corporation');

F. Finden Sie das Unternehmen mit den meisten Mitarbeitern.

Mit A as(selectcompany_name, count(employee_name) as num

Aus Werken

Nach Firmenname gruppieren)

       Firmenname auswählen, max(num)

       Von einem;

       Eine andere Art zu schreiben

       Wählen Sie Firmenname aus

       Aus Werken

       Gruppieren Sie nach Firmenname

       Mit count (employee_name) >= all(selectcount(employee_name)

Aus Werken

Gruppieren nach Firmenname);

G. Finden Sie die Unternehmen, bei denen das Durchschnittsgehalt höher ist als das Durchschnittsgehalt bei First Bank Corporation.

Mit A als (wählen Sie Firmenname, avg(salary) als avg_salary

Aus Werken

Nach Firmenname gruppieren)

       Wählen Sie Firmenname aus

       Von einem

       Wobei avg_salary > (wählen Sie avg_salary

Von einem

Wo Firmenname = 'First Bank Corporation');

3.10 Betrachten Sie die relationale Datenbank in Abbildung 3-20 und geben Sie den SQL-Ausdruck für jede der folgenden Abfragen an:
A. Ändern Sie die Datenbank so, dass „Jones“ jetzt in der Stadt „Newtown“ lebt.

       Mitarbeiter aktualisieren

       Stadt setzen = 'Newtown'

       Wo Employee_name = 'Jones';

B. Eine Gehaltserhöhung von 10 % für alle Manager der FirstBank Corporation, deren Gehälter 100.000 US-Dollar nicht übersteigen, und nur eine Erhöhung von 3 % für diejenigen, deren Gehälter 100.000 US-Dollar übersteigen

       Updata funktioniert als T

       Setze T.salary = t.salary *1.03

       Wo T.employee_name in (selectmanager_name

Von verwaltet)

                     Und T.company_name = 'FirstBank Corporation'

Und t.salary >100000;

       Updata funktioniert als T

       Setze T.salary = t.salary *1.1

       Wo T.employee_name in (selectmanager_name

Von verwaltet)

                     Und T.company_name = 'FirstBank Corporation'

Und t.salary <=100000;

Eine andere Art zu schreiben

Update funktioniert

Gehalt festlegen = Gehalt*(Fall

Wenn das Gehalt > 100.000 ist, dann 1,03

Sonst 1.1)

Wo Mitarbeiternamein (wählen Sie manager_name

Frome-Manager)

              Und firmenname = 'First BankCorporation';
——————————————
Copyright-Erklärung: Dieser Artikel ist ein Originalartikel des CSDN-Bloggers „ccChen1211“ und folgt der CC 4.0 BY-SA-Copyright-Vereinbarung. Bitte erneut drucken Im Anhang finden Sie einen Link zur Originalquelle und zu dieser Erklärung.
Ursprünglicher Link: https://blog.csdn.net/LC_chentinghua/article/details/79891962

Supongo que te gusta

Origin blog.csdn.net/m0_55315930/article/details/120385814
Recomendado
Clasificación