1-) MSSQL - SQL SORGULAR KOMUTLAR
create database test--veri tabanı oluşturur
use test—test veri tabanini kullan aşağıdaki sorgular için
create table ogrenci(ogr_no int not null,ogr_adi varchar(20) not null,ogr_soyad varchar(50))--tablo oluşturur
alter table ogrenci add ogr_ulke varchar(50)--ogrenci tablosuna ogr_ulke adında sutun oluşturur
alter table ogrenci alter column ogr_soyad varchar(100) null--daha onceden ogr_soyad varchar(50) idi onu
varchar(100) yaptık
alter table ogrenci drop column ogr_ulke--ogr_ulke adındaki sutunu siler
insert into ogrenci (ogr_no,ogr_adi,ogr_soyad,ogr_adress)
values ('5132','ramazan','haber','merhmesd asdas')—sütunlara ekleme yapar
update ogrenci set ogr_adress='gaziantep' where ogr_no='213'--ogr_no=213 olanın adresini gazientep yap
delete from ogrenci where ogr_no='07'--ogr_no=07 olan satırı sil
delete from ogrenci--ogrenci tablosundaki verileri komple satırı sil
drop table ogrenci--table komple yok olur
21.10.2015
select SOYAD,AD from KISILER--kişiler tablosundan sadece soyad ve ad alanını getirir
select * from KISILER--kişiler tablosunun hepsini getirir
select distinct * from kisiler--tekrar eden kayıtları tek bir tane yapar
select distinct (soyad) from kisiler--kisiler tablosunda tekrar eden soyadları yalnızca 1 tane getırır
select distinct (SEHIR) from kisiler--kisiler tablosunda tekrar eden SEHIR yalnızca 1 tane getırır
select * from KISILER where SEHIR='Ankara'--kişiler tablosundaki sehiri ankara olanı getir
select * from YAZARLAR where DOGUM_YILI>1800 and DOGUM_YILI<1900 --2 tarih arasını alır
select * from uyeler where ISIM='Deniz' and CINSIYET='K'--ismi deniz ve cinsiyeti kız olan gelsin
select * from uyeler where ISIM='Deniz' or CINSIYET='K'--ismi deniz veya cinsiyeti kız olanlari getir
select * from uyeler where CINSIYET='E' and (SOYISIM='Aydın' or SOYISIM='Zafer')--parantez ile kullanımı
select * from UYELER order by ISIM asc--alfabetik sıraya gore sıralar
select * from UYELER order by ISIM desc--alfabetik sondan geriye doğru sıralar
select top 3 * from UYELER--ilk 3 kayıtı getirir
select * from UYELER where SOYISIM like 'Z%'--soyad'ı Z ile başlayanlar
select * from UYELER where SOYISIM like '%s'--soyismi s ile bitenler
select * from UYELER where SOYISIM like '%er%'--soyisminde er olanlar
select * from UYELER where SOYISIM like '%[eç]%'--soyisminde e veya ç olanlar
select * from UYELER where SOYISIM not like '%[eç]%'--soyisminde e veya ç olmayanlar
Veritabanı-1 Laboratuvar dersi /Ödev-1 21.10.2015
Aşağıdaki soruların cevabını veren sorgu cümlelerini yazınız ve sorgu sonucunu ekran görüntüsü alarak ilgili sorgunun altına yapıştırınız.
select * from UYELER where E_POSTA like '%@%'
select * from UYELER where (SOYISIM like 'Z%' or SOYISIM like 'A%') and CINSIYET='E'
select * from PERSONEL where YAS<30 and CINSIYET='K'
select * from PERSONEL where ULKE='Türkiye' order by MAAS desc
select * from UYELER where SOYISIM not like '%oglu%'
04.11.2015
select * from PERSONEL where YAS in (20,22,23,35)--yaşı 20 22 23 ve 35 olani ekrana getir=or
select * from PERSONEL where YAS=22 or YAS=20 or YAS=23 or YAS=35--yukardakinin aynısı
select * from PERSONEL where SOYISIM in ('Efe','can')--soyadi efe ve can olani ekrana getir=in
select * from PERSONEL where SOYISIM not in ('Efe','can')--soyadi efe ve can olmayani ekrana getir=not in
select * from PERSONEL where YAS not in (20,22,23,35)--yaşı 20 22 23 ve 35 olmayani ekrana getir aşşağıdakinin aynısı = and
select * from PERSONEL where YAS<>22 and YAS<>20 and YAS<>23 and YAS<>35--yukardakinin aynısı= not in
select ISIM,SOYISIM,YAS,CINSIYET from PERSONEL where YAS BETWEEN 20 and 30--yaşı 20 ile 30 arasındakileri getir
select ISIM as adi,SOYISIM as soyadi,YAS,CINSIYET as cinsiyet from PERSONEL--as komutu sütün ismini değiştirir
select AVG(MAAS) as ORTALAMA from PERSONEL--maaşın ortalamasini alir ortalama diye sütünün ismini değiştiri ekrana yazar
select MAAS from PERSONEL--personel tablosundaki maaşın hepsini ekrana yazar
select * from PERSONEL where ULKE='Türkiye'—ülkesi türkiye olanları getirir
select AVG(MAAS) as ortalama from PERSONEL—ortalamasini alir
select AVG(MAAS) as ortalama , ULKE from PERSONEL where ULKE='Türkiye' Group by ULKE--türkiyedekileri ortalamasini alır ve türkiyeye gore gruplar
select yas from PERSONEL-- sadece yas ekrana getirir
select MAX(YAS) as ustat from PERSONEL--en buyuk yasi bulur sutun ismi ustat olarak ekrana yazar
select min(YAS) as ustat from PERSONEL--en kucuk yasi ekrana yazar
select sum(MAAS) as ustat from PERSONEL--maasin hepsini toplar ekrana yazar
select COUNT(MAAS) from PERSONEL--toplam maas kayıt sayısını verir index
select COUNT(distinct ULKE) from PERSONEL--kaç farkli ülke varsa onun sayisini dondurur
select ULKE,AVG(MAAS) ort from PERSONEL where CINSIYET='E' group by ULKE having AVG(MAAS)>3000--having demek avg ye şart koy yani 3000 den buyuklerıni bana göster diyorum
Aşağıdaki soruların cevabını veren sorgu cümlelerini yazınız ve sorgu sonucunu ekran görüntüsü alarak ilgili sorgunun altına yapıştırınız.
select top 5 * from UYELER where UYE_ADI like '%er%'
select MAX(YAS) as enyasli from PERSONEL where ULKE='Türkiye'--en yaþli yasi ekrana yazar
select min(YAS) as engenc from PERSONEL where ULKE='Türkiye'--en genc yasi ekrana yazar
select AVG(yas) ORTALAMA, ULKE from PERSONEL where ULKE in ('ABD','Almanya','Fransa') group by ULKE
select * from YAZARLAR where OLUM_YILI=1910 or OLUM_YILI is null
11.11.2015
select * from YAYINEVLERI--PK
select * from KITAPLAR--FK
select * from KITAPLAR,YAYINEVLERI --kartezyan çarpım yapar yani tabloyu birleştirir
select * from KITAPLAR,YAYINEVLERI where KITAPLAR.YV_NO=YAYINEVLERI.NO--kitaplarin.yv_no eşit olan yayinevleri.no olanlari getir
select * from KITAPLAR inner join YAYINEVLERI on KITAPLAR.YV_NO=YAYINEVLERI.NO-- yukaridaki sorguyla aynı sonucu verır
select * from KITAPLAR as kitap,YAYINEVLERI as yayin where kitap.YV_NO=yayin.NO--yukaridakinin aynisi sadece sutun ismini degistik
select kitap.NO,kitap.ISIM,yayin.ISIM from KITAPLAR as kitap,YAYINEVLERI as yayin where kitap.YV_NO=yayin.NO--yukardakinin aynisi * i degistirdik
select * from KITAPLAR,YAYINEVLERI where KITAPLAR.YV_NO<>YAYINEVLERI.NO--ayni olmayanlari getirir
select * from KITAPLAR as kitap,YAYINEVLERI as yayin where kitap.YV_NO=yayin.NO--basla1
union all—iki sorguyu birliştirir aynı olanlarıda getirir
select * from KITAPLAR as kitap,YAYINEVLERI as yayin where kitap.YV_NO=yayin.NO--bitir1 2 tabloyu birlestirdik komple
select * from KITAPLAR as kitap,YAYINEVLERI as yayin where kitap.YV_NO=yayin.NO--basla2
union-- iki sorguyu birleştiri tek tablo şeklinde gösterir aynı olanları yazmaz
select * from KITAPLAR as kitap,YAYINEVLERI as yayin where kitap.YV_NO=yayin.NO--bitir2 2 tabloyu birlestirir ayni olanlari yazmaz
18.11.2015
select CASE cinsiyet when 'K' then 'KIZ' else 'ERKEK' end from uyeler--"K" yazanları "kız" yap digerlerini "'ERKEK' " yaz
select isim,soyisim, CASE cinsiyet when 'K' then 'KIZ' else ‘erkek' end as cinsiyet,cinsiyet from uyeler--
declare @ay int--int degerinde değişken tanımlarız
set @ay=1--değişkene deger atadık
select case @ay when 1 then 'ocak' when 2 then 'subat' else 'gecersiz ay ' end --eger degisken 1 ise ocak yaz 2 ise subat
Veritabanı-1 Laboratuvar dersi /Ödev-3 18.11.2015
Ödev scriptini herhnagi bir database çalıştırarak aşağıdaki tabloları oluşturunuz.
Musteri ve KonusmaKaydi diye iki tablomuz var. Her müşterinin konuşma kayıtları KonusmaKaydi tablosunda konuşma yönüne göre tutuluyor. Her konuşma için konuşma kaydı tablosuna yeni bir kayıt giriliyor. Konuşma yönü şehir içi, şehirlerarası, GSM gibi değişiklik göstermekte.
Tüm müşterilerin yapmış olduğu konuşmaları toplam şehir içi, toplam şehirlerarası ve toplam GSM konuşması olarak listeleyen sorguyu yazınız. (Sorgu sonucunuzda aşağıdaki başlıklar gibi olmalıdır.) Sorgu sonucunuzun ekran görünüşünü sorgunun altına yapıştırınız.
Ad Soyad SehirIçi SehirlerArasi GSM
CEVAP-)
Yön=1 şehir içi,,,yön=2 şehirler arası,,,,yön=3 GSM
select ad,soyad,sum(case when Yon =1 then Saniye else 0 end)toplam_sehir_ici
,sum(case when Yon =2 then Saniye else 0 end)toplam_sehirler_arasi
,sum(case when Yon =3 then Saniye else 0 end)toplam_GSM from KonusmaKaydi,Musteri
where Musteri.Musterikey=KonusmaKaydi.Musterikey Group by ad,soyad
25.11.2015
select ASCII('d')--karakter gireriz onun aski karşılıgını dondurur=100
select CHAR(100)--asci sayi gireriz onun karakter karşılığını verir=d
select CHARINDEX('E','DilEk')--E karakterinin indisi kaçtır 4'dür... burada başlangıcı 1 kabul eder yani D yi
select LEFT('ramazan',3)--soldan 3 karakter al sonuc='ram' dır
select right('ramazan',3)--sağdan 3 karakter al sonuc='zan' dır
select LEN('ramazan haber')--toplam karakter sayısını uzunlugunu verir boşluklarda dahil
select LOWER('RAMAZAN')--karakterleri kucuge çevirir
select UPPER('ramazan')--karakterleri buyuge çevirir
select LTRIM(' ramazan')--soldaki boşluğu siler
select RTRIM('ramazan ')--sağdaki boşluğu siler
select LEN(LTRIM(' ramazan'))-- normalde boşluğuda sayar len komutu 8 dondurur fakat ltrim yaparak boşlugu sildik 7 dondurdu
select REPLACE('RAMAZAN','RA','TA')--ramazanın içinde RA yi arar onu TA olarak değiştir sonucumuz = TAMAZAN olur
select REPLICATE('ramazan ',5)-- 5 tane ramazan yazar
select REVERSE('RAMAZAN')--ramazanı tersten yazar sonuc=NAZAMAR
select 'RAMAZAN'+SPACE(2)+'HABER'-- space(2)=2 tane boşluk koyar
select SUBSTRING('RAMAZAN',2,3)-- 2 den itibaren 2 dahil 3 karakter al ekrana yaz sonuc='AMA'
select SUBSTRING('RAMAZAN',4,5)-- 4 den itibaren 4 dahil 5 karakter al ekrana yaz sonuc='AZAN'
select STUFF('RAMAZAN',2,4,'HABER')--2 den başla 4 karakteri sil ve sildiğin yere 'HABER' yaz sonuc=RHABERAN
declare @isim varchar(10)
set @isim='RAMAZAN'
select STUFF(@isim,2,LEN(@isim)-1,'HABER')-- sonuc=RHABER döner yukarıdakinin aynısı
select GETDATE()--şimdiki tarihi verir
select DAY(GETDATE())--verilen tarihin günün döndürür burada bugunun tarihini gonderdık gun olarak 25 werecek
select month(GETDATE())--verilen tarihin ayını döndürür
select YEAR(GETDATE())--verilen tarihin yılını döndürür
select DATEDIFF(day,'2015-10-25',getdate())-- iki tarih arasındaki gün farkını dondurur
select DATEDIFF(MONTH,'2015-10-25','2015-11-25')-- iki tarih arasındaki ay farkını dondurur
select DATEDIFF(YEAR,'2012-10-25',getdate())-- iki tarih arasındaki yıl farkını dondurur
select DATEADD (DAY,3,GETDATE())-- bugunun tarihine 3 gün ekle
select DATEPART(DAY,GETDATE())--bugunun gununu dondurur
16.12.2015
create view view56(ad,soyad) as select isim,soyisim from personel_vize--sanal tablo oluşturur views klasorunun altındadır
soru-1)personel tablosundaki ulkeler ıcın ortalama maaşı hesapla ve ortalama maaşın ustunde
alan kişileri getir cevap aşşagıdaki kod
create view view5 (ulke,ulke_ort_maas) as select ulke ,avg(MAAS) from personel_vize group by ulke
select * from personel_vize,view5 where personel_vize.maas>view5.ulke_ort_maas and personel_vize.ulke=view5.ulke
vize soruları ve cevapları
1-)adı "e" ile başlayan veya soyadında "s" harfi bulunan ve maasının 2 katı 3500 den buyuk veya esıt olan personellerın adı ve soyadını a-z sıralı olarak lısteleyen sorguyu yazınız
SELECT ISIM,SOYISIM,MAAS, MESLEK FROM PERSONEL
WHERE ISIM LIKE 'e%' OR SOYISIM LIKE '%s%' AND (2*MAAS)>=3500 ORDER BY ISIM,SOYISIM ASC
SELECT ISIM,SOYISIM,MAAS, MESLEK FROM PERSONEL
WHERE ISIM LIKE 'e%' OR SOYISIM LIKE '%s%' AND (2*MAAS)>=3500 ORDER BY ISIM asc,SOYISIM
2-)personel tablosunda memurların maasına %20 zam yapan sorguyu yazınız
UPDATE PERSONEL SET MAAS=MAAS*1.20 WHERE MESLEK='memur'
SELECT ISIM,SOYISIM,MAAS from PERSONEL
3-)personellerin isim,soyisim,kent ve ulke bilgilerini tek bir kolonda (personel_detay) assıgıdaki formatta sorgulayınız..bosluk sayısı 2 dır
S.ellen ülke=ABD kent:new york
SELECT LEFT(SOYISIM,1)+'.'+ISIM+SPACE(2)+'ÜLKE:'+ULKE+SPACE(2)+ 'KENT:'+KENT AS PERSONEL_DETAY_BILGI FROM PERSONEL
SELECT STUFF(SOYISIM,2,LEN(SOYISIM)-1, '.' +ISIM ) +SPACE(2)+'ÜLKE:'+ULKE+SPACE(2)+'KENT:'+KENT AS PERSONEL_DETAY_BILGI FROM PERSONEL
SELECT substring(SOYISIM,1,1)+'.' +ISIM +SPACE(2)+'ÜLKE:'+ULKE+SPACE(2)+'KENT:'+KENT AS PERSONEL_DETAY_BILGI FROM PERSONEL
4-)personel tablosunda bulunan mesleklerı ve her bır meslege mensup kişi sayısını veren sorguyu yazınız
SELECT MESLEK, COUNT(MESLEK)MENSUPSAYISI FROM PERSONEL GROUP BY MESLEK
5-)personellerin isimlerini ,soyisimlerini ve maaş seviyelerini düşükten yüksege dogru sıralayan sql sorgusunu yazınız.(personel maasını 1800 den kucuk ıse dusuk,1800 ile 3000 arasında ise orta ve 3000 den yuksek ise yuksek olarak maas sevıyelerını listelemeli)
SELECT ISIM,SOYISIM,
CASE WHEN MAAS < 1800 THEN 'DÜSÜK'
WHEN MAAS BETWEEN 1800 AND 3000 THEN 'ORTA'
WHEN MAAS > 3000 THEN 'YÜKSEK'
END AS MAAS_SEVIYESI
FROM PERSONEL ORDER BY MAAS_SEVIYESI
7-)not in demek and demek o yuzden 7.sorunun cevabı sıfırdır
SELECT ISIM,SOYISIM FROM PERSONEL WHERE SOYISIM is not null or SOYISIM not in ('Cesanne')
SELECT ISIM,SOYISIM FROM PERSONEL WHERE SOYISIM in (null,'cesanne')
23.12.2015
1-)persoNEL TABLOSUNDAKİ PER_NO YU GONDERELIM BİZE YAŞINI DONDURSUN (FUNCTİON)
CREATE FUNCTION
FN_PERNO
(
@perno int
)
RETURNS int
AS
BEGIN--başla
declare @sonuc int
set @sonuc=(select yas from PERSONEL where PER_NO=@perno)
RETURN @sonuc
END--bitir
GO
SURGUDADA ŞÖYLE ÇALIŞTIRIRIZ
select dbo.FN_PERNO(1)--1 NUMARALI KİŞİNİN YAŞINI 20 OLARAK VERİR
2-)tablo donduren functıon
CREATE FUNCTION TB_FN
()--parametre almadi
RETURNS
@tbl table--tablo donecek
(ad varchar(50))
AS
BEGIN
insert into @tbl(ad) select ISIM from PERSONEL where YAS>20--yaşı 20 den buyuk olanları tabloya yaz ve dondur
--values('RAMAZAN')
RETURN
END
GO
çağırmak için ise tabloyu
select * from dbo.TB_FN() şeklinde olucak
--donen degerden koşul yapmak istersen select * from dbo.TB_FN() where ad='Mehmet' şeklinde yapabilirsin
3-)while dongusu assagıda örnek string olarak 123 gırdım ekrana 1 sonra 2 sonra 3 yazan functıonu yaz
4-)case(İF) kullanımını ogren çok örnek yap
FONKSYONU RESIMDE GORDUGUMUZ GIBI OLUSTURABILIRIZ
TABLO DONDUREN FONKSYONUDA RESIMDEKI GIBI…
30.12.2015
1-)PROSEDÜR YAZMAK AŞŞAĞIDAKİ GİBİ
CREATE proc deneme(@param varchar (20))--deneme adında metod olusturur ve 1 tane parametre alır
as begin--başla
select @param as isim
end--bitir
çağırma işlemi aşağıdadır.
exec deneme 'RAMAZAN'--exex ile deneme metoduna parametre gonderırız ve çağırırız
2-)Aşşağıdaki kodu çalıştırıp ne yaptığını anlamaya çalışalım
create proc proc_say
(
/*Parametreler */
@metin varchar (20)
)
as begin
declare @sayac int
declare @harf char
set @sayac=1
create table #temp
(sira int,harf char(1))
while(@sayac<=LEN(@metin))
begin
set @harf=(select SUBSTRING(@metin,@sayac,1))
insert into #temp(sira,harf) values(@sayac,@harf)
set @sayac=@sayac+1
end
select *from #temp
drop table #temp
end
çağırma işlemi aşşağıda
exec proc_say ‘ramazan'
3-)--Kullanıcı elma,armut,kiraz giricek bana virgulleri kaldıracak sonra tabloya eklicek
create function fn_metinparcala
(
@metin varchar(100),@ayrac char(1)
)
returns @sonuc table(isim varchar(20))
begin
declare @bas int,@bit int
set @bas=1
set @bit=(select charindex(@ayrac,@metin))
while @bas<LEN(@metin)+1 begin
if @bit=0
set @bit=LEN(@metin)+1
insert into @sonuc(isim) values(SUBSTRING(@metin,@bas,@bit-@bas))
set @bas=@bit+1
set @bit=CHARINDEX(@ayrac,@metin,@bas)
end
return
end
çağırma işlemi aşşağıda
select * from dbo.fn_metinparcala('elma,armut,kiraz',',')
4-)break pointli çalıştırma dubug buttonuna bas ve f11 ile gez
06.01.2016
1-) MSSQL - sıfıra bolme hatasını yapan fonksyonu yaz
create function fn_bolme(--fonksyonu olusturma
@bolunen int,
@bolen int
)
returns float
as begin
declare @sonuc float
if @bolen <>0 begin
set @sonuc=@bolunen/@bolen end
else begin set @sonuc=@bolunen end
return @sonuc
end
çağırma işlemi aşağıdadır
select dbo.fn_bolme(1,0)--fonksyonu çağırma işlemi
2-)3 tane parametre alıcan kelime(12),uzunluk(4),karakter(X)
ekranada XX12 yazıcak bu fonksyonu ve prosuduru yaz