MongoDB find() Fonksiyonunu SQL SELECT Sorgularıyla Karşılaştırmalı Öğrenin

Bu rehberde, MongoDB ve SQL kullanarak ülkeler veritabanında çeşitli sorgulama tekniklerini keşfedeceksiniz. Her iki veritabanı yönetim sisteminde de aynı veri kümesi üzerinde nasıl temel ve gelişmiş sorgular yapabileceğinizi öğrenerek, verilerinizi etkin bir şekilde filtrelemeyi, sıralamayı ve manipüle etmeyi öğreneceksiniz. Basit sorgulardan regex kullanarak yapılan gelişmiş aramalara kadar birçok örnekle, SQL ve MongoDB arasında geçiş yapmanın temellerini kavrayacaksınız.

MongoDB'nin find komutu yalnızca tek bir koleksiyondan (tablo) veri aramanıza izin verir. Ancak, farklı koleksiyonlardan veri birleştirmek için MongoDB'nin aggregation framework'ünü kullanabilirsiniz. Aggregation framework'ü, farklı koleksiyonlardan veri getirerek birleştirmenizi sağlayan güçlü bir araçtır.

Basit Sorgu:

db.countries.find({})

SELECT * FROM countries;

MongoDB'de db.countries.find({}) komutu, countries koleksiyonundaki tüm belgeleri getirir. SQL'de SELECT * FROM countries; ise countries tablosundaki tüm satırları getirir.

Filtreleme:

db.countries.find({ name: "Germany" })

SELECT * FROM countries WHERE name = 'Germany';

db.countries.find({ name: "Germany" }) MongoDB sorgusu, name alanı "Germany" olan ülkeleri filtreler. SQL'de SELECT * FROM countries WHERE name = 'Germany'; ise name alanı "Germany" olan satırları getirir.

Çoklu Koşul:

db.countries.find({ region: "Europe", subregion: "Western Europe" })

SELECT * FROM countries WHERE region = 'Europe' AND subregion = 'Western Europe';

MongoDB'de db.countries.find({ region: "Europe", subregion: "Western Europe" }) sorgusu, regioni "Europe" ve subregioni "Western Europe" olan ülkeleri filtreler. SQL'de SELECT * FROM countries WHERE region = 'Europe' AND subregion = 'Western Europe'; ise regioni "Europe" ve subregioni "Western Europe" olan satırları getirir.

Karşılaştırma Operatörleri:

db.countries.find({ id: { $gt: 50 } })

SELECT * FROM countries WHERE id > 50;

db.countries.find({ id: { $gt: 50 } }) MongoDB sorgusu, id alanı 50'den büyük olan ülkeleri getirir. SQL'de SELECT * FROM countries WHERE id > 50; ise id alanı 50'den büyük olan satırları getirir.

Mantıksal Operatörler:

db.countries.find({ $or: [ { iso2: "DE" }, { iso3: "DEU" } ] })

SELECT * FROM countries WHERE iso2 = 'DE' OR iso3 = 'DEU';

db.countries.find({ $or: [ { iso2: "DE" }, { iso3: "DEU" } ] }) MongoDB sorgusu, iso2 alanı "DE" veya iso3 alanı "DEU" olan ülkeleri getirir. SQL'de SELECT * FROM countries WHERE iso2 = 'DE' OR iso3 = 'DEU'; ise iso2 alanı "DE" veya iso3 alanı "DEU" olan satırları getirir.

Regex ile Sorgulama:

db.countries.find({ name: { $regex: /^G/ } })

SELECT * FROM countries WHERE name LIKE 'G%';

db.countries.find({ name: { $regex: /^G/ } }) MongoDB sorgusu, name alanı "G" ile başlayan ülkeleri getirir. SQL'de LIKE operatörüyle benzer sonuçlar elde edilebilir.

Alan Seçme:

db.countries.find({}, { name: 1, capital: 1, currency: 1, _id: 0 })

SELECT name, capital, currency FROM countries;

db.countries.find({}, { name: 1, capital: 1, currency: 1, _id: 0 }) MongoDB sorgusu, name, capital ve currency alanlarını seçer ve _id alanını hariç tutar. SQL'de SELECT name, capital, currency FROM countries; ise name, capital ve currency alanlarını getirir.

Sıralama ve Limit:

db.countries.find({}).sort({ name: 1 }).limit(5)

SELECT TOP 5 * FROM countries ORDER BY name ASC;

