Kurs
Zeilen einer Tabelle anhand einer Bedingung oder mehrerer Bedingungen zu filtern, gehört in der Datenanalyse zum Alltag. In SQL erledigst du das mit der WHERE-Klausel. In diesem Tutorial setzt du sie in unterschiedlichen Szenarien ein.
Als RDBMS (Relational Database Management System) verwendest du PostgreSQL, aber die Syntax unterscheidet sich bei anderen Datenbanksystemen in diesem Kontext kaum. Du beginnst mit der Einrichtung einer PostgreSQL-Datenbank und erstellst manuell eine Tabelle mit Länderdaten. Anschließend führst du mehrere Abfragefilter mit der WHERE-Klausel aus.
Hinweis: Um dem Tutorial zu folgen, solltest du die Grundlagen von SQL und PostgreSQL kennen. Falls nicht, helfen dir diese Ressourcen weiter.
Eine Tabelle in PostgreSQL erstellen
Um dem Tutorial zu folgen, legst du in PostgreSQL eine Tabelle mit Informationen zu Ländern weltweit an. Anhand dieser Tabelle zeigen wir dir, wie die WHERE-Klausel in verschiedenen Situationen funktioniert.
Schritt 1: Neue Datenbank anlegen
Öffne pgAdmin (oder dein bevorzugtes SQL-Interface) und erstelle eine neue PostgreSQL-Datenbank. Du kannst sie z. B. world_data nennen.
Schritt 2: Tabelle erstellen und befüllen
Sobald die Datenbank bereit ist, öffne ein neues SQL-Editorfenster und führe den folgenden SQL-Code aus. Er erstellt eine Tabelle namens countries und fügt Datensätze für verschiedene Kontinente, Unabhängigkeitsjahre und Regionen ein:
-- Create the countries tableCREATE TABLE countries ( code VARCHAR(3) PRIMARY KEY, name VARCHAR(100), continent VARCHAR(50), region VARCHAR(100), surface_area NUMERIC, indep_year INTEGER, local_name VARCHAR(100), gov_form VARCHAR(100), capital VARCHAR(100), cap_long NUMERIC, cap_lat NUMERIC);-- Insert sample data into the countries tableINSERT INTO countries (code, name, continent, region, surface_area, indep_year, local_name, gov_form, capital, cap_long, cap_lat)VALUES('IND', 'India', 'Asia', 'Southern Asia', 3287263, 1947, 'Bharat', 'Federal Republic', 'New Delhi', 77.2090, 28.6139),('PAK', 'Pakistan', 'Asia', 'Southern Asia', 881912, 1947, 'Pakistan', 'Federal Republic', 'Islamabad', 73.0551, 33.6844),('CHN', 'China', 'Asia', 'Eastern Asia', 9596961, NULL, 'Zhongguo', 'People''s Republic', 'Beijing', 116.4074, 39.9042),('VNM', 'Vietnam', 'Asia', 'South-Eastern Asia', 331212, 1945, 'Việt Nam', 'Socialist Republic', 'Hanoi', 105.8544, 21.0285),('JPN', 'Japan', 'Asia', 'Eastern Asia', 377975, NULL, 'Nippon', 'Constitutional Monarchy', 'Tokyo', 139.6917, 35.6895),('DEU', 'Germany', 'Europe', 'Western Europe', 357386, 1955, 'Deutschland', 'Federal Republic', 'Berlin', 13.4050, 52.5200),('FRA', 'France', 'Europe', 'Western Europe', 551695, 843, 'France', 'Republic', 'Paris', 2.3522, 48.8566),('RUS', 'Russia', 'Europe', 'Eastern Europe', 17098242, 1991, 'Rossiya', 'Federation', 'Moscow', 37.6173, 55.7558),('UKR', 'Ukraine', 'Europe', 'Eastern Europe', 603500, 1991, 'Ukrayina', 'Republic', 'Kyiv', 30.5234, 50.4501),('EGY', 'Egypt', 'Africa', 'Northern Africa', 1002450, 1922, 'Misr', 'Republic', 'Cairo', 31.2357, 30.0444),('NGA', 'Nigeria', 'Africa', 'Western Africa', 923768, 1960, 'Nigeria', 'Federal Republic', 'Abuja', 7.4951, 9.0578),('AUS', 'Australia', 'Oceania', 'Australia and New Zealand', 7682300, 1901, 'Australia', 'Federal Parliamentary Democracy', 'Canberra', 149.1245, -35.3075),('USA', 'United States', 'North America', 'North America', 9833517, 1776, 'United States', 'Federal Republic', 'Washington, D.C.', -77.0369, 38.9072),('CAN', 'Canada', 'North America', 'North America', 9984670, 1867, 'Canada', 'Constitutional Monarchy', 'Ottawa', -75.6972, 45.4215),('BRA', 'Brazil', 'South America', 'South America', 8515767, 1822, 'Brasil', 'Federal Republic', 'Brasília', -47.9292, -15.7801),('ARG', 'Argentina', 'South America', 'South America', 2780400, 1816, 'Argentina', 'Federal Republic', 'Buenos Aires', -58.3816, -34.6037);Die Tabelle enthält verschiedene Informationen zu insgesamt etwa 16 Ländern weltweit. Die Spalten sind:
codeist der Primärschlüssel der Tabelle und steht für den standardisierten Ländercodename, also der Name des Landescontinent, zu welchem Kontinent ein Land gehörtregion, die geografische Region, in der ein Land liegtsurface_area, die Fläche des Landesindep_year, das Jahr der Unabhängigkeitlocal_name, der Landesname in der Landessprachegov_form, die Staatsformcapital, die Hauptstadtcap_long, der Längengrad der Hauptstadtcap_lat, der Breitengrad der Hauptstadt
Jetzt filtern wir einige Datensätze mit der WHERE-Klausel.
Die SQL-WHERE-Klausel verwenden
Mit der WHERE-Klausel filterst du Datensätze anhand von Text- und Zahlenwerten. Du kannst Werte vergleichen, und dabei stehen dir folgende Vergleichsoperatoren zur Verfügung:
=gleich<>und!=ungleich<kleiner als>größer als<=kleiner oder gleich>=größer oder gleich
Gemäß SQL-Standard empfiehlt es sich, <> statt != zu verwenden.
Holen wir uns nun den Datensatz des Landes, dessen code AUS ist. Die Vergleichsspalte ist code, der Vergleichswert ist AUS. Die Abfrage lautet:
SELECT * FROM countries WHERE code = 'AUS';Und du erhältst:

