Welches Land hat die größte Bevölkerungsdichte und wie viele Berge sind höher als 7000 m? Um solche Fragen zu beantworten, lernen Sie in dieser Lektion, Rechenoperationen auf Attributwerte anzuwenden.
Kurzbeschreibung der Datenbank Welt
Die Datenbank enthält in einer Tabelle Laender eine Auswahl an Daten zu verschiedenen Ländern der Erde. Neben geographischen Daten liegen auch wirtschaftliche und soziale Daten vor.
Eine weitere Tabelle Berge enthält geographische Daten zu einigen der höchsten Berge der Erde. Die Zuordnung der Berge zu den Ländern erfolgt in einer dritten Tabelle liegt_in, da es Berge gibt, die auf der Grenze mehrerer Länder liegen.
Eine detaillierte Übersicht über die Daten und Quellenangaben finden Sie hier.
Lernaufgaben zur Datenbank Welt
Zum Rechnen mit Attributwerten stehen die Rechenoperationen + (Addition), - (Subtraktion), * (Multiplikation) und / (Division) zur Verfügung. In der SELECT-Klausel kann ein Attribut in einen Rechenausdruck eingebunden werden. Die Rechnung wird dann für jeden Datensatz mit dem jeweiligen Wert des Attributs durchgeführt. I) Die meisten Daten zu den Ausgaben der Länder für Bildung wurden im Jahr 2023 erhoben. Geben Sie einen SQL-Befehl ein, der für jedes Land berechnet, wie viele Jahre früher oder später die Daten zu den Bildungsausgaben erhoben wurden.Hinweis: Drei Jahre früher als 2023 soll dabei z. B. als -3 und drei Jahre später als 3 dargestellt werden.
Tipp
In der SELECT-Klausel muss von dem Attribut Erhebungsjahr_Bildungsausgaben die Zahl 2023 subtrahiert werden.
mögliche Lösung
SELECT Name, Erhebungsjahr_Bildungsausgaben - 2023 FROM Laender
Bei der Verwendung des Divisions-Operators ist zu beachten, dass eine Division zweier Ganzzahlen in einigen Umsetzungen von SQL nur das ganzzahlige Ergebnis liefert (z. B. 3/2 = 1).
Wenn einer der Operanden hingegen eine Fließkommazahl ist, ist auch das Ergebnis eine Fließkommazahl.
II) Die Einwohnerzahl ist für viele Länder sehr groß. Häufig wird die Einwohnerzahl daher in Millionen angegeben. Der Wert für Deutschland wäre dann beispielsweise 83.511 statt 83511000. Geben Sie eine SQL-Anweisung ein, die zu jedem Land Europas die Einwohnerzahl in Millionen ausgibt.
Tipp
Dividieren Sie in der SELECT-Klausel das Attribut Einwohnerzahl durch 1000000.0.
mögliche Lösung
SELECT Name, Einwohnerzahl / 1000000.0 FROM Laender WHERE Kontinent = 'Europa'
Ein Rechenausdruck kann auch mehrere Attribute eines Datensatzes enthalten.
III) Geben Sie einen SQL-Befehl ein, der für jedes Land die Differenz zwischen der Lebenserwartung der Frauen und der Lebenserwartung der Männer ausgibt.
Tipp
Bilden Sie in der SELECT-Klausel die Differenz der Attribute Lebenserwartung_Frauen und Lebenserwartung_Maenner.
mögliche Lösung
SELECT Name, Lebenserwartung_Frauen - Lebenserwartung_Maenner FROM Laender
Hinter einem Rechenausdruck in der SELECT-Klausel kann mithilfe des Schlüsselworts AS ein Alias (ein Name) für die entsprechende Spalte angegeben werden. Dieser Alias darf dann auch in einer ORDER BY-Klausel verwendet werden. IV) Geben Sie einen SQL-Befehl ein, der für jedes Land die Differenz zwischen der Lebenserwartung der Frauen und der Lebenserwartung der Männer mit der Spaltenüberschrift Differenz ausgibt. Sortieren Sie die Datensätze absteigend nach den Werten der Spalte Differenz.
Tipp
Verwenden Sie den SQL-Befehl aus der vorherigen Aufgabe und ergänzen Sie AS 'Differenz' hinter dem Rechenausdruck. Verwenden Sie den Alias Differenz in der ORDER BY-Klausel für die Sortierung.
mögliche Lösung
SELECT Name, Lebenserwartung_Frauen - Lebenserwartung_Maenner AS 'Differenz' FROM Laender ORDER BY Differenz DESC
Ein Rechenausdruck darf auch in einer Bedingung in der WHERE-Klausel verwendet werden.
V) Geben Sie einen SQL-Befehl ein, der alle Länder mit Name, Einwohnerzahl und Flaeche ausgibt, bei denen die Bevölkerungsdichte über 1000 (Menschen pro km2) liegt.
Tipp
Verwenden Sie in der WHERE-Klausel den Rechenausdruck Einwohnerzahl / Flaeche, um die Bevölkerungsdichte zu berechnen.
mögliche Lösung
SELECT Name, Einwohnerzahl, Flaeche FROM Laender WHERE Einwohnerzahl / Flaeche > 1000
Neben den Rechenoperationen stehen sogenannte Aggregatfunktionen zur Verfügung. Eine Aggregatfunktion erhält alle Werte eines Attributs für die ausgewählten Datensätze als Eingabe und berechnet dazu einen einzigen Wert.
Zur Auswahl stehen AVG zur Berechnung des Durchschnitts, MAX und MIN zur Berechnung des Maximums bzw. des Minimums sowie SUM zur Berechnnung der Summe aller Werte.
Das Attribut, auf das eine Aggregatfunktion angewendet werden soll, steht in runden Klammern hinter der Aggregatfunktionen. Hinweis: Enthält die SELECT-Klausel eine Aggregatfunktionen, dürfen dort keine weiteren Attribute ohne Aggregatfunktion angegeben werden. VI) Geben Sie einen SQL-Befehl ein, der für die Frauen und die Männer jeweils die durchschnittliche Lebenserwartung in Europa berechnet.
Tipp
Der Ausdruck AVG(Lebenserwartung_Frauen) bestimmt den durchschnittlichen Wert des Attributs Lebenserwartung_Frauen für alle ausgewählten Datensätze.
mögliche Lösung
SELECT AVG(Lebenserwartung_Frauen), AVG(Lebenserwartung_Maenner) FROM Laender WHERE Kontinent = 'Europa'
Die Aggregatfunktion COUNT zählt Datensätze bzw. Attributwerte. Der Ausdruck COUNT(*) zählt alle ausgewählten Datensätze. Wird statt dem * ein Attribut angegeben, werden nur die Datensätze gezählt, die für das Attribut einen Wert enthalten, der nicht null ist. VI) Geben Sie einen SQL-Befehl ein, der die Anzahl der Berge ausgibt, die höher als 7000 (m) sind.
Tipp
Geben Sie in der WHERE-Klausel eine Bedingung an, die nur Berge mit einem Wert größer als 7000 für das Attribut Hoehe auswählt.
Verwenden Sie in der SELECT-Klausel den Ausdruck COUNT(*) um die Anzahl der ausgewählten Datensätze zu bestimmen.
mögliche Lösung
SELECT COUNT(*) FROM Berge WHERE Hoehe > 7000
Der Ausdruck COUNT(Attribut) zählt jeden Datensatz einzeln, auch wenn mehrere Datensätze den gleichen Wert für das Attribut haben. Soll hingegen jeder Attributwert nur einmal gezählt werden, muss in der Aggregatfunktion ein DISTINCT vor das Attribut gesetzt werden. VI) Geben Sie einen SQL-Befehl ein, der die Anzahl der Kontinente ausgibt, die in der Tabelle Berge enthalten sind.
Tipp
Ergänzen Sie in dem Ausdruck COUNT(Kontinent_Berg) ein DISTINCT um jeden Kontinent nur einmal zu zählen.