Softmush.com, teknoloji, yazılım ve dijital dünyaya dair derinlemesine içeriklerle bilgiye ulaşmanın güvenilir adresi. - Softmush.com
“ Söz konusu olan vatansa, gerisi teferruat. ”
Mustafa K. Atatürk
Yükleniyor...
SQL Makaleleri Kategorisi
SQL Makaleleri
SQL Dilinde LEFT JOIN Kullanımı

SQL veritabanlarında, farklı tablolar arasında ilişkisel veri kümelerini birleştirmek temel bir işlemdir. LEFT JOIN (sol dış birleşim) işlemi, iki veya daha fazla tabloyu belirli bir koşul üzerinden birleştirirken, sol tablodaki tüm kayıtları, sağ tablodaki eşleşen kayıtlarla birlikte döndürür. Sağ tabloda eşleşme bulunamayan durumlarda, sağ tablonun sütunları için NULL değerleri döndürülür. Bu makale, LEFT JOIN'in sözdizimini, detaylı açıklamasını ve pratik kullanım örneklerini sunmaktadır.

Temel Sözdizimi


LEFT JOIN komutunun genel sözdizimi aşağıdaki gibidir:


SELECT
    sutun1, sutun2, ...
FROM
    sol_tablo
LEFT JOIN
    sag_tablo
ON
    sol_tablo.eslesme_sutunu = sag_tablo.eslesme_sutunu;

Detaylı Açıklama


  • SELECT sutun1, sutun2, ...: Sorgu sonucunda döndürülmesini istediğiniz sütunları belirtirsiniz. Bu sütunlar hem sol hem de sağ tablodan gelebilir.

  • FROM sol_tablo: Birleşimin sol tarafında yer alacak ana tabloyu belirtir. Bu tablodaki tüm kayıtlar sonuç kümesine dahil edilecektir.

  • LEFT JOIN sag_tablo: Birleşimin sağ tarafında yer alacak tabloyu belirtir. Sol tablodaki kayıtlarla eşleşen kayıtlar bu tablodan alınır.

  • ON sol_tablo.eslesme_sutunu = sag_tablo.eslesme_sutunu: İki tablo arasındaki eşleşme koşulunu tanımlar. Bu koşul genellikle birincil anahtar (PRIMARY KEY) ve yabancı anahtar (FOREIGN KEY) ilişkisi üzerinden kurulur.


Pratik Kullanım Örnekleri


Aşağıdaki örneklerde, Musteriler ve Siparisler adında iki tablo kullandığımızı varsayalım. Musteriler tablosunda MusteriID, Ad, Soyad sütunları; Siparisler tablosunda ise SiparisID, MusteriID, SiparisTarihi, Tutar sütunları bulunmaktadır.


Örnek 1: Tüm Müşterileri ve Varsa Siparişlerini Listeleme


Bu sorgu, tüm müşterileri ve onların mevcut siparişlerini listeler. Eğer bir müşterinin hiç siparişi yoksa, Siparisler tablosuna ait sütunlar için NULL değerleri döndürülür.


SELECT
    M.MusteriID,
    M.Ad,
    M.Soyad,
    S.SiparisID,
    S.SiparisTarihi,
    S.Tutar
FROM
    Musteriler AS M
LEFT JOIN
    Siparisler AS S ON M.MusteriID = S.MusteriID;

Örnek 2: Henüz Sipariş Vermemiş Müşterileri Bulma


LEFT JOIN ile birlikte WHERE koşulu kullanarak, sağ tabloda eşleşme bulunamayan kayıtları filtreleyebiliriz. Bu örnekte, henüz sipariş vermemiş müşteriler listelenir.


SELECT
    M.MusteriID,
    M.Ad,
    M.Soyad
FROM
    Musteriler AS M
LEFT JOIN
    Siparisler AS S ON M.MusteriID = S.MusteriID
WHERE
    S.SiparisID IS NULL;

Örnek 3: Birden Fazla LEFT JOIN Kullanımı


Birden fazla tabloyu birleştirmek için zincirleme LEFT JOIN kullanılabilir. Örneğin, müşterilerin siparişlerini ve bu siparişlerin detaylarını görmek isteyebiliriz. SiparisDetaylari adında bir üçüncü tablo olduğunu varsayalım.


SELECT
    M.Ad,
    S.SiparisID,
    SD.UrunAdi,
    SD.Miktar
FROM
    Musteriler AS M
LEFT JOIN
    Siparisler AS S ON M.MusteriID = S.MusteriID
LEFT JOIN
    SiparisDetaylari AS SD ON S.SiparisID = SD.SiparisID;

Önemli Notlar


  • Sol Tablo Önceliği: LEFT JOIN, sol tablonun tüm kayıtlarını garanti eder. Sağ tabloda eşleşme bulunmasa bile sol tablodaki kayıtlar sonuç kümesinde yer alır.

  • NULL Değerleri: Sağ tabloda eşleşen kayıt bulunamadığında, sağ tablodaki sütunlar için NULL değerleri döndürülür. Bu durum, eşleşmeyen kayıtları filtrelemek (örneğin, WHERE sag_tablo.anahtar_sutun IS NULL kullanarak) için kullanılabilir.

  • Performans Etkisi: Büyük tablolarda JOIN işlemleri performans üzerinde etkili olabilir. İndeksli sütunlar üzerinde birleştirme yapmak sorgu hızını artırır.

  • Alias Kullanımı: Tablo isimleri için kısa takma adlar (AS M, AS S gibi) kullanmak, sorguyu daha okunaklı hale getirir ve yazım hatalarını azaltır.

  • INNER JOIN ile Farkı: INNER JOIN yalnızca iki tabloda da eşleşen kayıtları döndürürken, LEFT JOIN sol tablonun tüm kayıtlarını döndürür ve sağ tablodaki eşleşmeyenler için NULL kullanır.

Emin
0
0
SQL Makaleleri
SQL Dilinde INNER JOIN Kullanımı: Detaylı Rehber

İlişkisel veritabanı yönetim sistemlerinde (RDBMS) veriler genellikle normalize edilmiş birden fazla tabloda saklanır. Bu tablolar arasındaki ilişkileri kullanarak anlamlı bir veri kümesi elde etmek için birleştirme (JOIN) işlemleri kritik öneme sahiptir. Bu makale, SQL'deki en yaygın ve temel birleştirme türlerinden biri olan INNER JOIN operatörünün kullanımını, sözdizimini ve pratik örneklerini teknik bir bakış açısıyla detaylandırmaktadır.


Sözdizimi


INNER JOIN, iki veya daha fazla tablodan ortak bir kolondaki eşleşen değerlere dayanarak satırları birleştirir. Yalnızca her iki tabloda da bir eşleşme bulunduğunda satırları sonuç kümesine dahil eder.



SELECT
    kolon1,
    kolon2,
    ...
FROM
    tablo1
INNER JOIN
    tablo2 ON tablo1.ortak_kolon = tablo2.ortak_kolon;

Detaylı Açıklama


  • SELECT kolon1, kolon2, ...: Sonuç kümesinde görüntülemek istediğiniz kolonları belirtir. Bu kolonlar birleştirilen tablolardan herhangi birine ait olabilir. Kolon adları çakışıyorsa, tablo_adı.kolon_adı formatında belirtilmelidir.

  • FROM tablo1: Birleştirme işlemine başlayacağınız ilk tabloyu belirtir. Bu genellikle "sol" tablo olarak adlandırılır.

  • INNER JOIN tablo2: tablo1 ile birleştirmek istediğiniz ikinci tabloyu (sağ tablo) belirtir.

  • ON tablo1.ortak_kolon = tablo2.ortak_kolon: Bu kısım, birleştirme koşulunu tanımlar. Her iki tablodaki hangi kolonların eşleşmesi gerektiğini belirtir. INNER JOIN yalnızca bu koşulun doğru olduğu satırları döndürür. Kolonlar genellikle tablolar arasındaki birincil ve yabancı anahtar ilişkilerini temsil eder.


Pratik Kullanım Örnekleri


Aşağıdaki örneklerde, bir eğitim veritabanı senaryosu üzerinden INNER JOIN kullanımını inceleyeceğiz. Veritabanımızda Ogrenciler ve Kayitlar adında iki tablo olduğunu varsayalım.


Ogrenciler Tablosu:



CREATE TABLE Ogrenciler (
    OgrenciID INT PRIMARY KEY,
    Ad VARCHAR(50),
    Soyad VARCHAR(50)
);

INSERT INTO Ogrenciler (OgrenciID, Ad, Soyad) VALUES
(1, 'Ayşe', 'Yılmaz'),
(2, 'Mehmet', 'Demir'),
(3, 'Zeynep', 'Kaya'),
(4, 'Ali', 'Can');

Kayitlar Tablosu:



CREATE TABLE Kayitlar (
    KayitID INT PRIMARY KEY,
    OgrenciID INT,
    KursAdi VARCHAR(100),
    FOREIGN KEY (OgrenciID) REFERENCES Ogrenciler(OgrenciID)
);

INSERT INTO Kayitlar (KayitID, OgrenciID, KursAdi) VALUES
(101, 1, 'Veritabanı Yönetimi'),
(102, 2, 'Programlamaya Giriş'),
(103, 1, 'Web Geliştirme'),
(104, 3, 'Veri Analizi');

Örnek 1: İki Tabloyu Birleştirme


Hangi öğrencinin hangi kursa kayıtlı olduğunu görmek için Ogrenciler ve Kayitlar tablolarını OgrenciID kolonu üzerinden birleştirelim.



SELECT
    O.Ad,
    O.Soyad,
    K.KursAdi
FROM
    Ogrenciler AS O
INNER JOIN
    Kayitlar AS K ON O.OgrenciID = K.OgrenciID;

Açıklama: Bu sorgu, Ogrenciler tablosundaki her OgrenciID ile Kayitlar tablosundaki eşleşen OgrenciID değerlerini bulur. Sonuç olarak, kayıtlı her öğrencinin adı, soyadı ve aldığı kursun adını listeler. AS O ve AS K takma adlar (aliases) kullanarak sorguyu daha okunabilir hale getirdik.


Örnek 2: Birden Fazla Tabloyu Birleştirme


Şimdi üçüncü bir tablo, KursDetaylari ekleyelim ve bir öğrencinin aldığı kursun detaylarını (örneğin, ders saati) görmek isteyelim.


KursDetaylari Tablosu:



