DE
◀ Zurück zur Aufgabenbeschreibung

Senden Sie die Abfragen an die Datenbank

1. Finden Sie alle Forscher, die nach 1980 geboren wurden und Archäologen sind.

Erwartetes Ergebnis: Eine Liste von Forschern mit ihren IDs, Namen und Geburtsdaten.

💡Lösung

Um eine Liste aller Forscher zu erhalten, die nach 1980 geboren wurden und Archäologen sind, wählen Sie mit einer WHERE-Klausel die Spalten id, full_name und date_of_birth aus der Tabelle Explorers aus:

SELECT id, full_name, date_of_birth
FROM Explorers
WHERE date_of_birth > '1980-12-31' AND speciality = 'Archaeologist';

2. Zählen Sie, wie viele Artefakte sich in jedem Zustand befinden (Excellent, Good, Damaged, Fragmented).

Erwartetes Ergebnis: Eine Liste von condition_id-Werten mit der Anzahl der Artefakte pro Zustand. Jede Zeile steht für einen eindeutigen Zustand und zeigt, wie viele Artefakte diesem Zustand zugeordnet sind.
* Um die Namen der Zustände anzuzeigen, ist ein JOIN erforderlich, der später behandelt wird.

💡Lösung

Diese SQL-Abfrage verwendet die GROUP BY-Klausel, um die Zeilen der Tabelle Artifacts nach ihrer condition_id zu gruppieren. Die Aggregatfunktion COUNT(id) berechnet die Anzahl der Artefakte (durch Zählen ihrer IDs) innerhalb jeder Gruppe.

SELECT condition_id, COUNT(id) AS num_artifacts
FROM Artifacts
GROUP BY condition_id;

3. Rufen Sie eine Liste aller Ereignisse ab, sortiert vom neuesten zum ältesten und anschließend alphabetisch nach Ereignistyp.

Erwartetes Ergebnis: Alle Ereignisse aus der Tabelle Events, in erster Linie nach der Spalte date sortiert (die neuesten zuerst). Haben mehrere Ereignisse dasselbe Datum, sollen sie alphabetisch nach Ereignistyp sortiert werden.

💡Lösung

Diese SQL-Abfrage verwendet die ORDER BY-Klausel, um die Ergebnismenge zu sortieren. ORDER BY date DESC sortiert die Ereignisse absteigend nach Datum, sodass die neuesten oben stehen. Das zweite Kriterium, event_type ASC, sortiert Ereignisse mit gleichem Datum alphabetisch nach Typ.

SELECT id, name, date, event_type
FROM Events
ORDER BY date DESC, event_type ASC;

4. Rufen Sie eine Liste aller Artefakte ab, die während einer Expedition gefunden wurden, einschließlich der zugehörigen Expeditionsinformationen.

Erwartetes Ergebnis: Eine Tabelle, in der jede Zeile den Namen des Artefakts, den Namen der Expedition und das Startdatum der Expedition enthält.

💡Lösung

Sie müssen einen JOIN zwischen den Tabellen Artifacts und Expeditions über das Feld expedition_id durchführen.

SELECT a.name AS artifact_name, e.name AS expedition_name, e.start_date AS expedition_start_date
FROM Artifacts a
JOIN Expeditions e ON a.expedition_id = e.id;

5. Rufen Sie eine Liste aller Artefakte mit ihrem aktuellen Zustand ab (z. B. Excellent, Good usw.). Geben Sie den Namen des Artefakts und seinen Zustand aus.

Erwartetes Ergebnis: Eine Tabelle, in der jede Zeile den Namen des Artefakts und seinen Zustand enthält.

💡Lösung

Sie müssen einen JOIN zwischen den Tabellen Artifacts und Conditions über die Felder condition_id und id durchführen.

SELECT a.name, c.name AS condition
FROM Artifacts a
JOIN Conditions c ON a.condition_id = c.id;

6. Geben Sie eine Liste aller Ereignisse aus, denen eine Expedition zugeordnet ist.

