SQL SELECT – Daten abfragen

6 Kernkonzepte
Die wichtigsten SELECT-Konzepte für SQL-Datenabfragen: SELECT · WHERE · ORDER BY · DISTINCT · LIMIT · Operatoren Der SELECT-Befehl ist das Herzstück von SQL. Mit diesen Konzepten können Sie Daten präzise abfragen, filtern, sortieren und begrenzen.

SELECT – Daten abfragen

SELECT [DISTINCT] Spalten FROM Tabelle [WHERE]
SELECT name, preis FROM produkte SELECT * FROM kunden

SELECT ist der grundlegende Befehl zum Abfragen von Daten aus einer oder mehreren Tabellen. Mit * werden alle Spalten abgefragt.

Grundlegende SELECT-Syntax

Syntax Beschreibung
SELECT * FROM tabelle Alle Spalten aus der Tabelle
SELECT spalte1, spalte2 FROM tabelle Nur bestimmte Spalten
SELECT spalte AS alias FROM tabelle Spalte mit Alias (Umbenennung)
SELECT DISTINCT spalte FROM tabelle Nur eindeutige Werte (Duplikate entfernen)
Beispiele
-- Alle Produkte anzeigen
SELECT * FROM produkte;
-- Nur Name und Preis
SELECT name, preis FROM produkte;
-- Mit Alias (Spalte umbenennen)
SELECT name AS "Produktname", preis AS "Preis (€)"
FROM produkte;
-- Berechnete Spalte
SELECT name, preis * 1.19 AS "brutto"
FROM produkte;
Typische Ausgabe:
Produktname | Preis (€)
Laptop | 999.99
Maus | 29.99
Tipp: Verwenden Sie SELECT * nur für schnelle Tests. In Produktionscode sollten Sie immer die benötigten Spalten explizit auflisten – das spart Ressourcen und macht den Code wartbarer.

WHERE – Daten filtern

SELECT ... WHERE bedingung
SELECT * FROM produkte WHERE preis > 100;

WHERE filtert die Ergebnismenge basierend auf einer Bedingung. Es werden nur die Zeilen zurückgegeben, die die Bedingung erfüllen.

Häufige WHERE-Operatoren

Operator Beschreibung Beispiel
= Gleich WHERE name = 'Laptop'
<> oder != Ungleich WHERE preis <> 0
> Größer als WHERE preis > 100
< Kleiner als WHERE preis < 50
>= Größer oder gleich WHERE preis >= 100
<= Kleiner oder gleich WHERE preis <= 50
LIKE Mustervergleich WHERE name LIKE '%book%'
IN In einer Liste WHERE kategorie IN ('Elektronik', 'Bücher')
BETWEEN Zwischen zwei Werten WHERE preis BETWEEN 50 AND 200
IS NULL Ist NULL WHERE rabatt IS NULL
IS NOT NULL Ist nicht NULL WHERE rabatt IS NOT NULL
Beispiele
-- Produkte über 100 €
SELECT * FROM produkte
WHERE preis > 100;
-- Kombinierte Bedingungen (AND / OR)
SELECT * FROM produkte
WHERE preis > 50 AND kategorie = 'Elektronik';
-- LIKE: Namen die mit "A" beginnen
SELECT * FROM kunden
WHERE name LIKE 'A%';
-- IN: Mehrere Kategorien
SELECT * FROM produkte
WHERE kategorie IN ('Elektronik', 'Bücher');
Tipp: Verwenden Sie LIKE mit % (beliebig viele Zeichen) und _ (ein Zeichen). '%book%' findet alle Einträge, die "book" enthalten.

ORDER BY – Ergebnisse sortieren

ORDER BY spalte [ASC|DESC]
SELECT name, preis FROM produkte ORDER BY preis DESC;

ORDER BY sortiert die Ergebnismenge nach einer oder mehreren Spalten. Standardmäßig wird aufsteigend (ASC) sortiert, absteigend mit DESC.

Beispiele
-- Aufsteigend sortieren (Standard)
SELECT name, preis FROM produkte
ORDER BY preis;
-- Absteigend sortieren (teuerste zuerst)
SELECT name, preis FROM produkte
ORDER BY preis DESC;
-- Mehrere Sortierkriterien
SELECT name, kategorie, preis FROM produkte
ORDER BY kategorie ASC, preis DESC;
-- Sortierung nach Position (Spaltenindex)
SELECT name, preis FROM produkte
ORDER BY 2 DESC; -- Nach der 2. Spalte (preis)
-- Sortierung mit NULL-Werten
SELECT name, rabatt FROM produkte
ORDER BY rabatt ASC NULLS LAST;
Typische Ausgabe (ORDER BY preis DESC):
Laptop | 999.99
Smartphone | 599.99
Kopfhörer | 89.99
Maus | 29.99
Tipp: Bei ORDER BY mit mehreren Spalten wird zuerst nach der ersten Spalte sortiert, dann innerhalb gleicher Werte nach der zweiten, usw. Die Reihenfolge ist wichtig!

