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 ç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'in avantajı, çok büyük ve ilişkili tablolarda işlemi kaynakta yapması ve sonucu yenilenebilir bir bağlantı olarak sunmasıdır.
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.
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ı.
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.
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.
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.
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.
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"
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
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
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.| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Şehir | Ürün | Tutar | Sorgu | Sonuç | |
| 2 | Ankara | Kalem | 1.200,00 | Ankara toplamı (SUM + WHERE) | 2.320,00 | |
| 3 | İstanbul | Defter | 850,00 | Ankara kayıt sayısı (COUNT + WHERE) | 3 | |
| 4 | Ankara | Defter | 640,00 | Ankara ortalaması (AVG + WHERE) | 773,33 | |
| 5 | İzmir | Kalem | 920,00 | |||
| 6 | İstanbul | Kalem | 1.500,00 | |||
| 7 | Ankara | Dosya | 480,00 | |||
| 8 | İzmir | Dosya | 710,00 | |||
| 9 | İstanbul | Dosya | 560,00 |
Şehir SorgusuExcelDepo v1.0.0
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.| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Personel | Şehir | Satış | Şehir | Toplam Satış | |
| 2 | Ayşe Kaya | Ankara | 1.200,00 | Ankara | 2.320,00 | |
| 3 | Mehmet Demir | İstanbul | 850,00 | İstanbul | 2.910,00 | |
| 4 | Fatma Yıldız | Ankara | 640,00 | İzmir | 1.630,00 | |
| 5 | Ali Çelik | İzmir | 920,00 | Genel Toplam | 6.860,00 | |
| 6 | Zeynep Arslan | İstanbul | 1.500,00 | |||
| 7 | Burak Şahin | Ankara | 480,00 | |||
| 8 | Elif Aydın | İzmir | 710,00 | |||
| 9 | Can Özkan | İstanbul | 560,00 |
GruplamaExcelDepo v1.0.0
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.| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Sipariş No | Müşteri Kodu | Tutar | Müşteri Adı | Kod | Müşteri |
| 2 | S-101 | M01 | 1.800,00 | Yıldız Ticaret | M01 | Yıldız Ticaret |
| 3 | S-102 | M03 | 950,00 | Kuzey Market | M02 | Doğan Kırtasiye |
| 4 | S-103 | M02 | 2.300,00 | Doğan Kırtasiye | M03 | Kuzey Market |
| 5 | S-104 | M01 | 740,00 | Yıldız Ticaret | ||
| 6 | S-105 | M02 | 1.100,00 | Doğan Kırtasiye | ||
| 7 | S-106 | M03 | 3.200,00 | Kuzey Market |
BirleştirmeExcelDepo v1.0.0
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.