Erwartetes Ergebnis: Eine Tabelle mit dem Namen des Ereignisses und dem Namen der Expedition. Berücksichtigen Sie nur Ereignisse, bei denen das Feld expedition_id nicht NULL ist.

💡Lösung

Führen Sie einen JOIN zwischen Events und Expeditions über expedition_id und id durch und filtern Sie mit expedition_id IS NOT NULL.

SELECT ev.name AS event_name, exp.name AS expedition_name
FROM Events ev
JOIN Expeditions exp ON ev.expedition_id = exp.id
WHERE ev.expedition_id IS NOT NULL;

7. Rufen Sie eine Liste aller Ereignisse ab, die sowohl einer Region als auch einer Expedition zugeordnet sind.

Erwartetes Ergebnis: Für jedes Ereignis, das sowohl auf eine Region als auch auf eine Expedition verweist, soll die Liste Informationen zum Ereignis, zur Region und zur zugehörigen Expedition enthalten.

💡Lösung

Sie müssen die Tabelle Events über region_id mit der Tabelle Regions und über expedition_id mit der Tabelle Expeditions verknüpfen.

SELECT ev.name AS event_name, r.name AS region_name, exp.name AS expedition_name
FROM Events ev
JOIN Regions r ON ev.region_id = r.id
JOIN Expeditions exp ON ev.expedition_id = exp.id;

8. Rufen Sie eine Liste aller Artefakte ab, bei denen der Forscher, der sie gefunden hat, und der aktuelle Zustand des Artefakts angegeben sind.

Erwartetes Ergebnis: Für jedes Artefakt mit angegebenem Forscher soll die Liste den Namen des Artefakts, den Namen des Forschers und den aktuellen Zustand des Artefakts enthalten.

💡Lösung

Verknüpfen Sie die Tabelle Artifacts über founded_by_id mit der Tabelle Explorers und über condition_id mit der Tabelle Conditions.

SELECT a.name AS artifact_name, ex.full_name AS explorer_name, c.name AS condition
FROM Artifacts a
JOIN Explorers ex ON a.founded_by_id = ex.id
JOIN Conditions c ON a.condition_id = c.id;

9. Rufen Sie eine Liste aller Expeditionsrollen ab, einschließlich des Namens des Forschers und des Namens der Expedition, an der er teilgenommen hat.

Erwartetes Ergebnis: Für jede Expeditionsrolle soll die Liste die Rolle, den Namen des Forschers und den Namen der Expedition anzeigen.

💡Lösung

Verknüpfen Sie die Tabelle ExpeditionRoles über explorer_id mit der Tabelle Explorers und über expedition_id mit der Tabelle Expeditions.

SELECT er.role, ex.full_name AS explorer_name, exp.name AS expedition_name
FROM ExpeditionRoles er
JOIN Explorers ex ON er.explorer_id = ex.id
JOIN Expeditions exp ON er.expedition_id = exp.id;

10. Rufen Sie eine Liste aller Artefakte ab, die von Forschern während Expeditionen gefunden wurden, einschließlich des Namens des Forschers, des Namens der Expedition und des Landes der Expeditionsregion.

Erwartetes Ergebnis: Geben Sie für jedes Artefakt seinen Namen, den Namen des Forschers, der es gefunden hat, den Namen der Expedition und das Land der Expeditionsregion aus.

💡Lösung

Sie müssen die Tabelle Artifacts mit Explorers (über founded_by_id) und mit Expeditions (über expedition_id) verknüpfen sowie Expeditions mit Regions (über region_id).

SELECT a.name AS artifact_name, ex.full_name AS explorer_name, e.name AS expedition_name, r.country AS region_country
FROM Artifacts a
JOIN Explorers ex ON a.founded_by_id = ex.id
JOIN Expeditions e ON a.expedition_id = e.id
JOIN Regions r ON e.region_id = r.id;

11. Rufen Sie eine Liste aller Ereignisse ab, die mit Expeditionen zusammenhängen, mit dem Namen des Ereignisses, dem Namen der Expedition, dem Namen des Expeditionsleiters und dem Land der Region, in der die Expedition stattfand.