DISTINCT – Duplikate entfernen

SELECT DISTINCT spalte FROM tabelle
SELECT DISTINCT kategorie FROM produkte;

DISTINCT entfernt doppelte Werte aus der Ergebnismenge. Es werden nur eindeutige Werte zurückgegeben.

Beispiele
-- Alle Kategorien (ohne Duplikate)
SELECT DISTINCT kategorie FROM produkte;
-- Mehrere Spalten: Kombinationen eindeutig
SELECT DISTINCT kategorie, hersteller
FROM produkte;
-- Anzahl der eindeutigen Werte
SELECT COUNT(DISTINCT kategorie) FROM produkte;
Typische Ausgabe (DISTINCT kategorie):
Elektronik
Bücher
Kleidung
Tipp: DISTINCT wird auf alle ausgewählten Spalten angewendet. Wenn Sie mehrere Spalten auswählen, wird die gesamte Zeile auf Duplikate geprüft.

LIMIT – Ergebnisse begrenzen

LIMIT [offset,] anzahl
SELECT name, preis FROM produkte ORDER BY preis DESC LIMIT 5;

LIMIT begrenzt die Anzahl der zurückgegebenen Zeilen. Mit OFFSET kann ein Startpunkt für die Paginierung festgelegt werden.

Beispiele
-- Die ersten 5 Produkte
SELECT name FROM produkte
LIMIT 5;
-- Die 5 teuersten Produkte
SELECT name, preis FROM produkte
ORDER BY preis DESC
LIMIT 5;
-- Paginierung (Seite 2: 5 Einträge überspringen)
SELECT name FROM produkte
ORDER BY name
LIMIT 5 OFFSET 5; -- Oder: LIMIT 5, 5 (MySQL)
-- PostgreSQL: LIMIT mit OFFSET
SELECT name FROM produkte
LIMIT 10 OFFSET 20;
Tipp: Die Syntax für LIMIT variiert leicht zwischen Datenbanken: MySQL: LIMIT 5, 5 (offset, count), PostgreSQL: LIMIT 5 OFFSET 5. Beide sind standardmäßig unterstützt.

Operatoren – Vergleiche & Logik

=, <>, >, <, AND, OR, NOT
SELECT * FROM produkte WHERE preis > 50 AND kategorie IN ('Elektronik', 'Bücher');

Operatoren ermöglichen komplexe Bedingungen in der WHERE-Klausel durch Kombination von Vergleichen mit logischen Operatoren.

Logische Operatoren

Operator Beschreibung Beispiel
AND Alle Bedingungen müssen erfüllt sein WHERE preis > 50 AND kategorie = 'Elektronik'
OR Mindestens eine Bedingung muss erfüllt sein WHERE preis < 10 OR preis > 100
NOT Kehrt die Bedingung um WHERE NOT kategorie = 'Bücher'
BETWEEN Wert liegt in einem Bereich (inklusiv) WHERE preis BETWEEN 50 AND 200
IN Wert ist in einer Liste WHERE kategorie IN ('Elektronik', 'Bücher')
LIKE Mustervergleich WHERE name LIKE '%book%'
IS NULL Prüft auf NULL WHERE rabatt IS NULL
Beispiele
-- Kombinierte Bedingungen mit Klammern
SELECT * FROM produkte
WHERE (preis > 100 OR kategorie = 'Premium')
AND bestand > 0;
-- NOT mit IN
SELECT * FROM produkte
WHERE kategorie NOT IN ('Bücher', 'Schreibwaren');
-- LIKE mit Escape-Zeichen
SELECT * FROM produkte
WHERE name LIKE '%\_%' ESCAPE '\'; -- Sucht nach "_"
Tipp: Verwenden Sie Klammern, um die Reihenfolge der Auswertung bei AND und OR explizit zu steuern. AND wird vor OR ausgewertet, wenn keine Klammern gesetzt werden.

SELECT im Überblick

SELECT Spalten auswählen
* für alle, oder einzelne
WHERE Bedingungen filtern
=, >, LIKE, IN, etc.
ORDER BY Ergebnisse sortieren
ASC, DESC
DISTINCT Duplikate entfernen
Nur eindeutige Werte
LIMIT Anzahl begrenzen
Paginierung
AS Alias für Spalten/Tabellen
Umbenennung

Quick Summary

SELECT
Daten abfragen
WHERE
Filtern
ORDER BY
Sortieren
DISTINCT
Duplikate entfernen
LIMIT
Begrenzen
IN
Listen-Operatoren
SELECT name, preis FROM produkte WHERE preis > 100 ORDER BY preis DESC LIMIT 10;