Beachte dabei zwei Dinge:
Die
WHERE-Klausel steht immer hinterFROM.In SQL werden Zeichenketten in einfache Anführungszeichen gesetzt.
Schauen wir uns nun einen numerischen Vergleich an. Hole alle Länder, die ihre Unabhängigkeit (indep_year) nach 1901 erlangt haben:
SELECT * FROM countries WHERE indep_year > 1901;Du bekommst insgesamt 3 Länder, die ihre Unabhängigkeit nach 1901 erlangt haben. Achte auf den verwendeten Vergleichsoperator. Die Spalte indep_year ist vom Typ Integer, daher keine Anführungszeichen im Vergleich.
Du kannst mehrere Bedingungen in einer WHERE-Klausel mit AND und OR verknüpfen. Die folgende Abfrage liefert die Länder, where continent = 'Asia' and indep_year > 1900:
SELECT * FROM countries WHERE continent = 'Asia' AND indep_year > 1901;
Du erhältst Informationen zu insgesamt drei Ländern, die in Asia liegen und nach 1901 unabhängig wurden. Beachte, dass du in der Abfrage sowohl Text- als auch Zahlenwerte vergleichst. Experimentiere gern mit verschiedenen Kombinationen aus AND und OR in der WHERE-Klausel.
Hinweis: Wenn du AND und OR kombinierst, setze die einzelnen Bedingungen in Klammern. Andernfalls kann SQL die Auswertungsreihenfolge nicht eindeutig bestimmen.
Mit der folgenden Abfrage erhältst du insgesamt sechs Länder.
SELECT * FROM countries WHERE(continent = 'Europe' AND indep_year > 1900)or(continent = 'Asia' AND indep_year > 1900);
Du kannst in einer WHERE-Klausel sogar mehr als zwei Bedingungen verknüpfen:
SELECT * FROM countries WHERE continent = 'Asia' OR indep_year > 1900 OR surface_area > 652090;
Hier erhältst du insgesamt 15 Länder, die entweder in Asia liegen oder nach 1901 unabhängig wurden oder eine Fläche größer als 652090 haben.
Formen wir die Abfrage nun zu einer restriktiveren AND-Variante um:
SELECT * FROM countries WHERE continent = 'Asia' AND indep_year > 1901 AND surface_area > 652090;
In diesem Fall erhältst du insgesamt zwei Länder.
Du kannst in einer WHERE-Klausel auch Unterabfragen verwenden. Angenommen, du möchtest das Land mit der größten Fläche abfragen, kennst aber den maximalen Flächenwert nicht. In solchen Fällen hilft dir folgende Abfrage:
SELECT * FROM countries WHERE surface_area in (SELECT MAX(surface_area) FROM countries);Du solltest den Datensatz von Russia erhalten.

