0Pricing
SQL Academy · Ders

Dizilerin İçinde Arama

ANY, içerme ve kesişim işleçleri.

Dizilerin İçinde Arama, CoddyKit'te ücretsiz bir SQL Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, SQL Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. SQL Academy kursu toplamda 4 dersten oluşur.

Diziler Birden Çok Değer Saklar

PostgreSQL'de bir dizi sütunu, tek bir hücrede birden çok değer tutar. Dizilerin içinde arama yapmadan önce, nasıl göründüklerini görmek yararlı olur.

Aşağıdaki sorgu, her ürünün metin dizisi olarak saklanan birkaç kategoriye ait olabildiği bir tablo oluşturur.

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

ANY ile Üyelik Denetimi

ANY operatörü, bir değerin bir dizinin herhangi bir yerinde bulunup bulunmadığını sınamanızı sağlar. Sözdizimi şöyledir: value = ANY(array_column).

Bu sorgu, elektronik etiketiyle etiketlenmiş her ürünü bulur.

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

ANY Yalnızca Metin İçin Değildir

ANY, eşitliği destekleyen herhangi bir veri türüyle çalışır. Aşağıda puanların tamsayı dizileri olarak saklandığı bir tablo görülmektedir. Sorgu, en az bir sınavda 100 tam puan alan öğrencileri getirir.

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

NOT + ANY ile Satırları Dışlama

Bir değerin dizide bulunmadığı satırları bulmak için NOT ile ANY'yi birleştirin. value <> ANY(arr) ifadesinin farklı bir anlam taşıdığını unutmayın — herhangi bir eleman farklıysa doğru döndürür ve bu neredeyse her zaman böyledir.

Güvenilir bir dışlama denetimi için NOT (value = ANY(arr)) kullanın.

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

İçerme Operatörü @>

@> operatörü, bir dizinin başka bir dizinin tüm elemanlarını içerip içermediğini denetler. Şöyle düşünebilirsiniz: Sol dizi, sağda listelenen her elemanı içeriyor mu?

Bu ifade hem elektronik hem de indirim etiketine sahip ürünleri bulur.

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

İçinde Bulunma Operatörü <@

<@ operatörü, @> operatörünün tersidir. Sol dizinin bütünüyle sağ dizinin içinde yer alıp almadığını denetler.

Bu sorgu, etiket listesinin tamamı elektronik, bilgisayarlar, indirim kümesinin alt kümesi olan ürünleri bulur.

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

Kesişim Operatörü &&

&& operatörü, iki dizi en az bir ortak elemanı paylaştığında doğru döndürür. Bu, dizi karşılığı olarak şu soruyu sormaya eşdeğerdir: Bu iki listenin ortak bir öğesi var mı?

Aşağıdaki sorgu, belirli bir alışveriş listesiyle en az bir etiketi ortak olan ürünleri bulur.

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

Kesişim ve İçerme Arasındaki Temel Fark

@> ile && ifadelerini karıştırmak kolaydır. Açık bir karşılaştırma şöyledir:

  • tags @> ARRAY['a','b'] — satırda hem 'a' hem de 'b' bulunmalıdır.
  • tags && ARRAY['a','b'] — satırda 'a' veya 'b' değerlerinden en az biri bulunmalıdır.
-- 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'];

Boyuta Göre Filtrelemek için array_length

Bazen dizinin belirli sayıda elemanı olduğu satırları bulmak istersiniz. array_length(arr, 1), ilk boyuttaki eleman sayısını döndürür.

Bu sorgu, tam üç etikete sahip ürünleri bulur.

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

Dizi Aramalarını Diğer Koşullarla Birleştirme

Dizi operatörleri normal SQL koşullarıyla birlikte çalışır. Kesin filtreler oluşturmak için bunları AND, OR ve diğer WHERE yan tümcesi koşul ifadeleriyle birleştirebilirsiniz.

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

Hız için Dizileri İndeksleme

Büyük tablolar için dizilerde arama, indeks olmadan yavaş olabilir. PostgreSQL'in GIN (Genelleştirilmiş Ters Dizin) indeksi dizi sütunları için tasarlanmıştır ve @>, <@ ve && operatörlerini verimli biçimde destekler.

ANY, GIN indeksini doğrudan kullanmaz; ancak kesişim ve içerme operatörleri kullanır.

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

Hızlı Kontrol: Dizi Operatörleri

PostgreSQL dizi arama operatörleri konusundaki anlayışınızı sınayın.

Ders Özeti

Bu derste PostgreSQL dizilerinin içinde arama yapmanın üç temel yolunu öğrendiniz:

  • = ANY(arr) — tek bir değerin dizinin herhangi bir yerinde bulunup bulunmadığını denetler.
  • @> (içerme) — dizinin belirtilen tüm elemanları içerdiğini denetler.
  • && (kesişim) — dizinin başka bir diziyle en az bir ortak elemanı olup olmadığını denetler.

Ayrıca ters yöndeki içerilme denetimi için <@, boyuta göre filtreleme için array_length ve büyük veri kümelerinde dizi aramalarını hızlandırmak için GIN indeksi gördünüz. Bu operatörleri standart WHERE koşullarıyla birleştirmek, çok değerli veriler üzerinde kesin ve ifade gücü yüksek bir denetim sağlar.

Sıkça Sorulan Sorular

“Dizilerin İçinde Arama” dersi ücretsiz mi?

Evet — “Dizilerin İçinde Arama” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve SQL Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. SQL Academy kursu toplamda 4 dersten oluşur.

“Dizilerin İçinde Arama” dersinde ne öğreneceğim?

ANY, içerme ve kesişim işleçleri. SQL Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

SQL Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te SQL Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“Dizilerin İçinde Arama” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu SQL Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her SQL Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Dizi Sütunlarının Temelleri
  2. Dizilerin İçinde Arama
  3. UNNEST ve Toplama
  4. Diziler ve Normalleştirilmiş Tablolar
← SQL Academy Sayfasına Dön