SQL Notları ve Örnekleri
Çalışacağımız veri tabanını belirtmek için
USE Veritabanı_Adı
Person adında veri tabanı oluşturma
CREATE DATABASE person
Personel adında tablo oluştur tablo sütunları PERSONEL_ID,AD,SOYAD
CREATE TABLE PERSONEL
(
PERSONEL_ID İNT,
AD varchar(10),
SOYAD varchar(10)
)
PERSONEL tablosuna BABA_AD sütunu ekle veri girişini zorunlu tut.
ALTER TABLE PERSONEL
ADD BABA_AD varchar(20) NOT NULL
AD sütunun alabileceği karakter sayısını 15 yap, veri girişini zorunlu tut.
ALTER TABLE PERSONEL
ALTER COLUMN AD varchar(15) NOT NULL
PERSONEL TABLOSUNU SİLME
DROP TABLE PERSONEL
PERSONEL tablosundaki tüm alanları seçme
SELECT * FROM PERSONEL
PERSONEL tablosundaki PERSONEL_ID ve AD alanlarını seçme
SELECT PERSONEL_ID, AD FROM PERSONEL
PERSONEL tablosundaki AD ve SOYAD alanlarını birleştirme
SELECT AD+ +SOYAD FROM PERSONEL
rehber tablosundaki ad ali olan tüm kayıtlar
SELECT * FROM rehber WHERE AD=Ali
Artan sıralama ASC, Azalan sıralama DESC
SELECT * FROM rehber WHERE ad=Tuncay ORDER BY ad ASC
Yeni kayıt girme
INSERT INTO PERSONEL(AD,SOYAD)
VALUES(Mustafa,KUM)
Soyadı KUM olanların adını Mustafa yap
UPDATE PERSONEL SET AD=Mustafa WHERE SOYAD=KUM
Soyadı KUM olan tüm kayıtları sil
DELETE FROM PERSONEL WHERE SOYAD=KUM
Değişken tanımlama
DECLARE @ogr_no VarChar(10)
DECLARE @tckimlik_no int
Tablo türünde değişken tanımlama
DECLARE @değişken_adı TABLE
Değişkene değer atama yöntemleri
SET @değişken_adi=değer
SELECT @değişken_adı=değer
INSERT INTO @tablo_değişken SELECT adi,soyadi FROM person (Tablo değişkenler değer atama)
AD değişkeninin içeriğini PRINT ile gösterme
USE Deneme
GO
DECLARE @ad VARCHAR(10)
SELECT @ad=Mustafa
GO
PRINT @ad
GO
Bir yığının sonunu belli etmek için GO komutu kullanılır.
Notu 56 dan küçük olan öğrencileri listeleme
SELECT * FROM tablo2 WHERE nt2<=56
Adı Mustafa olmayan kayıtları listeleme
SELECT * FRPM PERSONEL WHERE ADAli
tablo1′deki adı Er ile başlayan kayıtları listeleme
SELECT * FROM tablo1 WHERE ad LIKE %Er%
Doğum tarihi 1970 den önce olan ve maaşı 700-1200 arasında olan personeli listeleme
SELECT * FROM person WHERE dogum tarihi=700 AND Maas={01/01/1970} AND cinsiyet=Erkek
OR dogum_tarih>={01/01/1975} AND cinsiyet=Kadın
Person tablosunda Adı Mustafa olmayanları listeleme
SELECT * FROM Person WHERE NOT AD=Mustafa
Ogr_Notlar Tablosunda not ortalamasını hesaplama
SELECT (nt1+nt2+nt3)/3 FROM Ogr_Notlar
Şimdiki tarih ve saat değerini gösterme
SELECT GETDATE()
İki tarih arasındaki gün sayısını bulma
SELECT DATEDIFF(dd,04,04,1974′,02,10,2007′)
ASCII kodu verilen harfi görüntüleme
SELECT CHAR(65) A Harfini verir
SELECT ASCII(A) 65 Rakamını verir(int tipinde)
Bir metin içindeki metin parçasını istenilen konumdan itibaren arama CHARINDEX()
SELECT CHARINDEX(bu,@soyad,1)
Metnin baş taraftan itibaren istenilen sayıdaki harfini alma
SELECT LEFT (@ad,2)
Metnin uzunluğunu veren fonksiyon
SELECT LEN(@Soyad)
Öğrencinin not ortalamasına göre 85 üzerinde olanlara PEKİYİ , 85 den küçük olanlara İYİ yazdıran kod
DECLARE @enbuyuk int
SELECT @enbuyuk=MAX(ort) FROM tablo2
IF (@enbuyuk>=84)
BEGIN
PRINT DURUMUNUZ PEKİYİ
END
ELSE IF (@enbuyuk65
Numaraya göre her öğrencinin almış olduğu notları listeleme
SELECT ogrno,AVG(ort) FROM tablo2 GROUP BY ogrno
Numara ve Bölüm adına göre ögrenci not ortalamalarını listeleme
SELECT ogrno,bolum,MAX(ort) FROM tablo2 GROUP BY ogrno,bolum
En yüksek not ortalamasını bulma
SELECT MAX(not_ortalama) FROM Ogr_Notlar
En düşük not ortalamasını bulma
SELECT MİN(not_ortalama) FROM Ogr_Notlar
Adı Mustafa, soyadı Kum olan kişinin maaşına % 20 zam yapma
declare @no int
select @no = sicil_no from personel
where adi = Mustafa and soyadi = Kum
UPDATE maaslar SET maas = maas * 0.20 + maas where sicil_no = @no
Maası en yüksek olan personelin adresini halkalı-istanbul olarak değiştirme
declare @enyuksek int
declare @sicil_no int
SELECT @enyuksek = max(maas) from maaslar
SELECT @sicil_no = sicil_no from maaslar WHERE maas = @enyuksek
UPDATE personel SET adres = halkalı-istanbul where sicil_no = @sicil_no
hangi veri tabanı üzerinde işlem yapılacağı belirtilir
USE Person
Personel adında tablo oluşturma, sütunlar;Personel_ID, AD, SOYAD
CREATE TABLE PERSONEL(PERSONEL_ID int, AD varchar(10), SOYAD varchar(10))
Personel Yakın Adlı Tablo Oluştur, Sütunları
ERSONEL_ID, YAKIN_ID, YAKIN_AD, YAKIN_SOYAD
CREATE TABLE PERSONELYAKIN(PERSONEL_ID INT, YAKIN_ID INT, YAKIN_AD varchar(10), YAKIN_SOYAD varchar(10))
rehber adında tablo oluşturma
create table rehber(ad varchar(20), soyad varchar(20),telefon varchar(11))
Personel tablosuna BABA_AD adlı sütun ekleme
ALTER TABLE PERSONEL
ADD BABA_AD varchar(20) NOT null veri girişi zorunlu
rehber tablosuna adres ekleme
ALTER TABLE rehber add adres varchar(50)
AD sütununun karakter sayısı 15 olarak değiştirildi, veri girişi zorunlu yapıldı
ALTER TABLE PERSONEL
ALTER COLUMN AD varchar(15) not null
Personel Tablosunu silme
DROP TABLE PERSONEL
Personel tablosundaku tüm alanları seçme
select * from PERSONEL
Personel tablosundaki PERSONEL_ID, AD alanlarını seçme
select PERSONEL_ID, AD from PERSONEL
Personel tablosundaki AD,SOYAD alanlarını tek sütun gibi gösterme
select AD+ +SOYAD from PERSONEL
rehber tablosundaki ad bilgilerinin elde edilmesini sağlar
select ad from rehber
mustafa adındaki tüm kayıtları göster
select * from rehber where ad=mustafa
ad alanına göre artan seçme ad aynı ise soyada göre artan
select * from rehber order by ad,soyad
Personel tablosuna yeni kayıt ekleme
insert into PERSONEL(PERSONEL_ID,AD,SOYAD,BABA_AD)
values(11,azmi,akbaş,ZİYA)
Soyadı Akbaş olan kayıtların adını nizmi yapma(güncelleme)
update PERSONEL SET AD=nazmi where SOYAD=AKBAŞ
soyadı akbaş olanları silme
delete from PERSONEL where SOYAD=akbaş
mustafanın telefon numarasını 0536 yap
update rehber set telefon =0536′ where ad=mustafa
Personel tablosunda ada göre artan sıralama
select * from PERSONEL order by AD ASC
Personel tablosunda ada göre azalan sıralama
select * from PERSONEL order by AD DESC
Değişken tanımlama
declare @ogr_no varchar(10)
declare @tckimlik_no int
Tek declare ile birden fazla degişken tanımlama
declare @ogr_no varchar(10), @tc_kimlik int
tablo türünde değişken tanımlama
declare @dagişken_adi table
Set ile değişkene değer atama
set @degisken_adi = deger
select ile değer atama
select @degisken_adi =deger
Tablo degişkenlere insert into ile degir atama
insert into @tablo_degisken select adi,soyadi from person
Print
use deneme
go
declare @ad varchar(10)
select @ad=mustafa
GO
print @ad
go
adı ali olmayanları listeleme
select * from personel whereali
tablo 2 de notu 56 dan küçük olanlar
select * from tablo2 where nt2>=56
baş harfi er olanlar
select * from tablo1 where ad LIKE%er%
dogum tarihi 1970 önce maaşı 700-1200 arasında
select * from person
where dogum_tarihgi=700 and maas<=1200
adı ali olmayanları listeler
select * from sınıf
where not ad=ali
or oparatörü
select * from ogrenci where bolum=bilgisayar or bolum=elektrik
not ortalaması hesaplar
select(n1+n2+n3)/3 from ogr_notlar
nt1 sütunun not toplamını hesaplama
select sum(nt1) from ogr_notlar
maası 500 olan personel maasları toplamı
select sum(maas) from person where maas55
GO
EXEC Komutu
EXEC UNotlar
Stored Procedure çalıştırır.
Ortalamaya göre sonuç veren Stored Procedure
CREATE PROCEDURE UHesapla
@ort int
AS
IF @ort>44 PRINT Başarılı
IF @ort<45 PRINT Başarısız
GO
Adlarının İçinde a harfi geçen ögrenvcileri gösteren Stored Procedure
CREATE PROCEDURE Ogr_Ara (@ara VARCHAR(10)=NULL )
AS
IF @ara IS NOT NULL
SELECT * FROM Sinif
WHERE Ad LIKE %+@ara+%
GO
İki sayıyı Stored Procedure ile toplama
CREATE PROC UTopla(
@s1 int,
@s2 int,
@tpl int OUTPUT
)
AS
SELECT @tpl=@s1+@s2
GO
DECLARE @sayi1 int
DECLARE @sayi2 int
DECLARE @toplam int
SELECT @sayi1=9
SELECT @sayi2=8
SELECT @toplam=NULL
EXEC UTopla @sayi1,@sayi2,@toplam OUTPUT
Stored Procedure Uygulama örneği
Çalışma saati ve saat ücreti verildiğinde alacağı günlük yevmiye tutarını gösteren Stored procedure
CREATE PROC UYevmiyeHesap(
@CSaat smallint,
@SUcret int,
@Yevmiye float Output
)
Çalışma saati 8 saat ve 8 saaten az ise alacagı yevmiye çalışma saati ve saat ücreti çarpımı ile bulunacaktır
AS
IF (@CSaat8)
BEGIN
SELECT @Yevmiye=(@CSaat*@SUcret)+((@CSaat*@SUcret)*0.05)
END
GO
16 ve 17 yaşındaki öğrencileri IN deyimi ile listeleme
SELECT Ad,Soyad,Yas
From Sinif
WHERE yas IN(16,17)
16 yaşında olmayan öğrencileri IN deyimi ile listeleme
SELECT Ad,Soyad,Yas
From Sinif
WHERE yas NOT IN(16)
Yaşı 18 olan ögrenciyi bulma (iç içe Select)
SELECT Ad,Soyad,Yas
FROM Sinif
WHERE Yas = ( SELECT Yas
FROM Sinif
WHERE Yas=18
)
Ad, Soyad ve ortalama yaşı veren sorgu (iç içe Select)
SELECT Ad,Soyad,Yas,Ortalama=(
SELECT AVG(Yas)
FROM Sinif
)
FROM Sinif
Yaşı 18 den küçük olanları listeleme (İç içe Select)
SELECT Ad,Soyad,Yas
FROM Sinif
WHERE Yas IN(
SELECT Yas FROM Sinif Where Yas 16
Yaşları aynı olan öğrencileri listeleme (Türetilmiş Tablolar)
SELECT * FROM Sinif
SELECT MAX(grup.adet)
FROM(SELECT YAS, COUNT (*) as adet
FROM Sinif
GROUP BY yas
)grup
PERSONEL ve PERSONEL YAKIN Tablolarını kullanarak PERSONEL tablosundaki personellerden en az bir yakını olanları bulma
SELECT PERSONEL_ID, PERSONEL_AD, PERSONEL_SOYAD
FROM PERSONEL
WHERE EXISTS (
SELECT *
FROM PERSONELYAKIN
WHERE PERSONELYAKIN.YAKIN_ID=PERSONEL.PERSONEL_ID
)
Hiç yakını olamayan personeli listeleme
SELECT PERSONEL_ID,PERSONEL_AD,PERSONEL_SOYAD
FROM PERSONEL
WHERE NOT EXISTS (
SELECT *
FROM PERSONELYAKIN
WHERE PERSONELYAKIN.YAKIN_ID=PERSONEL.PERSONEL_ID
)
Kitap_ID alanları eşleşecek şekilde Kitap_Ad ve Kitap_Yayınevi alanları için INNER JOIN yöntemini uygulama
SELECT Kitap_Ad, Kitap_Yayınevi
From tablo_Kitap INNER JOIN tablo_KitapBilgi
ON tablo_Kitap.Kitap_Id=tablo_KitapBilgi.Kitap_Id
Birinci Tablodaki kayıtlara göre ikinci tablodaki ilişkili kayıtları gösterecek OUTER JOIN yöntemi
SELECT tablo_Kitap.*, tablo_KitapBilgi.*
FROM tablo _Kitap LEFT OUTER JOIN tablo_KitapBilgi
On tablo_Kitap.Kitap_Id= tablo_KitapBilgi.Kitap_Id
Sayfa sayısı 450 ve 550 olan kitapları listeleyen sorgu
SELECT *
FROM tablo_Kitap
WHERE Kitap_Sayfa IN(450,550)
Sayfa sayısı 310 ve 330 olmayan kitapları listeleyen sorgu
SELECT *
FROM tablo_Kitap
WHERE Kitap_Sayfa NOT IN(310,330)
tablo_Kitap tablosundan kitap_Id,Kitap_Ad ve Kitap_Yazar alanlarını seçerek sayfa sayısı 450 den büyük olanları gösteren iç içe sorgu
SELECT Kitap_Id,Kitap_Ad,Kitap_Yazar
FROM tablo_Kitap
WHERE Kitap_Sayfa IN(
SELECT Kitap_sayfa
FROM tablo_Kitap
WHERE(Kitap_Sayfa>450)
)
tablo_Kitap tablosunda Kitap_Idsi 130′dan büyük olanları listeleyen türetilmiş tablo sorgusu
SELECT Sayfa.*
FROM(
SELECT Kitap_Id,Kitap_Sayfa
FROM tablo_Kitap
)
Sayfa(Kitap_Id,Kitap_Sayfa)
Where Sayf****itap_Id>130
Kitap Bilgisi Olmayan Kitapları Listeleyen sorgu (not exists kullanımı)
SELECT Kitap_Id,Kitap_Ad,Kitap_Yazar
FROM tablo_Kitap
WHERE NOT EXITS(
SELECT *
FROM tablo_KitapBilgi
WHERE tablo_Kitapbilgi.Kitap_Id=tablo_Kitap.Kitap_Id
)
Fiyatı 20 Lira altına %10, üstünde olan kitaplara %5 zam yapan imleç programlayınız (imleç)
DECLARE @fiyat int
DECLARE @fiyatlar CURSOR
SET @fiyatlar=CURSOR FOR
SELECT Kitap_Fiyat FROM Kitaplar
OPEN @fiyatlar
FETCH NEXT FROM @fiyatlar INTO @fiyat
SELECT Kitap_Fiyat From Kitaplar
WHILE(@@FETCH_STATUS=0)
BEGIN
IF @fiyat<20
UPDATE Kitaplar SET Kitap_Fiyat=(@fiyat+(@fiyat*0.1))
WHERE CURRENT OF @fiyatlar
ELSE
UPDATE Kitaplar SET Kitap_Fiyat=(@fiyat+(@fiyat* .05))
WHERE CURRENT OF @fiyatlar
FETCH NEXT FROM @fiyatlar INTO @fiyat
END
SELECT Kitap_Fiyat FROM Kitaplar
İmleci kapatma
CLOSE @fiyatlar
DEALLOCATE @fiyatlar
Çalışacağımız veri tabanını belirtmek için
USE Veritabanı_Adı
Person adında veri tabanı oluşturma
CREATE DATABASE person
Personel adında tablo oluştur tablo sütunları PERSONEL_ID,AD,SOYAD
CREATE TABLE PERSONEL
(
PERSONEL_ID İNT,
AD varchar(10),
SOYAD varchar(10)
)
PERSONEL tablosuna BABA_AD sütunu ekle veri girişini zorunlu tut.
ALTER TABLE PERSONEL
ADD BABA_AD varchar(20) NOT NULL
AD sütunun alabileceği karakter sayısını 15 yap, veri girişini zorunlu tut.
ALTER TABLE PERSONEL
ALTER COLUMN AD varchar(15) NOT NULL
PERSONEL TABLOSUNU SİLME
DROP TABLE PERSONEL
PERSONEL tablosundaki tüm alanları seçme
SELECT * FROM PERSONEL
PERSONEL tablosundaki PERSONEL_ID ve AD alanlarını seçme
SELECT PERSONEL_ID, AD FROM PERSONEL
PERSONEL tablosundaki AD ve SOYAD alanlarını birleştirme
SELECT AD+ +SOYAD FROM PERSONEL
rehber tablosundaki ad ali olan tüm kayıtlar
SELECT * FROM rehber WHERE AD=Ali
Artan sıralama ASC, Azalan sıralama DESC
SELECT * FROM rehber WHERE ad=Tuncay ORDER BY ad ASC
Yeni kayıt girme
INSERT INTO PERSONEL(AD,SOYAD)
VALUES(Mustafa,KUM)
Soyadı KUM olanların adını Mustafa yap
UPDATE PERSONEL SET AD=Mustafa WHERE SOYAD=KUM
Soyadı KUM olan tüm kayıtları sil
DELETE FROM PERSONEL WHERE SOYAD=KUM
Değişken tanımlama
DECLARE @ogr_no VarChar(10)
DECLARE @tckimlik_no int
Tablo türünde değişken tanımlama
DECLARE @değişken_adı TABLE
Değişkene değer atama yöntemleri
SET @değişken_adi=değer
SELECT @değişken_adı=değer
INSERT INTO @tablo_değişken SELECT adi,soyadi FROM person (Tablo değişkenler değer atama)
AD değişkeninin içeriğini PRINT ile gösterme
USE Deneme
GO
DECLARE @ad VARCHAR(10)
SELECT @ad=Mustafa
GO
PRINT @ad
GO
Bir yığının sonunu belli etmek için GO komutu kullanılır.
Notu 56 dan küçük olan öğrencileri listeleme
SELECT * FROM tablo2 WHERE nt2<=56
Adı Mustafa olmayan kayıtları listeleme
SELECT * FRPM PERSONEL WHERE ADAli
tablo1′deki adı Er ile başlayan kayıtları listeleme
SELECT * FROM tablo1 WHERE ad LIKE %Er%
Doğum tarihi 1970 den önce olan ve maaşı 700-1200 arasında olan personeli listeleme
SELECT * FROM person WHERE dogum tarihi=700 AND Maas={01/01/1970} AND cinsiyet=Erkek
OR dogum_tarih>={01/01/1975} AND cinsiyet=Kadın
Person tablosunda Adı Mustafa olmayanları listeleme
SELECT * FROM Person WHERE NOT AD=Mustafa
Ogr_Notlar Tablosunda not ortalamasını hesaplama
SELECT (nt1+nt2+nt3)/3 FROM Ogr_Notlar
Şimdiki tarih ve saat değerini gösterme
SELECT GETDATE()
İki tarih arasındaki gün sayısını bulma
SELECT DATEDIFF(dd,04,04,1974′,02,10,2007′)
ASCII kodu verilen harfi görüntüleme
SELECT CHAR(65) A Harfini verir
SELECT ASCII(A) 65 Rakamını verir(int tipinde)
Bir metin içindeki metin parçasını istenilen konumdan itibaren arama CHARINDEX()
SELECT CHARINDEX(bu,@soyad,1)
Metnin baş taraftan itibaren istenilen sayıdaki harfini alma
SELECT LEFT (@ad,2)
Metnin uzunluğunu veren fonksiyon
SELECT LEN(@Soyad)
Öğrencinin not ortalamasına göre 85 üzerinde olanlara PEKİYİ , 85 den küçük olanlara İYİ yazdıran kod
DECLARE @enbuyuk int
SELECT @enbuyuk=MAX(ort) FROM tablo2
IF (@enbuyuk>=84)
BEGIN
PRINT DURUMUNUZ PEKİYİ
END
ELSE IF (@enbuyuk65
Numaraya göre her öğrencinin almış olduğu notları listeleme
SELECT ogrno,AVG(ort) FROM tablo2 GROUP BY ogrno
Numara ve Bölüm adına göre ögrenci not ortalamalarını listeleme
SELECT ogrno,bolum,MAX(ort) FROM tablo2 GROUP BY ogrno,bolum
En yüksek not ortalamasını bulma
SELECT MAX(not_ortalama) FROM Ogr_Notlar
En düşük not ortalamasını bulma
SELECT MİN(not_ortalama) FROM Ogr_Notlar
Adı Mustafa, soyadı Kum olan kişinin maaşına % 20 zam yapma
declare @no int
select @no = sicil_no from personel
where adi = Mustafa and soyadi = Kum
UPDATE maaslar SET maas = maas * 0.20 + maas where sicil_no = @no
Maası en yüksek olan personelin adresini halkalı-istanbul olarak değiştirme
declare @enyuksek int
declare @sicil_no int
SELECT @enyuksek = max(maas) from maaslar
SELECT @sicil_no = sicil_no from maaslar WHERE maas = @enyuksek
UPDATE personel SET adres = halkalı-istanbul where sicil_no = @sicil_no
hangi veri tabanı üzerinde işlem yapılacağı belirtilir
USE Person
Personel adında tablo oluşturma, sütunlar;Personel_ID, AD, SOYAD
CREATE TABLE PERSONEL(PERSONEL_ID int, AD varchar(10), SOYAD varchar(10))
Personel Yakın Adlı Tablo Oluştur, Sütunları
CREATE TABLE PERSONELYAKIN(PERSONEL_ID INT, YAKIN_ID INT, YAKIN_AD varchar(10), YAKIN_SOYAD varchar(10))
rehber adında tablo oluşturma
create table rehber(ad varchar(20), soyad varchar(20),telefon varchar(11))
Personel tablosuna BABA_AD adlı sütun ekleme
ALTER TABLE PERSONEL
ADD BABA_AD varchar(20) NOT null veri girişi zorunlu
rehber tablosuna adres ekleme
ALTER TABLE rehber add adres varchar(50)
AD sütununun karakter sayısı 15 olarak değiştirildi, veri girişi zorunlu yapıldı
ALTER TABLE PERSONEL
ALTER COLUMN AD varchar(15) not null
Personel Tablosunu silme
DROP TABLE PERSONEL
Personel tablosundaku tüm alanları seçme
select * from PERSONEL
Personel tablosundaki PERSONEL_ID, AD alanlarını seçme
select PERSONEL_ID, AD from PERSONEL
Personel tablosundaki AD,SOYAD alanlarını tek sütun gibi gösterme
select AD+ +SOYAD from PERSONEL
rehber tablosundaki ad bilgilerinin elde edilmesini sağlar
select ad from rehber
mustafa adındaki tüm kayıtları göster
select * from rehber where ad=mustafa
ad alanına göre artan seçme ad aynı ise soyada göre artan
select * from rehber order by ad,soyad
Personel tablosuna yeni kayıt ekleme
insert into PERSONEL(PERSONEL_ID,AD,SOYAD,BABA_AD)
values(11,azmi,akbaş,ZİYA)
Soyadı Akbaş olan kayıtların adını nizmi yapma(güncelleme)
update PERSONEL SET AD=nazmi where SOYAD=AKBAŞ
soyadı akbaş olanları silme
delete from PERSONEL where SOYAD=akbaş
mustafanın telefon numarasını 0536 yap
update rehber set telefon =0536′ where ad=mustafa
Personel tablosunda ada göre artan sıralama
select * from PERSONEL order by AD ASC
Personel tablosunda ada göre azalan sıralama
select * from PERSONEL order by AD DESC
Değişken tanımlama
declare @ogr_no varchar(10)
declare @tckimlik_no int
Tek declare ile birden fazla degişken tanımlama
declare @ogr_no varchar(10), @tc_kimlik int
tablo türünde değişken tanımlama
declare @dagişken_adi table
Set ile değişkene değer atama
set @degisken_adi = deger
select ile değer atama
select @degisken_adi =deger
Tablo degişkenlere insert into ile degir atama
insert into @tablo_degisken select adi,soyadi from person
use deneme
go
declare @ad varchar(10)
select @ad=mustafa
GO
print @ad
go
adı ali olmayanları listeleme
select * from personel whereali
tablo 2 de notu 56 dan küçük olanlar
select * from tablo2 where nt2>=56
baş harfi er olanlar
select * from tablo1 where ad LIKE%er%
dogum tarihi 1970 önce maaşı 700-1200 arasında
select * from person
where dogum_tarihgi=700 and maas<=1200
adı ali olmayanları listeler
select * from sınıf
where not ad=ali
or oparatörü
select * from ogrenci where bolum=bilgisayar or bolum=elektrik
not ortalaması hesaplar
select(n1+n2+n3)/3 from ogr_notlar
nt1 sütunun not toplamını hesaplama
select sum(nt1) from ogr_notlar
maası 500 olan personel maasları toplamı
select sum(maas) from person where maas55
GO
EXEC Komutu
EXEC UNotlar
Stored Procedure çalıştırır.
Ortalamaya göre sonuç veren Stored Procedure
CREATE PROCEDURE UHesapla
@ort int
AS
IF @ort>44 PRINT Başarılı
IF @ort<45 PRINT Başarısız
GO
Adlarının İçinde a harfi geçen ögrenvcileri gösteren Stored Procedure
CREATE PROCEDURE Ogr_Ara (@ara VARCHAR(10)=NULL )
AS
IF @ara IS NOT NULL
SELECT * FROM Sinif
WHERE Ad LIKE %+@ara+%
GO
İki sayıyı Stored Procedure ile toplama
CREATE PROC UTopla(
@s1 int,
@s2 int,
@tpl int OUTPUT
)
AS
SELECT @tpl=@s1+@s2
GO
DECLARE @sayi1 int
DECLARE @sayi2 int
DECLARE @toplam int
SELECT @sayi1=9
SELECT @sayi2=8
SELECT @toplam=NULL
EXEC UTopla @sayi1,@sayi2,@toplam OUTPUT
Stored Procedure Uygulama örneği
Çalışma saati ve saat ücreti verildiğinde alacağı günlük yevmiye tutarını gösteren Stored procedure
CREATE PROC UYevmiyeHesap(
@CSaat smallint,
@SUcret int,
@Yevmiye float Output
)
Çalışma saati 8 saat ve 8 saaten az ise alacagı yevmiye çalışma saati ve saat ücreti çarpımı ile bulunacaktır
AS
IF (@CSaat8)
BEGIN
SELECT @Yevmiye=(@CSaat*@SUcret)+((@CSaat*@SUcret)*0.05)
END
GO
16 ve 17 yaşındaki öğrencileri IN deyimi ile listeleme
SELECT Ad,Soyad,Yas
From Sinif
WHERE yas IN(16,17)
16 yaşında olmayan öğrencileri IN deyimi ile listeleme
SELECT Ad,Soyad,Yas
From Sinif
WHERE yas NOT IN(16)
Yaşı 18 olan ögrenciyi bulma (iç içe Select)
SELECT Ad,Soyad,Yas
FROM Sinif
WHERE Yas = ( SELECT Yas
FROM Sinif
WHERE Yas=18
)
Ad, Soyad ve ortalama yaşı veren sorgu (iç içe Select)
SELECT Ad,Soyad,Yas,Ortalama=(
SELECT AVG(Yas)
FROM Sinif
)
FROM Sinif
Yaşı 18 den küçük olanları listeleme (İç içe Select)
SELECT Ad,Soyad,Yas
FROM Sinif
WHERE Yas IN(
SELECT Yas FROM Sinif Where Yas 16
Yaşları aynı olan öğrencileri listeleme (Türetilmiş Tablolar)
SELECT * FROM Sinif
SELECT MAX(grup.adet)
FROM(SELECT YAS, COUNT (*) as adet
FROM Sinif
GROUP BY yas
)grup
PERSONEL ve PERSONEL YAKIN Tablolarını kullanarak PERSONEL tablosundaki personellerden en az bir yakını olanları bulma
SELECT PERSONEL_ID, PERSONEL_AD, PERSONEL_SOYAD
FROM PERSONEL
WHERE EXISTS (
SELECT *
FROM PERSONELYAKIN
WHERE PERSONELYAKIN.YAKIN_ID=PERSONEL.PERSONEL_ID
)
Hiç yakını olamayan personeli listeleme
SELECT PERSONEL_ID,PERSONEL_AD,PERSONEL_SOYAD
FROM PERSONEL
WHERE NOT EXISTS (
SELECT *
FROM PERSONELYAKIN
WHERE PERSONELYAKIN.YAKIN_ID=PERSONEL.PERSONEL_ID
)
Kitap_ID alanları eşleşecek şekilde Kitap_Ad ve Kitap_Yayınevi alanları için INNER JOIN yöntemini uygulama
SELECT Kitap_Ad, Kitap_Yayınevi
From tablo_Kitap INNER JOIN tablo_KitapBilgi
ON tablo_Kitap.Kitap_Id=tablo_KitapBilgi.Kitap_Id
Birinci Tablodaki kayıtlara göre ikinci tablodaki ilişkili kayıtları gösterecek OUTER JOIN yöntemi
SELECT tablo_Kitap.*, tablo_KitapBilgi.*
FROM tablo _Kitap LEFT OUTER JOIN tablo_KitapBilgi
On tablo_Kitap.Kitap_Id= tablo_KitapBilgi.Kitap_Id
Sayfa sayısı 450 ve 550 olan kitapları listeleyen sorgu
SELECT *
FROM tablo_Kitap
WHERE Kitap_Sayfa IN(450,550)
Sayfa sayısı 310 ve 330 olmayan kitapları listeleyen sorgu
SELECT *
FROM tablo_Kitap
WHERE Kitap_Sayfa NOT IN(310,330)
tablo_Kitap tablosundan kitap_Id,Kitap_Ad ve Kitap_Yazar alanlarını seçerek sayfa sayısı 450 den büyük olanları gösteren iç içe sorgu
SELECT Kitap_Id,Kitap_Ad,Kitap_Yazar
FROM tablo_Kitap
WHERE Kitap_Sayfa IN(
SELECT Kitap_sayfa
FROM tablo_Kitap
WHERE(Kitap_Sayfa>450)
)
tablo_Kitap tablosunda Kitap_Idsi 130′dan büyük olanları listeleyen türetilmiş tablo sorgusu
SELECT Sayfa.*
FROM(
SELECT Kitap_Id,Kitap_Sayfa
FROM tablo_Kitap
)
Sayfa(Kitap_Id,Kitap_Sayfa)
Where Sayf****itap_Id>130
Kitap Bilgisi Olmayan Kitapları Listeleyen sorgu (not exists kullanımı)
SELECT Kitap_Id,Kitap_Ad,Kitap_Yazar
FROM tablo_Kitap
WHERE NOT EXITS(
SELECT *
FROM tablo_KitapBilgi
WHERE tablo_Kitapbilgi.Kitap_Id=tablo_Kitap.Kitap_Id
)
Fiyatı 20 Lira altına %10, üstünde olan kitaplara %5 zam yapan imleç programlayınız (imleç)
DECLARE @fiyat int
DECLARE @fiyatlar CURSOR
SET @fiyatlar=CURSOR FOR
SELECT Kitap_Fiyat FROM Kitaplar
OPEN @fiyatlar
FETCH NEXT FROM @fiyatlar INTO @fiyat
SELECT Kitap_Fiyat From Kitaplar
WHILE(@@FETCH_STATUS=0)
BEGIN
IF @fiyat<20
UPDATE Kitaplar SET Kitap_Fiyat=(@fiyat+(@fiyat*0.1))
WHERE CURRENT OF @fiyatlar
ELSE
UPDATE Kitaplar SET Kitap_Fiyat=(@fiyat+(@fiyat* .05))
WHERE CURRENT OF @fiyatlar
FETCH NEXT FROM @fiyatlar INTO @fiyat
END
SELECT Kitap_Fiyat FROM Kitaplar
İmleci kapatma
CLOSE @fiyatlar
DEALLOCATE @fiyatlar