Erwartetes Ergebnis: Geben Sie für jedes Ereignis seinen Namen, den Namen der Expedition, den Namen des Expeditionsleiters und das Land der Expeditionsregion aus.

💡Lösung

Verknüpfen Sie die Tabelle Events mit Expeditions (über expedition_id), Expeditions mit Explorers (über leader_id) und Expeditions mit Regions (über region_id).

SELECT ev.name AS event_name, exp.name AS expedition_name, ex.full_name AS leader_name, r.country AS region_country
FROM Events ev
JOIN Expeditions exp ON ev.expedition_id = exp.id
JOIN Explorers ex ON exp.leader_id = ex.id
JOIN Regions r ON exp.region_id = r.id;

12. Rufen Sie eine Liste aller Expeditionsteilnehmer ab, mit ihrer Rolle, dem Namen des Forschers, dem Namen der Expedition und dem Land der Expeditionsregion.

Erwartetes Ergebnis: Geben Sie für jeden Teilnehmer seine Rolle, den Namen des Forschers, den Namen der Expedition und das Land der Expeditionsregion aus.

💡Lösung

Verknüpfen Sie die Tabelle ExpeditionRoles mit Explorers (über explorer_id), ExpeditionRoles mit Expeditions (über expedition_id) und Expeditions mit Regions (über region_id).

SELECT er.role, ex.full_name AS explorer_name, exp.name AS expedition_name, r.country AS region_country
FROM ExpeditionRoles er
JOIN Explorers ex ON er.explorer_id = ex.id
JOIN Expeditions exp ON er.expedition_id = exp.id
JOIN Regions r ON exp.region_id = r.id;

13. Fügen Sie der Datenbank einen neuen Forscher hinzu, indem Sie alle Spalten der Tabelle explorers ausfüllen.

Erwartetes Ergebnis: In der Tabelle explorers soll eine neue Zeile mit vollständigen Forscherdaten erscheinen, in der alle Spalten ausgefüllt sind (id, full_name, date_of_birth, country_of_born, speciality).

💡Lösung

Verwenden Sie eine INSERT INTO-Anweisung, in der Sie alle Spalten der Tabelle explorers aufführen und für jede einen Wert angeben.

INSERT INTO explorers (id, full_name, date_of_birth, country_of_born, speciality)
VALUES (138, 'Slobodan Androvic', '1988-10-08', 'Montenegro', 'Botanist');

Sie können die neu angelegte Zeile mit folgender Abfrage überprüfen:

SELECT * FROM explorers WHERE id = 138;

14. Aktualisieren Sie die Daten des angelegten Forschers: Ändern Sie sein Geburtsdatum, sein Geburtsland und seine Fachrichtung auf neue Werte Ihrer Wahl.

Erwartetes Ergebnis: In der Tabelle explorers soll die Zeile des angelegten Forschers in den Spalten date_of_birth, country_of_born und speciality die von Ihnen angegebenen neuen Werte enthalten.

💡Lösung

Verwenden Sie die UPDATE-Anweisung, um die angegebenen Spalten in der Zeile mit der id zu ändern, die Sie für Ihren neuen Forscher festgelegt haben.

UPDATE explorers
SET date_of_birth = '1991-05-22', country_of_born = 'Serbia', speciality = 'Сhemist'
WHERE id = 138;

Sie können die aktualisierte Zeile mit folgender Abfrage überprüfen:

SELECT * FROM explorers WHERE id = 138;

15. Löschen Sie den von Ihnen angelegten Forscher aus der Tabelle explorers.

Erwartetes Ergebnis: Die Zeile mit der von Ihnen festgelegten id wird aus der Tabelle explorers entfernt. Nach Ausführung der Abfrage erscheint der Forscher mit dieser id nicht mehr in der Tabelle.

💡Lösung

Verwenden Sie die DELETE-Anweisung mit einer WHERE-Klausel, um nur die angegebene Zeile zu entfernen.

DELETE FROM explorers
WHERE id = 138;

Sie können mit folgender Abfrage überprüfen, ob die Zeile gelöscht wurde:

SELECT * FROM explorers WHERE id = 138;