db.countries.find({}).sort({ name: 1 }).limit(5) MongoDB sorgusu, ülkeleri isme göre artan sırayla sıralar ve ilk 5 ülkeyi getirir. SQL'de SELECT TOP 5 * FROM countries ORDER BY name ASC; ise ülkeleri isme göre artan sırayla sıralar ve ilk 5 satırı getirir.

"A" ile başlayan ülkeler:

db.countries.find({ name: { $regex: /^A/ } })

SELECT * FROM countries WHERE name LIKE 'A%';

db.countries.find({ name: { $regex: /^A/ } }) MongoDB sorgusu, ismi "A" ile başlayan ülkeleri getirir. SQL'de LIKE 'A%' kullanılarak benzer sonuçlar elde edilebilir.

"n" harfi içeren ülkeler:

db.countries.find({ name: { $regex: /n/ } })

SELECT * FROM countries WHERE name LIKE '%n%';

db.countries.find({ name: { $regex: /n/ } }) MongoDB sorgusu, isminde "n" harfi geçen ülkeleri getirir. SQL'de LIKE '%n%' kullanılarak benzer sonuçlar elde edilebilir.

"y" harfi ile biten ülkeler:

db.countries.find({ name: { $regex: /y$/ } })
 
SELECT * FROM countries WHERE name LIKE '%y';

db.countries.find({ name: { $regex: /y$/ } }) MongoDB sorgusu, ismi "y" ile biten ülkeleri getirir. SQL'de LIKE '%y' kullanılarak benzer sonuçlar elde edilebilir.

"a" harfiyle başlayıp "land" ile biten ülkeler:

db.countries.find({ name: { $regex: /^a.*land$/ } })

SELECT * FROM countries WHERE name LIKE 'a%land';

db.countries.find({ name: { $regex: /^a.*land$/ } }) MongoDB sorgusu, ismi "a" ile başlayıp "land" ile biten ülkeleri getirir. SQL'de LIKE 'a%land' kullanılarak benzer sonuçlar elde edilebilir.

5 harfli ülkeler:

db.countries.find({ name: { $regex: /^.{5}$/ } })

SELECT * FROM countries WHERE LEN(name) = 5;

db.countries.find({ name: { $regex: /^.{5}$/ } }) MongoDB sorgusu, ismi tam olarak 5 harften oluşan ülkeleri getirir. SQL'de LEN() fonksiyonu kullanılarak benzer sonuçlar elde edilebilir.

Ülke adlarında "re" harfleri olanlar:

db.countries.find({ name: { $regex: /re/ } })

SELECT * FROM countries WHERE name LIKE '%re%';

db.countries.find({ name: { $regex: /re/ } }) MongoDB sorgusu, isminde "re" geçen ülkeleri getirir. SQL'de LIKE '%re%' kullanılarak benzer sonuçlar elde edilebilir.

Ülke adlarında "ia" ile bitenler:

db.countries.find({ name: { $regex: /ia$/ } })

SELECT * FROM countries WHERE name LIKE '%ia';

db.countries.find({ name: { $regex: /ia$/ } }) MongoDB sorgusu, ismi "ia" ile biten ülkeleri getirir. SQL'de LIKE '%ia' kullanılarak benzer sonuçlar elde edilebilir.

Ülke adlarında "an" harfleri olanlar (büyük/küçük harf duyarlı):

db.countries.find({ name: { $regex: /an/ } })
 
SELECT * FROM countries WHERE name LIKE '%an%';

db.countries.find({ name: { $regex: /an/ } }) MongoDB sorgusu, isminde "an" geçen ülkeleri büyük/küçük harf duyarlı olarak getirir. SQL'de LIKE '%an%' kullanılarak benzer sonuçlar elde edilebilir.

Ülke adlarında "na" harfleri olanlar (büyük/küçük harf duyarlı değil):

db.countries.find({ name: { $regex: /na/i } })

SELECT * FROM countries WHERE name LIKE '%na%';

db.countries.find({ name: { $regex: /na/i } }) MongoDB sorgusu, isminde "na" geçen ülkeleri büyük/küçük harf duyarlı olmayan şekilde getirir. SQL'de LIKE '%na%' kullanılarak benzer sonuçlar elde edilebilir.

Ülke adlarında sadece bir kelime olanlar (boşluk içermeyenler):

db.countries.find({ name: { $regex: /^\S+$/ } })

SELECT * FROM countries WHERE name NOT LIKE '% %';

