SQL Çalışma Notları: Birleştirmeler ve T-SQL
1. Birleştirmeler (JOIN)
Soru: 2 tablodaki (personeller ve departman) ortak alanları birleştiren (Inner Join) sorgusunu yazalım.
SELECT * FROM tbl_personeller
INNER JOIN tbl_departman
ON tbl_personeller.departman_id = tbl_departman.departman_idSoru: Sol taraftaki tabloya (personeller) göre birleştirme yapan (Left Join) sorgusunu yazalım.
SELECT * FROM tbl_personeller
LEFT JOIN tbl_departman
ON tbl_personeller.departman_id = tbl_departman.departman_idSoru: Sağ taraftaki tabloya (departman) göre birleştirme yapan (Right Join) sorgusunu yazalım.
SELECT * FROM tbl_personeller
RIGHT JOIN tbl_departman
ON tbl_personeller.departman_id = tbl_departman.departman_idSoru: Hem Left Join hem Right Join işlemini bir arada gerçekleştiren (Full Outer Join) sorgusunu yazalım.
SELECT * FROM tbl_personeller
FULL OUTER JOIN tbl_departman
ON tbl_personeller.departman_id = tbl_departman.departman_id2. T-SQL Değişken Tanımlama
Soru: Şehir isminde bir değişken oluşturalım. Bu değişkene ‘Ankara’ değerinin atamasını yapalım ve listeleyelim.
DECLARE @sehir VARCHAR(20)
SET @sehir = 'Ankara'
SELECT @sehirSoru: Değişken olarak tanımlanan iki sayıyı toplayan sorguyu yazalım.
DECLARE @sayi1 INT, @sayi2 INT, @sonuc INT
SET @sayi1 = 16
SET @sayi2 = 57
SET @sonuc = @sayi1 + @sayi2
SELECT @sonuc AS 'Toplam'Soru: Değişken olarak tanımlanan üç sayının (10, 20, 30) ortalamasını alan sorguyu yazalım.
DECLARE @sayi1 INT, @sayi2 INT, @sayi3 INT, @ortalama FLOAT;
SET @sayi1 = 10;
SET @sayi2 = 20;
SET @sayi3 = 30;
SET @ortalama = (@sayi1 + @sayi2 + @sayi3) / 3.0;
SELECT @ortalama AS 'Ortalama';Soru: Değişken olarak tanımlanan 200 sayısının %15’ini alan sorguyu yazalım.
DECLARE @sayi FLOAT, @yuzde FLOAT, @sonuc FLOAT;
SET @sayi = 200;
SET @yuzde = 15;
SET @sonuc = @sayi * (@yuzde / 100);
SELECT @sonuc AS 'Yüzde 15';Soru: Ürünler tablosundaki toplam stok miktarını bir değişkene atayıp, değişken üzerinden listeleyen sorguyu yazalım.
DECLARE @toplamurun INT
SET @toplamurun = (SELECT SUM(stok_miktari) FROM tbl_urunler)
SELECT @toplamurun AS 'Toplam Ürün Sayısı-Stok Toplam'Soru: 0 ile 100 arasında rastgele sayı üreten sorguyu yazalım.
DECLARE @random INT;
SET @random = RAND() * 100;
SELECT @random AS 'Rastgele Sayı';Soru: Stok Miktarı 210’dan çok olan ürünlere %15 indirim yapan T-SQL sorguyu yazalım.
DECLARE @IndirimOrani FLOAT = 0.85;
UPDATE tbl_urunler
SET birim_fiyat = birim_fiyat * @IndirimOrani
WHERE stok_miktari > 210;Soru: Satış fiyatı 200 TL olan bir ürüne %10 zam yapan sorguyu yazalım.
DECLARE @urunFiyati FLOAT, @zamOrani FLOAT, @zamliFiyat FLOAT;
SET @urunFiyati = 200.0;
SET @zamOrani = 10;
SET @zamliFiyat = @urunFiyati + (@urunFiyati * @zamOrani / 100);
SELECT @zamliFiyat AS 'Zamlı Fiyat';3. T-SQL Kontrol Yapıları (IF - ELSE)
Soru: Ürünler tablomuzdaki toplam kayıt sayısının 16’dan büyük olup olmadığını kontrol eden sorguyu yazalım.
IF (SELECT COUNT(*) FROM tbl_urunler) > 16
PRINT 'Toplam Kayıt Sayısı 16 dan Fazla'
ELSE
PRINT 'Toplam Kayıt Sayısı 16 dan Az'Soru: Personeller tablomuzda maaşı 100.000’den büyük personel olup olmadığını kontrol eden sorguyu yazalım.
IF EXISTS (SELECT * FROM tbl_personeller WHERE maas > 100000)
PRINT 'Maaşı 100000 den fazla olan personel var'
ELSE
PRINT 'Maaşı 100000 den fazla olan personel yok'Soru: ‘Ayşe’ isimli bir personelimizin olup olmadığını kontrol eden sorguyu yazalım.
IF EXISTS (SELECT * FROM tbl_personeller WHERE ad = 'Ayşe')
PRINT 'Ayşe isimli personelimiz var'
ELSE
PRINT 'Ayşe isimli personelimiz yok'Soru: ‘Aslı’ isimli bir personelimizin olup olmadığını kontrol eden ve varsa ekrana bilgilerini getiren sorguyu yazalım.
IF EXISTS (SELECT * FROM tbl_personeller WHERE ad = 'Aslı')
BEGIN
SELECT 'Aslı isimli personelimiz var' AS Mesaj;
SELECT * FROM tbl_personeller WHERE ad = 'Aslı';
END
ELSE
BEGIN
SELECT 'Aslı isimli personelimiz yok' AS Mesaj;
ENDSoru: Ürün id değeri 1 olan ürünün stok değeri 10’un altında ise ekrana ‘stok azaldı’, değilse ‘Stok yeterli’ yazan sorguyu yazalım.
DECLARE @StokMiktari INT;
SET @StokMiktari = (SELECT Stok_Miktari FROM tbl_urunler WHERE urun_id = 1);
IF @StokMiktari < 10
PRINT 'Stok azaldı, sipariş verilmeli.';
ELSE
PRINT 'Stok yeterli seviyede.';Soru: Ürün id değeri 5 olan ürünün fiyatı 50 TL’nin üzerinde ise ekrana ‘fiyat yüksek’, değilse ‘fiyat uygun’ yazan sorguyu yazalım.
DECLARE @Fiyat DECIMAL(10, 2);
SET @Fiyat = (SELECT birim_fiyat FROM tbl_urunler WHERE urun_id = 5);
IF @Fiyat > 50
PRINT 'Ürünün fiyatı yüksek.';
ELSE
PRINT 'Ürünün fiyatı uygun.';Soru: Ürün id değeri 2 olan ürünün kategorisini (Kalem, Kırtasiye veya Defter) kontrol eden sorguyu yazalım.
DECLARE @Kategori VARCHAR(50);
SET @Kategori = (SELECT Kategori FROM tbl_urunler WHERE urun_id = 2);
IF @Kategori = 'Kalem'
PRINT 'Bu ürün kalem kategorisindedir.';
ELSE IF @Kategori = 'Kırtasiye'
PRINT 'Bu ürün kırtasiye kategorisindedir.';
ELSE
PRINT 'Bu ürün defter bir kategorisindedir.';4. T-SQL Döngüler (WHILE)
Soru: 100’e kadar olan sayıları toplamak için bir döngü yazalım.
DECLARE @sayi INT = 1;
DECLARE @toplam INT = 0;
WHILE @sayi <= 100
BEGIN
SET @toplam = @toplam + @sayi;
SET @sayi = @sayi + 1;
END
SELECT @toplam AS '1-100 Arası Toplam';Soru: Ekrana 5 kere ‘SQL Öğreniyoruz’ yazdıran döngüyü yazalım.
DECLARE @sayac INT = 1
WHILE (@sayac <= 5)
BEGIN
PRINT 'SQL Öğreniyoruz'
SET @sayac += 1
ENDSoru: Ekrana 1 ile 10 arasındaki sayıları yazdıran döngüyü yazalım.
DECLARE @sayac INT = 1
WHILE (@sayac <= 10)
BEGIN
PRINT @sayac
SET @sayac += 1
ENDSoru: Ekrana 1 ile 20 arasındaki 3’e tam bölünen sayıları yazdıran döngüyü yazalım.
DECLARE @sayac INT = 1
WHILE (@sayac <= 20)
BEGIN
IF (@sayac % 3 = 0)
PRINT @sayac
SET @sayac += 1
ENDSoru: Ürünlerin stok ortalaması 180’in üzerine çıkana kadar stoklara %30 artış uygulayan döngüyü yazalım.
WHILE (SELECT AVG(stok_miktari) FROM tbl_urunler) <= 180
BEGIN
UPDATE tbl_urunler
SET stok_miktari = stok_miktari + (stok_miktari * 30 / 100)
ENDSoru: Girilen metnin (‘SQL Öğreniyorum’) her harfini ayrı satırda yazan döngüyü yazalım.
DECLARE @metin NVARCHAR(100) = 'SQL Öğreniyorum';
DECLARE @uzunluk INT = LEN(@metin);
DECLARE @i INT = 1;
WHILE (@i <= @uzunluk)
BEGIN
PRINT SUBSTRING(@metin, @i, 1);
SET @i += 1;
END;