Skip to content

JSON Sorgulama

Bu dersi tamamladıktan sonra:

  • JSON verilerini D1’de nasıl saklayacağınızı öğreneceksiniz
  • JSON fonksiyonlarını (json_extract, json_insert, vb.) kullanabileceksiniz
  • Generated columns ile JSON sorgulama yapabileceksiniz
  • JSON veri optimizasyonu yapabileceksiniz
  1. JSON Veri Saklama
  2. JSON Fonksiyonları
  3. JSON Sorguları
  4. Generated Columns
  5. Performans İpuçları

CREATE TABLE events (
id INTEGER PRIMARY KEY,
event_data TEXT NOT NULL -- JSON verisi
);
-- JSON verisi ekleme
INSERT INTO events (event_data) VALUES ('{
"type": "user_login",
"user_id": 123,
"timestamp": "2024-01-29T10:30:00Z",
"metadata": {
"ip": "192.168.1.1",
"user_agent": "Mozilla/5.0..."
}
}');

JSON verisinden değer çıkarma:

-- Basit değer çıkarma
SELECT json_extract(event_data, '$.type') as event_type
FROM events;
-- Nested değer çıkarma
SELECT json_extract(event_data, '$.metadata.ip') as ip_address
FROM events;
-- Array değer çıkarma
SELECT json_extract(event_data, '$.tags[0]') as first_tag
FROM events;

JSON verisine değer ekleme:

-- Yeni anahtar ekleme
UPDATE events
SET event_data = json_insert(event_data, '$.processed', true)
WHERE id = 1;
-- Array'e ekleme
UPDATE events
SET event_data = json_insert(event_data, '$.tags[#]', 'new-tag')
WHERE id = 1;

JSON verisi güncelleme:

-- Mevcut değeri güncelle
UPDATE events
SET event_data = json_set(event_data, '$.processed', true)
WHERE id = 1;
-- Nested değeri güncelle
UPDATE events
SET event_data = json_set(event_data, '$.metadata.ip', '10.0.0.1')
WHERE id = 1;

Array uzunluğu alma:

SELECT
id,
json_array_length(json_extract(event_data, '$.tags')) as tag_count
FROM events;

-- -> operatörü (JSON olarak döner)
SELECT event_data->'$.type' FROM events;
-- ->> operatörü (SQL type olarak döner)
SELECT event_data->>'$.type' FROM events;
// JSON verisine göre filtreleme
const { results } = await db
.prepare(`
SELECT *
FROM events
WHERE json_extract(event_data, '$.type') = ?
`)
.bind("user_login")
.all();
// Nested JSON filtreleme
const { results } = await db
.prepare(`
SELECT *
FROM events
WHERE json_extract(event_data, '$.metadata.ip') LIKE ?
`)
.bind("192.168.%")
.run();

CREATE TABLE events (
id INTEGER PRIMARY KEY,
event_data TEXT NOT NULL,
-- Generated columns
event_type TEXT AS (json_extract(event_data, '$.type')) STORED,
user_id INTEGER AS (json_extract(event_data, '$.user_id')) STORED,
ip_address TEXT AS (json_extract(event_data, '$.metadata.ip')) STORED
);
-- Otomatik doldurulmuş sütunları sorgula
SELECT * FROM events WHERE event_type = 'user_login';
SELECT * FROM events WHERE ip_address LIKE '192.168.%';
-- Generated column için index
CREATE INDEX idx_events_type ON events(event_type);
CREATE INDEX idx_events_user_id ON events(user_id);
-- Performanslı sorgular
SELECT * FROM events WHERE user_id = 123;

-- ✅ Generated columns kullan
SELECT * FROM events WHERE event_type = 'login';
-- ✅ Generated columns'a index ekle
CREATE INDEX idx_events_type ON events(event_type);
-- ❌ Her sorguda json_extract kullan
SELECT * FROM events WHERE json_extract(event_data, '$.type') = 'login';
-- ❌ Büyük JSON verileri TEXT olarak sakla
-- Bunun yerine ayrı tablolar kullan

✅ JSON saklama yöntemleri ✅ JSON fonksiyonları ✅ Generated columns ✅ Performans optimizasyonu

Foreign Keys - İlişkisel veritabanı tasarımı ve foreign key constraints.


Ders Süresi: 75 dakika Zorluk Seviyesi: Orta Ön Koşullar: Ders 9: SQL Statements