SQL Alt Sorguları (Subquery) Nedir ve Nasıl Kullanılır?
SQL (Structured Query Language), veritabanı yönetimi ve sorgulama işlemleri için kullanılan güçlü bir dilidir. Bu dilin temel özelliklerinden biri de alt sorgularıdır. Alt sorgular, bir SQL sorgusu içinde başka bir sorguyu içeren yapıları ifade eder. Bu yapılar, veritabanı işlemlerini daha esnek hale getirirken daha karmaşık sorgulamaların yapılabilmesini sağlar. Bu makalede, SQL alt sorgularını ne olduğunu ve nasıl kullanıldığını öğreneceksiniz.
Alt Sorgu (Subquery) Nedir?
Bir alt sorgu, ana sorgunun içine gömülü olarak yer alan ve genellikle bir dizi sonuç üreten sorgulardır. Bu sorgular, bir ana sorgunun içinde yer aldığı için, ana sorgunun sonuçlarına dayanarak daha spesifik ve detaylı sonuçlar elde etmek için kullanılabilir. Alt sorgular, özellikle aşağıdaki senaryolarda kullanışlıdır:
- Filtreleme ve Karşılaştırma: Alt sorgular, WHERE veya HAVING gibi bölümlerde kullanılarak, ana sorgunun sonuçlarını filtrelemek veya belirli koşullara göre karşılaştırmak için kullanılabilir.
- İç içe Sorgulamalar: Bir sorgunun sonuçlarını alıp, bu sonuçları başka bir sorguda kullanmak için alt sorgular kullanılabilir. Bu, veritabanından veri çekmek ve bunları daha karmaşık bir şekilde işlemek için kullanışlıdır.
- Aggregat Fonksiyonlarla Kullanım: Alt sorgular, COUNT, SUM, AVG gibi agregat fonksiyonlarla birleştirilerek, veritabanındaki özetleyici hesaplamaların daha spesifik hale getirilmesine yardımcı olabilir.
Örnek 1;
1 2 3 |
SELECT ad, soyad FROM kullanicilar WHERE yas > (SELECT AVG(yas) FROM kullanicilar); |
Bu örnekte, ana sorgu kullanıcıların adını ve soyadını seçerken, alt sorgu ortalama yaşın üstünde olan kullanıcıları filtrelemek için kullanılıyor.
Örnek 2;
1 2 3 4 5 6 7 8 |
SELECT course_name, MAX(enrollment_count) AS max_enrollment FROM ( SELECT c.course_name, COUNT(sc.student_id) AS enrollment_count FROM courses c LEFT JOIN student_courses sc ON c.course_id = sc.course_id GROUP BY c.course_id ) AS course_enrollments GROUP BY course_name; |
Bu sorgu, her bir kursun adını ve o kursun en fazla kaç öğrenci tarafından alındığını getirecektir. Sorgu, iç içe geçmiş iki seviyede alt sorgular içerir. İlk alt sorgu, her bir kursun öğrenci sayısını hesaplamak için kullanılır. Ardından, bu alt sorgunun sonuçları daha fazla işlem için dıştaki bir sorguda kullanılır.
Örnek 3;
1 2 3 4 5 6 7 8 |
SELECT post_title, MAX(comment_count) AS max_comments FROM ( SELECT p.post_title, COUNT(c.comment_id) AS comment_count FROM posts p LEFT JOIN comments c ON p.post_id = c.post_id GROUP BY p.post_id ) AS post_comments GROUP BY post_title; |
Not; Bazı yerlerde chatgpt üzerinden yardım alınmıştır.