db.countries.find({ name: { $regex: /^\S+$/ } }) MongoDB sorgusu, ismi sadece bir kelime olan ülkeleri getirir (boşluk içermeyenler). SQL'de  NOT LIKE '% %' veya benzer ifadeler kullanılarak benzer sonuçlar elde edilebilir.

Belirli bir alana göre sıralama:

db.countries.find({}).sort({ name: 1 })

SELECT * FROM countries ORDER BY name ASC;

Bu SQL sorgusu, ülkeleri adlarına göre artan sırada sıralar. MongoDB'de aynı işlem, find ve sort kullanılarak name alanında artan sırada belgeleri sıralayarak yapılır.

Ters sıralama:

db.countries.find({}).sort({ population: -1 })

SELECT * FROM countries ORDER BY population DESC;

Bu SQL sorgusu, ülkeleri nüfuslarına göre azalan sırada sıralar. MongoDB'de bu işlem, find ve sort kullanılarak population alanında azalan sırada belgeleri sıralayarak yapılır.

Birden fazla alana göre sıralama:

db.countries.find({}).sort({ region: 1, subregion: 1 })

SELECT * FROM countries ORDER BY region ASC, subregion ASC;

Bu SQL sorgusu, ülkeleri önce bölgeye, ardından alt bölgeye göre artan sırada sıralar. MongoDB'de aynı işlem, find ve sort kullanılarak region ve subregion alanlarında artan sırada belgeleri sıralayarak yapılır.

AND Operatörü:

db.countries.find({ $and: [{ region: "Europe" }, { subregion: "Western Europe" }] })

SELECT * FROM countries WHERE region = 'Europe' AND subregion = 'Western Europe';

Bu SQL sorgusu, hem Avrupa bölgesinde hem de Batı Avrupa alt bölgesinde bulunan ülkeleri seçer. MongoDB'de bu işlem, find ve $and operatörü kullanılarak region ve subregion alanlarının her ikisinin de eşleştiği belgeleri arayarak yapılır.

OR Operatörü:

db.countries.find({ $or: [{ region: "Europe" }, { subregion: "Western Europe" }] })

SELECT * FROM countries WHERE region = 'Europe' OR subregion = 'Western Europe';

Bu SQL sorgusu, ya Avrupa bölgesinde ya da Batı Avrupa alt bölgesinde bulunan ülkeleri seçer. MongoDB'de bu işlem, find ve $or operatörü kullanılarak region veya subregion alanlarının herhangi birinin eşleştiği belgeleri arayarak yapılır.

NOT Operatörü (Değil):

db.countries.find({ region: { $ne: "Europe" } })

SELECT * FROM countries WHERE region <> 'Europe';

Bu SQL sorgusu, Avrupa bölgesinde olmayan tüm ülkeleri seçer. MongoDB'de bu işlem, find ve $ne operatörü kullanılarak region alanı Avrupa olmayan belgeleri arayarak yapılır.

AND ve OR Operatörleri Kombinasyonu:

db.countries.find({ $and: [{ region: "Europe" }, 
{
 $or: [{ subregion: "Western Europe" 
}, 
{
 subregion: "Northern Europe" 
}
] }] })
-------------------------------------------------------------
SELECT * FROM countries WHERE region = 'Europe' AND 
(subregion = 'Western Europe' OR subregion = 'Northern Europe');

Bu SQL sorgusu, Avrupa bölgesinde olup Batı Avrupa veya Kuzey Avrupa alt bölgelerinde bulunan ülkeleri seçer. MongoDB'de bu işlem, find, $and ve $or operatörleri kullanılarak bu alanların eşleştiği belgeleri arayarak yapılır.

Birden Fazla Koşul Kullanımı:

db.countries.find({ region: "Europe", subregion: 
{
 $in: ["Western Europe", "Northern Europe"] } 
})
---------------------------------------------------------------
SELECT * FROM countries WHERE region = 'Europe' AND 
subregion IN ('Western Europe', 'Northern Europe');

Bu SQL sorgusu, Avrupa bölgesinde olup Batı Avrupa veya Kuzey Avrupa alt bölgelerinde bulunan ülkeleri seçer. MongoDB'de bu işlem, find ve $in operatörü kullanılarak subregion alanında belirtilen değerlerden biri eşleşen belgeleri arayarak yapılır.

Telefon +90 505 747 42 84
Email info@devedijital.com
Adres
Tacettin Veli Mahallesi Halit Narin Caddesi Bahadır Plaza Kat:11 Daire:41 38230 Deve Dijital Melikgazi/Kayseri/Türkiye