3

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);

Bu İçeriğe Tepkin Ne Oldu?
  • 0
    ba_ar_l_
    Başarılı
  • 2
    gayet_yi
    Gayet İyi
  • 2
    te_ekk_rler
    Teşekkürler
  • 1
    anlamad_m
    Anlamadım
  • 0
    yetersiz
    Yetersiz
İlginizi Çekebilir
Subscribe
Bildir
guest

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.

3 Yorum
Inline Feedbacks
View all comments
emre

bunları çözebilir misiniz acil :(

böteci

teşekkürler örnek alıştırma gibi oldu emeğinize sağlık :)

BilisimOgretmeni

rica ederim iyi çalışmalar kolay gelsin.. :)