Özellik ikonu

SQL

İndirme izni yok

Genel Bakış

SQL (Structured Query Language), ilişkisel veritabanlarındaki verileri seçmek, süzmek, gruplamak ve birleştirmek için kullanılan standart sorgu dilidir. Excel'de SQL, dış veri kaynaklarından (Access, SQL Server, Excel çalışma kitapları vb.) yalnızca gereken satır ve sütunları çekmek için kullanılır. Excel formülleri ise aynı işlerin birçoğunu çalışma sayfasında SQL kullanmadan yapabilir.

Excel'de SQL nerede kullanılır​

Excel'de SQL yazabileceğiniz başlıca yerler şunlardır:
  • Microsoft Query: Veri > Veri Al > Diğer Kaynaklardan > Microsoft Query'den (Data > Get Data > From Other Sources > From Microsoft Query) yolunu izleyin, kaynağı seçin, sorgu penceresinde SQL düğmesine tıklayıp sorgu metnini yazın ya da düzenleyin.
  • Power Query veritabanı bağlayıcıları: Veri > Veri Al > Veritabanından (Data > Get Data > From Database) altındaki bağlayıcılarda (örneğin SQL Server veritabanından) Gelişmiş seçenekler (Advanced options) bölümündeki SQL deyimi kutusuna sorgu yazılabilir.
  • Bağlantı özellikleri: Mevcut bir bağlantıda Veri > Sorgular ve Bağlantılar (Data > Queries & Connections) bölmesinden bağlantı özelliklerini açıp Tanım (Definition) sekmesindeki Komut metni (Command text) alanını düzenleyebilirsiniz.
  • VBA: ADO nesneleriyle (ADODB.Connection, ADODB.Recordset) SQL çalıştırılır ve sonuç sayfaya aktarılır.
SQL sorgusu veriyi kaynağında süzdüğü için büyük tablolarda yalnızca ihtiyaç duyduğunuz kayıtları Excel'e getirir.

Temel SQL deyimleri​

Bir sorgu genellikle şu bölümlerden oluşur:
  • SELECT: Hangi sütunların ya da hesapların getirileceğini belirtir.
  • FROM: Verinin alınacağı tabloyu belirtir.
  • WHERE: Satırları koşula göre süzer.
  • GROUP BY: Satırları gruplar; SUM, COUNT, AVG, MIN, MAX gibi toplulaştırma işlevleriyle birlikte kullanılır.
  • HAVING: Gruplanmış sonuçları koşula göre süzer.
  • ORDER BY: Sonucu sıralar (ASC artan, DESC azalan).
  • JOIN: İki tabloyu ortak bir sütun üzerinden birleştirir.
Örnek bir sorgu metni, VBA içinde şöyle yazılır:
VBA 6 satır
Dim sql As String
sql = "SELECT Şehir, SUM(Tutar) AS Toplam " & _
      "FROM [Satışlar$] " & _
      "WHERE Tutar > 500 " & _
      "GROUP BY Şehir " & _
      "ORDER BY Toplam DESC"
Excel çalışma kitabı kaynak olarak kullanıldığında sayfa adı köşeli parantez içinde ve sonunda dolar işaretiyle ([Satışlar$]) ya da tanımlı bir ad olarak yazılır. Türkçe karakter veya boşluk içeren sütun adlarını da köşeli parantez içine alın.

SQL ve Excel formüllerinin karşılaştırması​

SQL bilmeden de benzer sonuçları formüllerle alabilirsiniz. Karşılıkları şöyledir:
  • SELECT SUM ... WHERE: ÇOKETOPLA (SUMIFS)
  • SELECT COUNT ... WHERE: ÇOKEĞERSAY (COUNTIFS)
  • SELECT AVG ... WHERE: ÇOKEĞERORTALAMA (AVERAGEIFS)
  • GROUP BY: Özet Tablo (PivotTable) ya da benzersiz liste ve ÇOKETOPLA birlikte
  • ORDER BY: Veri > Sırala (Data > Sort) komutu
  • WHERE ile süzme: Veri > Filtre (Data > Filter) komutu
  • JOIN: DÜŞEYARA (VLOOKUP) ya da İNDİS ve KAÇINCI birlikte