CREATE TABLE KursDetaylari (
    KursAdi VARCHAR(100) PRIMARY KEY,
    DersSaati INT,
    KrediSayisi INT
);

INSERT INTO KursDetaylari (KursAdi, DersSaati, KrediSayisi) VALUES
('Veritabanı Yönetimi', 45, 3),
('Programlamaya Giriş', 60, 4),
('Web Geliştirme', 50, 3),
('Veri Analizi', 75, 5);

Öğrencilerin hangi kurslara kayıtlı olduğunu ve bu kursların ders saatlerini listeleyen bir sorgu oluşturalım:



SELECT
    O.Ad,
    O.Soyad,
    K.KursAdi,
    KD.DersSaati
FROM
    Ogrenciler AS O
INNER JOIN
    Kayitlar AS K ON O.OgrenciID = K.OgrenciID
INNER JOIN
    KursDetaylari AS KD ON K.KursAdi = KD.KursAdi;

Açıklama: Bu sorgu, Ogrenciler, Kayitlar ve KursDetaylari tablolarını zincirleme bir şekilde birleştirir. İlk olarak öğrencilerle kayıtları, ardından kayıtlarla kurs detaylarını eşleştirerek her öğrencinin aldığı kursun adını ve ders saatini getirir.


Örnek 3: Belirli Koşullara Göre Birleştirme ve Filtreleme


Sadece 50 ders saatinden fazla olan kurslara kayıtlı öğrencileri görmek isteyelim:



SELECT
    O.Ad,
    O.Soyad,
    K.KursAdi,
    KD.DersSaati
FROM
    Ogrenciler AS O
INNER JOIN
    Kayitlar AS K ON O.OgrenciID = K.OgrenciID
INNER JOIN
    KursDetaylari AS KD ON K.KursAdi = KD.KursAdi
WHERE
    KD.DersSaati > 50;

Açıklama: Önceki sorguya bir WHERE koşulu eklenerek, sadece DersSaati 50'den büyük olan kurslara kayıtlı öğrenciler filtrelenmiştir. INNER JOIN işlemi tamamlandıktan sonra filtreleme uygulanır.


Önemli Notlar


  • ON ve WHERE Koşulları: ON koşulu, tabloların nasıl birleştirileceğini tanımlarken, WHERE koşulu birleştirilmiş sonuç kümesini daha da filtrelemek için kullanılır. ON koşulundaki eşleşmeyen satırlar hiçbir zaman sonuç kümesine dahil edilmezken, WHERE koşulu birleştirme sonrası sonuçları etkiler.

  • Kolon Adı Çakışmaları ve Takma Adlar: Farklı tablolarda aynı ada sahip kolonlar varsa (örneğin, her iki tabloda da bir ID kolonu), sorguda bu kolonları belirtirken tablo adı ön eki (tablo_adı.kolon_adı) veya takma adlar (alias.kolon_adı) kullanmak zorunludur. Bu, "ambiguous column name" (belirsiz kolon adı) hatasını önler ve sorgunun okunabilirliğini artırır.

  • Performans İpuçları: Büyük tablolarda INNER JOIN performansı için birleştirme koşulunda kullanılan kolonlarda indekslerin bulunması kritik öneme sahiptir. İndeksler, veritabanı motorunun eşleşen satırları çok daha hızlı bulmasına yardımcı olur.

  • NULL Değerler: INNER JOIN, ON koşulunda NULL değerlerle eşleşme yapmaz. Eğer bir tabloda eşleşme kolonu NULL ise, bu satır INNER JOIN sonucunda yer almaz. NULL değerleri de dahil etmek isterseniz, LEFT JOIN veya RIGHT JOIN gibi farklı JOIN türlerini değerlendirmeniz gerekebilir.

  • Veri Bütünlüğü: INNER JOIN kullanırken, birleştirme koşulunda kullanılan kolonlardaki veri bütünlüğünün doğru olduğundan emin olun. Tutarsız veriler veya yanlış eşleşme koşulları hatalı veya eksik sonuçlara yol açabilir.

Emin
16
0
SQL Makaleleri
SQL Joins: İlişkisel Veritabanlarında Birleştirme İşlemleri

İlişkisel veritabanları, veri bütünlüğünü sağlamak ve yedekliliği azaltmak amacıyla ilgili verileri genellikle birden fazla tabloda saklar. Eksiksiz bir bilgi kümesi elde etmek, bu farklı tabloların verilerini birleştirmeyi sıkça gerektirir. SQL Joins, aralarındaki ilgili bir sütuna dayanarak iki veya daha fazla tablodan satırları bağlayarak bu işlemi gerçekleştirmek için temel bir mekanizma sunar. Karmaşık veritabanı şemalarında farklı SQL Join türlerini anlamak, verimli ve doğru veri çekimi için hayati öneme sahiptir.


Sözdizimi


SQL Join operatörlerinin genel sözdizimi aşağıdaki gibidir:


SELECT
    kolon1, kolon2, ...
FROM
    tablo1
[INNER | LEFT | RIGHT | FULL] JOIN tablo2
    ON tablo1.ortak_kolon = tablo2.ortak_kolon
WHERE
    kosul;

Detaylı Açıklama


Yukarıdaki sözdiziminde yer alan her bir bileşen, belirli bir amaca hizmet eder:

  • SELECT kolon1, kolon2, ...: Sorgu sonucunda gösterilecek sütunları belirtir. Bu sütunlar birleştirilen tablolardan herhangi birinden seçilebilir.

  • FROM tablo1: Sorgunun ana tablosunu belirtir. Birleştirme işlemi bu tablodan başlar.

  • [INNER | LEFT | RIGHT | FULL] JOIN tablo2: Birleştirme türünü ve ikinci tabloyu belirtir. Dört ana Join türü vardır:

    • INNER JOIN: İki tabloda da eşleşen değerlere sahip satırları döndürür. Eğer her iki tabloda da bir eşleşme yoksa, o satır sonuç kümesine dahil edilmez. En yaygın kullanılan Join türüdür.

    • LEFT JOIN (veya LEFT OUTER JOIN): Sol tablodaki tüm satırları döndürür ve sağ tablodan eşleşen satırları getirir. Sol tablodaki bir satır için sağ tabloda eşleşme bulunamazsa, sağ tablonun sütunları için NULL değerleri döndürülür.

    • RIGHT JOIN (veya RIGHT OUTER JOIN): Sağ tablodaki tüm satırları döndürür ve sol tablodan eşleşen satırları getirir. Sağ tablodaki bir satır için sol tabloda eşleşme bulunamazsa, sol tablonun sütunları için NULL değerleri döndürülür.

    • FULL JOIN (veya FULL OUTER JOIN): Her iki tablodaki tüm satırları döndürür. Bir tabloda eşleşme olmasa bile, diğer tablodan gelen eşleşmeyen satırlar da dahil edilir ve eşleşmeyen taraftaki sütunlar için NULL değerleri döndürülür.

  • ON tablo1.ortak_kolon = tablo2.ortak_kolon: Join koşulunu belirtir. Bu koşul, iki tablo arasındaki hangi sütunların eşleştirilmesi gerektiğini tanımlar. Genellikle bu, birincil anahtar (Primary Key) ve yabancı anahtar (Foreign Key) ilişkisi olan sütunlardır.

  • WHERE kosul: İsteğe bağlı olarak, birleştirme işlemi tamamlandıktan sonra sonuç kümesini daha da filtrelemek için kullanılır.


Pratik Kullanım Örnekleri


Aşağıdaki örnekler için iki tablo kullandığımızı varsayalım:


-- Calisanlar Tablosu
CREATE TABLE Calisanlar (
    CalisanID INT PRIMARY KEY,
    Ad VARCHAR(50),
    Soyad VARCHAR(50),
    DepartmanID INT
);

INSERT INTO Calisanlar (CalisanID, Ad, Soyad, DepartmanID) VALUES
(1, 'Ayşe', 'Yılmaz', 101),
(2, 'Mehmet', 'Demir', 102),
(3, 'Zeynep', 'Kaya', 101),
(4, 'Ali', 'Can', 103),
(5, 'Elif', 'Tekin', NULL);

-- Departmanlar Tablosu
CREATE TABLE Departmanlar (
    DepartmanID INT PRIMARY KEY,
    DepartmanAdi VARCHAR(50)
);

INSERT INTO Departmanlar (DepartmanID, DepartmanAdi) VALUES
(101, 'İnsan Kaynakları'),
(102, 'Muhasebe'),
(103, 'Pazarlama'),
(104, 'Ar-Ge');

INNER JOIN Örneği


Bu örnek, sadece hem Calisanlar hem de Departmanlar tablolarında eşleşen DepartmanID değerlerine sahip çalışanları ve departman adlarını döndürür.


SELECT
    C.Ad,
    C.Soyad,
    D.DepartmanAdi
FROM
    Calisanlar AS C
INNER JOIN
    Departmanlar AS D ON C.DepartmanID = D.DepartmanID;

Çıktı Açıklaması: DepartmanID değeri NULL olan 'Elif Tekin' ve Departmanlar tablosunda eşleşmesi olmayan 'Ar-Ge' departmanı sonuç kümesine dahil edilmez. Sadece eşleşen veriler listelenir.


LEFT JOIN Örneği


Bu örnek, Calisanlar tablosundaki tüm çalışanları ve varsa ilgili departman adlarını döndürür. Departmanı olmayan çalışanlar için departman adı NULL olarak görünür.


SELECT
    C.Ad,
    C.Soyad,
    D.DepartmanAdi
FROM
    Calisanlar AS C
LEFT JOIN
    Departmanlar AS D ON C.DepartmanID = D.DepartmanID;

