Zum Inhalt springen
SQL Anfänger 25 min

SELECT - Daten abfragen

Meistere die SELECT-Anweisung: Spalten auswählen, Berechnungen durchführen, Aliase nutzen und Ergebnisse formatieren.

Aktualisiert:

SELECT ist der am haeufigsten verwendete SQL-Befehl. In diesem Tutorial lernst du alle Moeglichkeiten kennen, die dir SELECT bietet - von einfachen Abfragen bis zu fortgeschrittenen Techniken.

SELECT im Detail

Du kennst bereits die Grundform. Jetzt gehen wir tiefer:

SELECT spalte1, spalte2, ...
FROM tabelle;

Alle Spalten vs. bestimmte Spalten

-- Alle Spalten (nur zum Erkunden!)
SELECT * FROM produkte;

-- Bestimmte Spalten (Best Practice)
SELECT name, preis, kategorie
FROM produkte;

Warum nicht immer * verwenden?

  • Bei grossen Tabellen werden unnoetig viele Daten geladen
  • Der Code wird schwerer lesbar
  • Aenderungen an der Tabellenstruktur koennen zu Problemen fuehren

Ausdruecke und Berechnungen

SELECT kann nicht nur Spalten anzeigen, sondern auch rechnen und Werte transformieren.

Mathematische Operationen

SELECT
    name,
    preis,
    preis * 1.19 AS preis_mit_mwst,
    preis * 0.8 AS rabatt_preis,
    lagerbestand * preis AS lagerwert
FROM produkte;

Die wichtigsten Operatoren:

OperatorBedeutungBeispiel
+Additionpreis + 5
-Subtraktionpreis - rabatt
*Multiplikationpreis * 1.19
/Divisionbetrag / 2
%Modulo (Rest)id % 2

Runden und Formatieren

-- Runden auf 2 Dezimalstellen
SELECT
    name,
    preis,
    ROUND(preis * 1.19, 2) AS brutto_preis
FROM produkte;

Ergebnis:

name           | preis  | brutto_preis
---------------+--------+-------------
T-Shirt Basic  |  19.99 |        23.79
Jeans Classic  |  49.99 |        59.49
Sneaker Sport  |  79.99 |        95.19

String-Funktionen

SQL bietet viele Funktionen zur Arbeit mit Text:

UPPER und LOWER

SELECT
    UPPER(name) AS name_gross,
    LOWER(email) AS email_klein
FROM kunden;

Ergebnis:

name_gross     | email_klein
---------------+-------------------
ANNA SCHMIDT   | anna@example.com
MAX MUELLER    | max@example.com

LENGTH - Textlaenge

SELECT
    name,
    LENGTH(name) AS namenlaenge
FROM kunden;

SUBSTR / SUBSTRING - Teilstring

-- Die ersten 5 Zeichen des Namens
SELECT
    name,
    SUBSTR(name, 1, 5) AS kuerzel
FROM kunden;

REPLACE - Text ersetzen

SELECT
    name,
    REPLACE(name, 'Mueller', 'Meier') AS geaendert
FROM kunden;

TRIM - Leerzeichen entfernen

-- Leerzeichen am Anfang und Ende entfernen
SELECT TRIM('  Hallo Welt  ') AS bereinigt;
-- Ergebnis: 'Hallo Welt'

CASE WHEN - Bedingte Logik

Mit CASE WHEN kannst du Bedingungen direkt in der Abfrage formulieren - wie ein if/else:

SELECT
    name,
    preis,
    CASE
        WHEN preis < 20 THEN 'guenstig'
        WHEN preis < 50 THEN 'mittel'
        WHEN preis < 100 THEN 'gehoben'
        ELSE 'premium'
    END AS preisklasse
FROM produkte;

Ergebnis:

name           | preis  | preisklasse
---------------+--------+------------
T-Shirt Basic  |  19.99 | guenstig
Jeans Classic  |  49.99 | mittel
Sneaker Sport  |  79.99 | gehoben
Rucksack Urban |  39.99 | mittel
Muetze Winter  |  14.99 | guenstig
Jacke Outdoor  | 129.99 | premium

CASE mit Kategorien

SELECT
    name,
    kategorie,
    CASE kategorie
        WHEN 'Kleidung' THEN 'Mode-Abteilung'
        WHEN 'Schuhe' THEN 'Schuh-Abteilung'
        WHEN 'Accessoires' THEN 'Zubehoer-Abteilung'
        ELSE 'Sonstiges'
    END AS abteilung
FROM produkte;

COALESCE - NULL-Werte behandeln

NULL ist ein spezieller Wert in SQL - er bedeutet “kein Wert vorhanden”. COALESCE ersetzt NULL durch einen Standardwert:

-- Wenn email NULL ist, zeige 'keine E-Mail'
SELECT
    name,
    COALESCE(email, 'keine E-Mail') AS kontakt
FROM kunden;

NULL verstehen

-- NULL ist NICHT das gleiche wie ein leerer String!
-- NULL bedeutet: "Wert ist unbekannt"

-- Das funktioniert NICHT:
SELECT * FROM kunden WHERE email = NULL;  -- FALSCH!

-- Stattdessen:
SELECT * FROM kunden WHERE email IS NULL;      -- Richtig
SELECT * FROM kunden WHERE email IS NOT NULL;  -- Richtig