Örneğin Ankara satışlarının toplamı şu formülle bulunur:
Excel formülü
=ÇOKETOPLA(C2:C9;A2:A9;"Ankara")
=SUMIFS(C2:C9,A2:A9,"Ankara")
SQL'in avantajı, çok büyük ve ilişkili tablolarda işlemi kaynakta yapması ve sonucu yenilenebilir bir bağlantı olarak sunmasıdır.

VBA ile SQL çalıştırma​

VBA'da ADO kullanarak çalışma kitabının kendi sayfalarını sorgulayabilirsiniz. Sorgu sonucu CopyFromRecordset yöntemiyle sayfaya yazılır. Kaydedilmiş bir çalışma kitabında şu kalıp kullanılır:
VBA 11 satır
Sub SorguCalistir()
    Dim cn As Object, rs As Object
    Set cn = CreateObject("ADODB.Connection")
    cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
        "Data Source=" & ThisWorkbook.FullName & ";" & _
        "Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
    Set rs = cn.Execute("SELECT Şehir, SUM(Tutar) FROM [Satışlar$] GROUP BY Şehir")
    Range("H2").CopyFromRecordset rs
    rs.Close
    cn.Close
End Sub
HDR=YES ilk satırın sütun başlığı olduğunu belirtir. Bilgisayarda ACE OLEDB sağlayıcısının (Access Database Engine) kurulu olması gerekir.

1. WHERE ile süzüp toplulaştırma​

Bu örnekte şehir, ürün ve tutar sütunlarından oluşan bir satış tablosu vardır. SQL'deki SELECT SUM, COUNT ve AVG ifadelerinin WHERE koşulu ile verdiği sonucu, F2:F4 hücrelerindeki ÇOKETOPLA, ÇOKEĞERSAY ve ÇOKEĞERORTALAMA formülleriyle Ankara için hesaplayın. Formülleri hücreye yazıp Enter tuşuna basmanız yeterlidir.
SQL
Formülünü incelemek için bir hücre seçin.
ABCDEF
1ŞehirÜrünTutarSorguSonuç
2AnkaraKalem1.200,00Ankara toplamı (SUM + WHERE)2.320,00
3İstanbulDefter850,00Ankara kayıt sayısı (COUNT + WHERE)3
4AnkaraDefter640,00Ankara ortalaması (AVG + WHERE)773,33
5İzmirKalem920,00
6İstanbulKalem1.500,00
7AnkaraDosya480,00
8İzmirDosya710,00
9İstanbulDosya560,00
Şehir SorgusuExcelDepo v1.0.0
Ankara satırlarının toplamı F2 hücresinde 2.320,00, kayıt sayısı F3 hücresinde 3, ortalaması ise F4 hücresinde 773,33 olarak hesaplanır. SQL'de bu üç sonuç, WHERE koşuluna uyan satırlar üzerinden SUM, COUNT ve AVG işlevleriyle alınırdı.

2. GROUP BY mantığıyla şehir toplamları​

SQL'de GROUP BY Şehir ifadesi, her şehir için tek bir toplam satırı üretir. Excel'de aynı sonucu, benzersiz şehir adlarını E sütununa yazıp yanına ÇOKETOPLA formülü ekleyerek alabilirsiniz. Formülde aralıkları $ işaretiyle sabitleyin ki aşağı kopyalayabilesiniz.
SQL
Formülünü incelemek için bir hücre seçin.
ABCDEF
1PersonelŞehirSatışŞehirToplam Satış
2Ayşe KayaAnkara1.200,00Ankara2.320,00
3Mehmet Demirİstanbul850,00İstanbul2.910,00
4Fatma YıldızAnkara640,00İzmir1.630,00
5Ali Çelikİzmir920,00Genel Toplam6.860,00
6Zeynep Arslanİstanbul1.500,00
7Burak ŞahinAnkara480,00
8Elif Aydınİzmir710,00
9Can Özkanİstanbul560,00
GruplamaExcelDepo v1.0.0
Ankara için toplam F2 hücresinde 2.320,00, İstanbul için F3 hücresinde 2.910,00, İzmir için F4 hücresinde 1.630,00 olarak görünür. F5 hücresindeki genel toplam 6.860,00 değerini verir. SQL'deki GROUP BY sonucuyla aynı mantıktadır; veri değişince formüller de güncellenir.

