Rechnen in SQL - Einführung

Hinweise

Wenn jemand in die schriftliche Abiturprüfung geht, wird er wohl mit MySQL oder MariaDB arbeiten (müssen). Für Aliasse mit Leerzeichen muss er die Verwendung von Backticks können. SQLite versteht die Backticks, wenn die Abfrage jedoch formatiert wird (Strg + T), macht SQLiteStudio aus den Backticks eckige Klammern. Man sollte den Schüler/innen diesen Hinweis geben. (Eigentlich könnte man gleich mit eckigen Klammern arbeiten, aber dann muss man sich beim Umstieg auf die Workbench wieder umgewöhnen.)

*tuuut … *tuuut

Lass mich raten. Daskalov ist ein Terrorist, weil er innerhalb eines Monats 10 Packungen Cornflakes gekauft hat. Richtig?

Sei doch nicht so, er ist wirklich …

Also. Schnell. Worum geht's diesmal?

Ich brauche den BMI aus der Datenbank. Aber da steht er nicht drin.

Natürlich nicht. Den kannst du ja auch berechnen: Gewicht(kg) / Körpergröße(m)2

Ach - man kann das ausrechnen?

Klar. Ich leg dir einen Zettel auf die Tastatur, da steht alles drauf. Und jetzt muss ich weiterarbeiten. *klack

(ab ins Büro zu Kowalskys Zettel)

Einfaches Rechnen mit SQL

In SQL kannst du ganz einfach die üblichen mathematischen Rechenoperationen durchführen - dazu verwendest du die Operatoren +, -, * (mal) und / (durch). Stell dir vor, du hast eine Liste aller Personen und ihr monatliches Einkommen:

SELECT p.nachname,
p.monatlichesEinkommen AS `monatliches Einkommen`
FROM personen p
ORDER BY p.monatlichesEinkommen DESC;

Jetzt willst du aber nicht das monatliche Einkommen, sondern das Jahreseinkommen. Also multiplizierst du einfach das Monatseinkommen mit 12:

SELECT p.nachname,
p.monatlichesEinkommen AS `monatliches Einkommen`,
p.monatlichesEinkommen * 12
AS `Gehalt pro Jahr`
FROM personen p
ORDER BY p.monatlichesEinkommen DESC;

Das Alias kannst du natürlich weiterverwenden, z. B. für die Sortierung:

SELECT p.nachname,
p.monatlichesEinkommen AS `monatliches Einkommen`,
p.monatlichesEinkommen * 12
AS `Gehalt pro Jahr`
FROM personen p
ORDER BY `Gehalt pro Jahr` DESC;

Und wenn es dich nervt, dass manchmal viele Nachkommastellen rauskommen, kannst du fürs Erste einfach mal runden mit round(zahl, anzahlDezimalen):

SELECT p.nachname,
round(p.monatlichesEinkommen * 12, 2)
AS `Gehalt pro Jahr`
FROM personen p
ORDER BY `Gehalt pro Jahr` DESC;

Und entsprechend kannst du bspw. den Body-Mass-Index aus Gewicht und Körpergröße errechnen:

SELECT p.nachname,
p.gewicht/(p.koerpergroesse/100.0 * p.koerpergroesse/100.0)
AS BMI
FROM personen p
ORDER BY BMI DESC;

Wenn du in SQLite teilst, schreib Zahlen immer mit Dezimalpunkt, also 100.0 statt 100 - so vermeidest du mögliche Fehler. Ach, checkst du eh nicht ...

Nochmal im Video erklären, bitte

Ah ja … Und das AS schreibt er manchmal vor das Alias, dass es besser lesbar ist … Verstehe … Probiere ich gleich mal aus … Also, was wollte sie da …

  • Den BMI von Carlotta Moritz und von Melina Jakob. Am besten einfach nur Vorname, Nachname und BMI ausgeben. Als Spaltenüberschrift sollte auf jeden Fall "BMI" stehen und nicht irgendwas, was Tiffany nicht versteht.
  • Vielleicht mache ich ihr gleich noch eine Liste von allen potenziellen Bewerber/innen - also alle zwischen 17 und 65. Heute ist der 29.06.2034, die 17-Jährigen müssten dann, äh ... bin doch kein verdammter Einstein … Also Name, Vorname, Geburtsdatum und BMI.
  • Ob das mit dem BMI so aussagekräftig ist? Mal noch schnell den durchschnittlichen BMI von allen potenziellen Bewerber/innen berechnen.
  • Dann wollte sie noch wissen, wie lange Melina Jakob insgesamt gesessen hat.
  • Und wie viel Jahre alle Einwohner von Maulwurfstadt insgesamt gesessen haben. Vielleicht zum Vergleich …

Hm - das ist ja eigentlich schon interessant. Da könnte ich ja gleich mal noch für meinen Freund Asen Daskalov was nachschauen …

  1. Wie lange war Asen Daskalov insgesamt hinter Gittern.
  2. Wie viel Geld hat Asen Daskalov ausgegeben hat für Bombenbauzubehör (dazu brauche ich die Waren aus den Kategorien Drogerie, …elektronik…, und Werkzeug).

Aber jetzt erst mal ab in die Kantine, Tiffany die Liste bringen. Und dann lade ich sie zum einem fetten Stück Tiramisu ein! (nimmt seine Jacke)