Veritabanı dersi için sql sorgu örnekleri, veritabanı sınav soru ve cevapları, veritabanı uygulama sınav soruları, v veritabanı sql soruları, veritabanı sql sınav soruları için aşağıda özellikleri verilen personel, adres ve departman tabloları üzerinde yapılacak olan sql soruları ve sorgular için gerekli açıklamalar aşağıdadır..
Personel Adres Departman
Emsanno Emsanno Departman_kod
Ad Adres Departman_ad
Soyad Il_Ilçe_ad
Maaş Ev_tlf
Departman
Görev
***************************************************************************************************
ÖRNEK SQL’LER
***************************************************************************************************
Örnek-1: Personel tablosunun sütunlarını (yapısını) listeleyiniz.
Cevap: DESC (Describe) komutu tabloların sütunlarını listelemektedir (göstermektedir).
DESC PERSONEL
Örnek-2: Personel tablosundaki bütün kayıtları listeleyiniz.
Cevap: SELECT’ten sonra konacak “*” bütün alanları ifade etmektedir ve WHERE bölümüne herhangi bir şart yazılmadı ise bütün kayıtları listele demektir.
SELECT *
FROM PERSONEL;
Örnek-3: Personel tablosundaki bütün kayıtların emsanno,ad ve soyad alanlarını listeleyiniz.
Cevap: SELECT’ten sonra istenen alanlar (column) virgül ile ayrılarak yazılır ve WHERE bölümüne herhangi bir şart yazılmadı ise bütün kayıtları listele demektir.
SELECT EMSANNO, AD, SOYAD
FROM PERSONEL;
Örnek-4: Personel tablosundaki bütün kayıtların emsanno,ad,soyad ve yıllık maaşlarını listeleyiniz.
Cevap: Yıllık maaş, aylık maaşın 12 ile çarpılmasından elde edilir. Bu örnekte görüleceği gibi, SQL cümlelerinde aritmetik ifadeler (çarpma, toplama, çıkarma, bölme, vb.) kullanılabilmektedir.
SELECT EMSANNO, AD, SOYAD, MAAS * 12
FROM PERSONEL;
Örnek-5: Personel tablosundaki bütün kayıtların emsanno,ad,soyad ve yıllık maaşlarını listeleyiniz ve maas*12 sütununa yeni bir isim (“YILLIKMAAS”) veriniz.
Cevap: Bu örnek, yukarıdaki örneğin aynısı gibi gözüküyor fakat sadece bir fark var: O da maas*12 sütununa yeni bir isim verme işlemi. SQL’de her yazılan sütuna yeni bir isim verilebilir, buna diğer isim (alias) denir. Şu şekilde kullanılır:
SELECT EMSANNO, AD, SOYAD, MAAS * 12 YILLIKMAAS
FROM PERSONEL;
Örnek-6: Personel tablosundaki bütün kayıtların emsanno,ad ve soyad alanlarını listeleyiniz. Fakat, ad ve soyad alanlarını aralarında bir boşluk olmak üzere beraber listeleyiniz.
Cevap: SQL’de, iki veya daha fazla alan birleştirilebilir. Bu işleme, neticelerin sıralanması (concatenation) denir. Şu şekilde kullanılır:
SELECT EMSANNO, AD||’ ‘|| SOYAD
FROM PERSONEL;
Örnek-7: Personel tablosundaki bütün kayıtların ad,soyad ve departman numarası alanlarını listeleyiniz. Fakat, ad ve soyad alanlarını aralarında bir boşluk olmak üzere beraber listeleyiniz ve departman numarasından sonra da “numaralı departmanda çalışıyor” ibaresini ekleyiniz.
Cevap:
SELECT AD||’ ‘|| SOYAD ISCI ,
DEPARTMAN||’ numaralı departmanda çalışıyor’ BOLUM
FROM PERSONEL;
Örnek-8: Personel tablosundaki bütün kayıtların departman numarası alanını listeleyiniz.
Cevap:
SELECT DEPARTMAN
FROM PERSONEL;
Örnek-9: Yukarıdaki örnekte görüleceği gibi bazı departman numaraları birden fazla geldi. Bunun sebebi, aynı departmanda çalışan birden fazla insan olmasıdır. Eğer her departman numarasından bir tane gelmesini isteseydik; soru ve cevap şu şekilde olacaktı:
Personel tablosundaki bütün kayıtların departman numarası alanını listeleyiniz fakat her departman numarasından bir tane (tekil, unique) olsun.
Cevap: Kayıtları tekil olarak listeleme işlemi DISTINCT komutuyla yapılmaktadır. DISTINCT komutu, tekil olarak listelenecek alan veya alanlardan önce yazılmaktadır.
SELECT DISTINCT DEPARTMAN
FROM PERSONEL;
Örnek-10: Personel tablosundaki bütün kayıtların ad, soyad ve maas alanlarını, maas alanı küçükten büyüğe doğru sıralı olmak üzere listeleyiniz.
Cevap: Normalde, sorgu sonucu dönen kayıtların belirli bir sırası yoktur. Gelen kayıtlar sıraya konulmak istenirse ORDER BY komutunu kullanmak gerekir. ORDER BY komutunun iki tipi vardır. Birincisi, küçükten büyüğe doğru olanıdır, buna ASC (ascending) denir. İkincisi, büyükten küçüğe doğru olanıdır, buna da DESC (descending) denir. Eğer belirtilmezse, standart olarak ASC kullanılmaktadır. Bu komut şu şekilde kullanılmaktadır:
Cevap:
SELECT AD, SOYAD, MAAS
FROM PERSONEL
ORDER BY MAAS;
Örnek-11: Personel tablosundaki bütün kayıtların emsanno, ad ve soyad alanlarını, emsanno alanı büyükten küçüğe doğru sıralı olmak üzere listeleyiniz.
Cevap:
SELECT EMSANNO, AD, SOYAD
FROM PERSONEL
ORDER BY EMSANNO DESC;
Örnek-12: Personel tablosundaki görevi “ÜRETİM ŞEFİ” olan bütün kayıtların ad, soyad ve gorev alanlarını listeleyiniz.
Cevap:
SELECT AD, SOYAD, GOREV
FROM PERSONEL
WHERE GOREV = ‘ÜRETİM ŞEFİ’ ;
Örnek-13: 100 numaralı departmanda çalışan personelin departman, ad ve soyad alanlarını listeleyiniz ve kayıtları ad alanına göre küçükten büyüğe doğru sıralayınız.
Cevap:
SELECT DEPARTMAN, AD, SOYAD
FROM PERSONEL
WHERE DEPARTMAN = 100
ORDER BY AD ASC ;
Örnek-14: 100 ve 200 numaralı departmanlarda çalışan personelin departman, ad ve soyad alanlarını listeleyiniz ve kayıtları departman ve ad alanlarına göre küçükten büyüğe doğru sıralayınız.
Cevap: SQL’lerde bir alanın değeri birden fazla verilirse, bu tip SQL’lerde WHERE bölümünde operatör olarak IN kullanılmaktadır. Değerlerde, parantez içerisinde yazılmaktadır.
SELECT DEPARTMAN, AD, SOYAD
FROM PERSONEL
WHERE DEPARTMAN IN (100,200)
ORDER BY DEPARTMAN, AD ASC ;
Örnek-15: Personel tablosundaki görevi “ÜRETİM ŞEFİ” ve “SATIŞ UZMANI” olan bütün kayıtların ad, soyad ve görev alanlarını listeleyiniz ve kayıtları görev ve ad alanlarına göre küçükten büyüğe doğru sıralayınız.
Cevap: Eğer, IN bölümünde liste içerisine yazılacak değerler karakter değerler ise tırnak içerisinde yazılmaktadır.
SELECT AD, SOYAD, GOREV
FROM PERSONEL
WHERE GOREV IN (‘ÜRETİM ŞEFİ’, ‘SATIŞ UZMANI’)
ORDER BY GOREV, AD;
Bu SQL, şu şekilde de yazılabilmektedir:
SELECT AD, SOYAD, GOREV
FROM PERSONEL
WHERE GOREV IN (‘ÜRETİM ŞEFİ’, ‘SATIŞ UZMANI’)
ORDER BY 3,1 ;
Burada, alanların isimleri yerine alanların sırası ORDER BY bölümünde kullanılmıştır. Bu kullanım yazım açısından daha kolaydır.
Örnek-16: Maaşı 150 milyon liradan fazla olan personelin ad, soyad ve maas alanlarını listeleyiniz ve kayıtları maas alanına göre küçükten büyüğe doğru sıralayınız.
Cevap:
SELECT AD, SOYAD, MAAS
FROM PERSONEL
WHERE MAAS > 150000000
ORDER BY MAAS;
Sorudaki 150 milyondan büyük cümlesi, 150 milyona eşit ve büyük şeklinde değiştirilirse, SQL ve sorgu sonucu dönen kayıtlar şu şekilde olur:
SELECT AD, SOYAD, MAAS
FROM PERSONEL
WHERE MAAS >= 150000000
ORDER BY MAAS;
Yine, sorudaki 150 milyondan büyük cümlesi, maaşı 100 milyon ile 200 milyon arasında olanlar şeklinde değiştirilirse, SQL ve sorgu sonucu dönen kayıtlar şu şekilde olur:
SELECT AD, SOYAD, MAAS
FROM PERSONEL
WHERE MAAS BETWEEN 100000000 AND 200000000
ORDER BY MAAS;
Örnek-17: Adres kayıtlarından ev telefonu alanı boş olan kayıtların emsanno,adres ve il_ilce_ad alanlarını listeleyiniz.
Cevap: Önce, adres tablosunun kayıt alanlarını listeleyelim.
DESC ADRES
SELECT EMSANNO, ADRES, IL_ILCE_AD
FROM ADRES
WHERE EV_TLF IS NULL;
Örnek-18: Adres kayıtlarından ev telefonu alanı boş olmayan kayıtların emsanno,adres ve il_ilce_ad alanlarını listeleyiniz.
Cevap:
SELECT EMSANNO, ADRES, IL_ILCE_AD
FROM ADRES
WHERE EV_TLF IS NOT NULL;
Örnek-19: Personel kayıtlarından adı “A” ile başlayan kayıtların emsanno, ad ve soyad alanlarını listeleyiniz.
Cevap: Adı “A” ile başlayan kayıtlar denildiğinde LIKE kullanılır. LIKE’ın kullanımı şu şekildedir:
- <değer>% Başı değer ile başlayan ve sonu
önemsiz olan demektir.
- %<değer> Sonu değer ile biten ve başı önemsiz
olan demektir.
- %<değer>% İçerisinde herhangi bir yerde değer
geçen demektir.
SELECT EMSANNO, AD, SOYAD
FROM PERSONEL
WHERE AD LIKE ‘A%’ ;
Örnek-20: Personel kayıtlarından maaşı 100 milyon ile 200 milyon arasında olan ve görevi “ÜRETİM ŞEFİ” olan kayıtların ad, soyad, maas ve gorev alanlarını listeleyiniz ve kayıtları ad ve soyad alanlarına göre sıralayınız.
Cevap: WHERE bölümüne, birden fazla şart aralarına “AND” konarak yazılabilir. Buna örnek olarak:
SELECT AD, SOYAD, MAAS, GOREV
FROM PERSONEL
WHERE MAAS BETWEEN 100000000 AND 200000000 AND
GOREV = ‘ÜRETİM ŞEFİ’ ;
ORDER BY AD, SOYAD;
Örnek-21: Personel kayıtlarından maaşı 100 milyon ile 200 milyon arasında olan veya görevi “ÜRETİM ŞEFİ” olan kayıtların ad, soyad, maas ve gorev alanlarını listeleyiniz ve kayıtları ad ve soyad alanlarına göre listeleyiniz.
Cevap:
SELECT AD, SOYAD, MAAS, GOREV
FROM PERSONEL
WHERE (MAAS BETWEEN 100000000 AND 200000000) OR
GOREV = ‘ÜRETİM ŞEFİ’ ORDER BY AD, SOYAD;
Örnek-22: Personel tablosundaki bütün kayıtların ad ve gorev alanlarını ve görevi “SATIŞ UZMANI” olanlar için 1, “GENEL MÜDÜR” olanlar için 2, “ÜRETİM ŞEFİ” olanlar için 3 yazarak listeleyiniz.
Cevap: SQL fonksiyonlarından bazıları vardır ki, yukarıdaki bölümlerin hiçbirisine girmez. Bunlara örnek olarak DECODE sayılabilir. DECODE, programlama dillerindeki “if-then-else” veya “case” ifadelerinin karşılığıdır. Yani, DECODE seçim işlemini yapmaktadır. Özellikle, rapor hazırlarken çok kullanışlı bir komuttur. Mesela, veritabanında cinsiyet için “E” ve “K” tutup, rapor alırken “Erkek” ve “Kadın” şeklinde gösterme işlemi gibi işlerde kullanılmaktadır.
SELECT AD, GOREV,
DECODE(GOREV, ‘SATIŞ UZMANI’, ‘1’, ‘GENEL MÜDÜR’, ‘2’, ‘ÜRETİM ŞEFİ’, ‘3’)
FROM PERSONEL;
Örnek-23: Personel tablosundaki bütün kayıtların ortalama maaşını hesaplayınız.
Cevap:
SELECT AVG(MAAS)
FROM PERSONEL;
Örnek-24: Personel tablosundaki kayıt sayısını hesaplayınız.
Cevap:
SELECT COUNT(*)
FROM PERSONEL;
Örnek-25: Personel tablosundaki her görev grubunun ortalama maaşını hesaplayınız ve kayıtları büyükten küçüğe doğru sıralayınız.
Cevap: Kayıtları belli özelliklerine göre gruplayıp onlar üzerinde işlem yapılacağı zaman GROUP BY komutu kullanılır. GROUP BY komutu kullanılırken GROUP BY bölümünde SELECT bölümünde yazılan alanların grup fonksiyonunun kullanıldığı alan hariç hepsi yazılmak zorundadır. Aksi halde, yazım hatası yapılmış olmaktadır ve SQL cümlesi çalıştırılamaz. Kullanımı şu şekildedir:
SELECT GOREV, AVG(MAAS)
FROM PERSONEL
GROUP BY GOREV
ORDER BY 2 DESC;
Örnek-26: Personel tablosundaki en yüksek maaşı gösteriniz.
Cevap:
SELECT MAX(MAAS)
FROM PERSONEL;
Örnek-27: Her departmandaki en yüksek maaşları listeleyiniz.
Cevap: Grup fonksiyonlarının bulunduğu SQL cümlelerinde, SELECT bölümünde grup fonksiyonu haricindeki bütün alanlar GROUP BY bölümünde bulunmak zorundadır.
SELECT DEPARTMAN, MAX(MAAS)
FROM PERSONEL
GROUP BY DEPARTMAN;
Örnek-28: Ortalama maaşı 100 milyondan büyük olan departmanları listeleyiniz.
Cevap: Grup fonksiyonlarının bulunduğu SQL cümlelerinde, grup ile ilgili şartlar WHERE bölümüne değil, HAVING bölümüne yazılır.
SELECT DEPARTMAN, AVG(MAAS)
FROM PERSONEL
GROUP BY DEPARTMAN
HAVING AVG(MAAS) > 100000000;
Eğer, bu SQL’de 100 milyon şartı olmasaydı; SQL ve sonucu şu şekilde olurdu:
SELECT DEPARTMAN, AVG(MAAS)
FROM PERSONEL
GROUP BY DEPARTMAN;
Örnek-29: Her departmandaki ortalama maaşları “GENEL MÜDÜR” hariç olmak üzere listeleyiniz ve kayıtları en yüksek ortalamadan en düşük ortalamaya doğru sıralayınız.
Cevap: Grup fonksiyonlarının bulunduğu SQL cümlelerinde, grubu ilgilendirmeyen şartlar WHERE bölümüne yazılmaktadır. Bu örnekte, “GENEL MÜDÜR”ün hariç olması, WHERE bölümünde veya HAVING bölümünde belirtilebilir, yani “GENEL MÜDÜR”ün hariç olması hem grubu ilgilendirmektedir hem de ilgilendirmemektedir. Şartların grubu ilgilendirip ilgilendirmediğine, şartın belirtildiği değerin veritabanında olup olmadığına göre karar verilmektedir. Eğer, belirtilen şart GROUP işlemi sonucu meydana çıkan bir grup fonksiyonu ile ilgili ise bu şart grupla ilgilidir. Mesela, ortalama maaşı 100 milyondan büyük departmanları listeleyin denilirse, bu şart grupla ilgilidir. Çünkü, bu değer veritabanında yoktur ve GROUP işlemi sonucu grup fonksiyonundan bu değer gelmektedir.
SELECT DEPARTMAN, AVG(MAAS)
FROM PERSONEL
WHERE GOREV != ‘GENEL MÜDÜR’
GROUP BY DEPARTMAN
ORDER BY 2 DESC;
Örnek-30: Bütün personelin ad, soyad ve departman adı bilgilerini listeleyiniz.
Cevap: Personel tablosunda departman adı diye bir alan yoktur. Bu değer ancak, departman tablosundan seçilebilir. O halde birleştirme işlemi yapmak lazımdır. Personel ve Departman tabloları arasındaki birleştirme işlemi departman alanı üzerinden yapılır. Bu işlem şu şekilde yapılır:
SELECT AD, SOYAD, DEPARTMAN_AD
FROM PERSONEL, DEPARTMAN
WHERE PERSONEL.DEPARTMAN = DEPARTMAN.DEPARTMAN_KOD;
Örnek-31: Bütün personelin emsanno, ad, soyad ve departman adı bilgilerini listeleyiniz ve her alanın başına ilgili tablonun ismini yazınız.
Cevap: Bu SQL’de, SELECT bölümünde emsanno alanı yazılırken bir karışıklığa meydan vermemesi için alanın başına tablonun ismi yazılır. Çünkü, her iki tabloda da emsanno alanı vardır.
SELECT PERSONEL.EMSANNO, AD, SOYAD, DEPARTMAN_AD
FROM PERSONEL, DEPARTMAN
WHERE PERSONEL.DEPARTMAN = DEPARTMAN.DEPARTMAN_KOD;
SELECT P.EMSANNO, P.AD, P.SOYAD, D.DEPARTMAN_AD
FROM PERSONEL P, DEPARTMAN D
WHERE P.DEPARTMAN = D.DEPARTMAN_KOD;
Örnek-32: Bütün personelin ad, soyad ve ev telefonu alanlarını listeleyiniz.
Cevap:
SELECT P.AD, P.SOYAD, A.EV_TLF
FROM PERSONEL P, ADRES A
WHERE P.EMSANNO = A.EMSANNO;
Burada, sadece 5 tane kayıt gelmektedir, yani 5 tane personelin adres kayıdı var, bunlardan da 2 tanesinin ev_tlf alanı boş. Aslında, personel tablosunda 10 kayıt vardı. Diğer 5 personelin adres tablosunda kayıdı olmadığı için sorgu sonucunda gelmedi. Eğer SQL, dış birleştirme yöntemiyle yapılırsa, SQL ve sonuç şu şekilde değişir:
SELECT P.AD, P.SOYAD, A.EV_TLF
FROM PERSONEL P, ADRES A
WHERE P.EMSANNO = A.EMSANNO (+) ;
Örnek-33: Maaşı en fazla olan personelin emsanno, ad, soyad ve maas alanlarını listeleyiniz.
Cevap: Bu soru daha önce sorulsaydı, cevap vermek zor olacaktı. Fakat, altsorgu ile bu işlem çok kolay bir şekilde yapılabilir. Altsorguda, ilk önce en fazla maaş bulunur ve bu maaş WHERE bölümüne yazılarak ilgili kayıda erişilmiş olur.
SELECT EMSANNO, AD, SOYAD, MAAS
FROM PERSONEL
WHERE MAAS =
(SELECT MAX(MAAS)
FROM PERSONEL);
Örnek-34: Her departmanda en az maaş alan personelin emsanno, ad, soyad ve maas alanlarını listeleyiniz.
Cevap: Bu örnekde altsorguda group by işlemi var, böylece altsorgudan birden fazla kayıt dönmektedir. Bu yüzden, WHERE bölümünde şart yazarken IN komutu kullanılmaktadır.
SELECT DEPARTMAN, EMSANNO, AD, SOYAD, MAAS
FROM PERSONEL
WHERE MAAS IN
(SELECT MIN(MAAS)
FROM PERSONEL
GROUP BY DEPARTMAN);
Örnek-35: 100 numaralı departmanda çalışan herhangi bir personelden daha fazla maaş alan personelin emsanno, ad, soyad ve maas alanlarını listeleyiniz.
Cevap: Bu örnekteki “herhangi bir” ifadesi bize SOME/ANY kullanılacağını göstermektedir.
SELECT EMSANNO, AD, SOYAD, MAAS
FROM PERSONEL
WHERE MAAS > SOME
(SELECT DISTINCT MAAS
FROM PERSONEL
WHERE DEPARTMAN = 100);
Örnek-36: 100 numaralı departmanda çalışan her personelden daha fazla maaş alan personelin emsanno, ad, soyad ve maas alanlarını listeleyiniz.
Cevap: Bu örnekteki “her personel” ifadesi bize ALL kullanılacağını göstermektedir.
SELECT EMSANNO, AD, SOYAD, MAAS
FROM PERSONEL
WHERE MAAS > ALL
(SELECT DISTINCT MAAS
FROM PERSONEL
WHERE DEPARTMAN = 100);
Bu örnek MAX fonksiyonu ile de çözülebilmektedir. Çünkü, 100 numaralı departmanda çalışan her personelden fazla demek, o departmanda en yüksek maaş alan personelden fazla demektir. Eğer, SQL’i bu şekilde yazacak olursak :
SELECT EMSANNO, AD, SOYAD, MAAS
FROM PERSONEL
WHERE MAAS >
(SELECT MAX(MAAS)
FROM PERSONEL
WHERE DEPARTMAN = 100);
Örnek-37: 400 numaralı departmanda çalışan personelin ortalama maaşından daha fazla ortalama maaşı olan departmanları listeleyiniz.
Cevap:
SELECT DEPARTMAN, AVG(MAAS)
FROM PERSONEL
GROUP BY DEPARTMAN
HAVING AVG(MAAS) >
(SELECT AVG(MAAS)
FROM PERSONEL
WHERE DEPARTMAN = 400);
Örnek-38: Personel tablosunda kendi bölümünün ortalama maaşından daha fazla maaş alan personelin emsanno, ad, soyad ve maas alanlarını listeleyiniz.
Cevap: SQL’de her tablo kendisi ile birleştirilebilmektedir. Örnek olarak:
SELECT P.EMSANNO, P.AD, P.SOYAD, P.MAAS
FROM PERSONEL P
WHERE P.MAAS >
(SELECT AVG(MAAS)
FROM PERSONEL P2
WHERE P2.DEPARTMAN = P.DEPARTMAN);
bunları çözebilir misiniz acil :(
teşekkürler örnek alıştırma gibi oldu emeğinize sağlık :)
rica ederim iyi çalışmalar kolay gelsin.. :)