3. JOIN mantığıyla tabloları birleştirme​

SQL'de siparişler tablosu ile müşteriler tablosu Müşteri Kodu üzerinden INNER JOIN ile birleştirilir. Excel'de aynı işi D sütununa yazacağınız DÜŞEYARA formülüyle yaparsınız; formül, B sütunundaki kodu E:F aralığındaki müşteri listesinde arar ve müşteri adını getirir.
SQL
Formülünü incelemek için bir hücre seçin.
ABCDEF
1Sipariş NoMüşteri KoduTutarMüşteri AdıKodMüşteri
2S-101M011.800,00Yıldız TicaretM01Yıldız Ticaret
3S-102M03950,00Kuzey MarketM02Doğan Kırtasiye
4S-103M022.300,00Doğan KırtasiyeM03Kuzey Market
5S-104M01740,00Yıldız Ticaret
6S-105M021.100,00Doğan Kırtasiye
7S-106M033.200,00Kuzey Market
BirleştirmeExcelDepo v1.0.0
S-101 numaralı siparişin müşterisi D2 hücresinde Yıldız Ticaret, S-102 numaralı siparişinki D3 hücresinde Kuzey Market olarak gelir. Bu, SQL'deki INNER JOIN ile sipariş satırına müşteri adının eklenmesine karşılık gelir. Kod müşteri listesinde yoksa formül #N/A hatası verir.

Kullanırken dikkat edin​

  • Sütun adları ve sayfa adları: Excel sayfasını SQL ile sorgularken sayfa adını [Sayfa1$] biçiminde yazın. İlk satır sütun başlığı olarak okunur; başlıklar boşsa ya da yinelenirse sorgu hatalı çalışır. Boşluk ya da Türkçe karakter içeren adları köşeli parantez içine alın.
  • Metin ve tarih değerleri: SQL'de metin değerleri tek tırnak içinde yazılır. Tarih değerleri için kaynağın kullandığı söz dizimine uyun; Access'te tarih iki # işareti arasına, SQL Server'da tek tırnak arasına yazılır. Ondalık ayırıcı SQL içinde her zaman noktadır.
  • Sorgu yenileme: SQL ile getirilen veri otomatik güncellenmez. Veri > Tümünü Yenile (Data > Refresh All) komutunu kullanın ya da bağlantı özelliklerinde açılışta yenilemeyi etkinleştirin. Kaynak dosyanın yolu değişirse bağlantı kopar.
  • Sürüm ve sağlayıcı farkları: Microsoft Query ve ADO yönteminde desteklenen SQL söz dizimi kaynağa bağlıdır. Excel çalışma kitabı kaynağında JOIN, GROUP BY ve ORDER BY çalışır ancak bazı gelişmiş SQL özellikleri desteklenmeyebilir. 64 bit Office ile 32 bit sağlayıcı arasında uyumsuzluk görülebilir.
  • Güvenlik: Parola içeren bağlantı dizelerini dosyada saklamaktan kaçının. Kullanıcıdan alınan değerleri doğrudan SQL metnine eklemek yerine parametreli sorgu kullanın; aksi halde yanlış ya da zararlı sorgular oluşabilir.
  • İlgili konular: Microsoft Query, Power Query, Veri > Dış Veri Al, Bağlantılar, Özet Tablo, Veri Modeli, ÇOKETOPLA, ÇOKEĞERSAY, ÇOKEĞERORTALAMA, DÜŞEYARA, İNDİS, KAÇINCI, VBA ADO nesneleri ve CopyFromRecordset yöntemi.
Örneklerdeki tabloları indirilebilir Excel dosyasında kendiniz de deneyebilirsiniz.
Yazar
ExcelDepo
İndirme sayısı
0
Gösterim
14
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst