SQL UYGULAMALARI 2
SQL uygulamalarımızın 2. alıştırmasını yapıyoruz.Bir önceki örnekte olduğu gibi bizden istenilen tabloyu kriterlerine uygun olarak oluşturacağız. Oluşturduğumuz bu tablo üstünde bizden istenilen sorguları Sql cümlecikleri ile yazacağız.
Bu sayede bir çok SQL ifadesinin ne işe yaradığını öğrenmiş olacağız. Bunun yanında SQL de istenilen sorgular nasıl yazılır bununla ilgili pratikler kazanabilirsiniz. Bunları yaparken ben SQL Serveri kullandım.
İlk SQL uygulamasına bakmak isterseniz buradan erişebilirsiniz.
Aşağıdaki alanları ve özellikleri içerecek olan PERSONEL isimli tabloyu oluşturunuz
- Perno: 1’den itibaren 1’er artan sayı
- isim: En az 3 harf, en fazla 15 harflik metin
- Soyad: en az 2 harf, en fazla 15 karakterlik isim
- Dept: MUH / SAT / SER / NAK / ARG bölümlerinden herhangi birisi
- Ucret: 0 ile 10000 arası parasal değerler
- Baslamatarih: 01.01.2000 ile sistem tarihi arası değerler
- Unvan: MUDUR/SEF/MEMUR/ELEMAN değerlerinden birisi
1.PERSONEL tablosuna kayıt girişlerini yapacak olan işlemleri yapınız.
İstenilen sorgular:
- Tam dolu kayıt girişi
- 1 seferde 2 tam dolu kayıt girişi
- Her seferde sırasıyla 1, 2,3 ve 4 alana kayıt giren 4 adet parçalı kayıt girişi
Cevapları:
[sourcecode language=”sql”]
–Tam dolu kayıt girişi
insert into personel values (‘oguz’, ‘ozkaraca’, ‘muh’, 500, ‘02.02.2002’, ‘Mudur’)
–1 seferde 2 tam dolu kayıt girişi
insert into personel values (‘steve’, ‘jobs’, ‘muh’, 500, ‘02.01.1995’, ‘Mudur’),
(‘bill’, ‘gates’, ‘muh’, 500, ‘02.02.1996’, ‘Mudur’)
–Her seferde sırasıyla 1, 2,3 ve 4 alana kayıt giren 4 adet parçalı kayıt girişi
INSERT INTO personel (isim) VALUES (‘steve’)
INSERT INTO personel (soyad) VALUES (‘wozniak’)
INSERT INTO personel (dept) VALUES (‘sat’)
INSERT INTO personel (ucret) VALUES (‘100’)
[/sourcecode]
2.PERSONEL tablosunda aşağıda belirtilen yapısal değişiklikleri yapınız.
İstenilen sorgular:
- İsim alanını 20 karakterlik hale getiriniz
- “Memleket” adında 15 karakterlik bir alan ve “ogrenim_durumu” olarak tanımlı değerlerden birini kabul eden (İlköğretim / Lise / Önlisans / Lisans / Lisansüstü) bir alan ekleyiniz.
- Boy alanını ekleyiniz. (büyük > 0 olmalı)
- Boy alanını siliniz.
Cevapları:
[sourcecode language=”sql”]
–isim alanını 20 karakterlik hale getiriniz
Alter table personel alter column isim varchar(20)
— “Memleket” adinda 15 karakterlik bir alan ve “ogrenim_durumu” olarak tanımlı degerlerden birini kabul eden
— (İlköðretim / Lise / Önlisans / Lisans / Lisansüstü) bir alan ekleyiniz.
Alter table personel add memleket varchar(15)
Alter table personel add ogrenim_durumu varchar(10) check
(ogrenim_durumu in( ‘İlköðretim’, ‘ Lise’,’Önlisans’, ‘Lisans’,’Lisansüstü’))
–Boy alanını ekleyiniz. (büyük 0 olmalı)
Alter table personel add boy int check(boy>0)
alter table personel drop boy
–boy alanını siliniz
alter table personel drop CK__personel__boy__534D60F1
Alter table personel drop column boy
[/sourcecode]
3.PERSONEL tablosundaki veriler üzerinde değişik yapan aşağıdaki işlemleri yapınız.
İstenilen sorgular:
- Tüm personele %15 zam yapınız.
- 5 yıl ve üzerinde çalışmakta olan personele %10 bir zam daha yapınız
- SAT bölümündeki en kıdemli personeli, SER bölümüne MUDUR olarak atayınız.
- SER bölümündeki işe en son giren kişiyi tablodan siliniz.
- Dept alanı NULL olanları NAK bölümüne ELEMAN olarak atayınız.
Cevapları:
[sourcecode language=”sql”]
–Tüm personele %15 zam yapınız.
UPDATE personel SET ucret= ucret*1.15
–5 yıl ve üzerinde çalışmakta olan personele %10 bir zam daha yapınız.
update personel SET ucret= ucret*1.1 where baslamatarih <= datediff (YEAR, ‘2010.12.16’, getdate())
–SAT bölümündeki en kıdemli personeli, SER bölümüne MUDUR olarak atayınız
update personel SET unvan=’MUDUR’, dept=’SER’ where dept =’SAT’ and
baslamatarih IN(select top 1 (baslamatarih) from personel where dept=’SAT’ order by baslamatarih asc)
–SER bölümündeki işe en son giren kişiyi tablodan siliniz.
delete from personel where dept=’SER’ AND baslamatarih in (select top 1 (baslamatarih) from personel order by baslamatarih desc)
–Dept alanı NULL olanları NAK bölümüne ELEMAN olarak atayınız.
update personel set dept = ‘Nak’, unvan=’Elaman’ WHERE dept is null
[/sourcecode]
4.PERSONEL tablosundan aşağıdaki şartlara uyan kayıtları listeleyiniz
İstenilen sorgular:
- Adı 3 harfli personelleri gösteriniz.
- Soyadı 5 harfli ve içinde “e” geçen personelleri gösteriniz.
- SAT bölümünde kaç kişi çalışmaktadır?
- Her bölümde kaçar kişi çalışmaktadır?
- MUH bölümü çalışanlarının ücret ortalaması kaçtır?
- Her bölüm için ortalama ücretleri gösteriniz.
- ARG bölümündeki en kıdemli personelin adını gösteriniz.
- Her unvan türünden kaçar kişi çalışmaktadır?
- Her unvan türünün ücretleri ortalamalarını gösteriniz.
- MUH bölümündeki Recep’den daha fazla ücret alan personellerin bilgilerini gösteriniz.
- SAT bölümündeki Eda’dan daha kıdemli olan personellerin isim, bölüm ve ünvanlarını gösteriniz.
- ARG bölümündeki Ahmet’ten sonra işe başlamış olan personellerin isimlerini listeleyiniz.
- İşyerindeki farklı departman isimlerini listeleyiniz.
- İşyerindeki farklı ünvan isimlerini listeleyiniz.
- MUH bölümü ücret ortalaması ile ARG bölümü ücret ortalaması farkının ne kadar olduğunu gösteriniz.
- En çok ücret alan kişi / kişilerin adlarını gösteriniz.
- En çok ücret alan ilk 3 kişiyi gösteriniz.
- En az ücret alan kişi/kişileri gösteriniz.
- En az ücret alan ilk 3 kişinin adlarını gösteriniz.
Cevapları:
[sourcecode language=”sql”]
— Adı 3 harfli personelleri gösteriniz.
select * from personel where isim like ‘___’
–b. Soyadı 5 harfli ve içinde “e” geçen personelleri gösteriniz.
select *from personel where soyad like ‘_____’ and soyad like ‘%e%’
select *from personel where len(soyad)=5 and soyad like ‘%e%’
–üstteki iki sorguda aynı işlevi görür
–c. SAT bölümünde kaç kişi çalışmaktadır?
select count(*) from personel where dept = ‘sat’
–d. Her bölümde kaçar kişi çalışmaktadır?
select count(*), dept from personel group by dept
–e. MUH bölümü çalışanların ücret ortalaması kaçtır?
select AVG(ucret) from personel where dept=’muh’
— f. Her bölüm için ortalama ücretleri gösteriniz.
select AVG(ucret),dept from personel group by dept
–g. ARG bölümündeki en kıdemli personelin adını gösteriniz.
select * from personel where dept=’ARG’
–h. Her unvan türünden kaçar kişi çalışmaktadır?
select count(*), unvan from personel group by unvan
–j. MUH bölümündeki Recep’den daha fazla ücret alan personellerin bilgilerini gösteriniz.
select * from personel where ucret > (select ucret from personel where isim =’recep’)
–k. SAT bölümündeki Eda’dan daha kıdemli olan personellerin isim, bölüm ve ünvanlarını gösteriniz.
select isim, unvan, baslamatarih from personel where baslamatarih < ( select baslamatarih from personel where isim like ‘eda’ and dept=’arg’)
–l. ARG bölümündeki Ahmet’ten sonra işe başlamış olan personellerin isimlerini listeleyiniz.
select isim from personel where baslamatarih > (select baslamatarih from personel where isim=’Ahmet’ and dept=’arg’)
— m. işyerindeki farklı departman isimlerini listeleyiniz.
select DISTINCT dept from personel group by dept
–n. işyerindeki farklı ünvan isimlerini listeleyiniz.
select DISTINCT unvan from personel group by unvan
–o. MUH bölümü ücret ortalaması ile ARG bölümü ücret ortalaması farkının ne kadar olduğunu gösteriniz.
select ((select AVG(ucret) from personel where dept=’muh’) – (select AVG(ucret) from personel where dept=’arg’))
–p. En çok ücret alan kişi / kişilerin adlarını gösteriniz.
select top(1) isim from personel order by ucret desc
–order by kullanımı aşağıdaki gibidir
–SELECT * FROM Customers ORDER BY Country ASC;
–q. En çok ücret alan ilk 3 kişiyi gösteriniz.
select top(3) * from personel order by ucret desc
–r. En az ücret alan kişi/kişileri gösteriniz.
select top(1) * from personel order by ucret asc
–s. En az ücret alan ilk 3 kişinin adlarını gösteriniz.
select top(3) * from personel order by ucret asc
[/sourcecode]
oğuz cok saol cok faydalı oldu
oğuz bu hatalı değil mi
l. ARG bölümündeki Ahmet’ten sonra işe başlamış olan personellerin isimlerini listeleyiniz.
select isim from personel where baslamatarih >(select baslamatarih from personel where isim=’Ahmet’ and dept=’arg’)
büyük, Küçük(<, >) karakter sorunu vardı düzeltildi.
tamamdır