Ana içeriğe geç
Kesit SQL
Orta · T-SQL (SQL Server)

Değişkenler ve akış kontrolü: DECLARE, IF, WHILE

T-SQL'i bir programlama diline dönüştüren yapılar.

Uygulamada aç, 3 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

Değişken tanımlamak ve değer atamak

Değişkenler @ ile başlar ve DECLARE ile tipiyle birlikte tanımlanır. Değer, SET veya SELECT @x = ... ile atanır. PRINT Mesajlar sekmesine yazar.

DECLARE @ortalama DECIMAL(12, 2);
SELECT @ortalama = AVG(price) FROM products;

PRINT 'Ortalama fiyat: ' + CAST(@ortalama AS VARCHAR(20));

SELECT name, price
FROM products
WHERE price > @ortalama
ORDER BY price DESC;
SET @x = ...SELECT @x = ...
Birden çok değişkenTek değişkenAynı anda birden çok
Alt sorgu birden çok satır döndürürseHataSon satırın değeri (sessizce!)
Hiç satır yoksaNULL atanırDeğişken eski değerini korur

IF / ELSE ve BEGIN / END

DECLARE @stoksuz INT = (SELECT COUNT(*) FROM products WHERE stock = 0);

IF @stoksuz > 0
BEGIN
    PRINT CAST(@stoksuz AS VARCHAR(10)) + ' ürünün stoğu bitmiş.';
    SELECT name FROM products WHERE stock = 0;
END
ELSE
    PRINT 'Tüm ürünler stokta.';

IF yalnızca kendisinden sonraki tek ifadeyi kontrol eder; birden çok ifade için BEGIN ... END bloğu gerekir.

WHILE döngüsü ve tablo değişkeni

DECLARE @yil INT = 2022;
DECLARE @ozet TABLE (yil INT, siparis INT);

WHILE @yil <= 2024
BEGIN
    INSERT INTO @ozet (yil, siparis)
    SELECT @yil, COUNT(*) FROM orders WHERE YEAR(order_date) = @yil;

    SET @yil += 1;
END;

SELECT * FROM @ozet;
Döngü yerine kümeSQL küme tabanlı bir dildir. Yukarıdaki döngü tek bir GROUP BY YEAR(order_date) ile yazılabilirdi ve milyonlarca satırda yüzlerce kat hızlı olurdu. WHILE'ı yönetim işleri ve parça parça işleme (batch) gibi durumlar için sakla.
Alıştırmalara geç (3)