JSON verisi sorgula
Oracle
-- JSON_VALUE ile skaler değer çıkar:
SELECT JSON_VALUE(veri, '$.musteri.il') AS il FROM siparis;
-- JSON_TABLE ile satırlara aç:
SELECT t.urun, t.adet
FROM siparis s,
JSON_TABLE(s.veri, '$.kalemler[*]'
COLUMNS (urun VARCHAR2(50) PATH '$.urun',
adet NUMBER PATH '$.adet')) t;Oracle (12c+) JSON verisini SQL/JSON yol ifadeleriyle sorgular. JSON_VALUE tek skaler değer, JSON_QUERY nesne/dizi parçası, JSON_TABLE ise JSON'u ilişkisel satır-sütun yapısına dönüştürür. 21c+ yerel JSON veri tipini destekler.
PostgreSQL
-- jsonb operatörleri:
SELECT veri->'musteri'->>'il' AS il FROM siparis;
-- İçerme (@>) ve GIN indeksi:
CREATE INDEX ix ON siparis USING GIN (veri);
SELECT * FROM siparis
WHERE veri @> '{"durum": "onaylandi"}';PostgreSQL jsonb türü zengin operatörler sunar: -> (json nesne/eleman), ->> (metin değer), #> (yol), @> (içerme), ? (anahtar var mı). GIN index'i @> ve ? sorgularını hızlandırır. jsonb_path_query ile SQL/JSON yol sorguları da yapılabilir.
MySQL
-- JSON_EXTRACT veya kısayol operatörleri:
SELECT JSON_EXTRACT(veri, '$.musteri.il') AS il FROM siparis;
-- ->> tırnaksız metin döndürür:
SELECT veri->>'$.musteri.il' AS il FROM siparis
WHERE veri->>'$.durum' = 'onaylandi';MySQL (5.7+) yerel JSON tipini JSON_EXTRACT() ile sorgular; -> operatörü JSON_EXTRACT'in, ->> ise JSON_UNQUOTE(JSON_EXTRACT())'in kısayoludur. Generated (üretilen) sütun + index ile JSON alanları üzerinde arama hızlandırılabilir.
SQL Server
-- JSON_VALUE ile skaler değer çıkar:
SELECT JSON_VALUE(veri, '$.musteri.il') AS il FROM siparis;
-- OPENJSON ile satırlara aç:
SELECT k.urun, k.adet
FROM siparis s
CROSS APPLY OPENJSON(s.veri, '$.kalemler')
WITH (urun NVARCHAR(50) '$.urun', adet INT '$.adet') k;SQL Server (2016+) JSON'u NVARCHAR sütununda tutar. JSON_VALUE skaler değer, JSON_QUERY nesne/dizi, OPENJSON ise JSON'u tablo biçimine dönüştürür. ISJSON() geçerlilik denetimi yapar. JSON yolları üzerinde hesaplanan sütun + index ile hızlandırma yapılabilir.
MongoDB
// MongoDB yerel olarak belge (BSON/JSON) veritabanıdır.
// İç içe alanlara nokta gösterimiyle eriş:
db.siparis.find({ "musteri.il": "Ankara" })
// Dizi elemanı ve projeksiyon:
db.siparis.find(
{ "kalemler.urun": "kalem" },
{ "kalemler.$": 1 }
)MongoDB verinin tamamını belge (JSON benzeri BSON) olarak saklar; sorgulama doğaldır. Nokta gösterimi iç içe alanlara ve dizi elemanlarına erişir. Aggregation Pipeline ile karmaşık dönüşümler, indeksleme ile iç içe alanlarda hızlı arama yapılır.
Redis
# RedisJSON modülü (Redis Stack) gerektirir.
# JSON belge yaz:
JSON.SET siparis:1 $ '{"musteri":{"il":"Ankara"},"durum":"onaylandi"}'
# JSONPath ile değer oku:
JSON.GET siparis:1 $.musteri.ilÇekirdek Redis'te JSON tipi yoktur; RedisJSON modülü (Redis Stack) JSON.SET/JSON.GET ile JSONPath tabanlı okuma-yazma sağlar. RediSearch ile birlikte JSON belgeleri indekslenip sorgulanabilir. Modül yoksa JSON string olarak saklanıp uygulamada ayrıştırılır.
Elasticsearch
# Belgeler zaten JSON'dur; alanlara doğrudan sorgu:
GET siparis/_search
{ "query": { "term": { "musteri.il": "Ankara" } } }
# İç içe dizi için nested tip ve nested sorgu:
GET siparis/_search
{ "query": { "nested": { "path": "kalemler",
"query": { "match": { "kalemler.urun": "kalem" } } } } }Elasticsearch belgeleri yerel JSON olarak saklar ve indeksler. İç içe nesne dizilerinde eleman bağlarını korumak için 'nested' alan tipi ve nested sorgu kullanılır; aksi halde object tipinde diziler düzleştirilir (çapraz eşleşme riski). object ve nested ayrımı doğruluk için kritiktir.