Fazit
Glückwunsch, du hast das Tutorial abgeschlossen. Abfrageergebnisse anhand von Bedingungen zu filtern, ist eine zentrale Kompetenz, und dieses Tutorial war deine Einführung. Wenn du deine SQL-Kompetenzen weiter ausbauen möchtest, schau dir unsere Kurse an (Link unten).
Werde SQL-zertifiziert

Sayak arbeitet bei Hugging Face, wo er codiert, schreibt und spricht. Seine Zeit verbringt er hauptsächlich mit allem, was mit der Bibliothek der Diffuser zu tun hat. Er ist auch ein DataCamp-Projektleiter und Autor vieler DataCamp-Tutorials. Nach der Arbeit kannst du ihn dabei erwischen, wie er zum x-ten Mal "Suits" auf Netflix guckt.
SQL-WHERE-Klausel: FAQs
Kann ich in einer WHERE-Klausel Text- und Zahlenspalten verwenden?
Ja, du kannst nach Text- (z. B. 'Asia') und Zahlenwerten (z. B. > 1901) filtern. Denk daran: Textwerte müssen in einfache Anführungszeichen gesetzt werden.
Gibt es einen Unterschied zwischen <> und != in SQL?
Beides bedeutet „ungleich“, aber <> ist der Standardoperator in SQL. Manche Datenbanken unterstützen auch !=, für die Kompatibilität ist <> jedoch die bessere Wahl.
Wie filtere ich Datensätze mit NULL-Werten?
Verwende IS NULL oder IS NOT NULL. Zum Beispiel:
SELECT * FROM countries WHERE indep_year IS NULL;Kann ich in einer WHERE-Klausel Unterabfragen nutzen?
Ja, du kannst Unterabfragen verwenden, um eine Spalte mit dem Ergebnis einer anderen Abfrage zu vergleichen. Zum Beispiel:
SELECT * FROM countries WHERE surface_area = (SELECT MAX(surface_area) FROM countries);Steht die WHERE-Klausel vor oder nach FROM?
Die WHERE-Klausel steht immer nach der FROM-Klausel und vor Klauseln wie GROUP BY oder ORDER BY.
Kann ich WHERE mit JOINs verwenden?
Auf jeden Fall. Du kannst die WHERE-Klausel nach einem JOIN anwenden, um das kombinierte Ergebnis zu filtern.