Çıktı Açıklaması: 'Elif Tekin' (DepartmanID'si NULL olan) listede yer alır ve DepartmanAdi sütunu için NULL değeri gösterilir. Departmanlar tablosunda olup Calisanlar tablosunda eşleşmesi olmayan 'Ar-Ge' departmanı sonuçta yer almaz.


RIGHT JOIN Örneği


Bu örnek, Departmanlar tablosundaki tüm departmanları ve varsa bu departmanlarda çalışan kişilerin adlarını döndürür. Çalışanı olmayan departmanlar için çalışan adları NULL olarak görünür.


SELECT
    C.Ad,
    C.Soyad,
    D.DepartmanAdi
FROM
    Calisanlar AS C
RIGHT JOIN
    Departmanlar AS D ON C.DepartmanID = D.DepartmanID;

Çıktı Açıklaması: 'Ar-Ge' departmanı (DepartmanID'si 104) listede yer alır ve Ad ile Soyad sütunları için NULL değerleri gösterilir. Calisanlar tablosunda olup Departmanlar tablosunda eşleşmesi olmayan 'Elif Tekin' sonuçta yer almaz.


FULL JOIN Örneği


Bu örnek, her iki tablodaki tüm satırları döndürür. Eşleşme olmayan yerlerde NULL değerleri görünür.


SELECT
    C.Ad,
    C.Soyad,
    D.DepartmanAdi
FROM
    Calisanlar AS C
FULL JOIN
    Departmanlar AS D ON C.DepartmanID = D.DepartmanID;

Çıktı Açıklaması: Hem departmanı olmayan 'Elif Tekin' (DepartmanAdi NULL) hem de çalışanı olmayan 'Ar-Ge' departmanı (Ad ve Soyad NULL) sonuç kümesinde yer alır. Diğer tüm eşleşen satırlar da gösterilir.


Önemli Notlar


  • Tablo Takma Adları (Aliases): Join işlemlerinde, tablo adları yerine AS anahtar kelimesiyle takma adlar (örneğin Calisanlar AS C) kullanmak sorguları daha kısa ve okunabilir hale getirir. Bu, özellikle birden fazla tabloyla çalışırken veya bir tabloyu kendiyle birleştirirken (self-join) çok faydalıdır.

  • Performans: Büyük tablolar üzerinde karmaşık Join işlemleri performans sorunlarına yol açabilir. Uygun indeksleme ve sorgu optimizasyonları, bu sorunların önüne geçmede kritik öneme sahiptir.

  • NULL Değerler: LEFT, RIGHT ve FULL JOIN kullanırken, eşleşme olmayan taraftaki sütunlar için NULL değerlerinin döndürüldüğünü unutmayın. Bu durum, veri analizi yaparken dikkat edilmesi gereken önemli bir noktadır.

  • Birden Fazla JOIN: Bir sorguda ikiden fazla tabloyu birleştirmek için birden fazla JOIN ifadesi art arda kullanılabilir.

  • JOIN Koşulu: ON anahtar kelimesiyle belirtilen koşul, tablolar arasındaki ilişkinin doğru bir şekilde tanımlanmasını sağlar. Yanlış veya eksik bir koşul, hatalı veya eksik sonuçlara yol açabilir.

Emin
8
0
SQL Makaleleri
SQL Dilinde SQL Aliases Kullanımı

SQL (Yapısal Sorgu Dili), veritabanlarından bilgi almak, yönetmek ve değiştirmek için kullanılan güçlü bir dildir. Büyük ve karmaşık veritabanlarıyla çalışırken, sorguların anlaşılırlığı ve bakımı kritik öneme sahiptir. İşte bu noktada SQL Aliases (takma adlar) devreye girer. Aliases, tablolara veya sütunlara geçici olarak farklı bir ad atamanıza olanak tanır. Bu sayede sorgularınız daha kısa, daha okunabilir ve aynı zamanda daha yönetilebilir hale gelir. Özellikle uzun tablo adları, karmaşık sütun ifadeleri veya birden fazla tablonun birleştirildiği durumlarda aliases kullanımı, sorgu mantığını netleştirmek için vazgeçilmez bir araçtır.


Sözdizimi


SQL Aliases kullanımı iki ana formda incelenebilir: sütun aliases ve tablo aliases.


Sütun Aliases:


SELECT column_name AS alias_name
FROM table_name;

veya


SELECT column_name alias_name
FROM table_name;

Tablo Aliases:


SELECT alias_name.column_name
FROM table_name AS alias_name;

veya


SELECT alias_name.column_name
FROM table_name alias_name;

Detaylı Açıklama


Her iki alias türü de sorgunun kapsamı içinde geçerli olan geçici isimler atar ve veritabanındaki gerçek tablo veya sütun adlarını değiştirmez.


  • AS Anahtar Kelimesi: Sütun veya tablo aliases tanımlarken AS anahtar kelimesi isteğe bağlıdır. Ancak, sorgu okunabilirliğini artırdığı için genellikle kullanılması tavsiye edilir. Örneğin, SELECT column_name AS alias_name ifadesi, SELECT column_name alias_name ifadesine göre daha açıklayıcıdır.

  • Sütun Aliases: Bir sütuna veya bir sütun ifadesine (örneğin, iki sütunun birleştirilmesi veya bir matematiksel işlem sonucu) geçici bir ad vermek için kullanılır. Bu, özellikle raporlama amacıyla daha anlamlı ve kullanıcı dostu başlıklar oluşturmak veya hesaplanmış değerlere kolayca referans vermek istediğinizde faydalıdır. Eğer takma ad boşluk içeriyorsa veya özel karakterler barındırıyorsa, çift tırnak (") veya köşeli parantez ([]) içine alınması gerekebilir (veritabanı sistemine göre değişir).

  • Tablo Aliases: Bir tabloya geçici bir ad vermek için kullanılır. Bu, genellikle karmaşık sorgularda, özellikle JOIN işlemleriyle birden fazla tablo birleştirildiğinde veya bir tablonun kendi kendine birleştirildiği (self-join) durumlarda sorguyu kısaltmak ve sütun adları arasındaki belirsizliği ortadan kaldırmak için çok kullanışlıdır. Tablo takma adları, sorgunun FROM veya JOIN bölümlerinde tanımlanır ve sorgunun geri kalanında tabloya bu takma ad ile referans verilir.


Pratik Kullanım Örnekleri


Aşağıdaki örnekler, SQL Aliases'ın farklı senaryolarda nasıl kullanıldığını göstermektedir. Örneklerde Musteriler (MusteriID, Ad, Soyad, Email) ve Siparisler (SiparisID, MusteriID, SiparisTarihi, ToplamTutar) adında iki tablonun var olduğu varsayılmıştır.


Örnek 1: Sütun Takma Adı ile Daha Okunabilir Çıktı


Müşterilerin ad ve soyadını tek bir sütunda 'Tam Adı' olarak görmek isteyelim.


SELECT
    Ad AS MusteriAdi,
    Soyad AS MusteriSoyadi,
    Ad || ' ' || Soyad AS TamAdi
FROM
    Musteriler;

Bu sorgu, Ad sütununu MusteriAdi, Soyad sütununu MusteriSoyadi ve Ad ile Soyad'ı birleştirerek oluşan ifadeyi TamAdi olarak döndürür.


Örnek 2: Tablo Takma Adları ile JOIN Sorgusunu Kısaltma


Müşteri adlarını ve yaptıkları siparişlerin toplam tutarlarını listelemek isteyelim.


SELECT
    m.Ad,
    m.Soyad,
    s.SiparisID,
    s.ToplamTutar
FROM
    Musteriler AS m
JOIN
    Siparisler AS s ON m.MusteriID = s.MusteriID
WHERE
    s.ToplamTutar > 100;

Burada Musteriler tablosuna m, Siparisler tablosuna ise s takma adı verilmiştir. Bu sayede sorgu içindeki referanslar (örneğin m.Ad yerine Musteriler.Ad) daha kısa ve nettir.


Örnek 3: Hesaplanan Sütuna Takma Ad Verme


Her siparişin ortalama tutarını hesaplayıp, bu ortalamayı 'Ortalama Sipariş Tutarı' olarak adlandıralım.


SELECT
    AVG(ToplamTutar) AS "Ortalama Sipariş Tutarı"
FROM
    Siparisler;

Bu örnekte, hesaplanan AVG(ToplamTutar) değerine "Ortalama Sipariş Tutarı" adını verdik. Takma ad boşluk içerdiği için çift tırnak kullanılmıştır.


Örnek 4: Self-Join (Kendine Birleştirme) ile Takma Ad Kullanımı


Aynı şehirden iki farklı müşteriyi bulmak isteyelim (Musteriler tablosunda bir de Sehir sütunu olduğunu varsayalım).


SELECT
    m1.Ad AS Musteri1_Ad,
    m1.Soyad AS Musteri1_Soyad,
    m2.Ad AS Musteri2_Ad,
    m2.Soyad AS Musteri2_Soyad,
    m1.Sehir
FROM
    Musteriler AS m1
JOIN
    Musteriler AS m2 ON m1.Sehir = m2.Sehir AND m1.MusteriID <> m2.MusteriID;

Musteriler tablosunu iki farklı takma ad (m1 ve m2) ile kendi kendine birleştirerek, aynı şehirden farklı müşterileri bulabiliyoruz. Takma adlar, hangi sütunun hangi 'versiyon'dan geldiğini netleştirmeye yardımcı olur.


Önemli Notlar


  • Geçici Kapsam: Aliases, yalnızca oluşturuldukları sorgunun yürütülmesi boyunca geçerlidir. Veritabanının şemasını kalıcı olarak değiştirmezler.

  • AS İsteğe Bağlıdır: Çoğu SQL veritabanında AS anahtar kelimesi, hem sütun hem de tablo takma adları için isteğe bağlıdır. Ancak, sorgunun okunabilirliğini artırmak için kullanılması şiddetle tavsiye edilir.

  • Boşluklu veya Özel Karakterli Takma Adlar: Eğer bir takma ad boşluk içeriyorsa veya özel karakterler barındırıyorsa (örneğin, "Toplam Satışlar"), veritabanı sisteminize bağlı olarak çift tırnak ("), köşeli parantez ([]) veya ters tırnak (` `) içine alınması gerekebilir.

  • Kullanım Kısıtlamaları: Sütun takma adları genellikle SELECT, ORDER BY ve GROUP BY yan tümcelerinde kullanılabilir. Ancak, çoğu veritabanı sisteminde WHERE yan tümcesinde doğrudan kullanılamazlar. Bunun nedeni, WHERE yan tümcesi işlenirken sütun takma adlarının henüz tanımlanmamış olmasıdır. Bu tür durumlarda, takma adı içeren ifadeyi tekrar yazmanız veya bir alt sorgu (subquery) kullanmanız gerekebilir.

  • Okunabilirlik ve Karmaşıklık: Aliases, sorguları kısaltarak ve anlaşılır hale getirerek okunabilirliği artırır. Ancak, aşırı kısa veya anlamsız takma adlar (örneğin, a, b gibi) kullanmak, sorguyu başka bir geliştiricinin anlamasını zorlaştırabilir. İyi adlandırılmış takma adlar seçmek önemlidir.


Emin
5
0
SQL Makaleleri
SQL Dilinde BETWEEN Operatörü: Aralık Bazlı Veri Sorgulama

SQL, ilişkisel veritabanlarını yönetmek ve sorgulamak için kullanılan güçlü bir dildir. Veri tabanlarından belirli koşullara uyan kayıtları çekmek, analitik ve raporlama süreçlerinin temelini oluşturur. Bu bağlamda, belirli bir aralıktaki değerleri filtrelemek için kullanılan BETWEEN operatörü, sorguları daha okunabilir ve etkili hale getiren önemli bir araçtır. Bu makale, BETWEEN operatörünün sözdizimini, detaylı kullanımını ve pratik örneklerini ele alacaktır.


Sözdizimi


BETWEEN operatörünün temel sözdizimi aşağıdaki gibidir:


SELECT kolon1, kolon2, ...
FROM tablo_adi
WHERE kolon_adi BETWEEN deger1 AND deger2;

Detaylı Açıklama


Yukarıdaki sözdiziminde yer alan her bir bileşenin anlamı aşağıda açıklanmıştır:


  • SELECT kolon1, kolon2, ...: Sorgu sonucunda gösterilmesini istediğiniz kolonları belirtirsiniz. Tüm kolonları seçmek için * kullanabilirsiniz.

  • FROM tablo_adi: Verilerin çekileceği tablonun adını belirtir.

  • WHERE kolon_adi: Filtreleme koşulunun uygulanacağı kolonu belirtir. Bu kolon, sayısal, metin veya tarih/saat veri tipinde olabilir.

  • BETWEEN: Belirtilen aralığın başlangıcını ve sonunu dahil ederek bir koşul oluşturduğunu belirten anahtar kelimedir.

  • deger1: Aralık başlangıç değeridir. Bu değer, kolon_adi ile aynı veri tipinde olmalıdır.

  • AND: BETWEEN operatörü ile birlikte kullanılan ve aralık bitiş değerini belirten mantıksal operatördür.

  • deger2: Aralık bitiş değeridir. Bu değer de kolon_adi ile aynı veri tipinde olmalıdır.


BETWEEN operatörü, deger1 ve deger2 dahil olmak üzere, bu iki değer arasındaki tüm kayıtları döndürür. Mantıksal olarak, kolon_adi >= deger1 AND kolon_adi <= deger2 ifadesine eşdeğerdir.


Örnekler


Aşağıdaki örnekler, BETWEEN operatörünün farklı veri tipleriyle nasıl kullanılabileceğini göstermektedir. Örneklerde Urunler adında bir tablo varsayılmıştır.


Örnek 1: Sayısal Değerler Arasında Sorgulama


Fiyatı 50 ile 100 (dahil) arasında olan ürünleri listeleme.


SELECT UrunAdi, Fiyat
FROM Urunler
WHERE Fiyat BETWEEN 50 AND 100;

Örnek 2: Tarih Değerleri Arasında Sorgulama


2023 yılının Mart ayı içinde (1 Mart 2023 ile 31 Mart 2023 dahil) eklenen ürünleri listeleme.


SELECT UrunAdi, EklenmeTarihi
FROM Urunler
WHERE EklenmeTarihi BETWEEN '2023-03-01' AND '2023-03-31';

Örnek 3: Metin Değerleri Arasında Sorgulama (Alfabetik Sıraya Göre)


UrunAdi 'A' ile 'C' arasında (alfabetik olarak 'A' ve 'C' dahil, 'D'den küçük) olan ürünleri listeleme.


SELECT UrunAdi, Fiyat
FROM Urunler
WHERE UrunAdi BETWEEN 'A' AND 'C';

Not: Metin değerlerinde BETWEEN kullanımı, veritabanının harf duyarlılığı (case sensitivity) ayarına göre farklı sonuçlar verebilir. Bazı sistemlerde 'C' ile 'Czzzz' arasındaki tüm değerleri kapsarken, bazılarında sadece 'C' ile başlayanları veya 'C' harfini kapsar. Genellikle belirtilen üst değerin ilk harfini takip eden değerlere kadar kapsar.


Örnek 4: NOT BETWEEN Kullanımı


Fiyatı 50 ile 100 arasında OLMAYAN ürünleri listeleme.


SELECT UrunAdi, Fiyat
FROM Urunler
WHERE Fiyat NOT BETWEEN 50 AND 100;

Önemli Notlar


  • Dahil Edicilik: BETWEEN operatörü, belirtilen başlangıç ve bitiş değerlerini sorgu sonucuna dahil eder. Yani, deger1 <= kolon_adi <= deger2 koşulunu sağlar.

  • Veri Tipi Tutarlılığı: BETWEEN operatörü ile kullanılan değerlerin (deger1 ve deger2) sorgulanan kolonun veri tipiyle uyumlu olması önemlidir. Aksi takdirde hatalı sonuçlar veya tip uyumsuzluğu hataları oluşabilir.

  • Tarih ve Saat Hassasiyeti: Tarih ve saat değerleriyle çalışırken dikkatli olunmalıdır. Örneğin, BETWEEN '2023-01-01' AND '2023-01-31' ifadesi, 31 Ocak 2023'ün sadece başlangıcını (00:00:00) kapsar. Eğer o günün tüm saatlerini dahil etmek istiyorsanız, bitiş değerini '2023-01-31 23:59:59.999' (veritabanı hassasiyetine göre) gibi bir değere ayarlamanız gerekebilir veya < operatörünü kullanarak WHERE EklenmeTarihi >= '2023-01-01' AND EklenmeTarihi < '2023-02-01' şeklinde bir yaklaşım tercih edebilirsiniz.

  • Sıralama Önemi: BETWEEN deger1 AND deger2 ifadesinde deger1 genellikle deger2'den küçük veya eşit olmalıdır. Çoğu veritabanı yönetim sistemi (DBMS), deger1'in deger2'den büyük olması durumunda boş bir sonuç kümesi döndürecektir.

  • Alternatif Kullanım: BETWEEN operatörünün alternatifi olarak >= ve <= operatörleri ile AND mantıksal operatörü kullanılabilir. Örneğin, WHERE Fiyat >= 50 AND Fiyat <= 100 ifadesi, WHERE Fiyat BETWEEN 50 AND 100 ile aynı sonucu verir. BETWEEN genellikle sorgunun okunabilirliğini artırır.

Emin
12
0
SQL Makaleleri
SQL IN Operatörü: Setler İçindeki Veri Kontrolü

Veritabanı yönetim sistemlerinde (DBMS) veri sorgulama, belirli kriterlere uyan kayıtları seçmek için kritik bir işlemdir. SQL IN operatörü, bir sütundaki değerin, belirtilen bir değer listesi içinde veya bir alt sorgu tarafından döndürülen sonuç kümesi içinde olup olmadığını kontrol etmek için kullanılan güçlü ve esnek bir araçtır. Bu operatör, birden fazla OR koşulunu tek bir ifadeyle ele alarak sorguların okunabilirliğini ve yazım kolaylığını önemli ölçüde artırır.


SQL IN Operatörünün Sözdizimi


IN operatörünün temel sözdizimi iki ana biçimde incelenebilir: doğrudan bir değer listesiyle kullanım ve bir alt sorgu ile kullanım.



-- Değer listesiyle kullanım:
SELECT kolon_adi_1, kolon_adi_2, ...
FROM tablo_adi
WHERE hedef_kolon_adi IN (deger_1, deger_2, deger_3, ...);

-- Alt sorguyla kullanım:
SELECT kolon_adi_1, kolon_adi_2, ...
FROM tablo_adi
WHERE hedef_kolon_adi IN (SELECT alt_sorgu_kolonu FROM diger_tablo WHERE kosul);

Detaylı Açıklama


  • SELECT kolon_adi_1, kolon_adi_2, ...: Sorgu sonucunda hangi sütunların döndürüleceğini belirtir. Standart SQL SELECT ifadesidir.

  • FROM tablo_adi: Verilerin hangi tablodan çekileceğini belirtir.

  • WHERE hedef_kolon_adi: IN operatörü ile karşılaştırılacak olan sütunu ifade eder.

  • IN: Bu anahtar kelime, hedef_kolon_adi değerinin parantez içindeki listede veya alt sorgu sonucunda bulunup bulunmadığını kontrol eder.

  • (deger_1, deger_2, deger_3, ...): Virgülle ayrılmış bir dizi sabit değerdir. hedef_kolon_adi, bu listedeki herhangi bir değere eşitse koşul doğru kabul edilir. Metin değerleri tek tırnak (') içinde, sayısal değerler ise tırnaksız yazılmalıdır.

  • (SELECT alt_sorgu_kolonu FROM diger_tablo WHERE kosul): Bu, bir alt sorgudur. IN operatörü, hedef_kolon_adi değerinin bu alt sorgunun döndürdüğü tek sütunlu sonuç kümesinde olup olmadığını kontrol eder. Bu yöntem, dinamik bir değer listesi oluşturmak için idealdir.

  • NOT IN: IN operatörünün tam tersidir. hedef_kolon_adi değerinin belirtilen listede veya alt sorgu sonucunda OLMADIĞINI kontrol eder.


Pratik Kullanım Örnekleri


Aşağıdaki örneklerde, bir Urunler tablosu (UrunID, UrunAdi, Kategori, Fiyat) ve bir Siparisler tablosu (SiparisID, MusteriID, UrunID, SiparisTarihi) ile Musteriler tablosu (MusteriID, MusteriAdi, Sehir) olduğunu varsayalım.


Örnek 1: Belirli Kategorilerdeki Ürünleri Seçme


Bu örnek, Urunler tablosundan 'Elektronik' veya 'Ev Gereçleri' kategorilerine ait tüm ürünleri getirir.



SELECT UrunAdi, Kategori, Fiyat
FROM Urunler
WHERE Kategori IN ('Elektronik', 'Ev Gerecleri');

Örnek 2: Belirli Müşterilerin Siparişlerini Bulma (Sayısal Değer Listesi)


Belirli MusteriID'lere sahip siparişleri listeler.



SELECT SiparisID, MusteriID, SiparisTarihi
FROM Siparisler
WHERE MusteriID IN (101, 105, 112);

Örnek 3: Bir Alt Sorgu ile Müşterilerin Şehirlerine Göre Siparişlerini Bulma


Bu örnek, 'Ankara' veya 'İzmir' şehirlerinde ikamet eden müşterilerin tüm siparişlerini getirir. Burada Musteriler tablosundan dönen MusteriID'ler, Siparisler tablosundaki filtreleme için kullanılır.



SELECT S.SiparisID, M.MusteriAdi, M.Sehir, S.SiparisTarihi
FROM Siparisler AS S
JOIN Musteriler AS M ON S.MusteriID = M.MusteriID
WHERE S.MusteriID IN (SELECT MusteriID FROM Musteriler WHERE Sehir IN ('Ankara', 'Izmir'));

Örnek 4: Belirli Kategoriler Dışındaki Ürünleri Seçme (NOT IN Kullanımı)


Bu örnek, 'Giyim' ve 'Kitap' kategorileri dışındaki tüm ürünleri listeler.



SELECT UrunAdi, Kategori, Fiyat
FROM Urunler
WHERE Kategori NOT IN ('Giyim', 'Kitap');

Önemli Notlar ve İpuçları


  • Performans: Çok uzun değer listeleri veya karmaşık alt sorgular içeren IN operatörleri, bazı durumlarda performans sorunlarına yol açabilir. Özellikle listeler binlerce değer içeriyorsa veya alt sorgu büyük miktarda veri döndürüyorsa, sorgu optimizasyonunu gözden geçirmek (örneğin JOIN kullanmak) gerekebilir.

  • NULL Değerler: IN operatörü, listedeki NULL değerleriyle karşılaştırıldığında özel bir davranış sergiler. Eğer listede NULL varsa, hedef_kolon_adi IN (deger_1, NULL) ifadesi, hedef_kolon_adi'nın NULL olmasına rağmen NULL ile eşleşmez. NOT IN durumunda ise, alt sorgu veya değer listesi NULL bir değer içeriyorsa, NOT IN koşulu asla doğru (TRUE) değerini döndürmez. Bu nedenle, NULL değerlerinin varlığına dikkat edilmelidir.

  • Alternatifler: Basit ve kısa değer listeleri için IN operatörü idealdir. Ancak, çok sayıda OR koşulu yazmak yerine IN kullanmak okunabilirliği artırır. Eğer performans endişeleri varsa ve alt sorgunun döndürdüğü veri kümesi büyükse, JOIN işlemleri veya EXISTS operatörü gibi alternatifler değerlendirilebilir.

  • Veri Tipi Tutarlılığı: IN operatörü içinde kullanılan değerlerin veya alt sorgunun döndürdüğü değerlerin, karşılaştırıldığı sütunun veri tipiyle uyumlu olması önemlidir. Aksi takdirde, beklenmedik sonuçlar veya hata mesajları alınabilir.

  • Dinamik Listeler: IN operatörünü bir alt sorgu ile kullanmak, koşulların dinamik olarak belirlenmesini sağlar. Bu, özellikle bir tablodaki veriye dayanarak başka bir tablodaki kayıtları filtrelemek gerektiğinde çok kullanışlıdır.

Emin
19
0
SQL Makaleleri
SQL Dilinde Wildcards (Joker Karakterler) Kullanımı
SQL sorgularında metin tabanlı veriler üzerinde esnek desen eşleştirme yapmak, veritabanı yönetiminde kritik bir yetenektir. Bu yetenek, belirli bir kriteri tam olarak karşılamayan ancak belli bir kalıba uyan kayıtları bulmamızı sağlar. SQL Wildcards (Joker Karakterler), tam da bu amaç için, özellikle LIKE operatörü ile birlikte kullanılarak, arama desenlerinin tanımlanmasında güçlü bir rol oynar. Bu kılavuz, SQL Wildcards'ın temel kullanımını, sözdizimini ve pratik örneklerini detaylandırmaktadır.

Sözdizimi


SQL Wildcards, genellikle LIKE operatörü ile birlikte kullanılır ve bir WHERE koşulunun parçası olarak bir sütundaki değerlerin belirli bir desene uyup uymadığını kontrol eder. Temel sözdizimi aşağıdaki gibidir:
SELECT sütun_adları
FROM tablo_adı
WHERE sütun_adı LIKE desen;
Burada desen, bir veya daha fazla joker karakter içeren bir karakter dizisidir.

Detaylı Açıklama


SQL, desen eşleştirmesi için iki ana joker karakter sunar:
  • % (Yüzde İşareti): Sıfır veya daha fazla karakterle eşleşir. Bu joker karakter, bir metin dizisinin herhangi bir yerinde herhangi bir sayıda karakterin bulunabileceğini belirtmek için kullanılır. Örneğin, 'A%' 'A' ile başlayan herhangi bir metinle eşleşirken, '%A' 'A' ile biten herhangi bir metinle eşleşir ve '%A%' 'A' karakterini içeren herhangi bir metinle eşleşir.

  • _ (Alt Çizgi): Tam olarak tek bir karakterle eşleşir. Bu joker karakter, belirli bir pozisyonda herhangi bir karakterin olabileceğini, ancak o pozisyonun mutlaka dolu olması gerektiğini belirtmek için kullanılır. Örneğin, 'A_Z', 'A' ile başlayıp 'Z' ile biten ve ortasında tam olarak tek bir karakter bulunan metinlerle (örneğin 'AAZ', 'ABZ', 'A1Z' gibi) eşleşir.

Bazı veritabanı sistemleri (örneğin, MS Access ve SQL Server), LIKE operatörü ile birlikte [], [^] ve [-] gibi ek joker karakterler sunabilir. Ancak bu kılavuz, tüm SQL standartlarında yaygın olarak desteklenen % ve _ karakterlerine odaklanmaktadır.


Pratik Kullanım Örnekleri


Aşağıdaki örnekler, bir Musteriler tablosunda (MusteriID, Ad, Soyad, Sehir, Eposta sütunlarına sahip) joker karakterlerin nasıl kullanıldığını göstermektedir.

Örnek 1: 'A' harfi ile başlayan müşteri adlarını bulma.

SELECT Ad, Soyad
FROM Musteriler
WHERE Ad LIKE 'A%';

Bu sorgu, Ad sütunundaki değeri 'A' harfi ile başlayan tüm müşterileri getirir. Örneğin, 'Ayşe', 'Ali', 'Ahmet' gibi adlar eşleşecektir.


Örnek 2: 'n' harfi ile biten müşteri adlarını bulma.

SELECT Ad, Soyad
FROM Musteriler
WHERE Ad LIKE '%n';

Bu sorgu, Ad sütunundaki değeri 'n' harfi ile biten tüm müşterileri listeler. Örneğin, 'Can', 'Asuman', 'Gülşen' gibi adlar eşleşecektir.


Örnek 3: Adında 'or' karakter dizisi geçen müşteri adlarını bulma.

SELECT Ad, Soyad
FROM Musteriler
WHERE Ad LIKE '%or%';

Bu sorgu, Ad sütununda 'or' karakter dizisini herhangi bir konumda içeren tüm müşterileri getirir. Örneğin, 'Ozan', 'Doruk', 'Burak' gibi adlar eşleşebilir.


Örnek 4: Tam olarak 5 harfli ve 'e' ile biten müşteri adlarını bulma.

SELECT Ad, Soyad
FROM Musteriler
WHERE Ad LIKE '____e';

Her bir alt çizgi (_) tek bir karakteri temsil ettiğinden, bu sorgu tam olarak 5 harfli olan ve son harfi 'e' olan adları (örneğin 'Emine', 'Ayşe') bulur.


Örnek 5: Soyadı 'B' ile başlayan, ikinci harfi herhangi bir şey olan ve üçüncü harfi 'l' olan müşterileri bulma.

SELECT Ad, Soyad
FROM Musteriler
WHERE Soyad LIKE 'B_l%';

Bu sorgu, soyadı 'B' ile başlayıp, ikinci harfi herhangi bir karakter olup, üçüncü harfi 'l' olan ve sonrasında herhangi bir karakter dizisi (veya hiçbir şey) gelebilen soyadlarını eşleştirir. Örneğin, 'Balcı', 'Bilen', 'Bilgin' gibi soyadları eşleşebilir.


Örnek 6: Belirli bir e-posta domaininden olmayan müşterileri bulma.

SELECT Ad, Soyad, Eposta
FROM Musteriler
WHERE Eposta NOT LIKE '%@example.com';

NOT LIKE operatörü, belirtilen desene UYMAYAN kayıtları seçmek için kullanılır. Bu örnek, e-posta adresi '@example.com' ile bitmeyen tüm müşterileri getirir.


Önemli Notlar


  • LIKE Operatörü: Wildcards, yalnızca LIKE veya NOT LIKE operatörleri ile birlikte kullanıldığında özel anlam taşır. Diğer operatörlerle (örneğin =) kullanıldığında, joker karakterler literal karakterler olarak yorumlanır.

  • Büyük/Küçük Harf Duyarlılığı: Wildcard desen eşleştirmesinin büyük/küçük harf duyarlılığı, kullanılan veritabanı sistemine ve sütunun kolaj ayarlarına bağlıdır. Bazı sistemler varsayılan olarak duyarsızken (örneğin SQL Server), bazıları duyarlıdır (örneğin PostgreSQL, MySQL). Duyarlılığı ayarlamak için genellikle COLLATE anahtar kelimesi veya veritabanı yapılandırmaları kullanılır.

  • Joker Karakterleri Literal Olarak Kullanma: Eğer deseninizde gerçekten bir % veya _ karakterini aramak istiyorsanız (yani joker karakter olarak değil, gerçek bir karakter olarak), ESCAPE anahtar kelimesi ile özel bir kaçış karakteri tanımlamanız gerekir. Örneğin: LIKE '50\% indirim' ESCAPE '\', '50% indirim' metnini arar.

  • Performans Etkileri: Bir desenin başında joker karakter kullanılması (örneğin '%kelime'), veritabanının indeksleri etkin bir şekilde kullanmasını engelleyebilir ve bu da büyük tablolarda sorgu performansını olumsuz etkileyebilir. Mümkün olduğunda, desenleri bir joker karakterle başlatmaktan kaçınmak daha iyi bir uygulama olabilir.

  • Gelişmiş Desen Eşleştirme: Bazı veritabanları (örneğin PostgreSQL, MySQL) daha karmaşık desen eşleştirme ihtiyaçları için düzenli ifadeleri (Regular Expressions) destekleyen REGEXP veya SIMILAR TO gibi operatörler sunar. Bu operatörler, LIKE'tan daha güçlü desen eşleştirme yetenekleri sağlar.


Emin
9
0
SQL Makaleleri
SQL Dilinde LIKE Operatörü: Desen Tabanlı Arama Rehberi

SQL veritabanlarında, belirli bir desene uyan metin değerlerini aramak, veri filtreleme işlemlerinin temel bir parçasıdır. LIKE operatörü, bu tür desen tabanlı aramaları gerçekleştirmek için kullanılır. Bu operatör, tam eşleşme yerine kısmi eşleşmeleri veya belirli kalıpları içeren metinleri bulmak gerektiğinde devreye girer ve esnek sorgular oluşturmaya olanak tanır.


Sözdizimi


LIKE operatörünün genel sözdizimi aşağıdaki gibidir:

SELECT kolon_adi(lar)
FROM tablo_adi
WHERE kolon_adi LIKE desen;

Detaylı Açıklama


LIKE operatörü, WHERE yan tümcesi ile birlikte kullanılarak belirtilen bir sütundaki değerlerin belirli bir desene uyup uymadığını kontrol eder. Bu deseni tanımlamak için iki özel joker karakter (wildcard character) kullanılır:


  • % (Yüzde İşareti): Sıfır veya daha fazla karakter dizisini temsil eder. Örneğin, 'A%' ile başlayan tüm değerleri, '%A' ile biten tüm değerleri ve '%A%' ile A içeren tüm değerleri bulabilirsiniz.

  • _ (Alt Çizgi): Tek bir karakteri temsil eder. Örneğin, 'A_C', 'ABC', 'AEC' gibi üç karakterli ve ortasında herhangi bir karakter olan değerleri bulur.

Bu joker karakterler, arama desenini oluşturmak için birleştirilebilir.


Pratik Kullanım Örnekleri


Aşağıdaki örnekler, LIKE operatörünün farklı senaryolarda nasıl kullanıldığını göstermektedir. Bu örneklerde, bir Urunler tablosunun UrunAdi sütununda arama yaptığımızı varsayalım.


Örnek 1: Belirli Bir Harf Dizisiyle Başlayan Değerler


'Bilgisayar' kelimesiyle başlayan tüm ürün adlarını bulmak için:

SELECT UrunAdi
FROM Urunler
WHERE UrunAdi LIKE 'Bilgisayar%';

Örnek 2: Belirli Bir Harf Dizisiyle Biten Değerler


'Mouse' kelimesiyle biten tüm ürün adlarını bulmak için:

SELECT UrunAdi
FROM Urunler
WHERE UrunAdi LIKE '%Mouse';

Örnek 3: Belirli Bir Harf Dizisi İçeren Değerler


Ürün adında 'USB' ifadesi geçen tüm ürünleri bulmak için:

SELECT UrunAdi
FROM Urunler
WHERE UrunAdi LIKE '%USB%';

Örnek 4: Belirli Bir Karakter Deseniyle Eşleşen Değerler


İkinci harfi 'a' olan ve toplamda en az üç karakterli ürün adlarını bulmak için:

SELECT UrunAdi
FROM Urunler
WHERE UrunAdi LIKE '_a%';

Örnek 5: NOT LIKE Kullanımı


Belirli bir desene uymayan değerleri dışlamak için NOT LIKE operatörü kullanılır. Örneğin, 'Telefon' kelimesiyle başlamayan tüm ürün adlarını bulmak için:

SELECT UrunAdi
FROM Urunler
WHERE UrunAdi NOT LIKE 'Telefon%';

Önemli Notlar


  • Büyük/Küçük Harf Duyarlılığı: LIKE operatörünün büyük/küçük harf duyarlılığı, kullanılan veritabanı sistemine (örneğin, PostgreSQL, MySQL, SQL Server) ve sütunun harmanlama (collation) ayarlarına bağlıdır. Bazı sistemler varsayılan olarak duyarsızken, bazıları duyarlı olabilir veya harmanlama ayarları ile bu durum değiştirilebilir. Büyük/küçük harf duyarlılığından bağımsız arama yapmak için genellikle LOWER() veya UPPER() fonksiyonları ile birlikte kullanılır: WHERE LOWER(kolon_adi) LIKE LOWER('%desen%').

  • Performans: Özellikle '%' ile başlayan desenler (örneğin, LIKE '%desen') indeks kullanımını zorlaştırabilir ve büyük tablolarda sorgu performansını olumsuz etkileyebilir. Mümkünse, deseni bir harf veya karakter dizisiyle başlatmak (LIKE 'desen%') daha performanslı olabilir.

  • Kaçış Karakterleri (Escape Characters): Eğer aradığınız desende % veya _ gibi joker karakterler varsa ve bunları literal olarak aramak istiyorsanız, bir kaçış karakteri (escape character) kullanmanız gerekir. Çoğu SQL veritabanı, LIKE '%50\_%' ESCAPE '\' gibi bir sözdizimine izin verir, bu da '50_' ifadesini içeren değerleri arar.

  • Regular Expressions (Regex): Daha karmaşık desen eşleştirme ihtiyaçları için, birçok veritabanı REGEXP veya RLIKE gibi düzenli ifade operatörlerini destekler. Bu operatörler, LIKE operatörüne göre çok daha güçlü ve esnek desen eşleştirme yetenekleri sunar.

Emin
10
0
SQL Makaleleri
SQL AVG Fonksiyonu: Ortalamaları Hesaplama Kılavuzu

SQL (Yapısal Sorgu Dili), veritabanlarından bilgi almak ve manipüle etmek için kullanılan standart bir dildir. Bu güçlü dilin temel bileşenlerinden biri olan AVG() fonksiyonu, belirli bir sayısal sütundaki değerlerin ortalamasını hesaplamak için kullanılır. Veri analizi ve raporlama süreçlerinde vazgeçilmez bir araç olan AVG(), büyük veri kümelerinden anlamlı istatistikler çıkarmayı sağlar. Bu makalede, AVG() fonksiyonunun sözdizimini, detaylı kullanımını ve pratik örneklerini inceleyeceğiz.


Sözdizimi


AVG() fonksiyonunun genel sözdizimi aşağıdaki gibidir:


SELECT AVG(sütun_adı)
FROM tablo_adı
WHERE koşul;

Alternatif olarak, tüm benzersiz değerlerin ortalamasını almak için DISTINCT anahtar kelimesi ile birlikte kullanılabilir:


SELECT AVG(DISTINCT sütun_adı)
FROM tablo_adı
WHERE koşul;

Detaylı Açıklama


  • SELECT: Sorgunun anahtar kelimesidir ve veritabanından veri almak için kullanılır.

  • AVG(): Ortalamayı hesaplamak için kullanılan SQL toplama (aggregate) fonksiyonudur.

  • sütun_adı: Ortalaması alınacak sayısal sütunun adıdır. Bu sütun INTEGER, DECIMAL veya FLOAT gibi sayısal bir veri tipine sahip olmalıdır.

  • FROM tablo_adı: Verilerin çekileceği tablonun adını belirtir.

  • WHERE koşul: İsteğe bağlı bir yan tümcedir. Belirtilen koşulları karşılayan satırlar üzerinde ortalama hesaplaması yapılmasını sağlar. Bu olmadan, tüm tablodaki ilgili sütunun ortalaması hesaplanır.

  • DISTINCT: İsteğe bağlı bir anahtar kelimedir. Eğer kullanılırsa, AVG() fonksiyonu yalnızca belirtilen sütundaki benzersiz değerlerin ortalamasını hesaplar. Tekrar eden değerler hesaplamaya dahil edilmez.

Pratik Kullanım Örnekleri


Aşağıdaki örneklerde, bir Urunler tablosunun olduğu varsayılmaktadır. Bu tabloda UrunID (INTEGER), UrunAdi (VARCHAR), Fiyat (DECIMAL) ve StokAdedi (INTEGER) gibi sütunlar bulunmaktadır.


Örnek 1: Tüm Ürünlerin Ortalama Fiyatını Hesaplama


Bu sorgu, Urunler tablosundaki tüm ürünlerin ortalama fiyatını döndürecektir.


SELECT AVG(Fiyat) AS OrtalamaFiyat
FROM Urunler;

Örnek 2: Belirli Bir Koşula Göre Ortalama Fiyatı Hesaplama


Bu örnek, fiyatı 50 TL'den yüksek olan ürünlerin ortalama fiyatını bulur.


SELECT AVG(Fiyat) AS YuksekFiyatliOrtalama
FROM Urunler
WHERE Fiyat > 50.00;

Örnek 3: Farklı Ürün Kategorilerine Göre Ortalama Fiyatı Hesaplama


Eğer Urunler tablosunda bir Kategori sütunu olsaydı, her kategori için ortalama fiyatı aşağıdaki gibi hesaplayabilirdik. (Bu örnekte Urunler tablosuna Kategori sütununun eklendiği varsayılmıştır.)


SELECT Kategori, AVG(Fiyat) AS KategoriOrtalamaFiyat
FROM Urunler
GROUP BY Kategori;

Örnek 4: Benzersiz Stok Adetlerinin Ortalamasını Hesaplama


Bu sorgu, StokAdedi sütunundaki benzersiz değerlerin ortalamasını hesaplar. Eğer aynı stok adedine sahip birden fazla ürün varsa, bu değer yalnızca bir kez hesaba katılır.


SELECT AVG(DISTINCT StokAdedi) AS BenzersizStokOrtalamasi
FROM Urunler;

Önemli Notlar


  • NULL Değerler: AVG() fonksiyonu, hesaplamalarına NULL değerleri dahil etmez. Yani, bir sütunda NULL değerler varsa, bunlar ortalama hesaplamasından otomatik olarak çıkarılır.

  • Sayısal Olmayan Sütunlar: AVG() fonksiyonu yalnızca sayısal veri tipleriyle çalışır. Sayısal olmayan bir sütun üzerinde kullanılmaya çalışılırsa hata döndürebilir veya beklenmeyen sonuçlar üretebilir.

  • GROUP BY ile Kullanım: AVG() genellikle GROUP BY yan tümcesiyle birlikte kullanılır. Bu, verileri belirli gruplara ayırarak her grup için ayrı ayrı ortalama hesaplamaları yapılmasına olanak tanır.

  • DISTINCT Kullanımı: DISTINCT anahtar kelimesi, yalnızca benzersiz değerlerin ortalamasını almak istediğinizde faydalıdır. Ancak, bu kullanımı sorgu performansını etkileyebilir, bu nedenle dikkatli kullanılmalıdır.

  • Sıfıra Bölme Hatası: Eğer ortalaması alınacak hiçbir satır yoksa (örneğin, WHERE koşulu hiçbir satırı eşleştirmiyorsa), AVG() fonksiyonu bazı veritabanı sistemlerinde NULL döndürebilirken, bazılarında sıfıra bölme hatasına benzer bir durumla karşılaşılabilir. Genellikle NULL döndürmesi beklenen davranıştır.

Emin
19
0
SQL Makaleleri
SQL Dilinde SUM Fonksiyonu: Detaylı Kullanım Kılavuzu

SQL (Yapısal Sorgulama Dili), veritabanlarından bilgi almayı ve manipüle etmeyi sağlayan güçlü bir dildir. Bu dilin temel bileşenlerinden biri olan SUM() fonksiyonu, sayısal bir sütundaki değerlerin toplamını hesaplamak için kullanılan bir toplama (aggregate) fonksiyonudur. Raporlama, finansal analiz veya genel veri özetleri oluştururken, belirli bir kriteri karşılayan tüm kayıtların toplam değerini bulmak hayati öneme sahiptir. Bu kılavuz, SUM() fonksiyonunun sözdiziminden başlayarak, çeşitli kullanım senaryolarını örneklerle açıklayacak ve bu güçlü fonksiyonu verimli bir şekilde kullanmanıza yardımcı olacak pratik bilgiler sunacaktır.


SQL SUM Fonksiyonunun Sözdizimi


SUM() fonksiyonunun temel sözdizimi aşağıdaki gibidir:


SELECT SUM(sutun_adi)
FROM tablo_adi
WHERE kosul;

İsteğe bağlı olarak, yalnızca benzersiz değerlerin toplamını almak için DISTINCT anahtar kelimesi kullanılabilir:


SELECT SUM(DISTINCT sutun_adi)
FROM tablo_adi
WHERE kosul;

Detaylı Açıklama


SUM() fonksiyonu, belirtilen bir sayısal ifadenin veya sütunun değerlerini toplar. Fonksiyonun bileşenleri şunlardır:


  • SUM(): Bu, toplama işlemini gerçekleştiren ana fonksiyondur.

  • sutun_adi veya expression: Toplanacak değerleri içeren sayısal bir sütun adını veya sayısal bir değer döndüren herhangi bir ifadeyi (örneğin, Miktar * BirimFiyat) temsil eder. Bu ifade, INT, DECIMAL, FLOAT gibi sayısal veri tiplerine sahip olmalıdır.

  • DISTINCT (isteğe bağlı): Eğer bu anahtar kelime kullanılırsa, SUM() fonksiyonu yalnızca belirtilen sütundaki veya ifadedeki benzersiz değerlerin toplamını hesaplar. Yinelenen değerler toplama dahil edilmez. Genellikle bu anahtar kelimeye ihtiyaç duyulmaz ve kullanımı performansı etkileyebilir.

  • FROM tablo_adi: Sorgunun hangi tablodan veri alacağını belirtir.

  • WHERE kosul (isteğe bağlı): Toplama işlemine dahil edilecek satırları filtrelemek için kullanılır. Yalnızca belirtilen koşulu sağlayan satırlar toplanır.


SUM() fonksiyonu, varsayılan olarak NULL değerleri toplama işlemine dahil etmez. Yani, bir sütunda NULL değeri varsa, bu değer göz ardı edilir ve toplam etkilenmez.


Pratik Kullanım Örnekleri


Aşağıdaki örneklerde, bir satış tablosu olan Satislar'ı kullanacağız. Bu tablo, SatisID, UrunID, Miktar, BirimFiyat, SatisTarihi ve MusteriID sütunlarını içermektedir.


Örnek 1: Tüm Satışların Toplam Miktarını Bulma


Tüm satış kayıtlarındaki ürünlerin toplam miktarını bulmak için basit bir SUM() kullanımı:


SELECT SUM(Miktar) AS ToplamMiktar
FROM Satislar;

Açıklama: Bu sorgu, Satislar tablosundaki tüm Miktar değerlerini toplar ve sonucu ToplamMiktar adıyla döndürür.


Örnek 2: Ürün Başına Toplam Satış Hacmini Hesaplama


GROUP BY ifadesiyle birlikte SUM() kullanarak her bir ürün için ayrı ayrı toplam satış miktarını hesaplayabiliriz:


SELECT UrunID, SUM(Miktar) AS UrunToplamMiktar
FROM Satislar
GROUP BY UrunID;

Açıklama: Sorgu, UrunID'ye göre gruplandırma yapar ve her bir UrunID için ilgili satış miktarlarının toplamını hesaplar.


Örnek 3: Belirli Bir Tarihten Sonraki Toplam Geliri Hesaplama


WHERE koşulu ile belirli bir tarihten sonraki satışların toplam gelirini (miktar * birim fiyat) hesaplayabiliriz:


SELECT SUM(Miktar * BirimFiyat) AS ToplamGelir
FROM Satislar
WHERE SatisTarihi > '2023-01-16';

Açıklama: Bu sorgu, 16 Ocak 2023 tarihinden sonra gerçekleşen satışların her biri için Miktar ile BirimFiyat'ı çarparak geliri bulur ve bu gelirlerin toplamını ToplamGelir olarak döndürür.


Örnek 4: Farklı Miktar Değerlerinin Toplamını Bulma


Eğer sadece benzersiz satış miktarlarının toplamını almak istiyorsanız, DISTINCT anahtar kelimesini kullanabilirsiniz:


SELECT SUM(DISTINCT Miktar) AS FarkliMiktarToplami
FROM Satislar;

Açıklama: Bu sorgu, Satislar tablosundaki Miktar sütununda tekrar eden değerleri bir kez sayarak, yalnızca farklı Miktar değerlerinin toplamını hesaplar.


Örnek 5: Toplam Geliri Hesaplama ve Filtreleme (HAVING ile)


GROUP BY ile birlikte HAVING kullanarak, belirli bir eşiğin üzerindeki toplam gelire sahip ürünleri filtreleyebiliriz:


SELECT UrunID, SUM(Miktar * BirimFiyat) AS UrunToplamGelir
FROM Satislar
GROUP BY UrunID
HAVING SUM(Miktar * BirimFiyat) > 200;

Açıklama: Bu örnek, her bir UrunID için toplam geliri hesaplar ve yalnızca toplam geliri 200'den fazla olan ürünleri listeler.


Önemli Notlar ve İpuçları


  • NULL Değerler: SUM() fonksiyonu, NULL değerleri otomatik olarak göz ardı eder. Eğer NULL değerleri sıfır olarak dahil etmek isterseniz, COALESCE() veya ISNULL() gibi fonksiyonları kullanmalısınız (örneğin, SUM(COALESCE(sutun_adi, 0))).

  • Sayısal Olmayan Veri Tipleri: SUM() yalnızca sayısal veri tipleriyle çalışır. Sayısal olmayan bir sütun üzerinde kullanılırsa hata verecektir. Gerekirse, veri tipini uygun bir sayısal türe dönüştürmek için CAST() veya CONVERT() gibi fonksiyonları kullanın.

  • GROUP BY ile Kullanım: SUM() fonksiyonunun gücü genellikle GROUP BY ifadesiyle birleştiğinde ortaya çıkar. Bu kombinasyon, verileri belirli kategorilere göre gruplandırarak her grup için ayrı ayrı toplamları hesaplamanıza olanak tanır.

  • HAVING ile Filtreleme: GROUP BY kullanıldığında, gruplar üzerinde filtreleme yapmak için WHERE yerine HAVING ifadesi kullanılır. WHERE, gruplama yapılmadan önce satırları filtrelerken, HAVING gruplama yapıldıktan ve toplama fonksiyonları uygulandıktan sonra grupları filtreler.

  • Performans: Büyük veri kümelerinde SUM() kullanımı, özellikle DISTINCT anahtar kelimesiyle veya karmaşık ifadelerle birleştiğinde performans üzerinde etki yaratabilir. İndeksleme, sorgu optimizasyonu ve uygun veri tipi seçimi gibi faktörler performansı artırabilir.

Emin
7
0
SQL Makaleleri
SQL Dilinde COUNT Fonksiyonunun Detaylı Kullanımı

SQL veritabanı yönetiminde, veri kümelerinden bilgi çıkarmak için çeşitli aggregate fonksiyonlar kullanılır. Bu fonksiyonlardan biri olan COUNT, bir sorgu tarafından döndürülen satır sayısını veya belirli bir kolondaki NULL olmayan değerlerin sayısını belirlemek için kritik bir araçtır. Bu makale, COUNT fonksiyonunun temel sözdiziminden başlayarak, farklı kullanım senaryoları ve pratik örneklerle detaylı bir rehber sunmaktadır. Veri analizi, raporlama ve istatistiksel sorgular için COUNT fonksiyonunu etkili bir şekilde kullanmayı öğrenmek, her SQL geliştiricisi ve veritabanı yöneticisi için temel bir beceridir.


Temel Sözdizimi


COUNT fonksiyonunun genel sözdizimi aşağıdaki gibidir:



COUNT ( { * | [ ALL | DISTINCT ] ifade } )

Bu sözdizimi içerisinde farklı parametreler, sayım işleminin nasıl yapılacağını belirler.


Detaylı Açıklama


COUNT fonksiyonunun yapısını oluşturan her bir bileşen, belirli bir amaca hizmet eder:


  • * (Yıldız): Bir sorgu tarafından döndürülen toplam satır sayısını sayar. Bu, NULL değerler içeren satırları da dahil olmak üzere, filtrelenmiş tüm satırları sayar. Performans açısından genellikle en hızlı yöntemdir çünkü belirli bir kolonu kontrol etme ihtiyacı yoktur.

  • ifade (Expression): Sayılacak olan kolonun adını veya bir ifadeyi belirtir. COUNT(kolon_adı) kullanıldığında, SQL yalnızca bu kolonda NULL olmayan değerlere sahip satırları sayar. Eğer tüm satırları saymak istiyorsanız ve kolonun NULL değer içerme olasılığı varsa, COUNT(*) kullanmanız daha doğru olur.

  • ALL: Bu anahtar kelime isteğe bağlıdır ve varsayılan davranıştır. ifade içindeki tüm değerleri (tekrarlananları da dahil) sayar. Genellikle açıkça belirtilmez.

  • DISTINCT: Bu anahtar kelime, ifade içindeki yalnızca benzersiz, NULL olmayan değerleri sayar. Örneğin, bir kolonda kaç farklı değer olduğunu öğrenmek istediğinizde kullanılır. Performans maliyeti COUNT(*) veya COUNT(kolon_adı)'na göre daha yüksek olabilir, çünkü veritabanının benzersiz değerleri belirlemek için ek işlem yapması gerekir.


COUNT fonksiyonu genellikle WHERE yan tümcesi ile birlikte belirli koşullara uyan kayıtları saymak için, GROUP BY yan tümcesi ile birlikte verileri gruplayarak her grup için sayım yapmak üzere ve HAVING yan tümcesi ile birlikte gruplanmış sayımlar üzerinde filtreleme yapmak için kullanılır.


Pratik Kullanım Örnekleri


Aşağıdaki örnekler, bir Urunler tablosu üzerinden COUNT fonksiyonunun farklı senaryolarda nasıl kullanıldığını göstermektedir. Urunler tablosunun UrunID, UrunAd, KategoriID ve Fiyat kolonlarına sahip olduğunu varsayalım.


Örnek 1: Tablodaki Toplam Satır Sayısını Bulma


Bu sorgu, Urunler tablosundaki tüm satırların sayısını döndürür.



SELECT COUNT(*) AS ToplamUrunSayisi
FROM Urunler;

Örnek 2: Belirli Bir Kolondaki NULL Olmayan Değerlerin Sayısını Bulma


Bu sorgu, Fiyat kolonu NULL olmayan ürünlerin sayısını döndürür. Eğer bazı ürünlerin fiyatı belirtilmemişse, bu sorgu COUNT(*)'dan farklı bir sonuç verebilir.



SELECT COUNT(Fiyat) AS FiyatliUrunSayisi
FROM Urunler;

Örnek 3: Benzersiz Kategori Sayısını Bulma


Bu sorgu, Urunler tablosunda kaç farklı kategori bulunduğunu gösterir.



SELECT COUNT(DISTINCT KategoriID) AS BenzersizKategoriSayisi
FROM Urunler;

Örnek 4: Belirli Bir Koşula Uyan Kayıtların Sayısını Bulma


Bu sorgu, fiyatı 50 TL'den yüksek olan ürünlerin sayısını döndürür.



SELECT COUNT(*) AS YuksekFiyatliUrunSayisi
FROM Urunler
WHERE Fiyat > 50;

Örnek 5: Her Kategori İçin Ürün Sayısını Bulma


Bu sorgu, KategoriID'ye göre ürünleri gruplar ve her kategori için toplam ürün sayısını listeler.



SELECT KategoriID, COUNT(*) AS UrunSayisi
FROM Urunler
GROUP BY KategoriID;

Örnek 6: Belirli Bir Eşiğin Üzerinde Ürüne Sahip Kategorileri Listeleme


Bu sorgu, GROUP BY ile birlikte HAVING yan tümcesini kullanarak, 5'ten fazla ürüne sahip kategorileri ve bu kategorilerdeki ürün sayılarını listeler.



SELECT KategoriID, COUNT(*) AS UrunSayisi
FROM Urunler
GROUP BY KategoriID
HAVING COUNT(*) > 5;

Önemli Notlar


  • COUNT(*) ve COUNT(kolon_adı) Farkı: COUNT(*), sorgunun döndürdüğü tüm satırları sayarken, COUNT(kolon_adı) yalnızca belirtilen kolon_adı'nda NULL olmayan değerlere sahip satırları sayar. Bu, özellikle NULL değerlerin bulunduğu kolonlarda önemli bir fark yaratabilir.

  • DISTINCT Kullanımı: COUNT(DISTINCT kolon_adı), bir kolondaki benzersiz değerlerin sayısını bulmak için kullanılır. Büyük veri kümelerinde performansı etkileyebilir, çünkü veritabanının benzersiz değerleri belirlemek için ek bir sıralama veya hash işlemi yapması gerekebilir.

  • Aggregate Fonksiyonu: COUNT, bir aggregate fonksiyonudur ve genellikle GROUP BY yan tümcesi ile birlikte kullanılır. GROUP BY kullanılmadığında, tüm veri kümesi tek bir grup olarak kabul edilir ve tek bir sayım değeri döndürülür.

  • Koşullu Sayımlar: Belirli bir koşula uyan kayıtları saymak için WHERE yan tümcesi kullanılır. Daha karmaşık koşullu sayımlar için CASE ifadesi (örneğin, COUNT(CASE WHEN koşul THEN 1 ELSE NULL END)) kullanılabilir. Bu, aynı sorgu içinde birden fazla koşula dayalı sayım yapmanıza olanak tanır.

  • Performans: Genel olarak COUNT(*), COUNT(kolon_adı)'ndan daha performanslı olabilir, çünkü indeksleme durumuna bağlı olarak doğrudan satır sayısına erişebilir. DISTINCT kullanımı ise genellikle en yavaş olanıdır.

Emin
14
0
SQL Makaleleri
SQL Dilinde MIN ve MAX Fonksiyonlarının Kullanımı

SQL (Yapısal Sorgu Dili), veri tabanlarından bilgi çekmek, güncellemek ve yönetmek için kullanılan güçlü bir dildir. Veri analizi süreçlerinde sıkça karşılaşılan ihtiyaçlardan biri, bir veri setindeki en küçük veya en büyük değeri belirlemektir. Bu gereksinimi karşılamak üzere SQL, MIN() ve MAX() adlı iki önemli toplama (aggregate) fonksiyonu sunar. Bu fonksiyonlar, belirli bir sütundaki sayısal, tarih veya hatta metinsel değerler arasında en düşük veya en yüksek olanı hızlıca bulmanızı sağlar.

Sözdizimi


MIN() ve MAX() fonksiyonlarının temel sözdizimi oldukça basittir. Her iki fonksiyon da parametre olarak bir sütun adı alır.

SELECT MIN(kolon_adi)
FROM tablo_adi
WHERE kosul;
SELECT MAX(kolon_adi)
FROM tablo_adi
WHERE kosul;

Detaylı Açıklama


Yukarıdaki sözdiziminde yer alan her bir bileşenin anlamı aşağıda açıklanmıştır:

  • SELECT: Veri tabanından veri çekmek için kullanılan SQL komutudur. Bu komut ile hangi sütunların döndürüleceği belirtilir.

  • MIN(kolon_adi): Belirtilen kolon_adi sütunundaki en küçük (minimum) değeri döndüren toplama fonksiyondur. Sayısal değerler için en küçük sayıyı, tarih değerleri için en eski tarihi, metinsel değerler için ise alfabetik olarak en başta gelen değeri bulur.

  • MAX(kolon_adi): Belirtilen kolon_adi sütunundaki en büyük (maksimum) değeri döndüren toplama fonksiyondur. Sayısal değerler için en büyük sayıyı, tarih değerleri için en yeni tarihi, metinsel değerler için ise alfabetik olarak en sonda gelen değeri bulur.

  • FROM tablo_adi: Sorgunun hangi tablodan veri çekeceğini belirtir.

  • WHERE kosul (Opsiyonel): Sorgu sonuçlarını belirli bir kritere göre filtrelemek için kullanılır. Sadece bu koşulu sağlayan satırlar MIN() veya MAX() fonksiyonuna dahil edilir.

Örnekler


Aşağıdaki örneklerde, bir Urunler tablosu kullanıldığı varsayılmıştır. Bu tablo, UrunID, UrunAdi, Kategori, Fiyat ve StokAdedi sütunlarını içermektedir.

Örnek 1: Tüm Ürünlerin En Düşük Fiyatını Bulma

Bu sorgu, Urunler tablosundaki tüm ürünler arasında en düşük fiyatı döndürecektir.

SELECT MIN(Fiyat) AS EnDusukFiyat
FROM Urunler;

Örnek 2: Tüm Ürünlerin En Yüksek Fiyatını Bulma

Bu sorgu, Urunler tablosundaki tüm ürünler arasında en yüksek fiyatı döndürecektir.

SELECT MAX(Fiyat) AS EnYuksekFiyat
FROM Urunler;

Örnek 3: Belirli Bir Kategorideki En Düşük Fiyatı Bulma

WHERE koşulunu kullanarak sadece 'Elektronik' kategorisindeki ürünlerin en düşük fiyatını bulabiliriz.

SELECT MIN(Fiyat) AS ElektronikEnDusukFiyat
FROM Urunler
WHERE Kategori = 'Elektronik';

Örnek 4: Her Kategori İçin En Yüksek Fiyatı Bulma

GROUP BY ifadesini kullanarak her bir kategori için ayrı ayrı en yüksek fiyatı bulabiliriz.

SELECT Kategori, MAX(Fiyat) AS KategoriEnYuksekFiyat
FROM Urunler
GROUP BY Kategori;

Örnek 5: En Az Stoğa Sahip Ürünün Stok Adedini Bulma

StokAdedi sütunundaki en küçük değeri bularak, bir ürünün minimum stok adedini belirleyebiliriz.

SELECT MIN(StokAdedi) AS MinimumStok
FROM Urunler;

Önemli Notlar


  • NULL Değerler: MIN() ve MAX() fonksiyonları, işleme alırken NULL değerleri genellikle göz ardı eder. Yani, bir sütunda NULL değerler varsa, bu değerler hesaplamaya dahil edilmez.

  • Veri Tipleri: Bu fonksiyonlar sayısal değerlerin yanı sıra tarih ve metin (string) tipleri üzerinde de çalışır. Tarihler için en eski/en yeni, metinler için ise alfabetik sıralamaya göre en düşük/en yüksek değeri döndürür.

  • DISTINCT Anahtar Kelimesi: MIN(DISTINCT kolon_adi) veya MAX(DISTINCT kolon_adi) şeklinde kullanım mümkündür, ancak MIN() ve MAX() zaten tek bir değer döndürdüğü için DISTINCT anahtar kelimesinin bu bağlamda pratik bir faydası genellikle yoktur.

  • Performans: Çok büyük veri setlerinde, MIN() ve MAX() sorgularının performansı, ilgili sütun üzerinde indeks olup olmamasına bağlı olarak değişebilir. İndeksler, bu tür sorguların daha hızlı çalışmasını sağlayabilir.

  • GROUP BY ve HAVING: Eğer MIN() veya MAX() fonksiyonlarını GROUP BY ile birlikte kullanıyorsanız ve gruplandırılmış sonuçlar üzerinde bir filtreleme yapmak istiyorsanız, WHERE yerine HAVING koşulunu kullanmanız gerekir. Örneğin, HAVING MAX(Fiyat) > 1000.

Emin
7
0