0Pricing
SQL Academy · Pelajaran

Mencari di Dalam Array

Operator ANY, contains, dan overlap.

Mencari di Dalam Array adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar SQL Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Academy mencakup 4 pelajaran total.

Larik Menyimpan Banyak Nilai

Dalam PostgreSQL, kolom larik menyimpan beberapa nilai dalam satu sel. Sebelum Anda dapat mencari di dalam larik, ada baiknya melihat bentuknya.

Kueri di bawah ini membuat tabel yang memungkinkan setiap produk memiliki beberapa kategori yang disimpan sebagai larik teks.

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']);

Memeriksa Keanggotaan dengan ANY

Operator ANY memungkinkan Anda menguji apakah suatu nilai muncul di mana pun dalam larik. Sintaksnya adalah: value = ANY(array_column).

Kueri ini menemukan setiap produk yang diberi label elektronik.

SELECT name, tags
FROM products
WHERE 'electronics' = ANY(tags);

ANY Bukan Hanya untuk Teks

ANY bekerja dengan tipe data apa pun yang mendukung kesetaraan. Berikut tabel skor yang disimpan sebagai larik bilangan bulat. Kueri ini mengambil siswa yang memperoleh skor sempurna 100 pada setidaknya satu pengujian.

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);

Mengecualikan Baris dengan NOT + ANY

Untuk menemukan baris yang nilainya tidak muncul dalam larik, gabungkan NOT dengan ANY. Perhatikan bahwa value <> ANY(arr) memiliki arti berbeda — ekspresi ini menghasilkan true jika ada elemen yang berbeda, yang hampir selalu terjadi.

Gunakan NOT (value = ANY(arr)) untuk pemeriksaan pengecualian yang andal.

-- Find products that are NOT tagged as 'sale'
SELECT name, tags
FROM products
WHERE NOT ('sale' = ANY(tags));

Operator Pemuat @>

Operator @> memeriksa apakah suatu larik memuat semua elemen dari larik lain. Anggap saja seperti ini: apakah larik kiri menyertakan setiap elemen yang tercantum di kanan?

Kueri ini menemukan produk yang memiliki label elektronik dan label obral.

SELECT name, tags
FROM products
WHERE tags @> ARRAY['electronics', 'sale'];

Operator Tercakup oleh &lt;@

Operator <@ merupakan kebalikan dari @>. Operator ini memeriksa apakah larik kiri seluruhnya tercakup dalam larik kanan.

Kueri ini menemukan produk yang seluruh daftar labelnya merupakan subset dari kumpulan elektronik, komputer, obral.

SELECT name, tags
FROM products
WHERE tags <@ ARRAY['electronics', 'computers', 'sale'];

Operator Irisan &&

Operator && menghasilkan true ketika dua larik memiliki setidaknya satu elemen yang sama. Operator ini setara dengan pertanyaan: apakah kedua daftar ini memiliki sesuatu yang sama?

Kueri di bawah ini menemukan produk yang memiliki setidaknya satu label yang sama dengan daftar belanja tertentu.

SELECT name, tags
FROM products
WHERE tags && ARRAY['audio', 'summer', 'gifts'];

Irisan vs Muatan — Perbedaan Utama

@> dan && mudah tertukar. Berikut perbandingan yang jelas:

  • tags @> ARRAY['a','b'] — baris tersebut harus memiliki keduanya, 'a' dan 'b'.
  • tags && ARRAY['a','b'] — baris tersebut memerlukan setidaknya satu dari 'a' atau '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'];

Menggunakan array_length untuk Memfilter berdasarkan Ukuran

Terkadang Anda ingin menemukan baris yang memiliki jumlah elemen tertentu dalam lariknya. array_length(arr, 1) mengembalikan jumlah elemen pada dimensi pertama.

Kueri ini menemukan produk dengan tepat tiga label.

SELECT name, tags
FROM products
WHERE array_length(tags, 1) = 3;

Menggabungkan Pencarian Larik dengan Kondisi Lain

Operator larik dapat digunakan bersama kondisi SQL biasa. Anda dapat menggabungkannya dengan AND, OR, dan predikat klausa WHERE lainnya untuk membuat filter yang tepat.

-- 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;

Mengindeks Larik untuk Kecepatan

Untuk tabel berukuran besar, pencarian larik dapat berjalan lambat tanpa indeks. Indeks GIN (indeks terbalik umum) PostgreSQL dirancang untuk kolom larik dan mendukung operator @>, <@, dan && secara efisien.

ANY tidak menggunakan indeks GIN secara langsung, tetapi operator irisan dan pemuat menggunakannya.

-- 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'];

Pemeriksaan Singkat: Operator Larik

Uji pemahaman Anda tentang operator pencarian larik PostgreSQL.

Ringkasan Pelajaran

Dalam pelajaran ini, Anda mempelajari tiga cara utama untuk mencari di dalam larik PostgreSQL:

  • = ANY(arr) — memeriksa apakah suatu nilai tunggal ada di mana pun dalam larik.
  • @> (memuat) — memeriksa apakah larik menyertakan semua elemen yang ditentukan.
  • && (irisan) — memeriksa apakah larik memiliki setidaknya satu elemen yang sama dengan larik lain.

Anda juga melihat <@ untuk pemeriksaan pencakupan terbalik, array_length untuk pemfilteran berdasarkan ukuran, dan indeks GIN untuk mempercepat pencarian larik pada kumpulan data besar. Menggabungkan operator ini dengan kondisi WHERE standar memberi Anda kendali yang tepat dan ekspresif atas data bernilai banyak.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Mencari di Dalam Array” gratis?

Ya — teks lengkap “Mencari di Dalam Array” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Academy, upgrade ke CoddyKit PRO. Kursus SQL Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Mencari di Dalam Array”?

Operator ANY, contains, dan overlap. Kamu berlatih SQL Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai SQL Academy?

Tidak diperlukan pengalaman sebelumnya. SQL Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Mencari di Dalam Array” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran SQL Academy ini?

Ya. Setiap pelajaran SQL Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Dasar-Dasar Kolom Array
  2. Mencari di Dalam Array
  3. UNNEST dan Agregasi
  4. Array vs Tabel Ternormalisasi
← Kembali ke SQL Academy