In Arrays suchen
ANY-, Contains- und Overlap-Operatoren
In Arrays suchen ist eine kostenlose SQL Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des SQL Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.
Arrays speichern mehrere Werte
In PostgreSQL enthält eine Array-Spalte mehrere Werte in einer einzelnen Zelle. Bevor Sie in Arrays suchen können, ist es hilfreich, sich anzusehen, wie sie aussehen.
Die folgende Abfrage erstellt eine Tabelle, in der jedes Produkt mehreren Kategorien angehören kann, die als Text-Array gespeichert werden.
CREATE TABLE products (
id SERIAL PRIMARY KEY,
name TEXT,
tags TEXT[]
);
INSERT INTO products (name, tags) VALUES
('Laptop', ARRAY['electronics', 'computers', 'sale']),
('T-Shirt', ARRAY['clothing', 'summer', 'sale']),
('Coffee Mug', ARRAY['kitchen', 'gifts']),
('Headphones', ARRAY['electronics', 'audio']),
('Notebook', ARRAY['stationery', 'office']);Mit ANY auf Zugehörigkeit prüfen
Mit dem Operator ANY können Sie prüfen, ob ein Wert irgendwo in einem Array vorkommt. Die Syntax lautet: value = ANY(array_column).
Diese Abfrage findet jedes Produkt, das mit electronics getaggt ist.
SELECT name, tags
FROM products
WHERE 'electronics' = ANY(tags);ANY gilt nicht nur für Text
ANY funktioniert mit jedem Datentyp, der Gleichheit unterstützt. Hier ist eine Tabelle mit Bewertungen, die als Integer-Arrays gespeichert werden. Die Abfrage ruft Studierende ab, die in mindestens einem Test die perfekte Punktzahl 100 erreicht haben.
CREATE TABLE students (
student TEXT,
scores INT[]
);
INSERT INTO students VALUES
('Alice', ARRAY[88, 95, 100]),
('Bob', ARRAY[70, 80, 90]),
('Carol', ARRAY[100, 100, 99]);
SELECT student, scores
FROM students
WHERE 100 = ANY(scores);Zeilen mit NOT + ANY ausschließen
Um Zeilen zu finden, in denen ein Wert nicht in einem Array vorkommt, kombinieren Sie NOT mit ANY. Beachten Sie, dass value <> ANY(arr) eine andere Bedeutung hat — der Ausdruck liefert true, wenn sich ein beliebiges Element unterscheidet, was fast immer der Fall ist.
Verwenden Sie NOT (value = ANY(arr)) für eine zuverlässige Ausschlussprüfung.
-- Find products that are NOT tagged as 'sale'
SELECT name, tags
FROM products
WHERE NOT ('sale' = ANY(tags));Der Enthält-Operator @>
Der Operator @> prüft, ob ein Array alle Elemente eines anderen Arrays enthält. Stellen Sie sich darunter folgende Frage vor: Enthält das linke Array jedes rechts aufgeführte Element?
Damit finden Sie Produkte, die sowohl das Tag electronics als auch das Tag sale haben.
SELECT name, tags
FROM products
WHERE tags @> ARRAY['electronics', 'sale'];Der Enthalten-in-Operator <@
Der Operator <@ ist das Gegenteil von @>. Er prüft, ob das linke Array vollständig im rechten Array enthalten ist.
Diese Abfrage findet Produkte, deren vollständige Tag-Liste eine Teilmenge der Menge electronics, computers, sale ist.
SELECT name, tags
FROM products
WHERE tags <@ ARRAY['electronics', 'computers', 'sale'];Der Überlappungsoperator &&
Der Operator && liefert true, wenn zwei Arrays mindestens ein gemeinsames Element haben. Er ist das Array-Gegenstück zu der Frage: Haben diese beiden Listen etwas gemeinsam?
Die folgende Abfrage findet Produkte, die mindestens ein Tag mit einer vorgegebenen Einkaufsliste gemeinsam haben.
SELECT name, tags
FROM products
WHERE tags && ARRAY['audio', 'summer', 'gifts'];Überlappung vs. Enthalten — der entscheidende Unterschied
Die Operatoren @> und && werden leicht verwechselt. Hier ist ein klarer Vergleich:
tags @> ARRAY['a','b']— die Zeile muss sowohl 'a' als auch 'b' enthalten.tags && ARRAY['a','b']— die Zeile benötigt mindestens eines von 'a' oder 'b'.
-- Contains: must have BOTH 'electronics' AND 'sale'
SELECT name FROM products WHERE tags @> ARRAY['electronics', 'sale'];
-- Overlap: must have AT LEAST ONE of 'electronics' or 'sale'
SELECT name FROM products WHERE tags && ARRAY['electronics', 'sale'];Mit array_length nach der Größe filtern
Manchmal möchten Sie Zeilen finden, deren Array eine bestimmte Anzahl von Elementen enthält. array_length(arr, 1) gibt die Anzahl der Elemente in der ersten Dimension zurück.
Diese Abfrage findet Produkte mit genau drei Tags.
SELECT name, tags
FROM products
WHERE array_length(tags, 1) = 3;Array-Suchen mit anderen Bedingungen kombinieren
Array-Operatoren funktionieren zusammen mit regulären SQL-Bedingungen. Sie können sie mit AND, OR und allen anderen Prädikaten einer WHERE-Klausel kombinieren, um präzise Filter zu erstellen.
-- Products tagged 'sale' AND whose name starts with a letter before 'N'
SELECT name, tags
FROM products
WHERE 'sale' = ANY(tags)
AND name < 'N'
ORDER BY name;Arrays für mehr Geschwindigkeit indizieren
Bei großen Tabellen können Array-Suchen ohne Index langsam sein. Der GIN-Index (Generalized Inverted Index) von PostgreSQL ist für Array-Spalten ausgelegt und unterstützt die Operatoren @>, <@ und && effizient.
ANY verwendet einen GIN-Index nicht direkt, die Überlappungs- und Enthält-Operatoren dagegen schon.
-- Create a GIN index on the tags array column
CREATE INDEX idx_products_tags ON products USING GIN (tags);
-- This query can now use the index
SELECT name FROM products WHERE tags @> ARRAY['electronics'];Schnelltest: Array-Operatoren
Testen Sie Ihr Verständnis der PostgreSQL-Operatoren für die Suche in Arrays.
Zusammenfassung der Lektion
In dieser Lektion haben Sie drei grundlegende Möglichkeiten kennengelernt, in PostgreSQL-Arrays zu suchen:
- = ANY(arr) — prüft, ob ein einzelner Wert irgendwo im Array vorhanden ist.
- @> (Enthält-Operator) — prüft, ob das Array alle angegebenen Elemente enthält.
- && (Überlappungsoperator) — prüft, ob das Array mindestens ein Element mit einem anderen Array gemeinsam hat.
Außerdem haben Sie <@ für die umgekehrte Enthaltenheitsprüfung, array_length zum Filtern nach Größe und den GIN-Index kennengelernt, mit dem sich Array-Suchen in großen Datenbeständen beschleunigen lassen. Durch die Kombination dieser Operatoren mit standardmäßigen WHERE-Bedingungen erhalten Sie eine präzise, ausdrucksstarke Kontrolle über mehrwertige Daten.
Häufig gestellte Fragen
Ist die Lektion „In Arrays suchen“ kostenlos?
Ja — der vollständige Text von „In Arrays suchen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des SQL Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „In Arrays suchen“?
ANY-, Contains- und Overlap-Operatoren Du übst SQL Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um SQL Academy zu starten?
Keine Vorkenntnisse erforderlich. SQL Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „In Arrays suchen“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser SQL Academy-Lektion Code schreiben und ausführen?
Ja. Jede SQL Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.