Datumsfunktionen

SQL kann auch mit Datumsangaben arbeiten:

-- Aktuelles Datum
SELECT CURRENT_DATE AS heute;

-- Aktuelle Uhrzeit mit Datum
SELECT CURRENT_TIMESTAMP AS jetzt;

-- Bestelldatum und wie viele Tage her
SELECT
    id,
    bestelldatum,
    CURRENT_DATE - bestelldatum AS tage_seit_bestellung
FROM bestellungen;

Datumsteile extrahieren (PostgreSQL)

-- In PostgreSQL:
SELECT
    bestelldatum,
    EXTRACT(YEAR FROM bestelldatum) AS jahr,
    EXTRACT(MONTH FROM bestelldatum) AS monat,
    EXTRACT(DAY FROM bestelldatum) AS tag
FROM bestellungen;

Datumsteile extrahieren (SQLite)

-- In SQLite:
SELECT
    bestelldatum,
    strftime('%Y', bestelldatum) AS jahr,
    strftime('%m', bestelldatum) AS monat,
    strftime('%d', bestelldatum) AS tag
FROM bestellungen;

CAST - Datentypen umwandeln

Manchmal musst du einen Wert von einem Typ in einen anderen umwandeln:

-- Zahl als Text
SELECT CAST(preis AS TEXT) || ' Euro' AS preistext
FROM produkte;

-- Text als Zahl
SELECT CAST('42' AS INTEGER) AS zahl;

-- Runden durch Typumwandlung
SELECT
    name,
    preis,
    CAST(preis AS INTEGER) AS ganzer_preis
FROM produkte;

Mehrere Techniken kombinieren

Die wahre Staerke von SELECT zeigt sich, wenn du mehrere Techniken kombinierst:

SELECT
    UPPER(name) AS produkt,
    preis AS netto,
    ROUND(preis * 1.19, 2) AS brutto,
    lagerbestand AS stueck,
    ROUND(preis * lagerbestand, 2) AS lagerwert,
    CASE
        WHEN lagerbestand < 25 THEN 'Nachbestellen!'
        WHEN lagerbestand < 50 THEN 'Bestand ok'
        ELSE 'Gut bevorratet'
    END AS status
FROM produkte;

Ergebnis:

produkt        | netto  | brutto | stueck | lagerwert | status
---------------+--------+--------+--------+-----------+----------------
T-SHIRT BASIC  |  19.99 |  23.79 |    100 |   1999.00 | Gut bevorratet
JEANS CLASSIC  |  49.99 |  59.49 |     50 |   2499.50 | Bestand ok
SNEAKER SPORT  |  79.99 |  95.19 |     30 |   2399.70 | Bestand ok
RUCKSACK URBAN |  39.99 |  47.59 |     25 |    999.75 | Bestand ok
MUETZE WINTER  |  14.99 |  17.84 |     75 |   1124.25 | Gut bevorratet
JACKE OUTDOOR  | 129.99 | 154.69 |     20 |   2599.80 | Nachbestellen!

Was kommt als Naechstes?

Im naechsten Tutorial lernst du WHERE kennen - damit kannst du Ergebnisse filtern und nur die Datensaetze anzeigen, die bestimmte Bedingungen erfuellen.

Zusammenfassung

  • SELECT kann Spalten auswaehlen, rechnen und transformieren
  • String-Funktionen wie UPPER, LOWER, LENGTH und SUBSTR bearbeiten Text
  • CASE WHEN ermoeglicht bedingte Logik direkt in der Abfrage
  • COALESCE ersetzt NULL-Werte durch Standardwerte
  • NULL ist ein spezieller Wert und muss mit IS NULL / IS NOT NULL geprueft werden
  • CAST wandelt Datentypen um
  • Die Kombination mehrerer Techniken macht SELECT extrem maechtig

Uebungen

  1. String-Funktionen: Zeige alle Kunden mit ihrem Namen in Grossbuchstaben und der Laenge ihres Namens.
  2. CASE WHEN: Erstelle eine Abfrage, die Bestellungen nach Betrag kategorisiert: unter 50 Euro = “klein”, 50-100 Euro = “mittel”, ueber 100 Euro = “gross”.
  3. Berechnungen: Zeige alle Produkte mit Netto-Preis, MwSt-Betrag (19%) und Brutto-Preis, jeweils gerundet auf 2 Stellen.
  4. Kombination: Erstelle eine Produkt-Uebersicht mit Name (Grossbuchstaben), Preisklasse (CASE) und Lagerwert (Preis * Bestand).
-- Loesung zu Uebung 2:
SELECT
    id,
    betrag,
    CASE
        WHEN betrag < 50 THEN 'klein'
        WHEN betrag <= 100 THEN 'mittel'
        ELSE 'gross'
    END AS kategorie
FROM bestellungen;

Pro-Tipp: Nutze CASE WHEN, um Daten direkt in der Abfrage zu kategorisieren - das spart oft einen zusaetzlichen Verarbeitungsschritt in deiner Anwendung. CASE WHEN funktioniert ueberall dort, wo auch Spaltennamen stehen koennen: in SELECT, WHERE, ORDER BY und sogar in GROUP BY.

Zurück zum SQL Kurs