SQL Senaryoları – 1

Selamlar,

SQL senaryoları adlı yazı dizimde birbirinden farklı sql senaryolarını ve sorgu örneklerini beraber çözmeye çalışacağız. SQL çok fazla uygulama yaparak öğrenilen bir dildir ve insanın kendi kendine pc başında senaryo uydurması bazen oldukça zordur ve bir o kadar da sıkıcıdır. Bu yazı dizisinde hem benim ürettiğim hem de sizlerden gelen senaryoları çözüyor olacağız. Unutmayın ne kadar çok örnek çözerseniz SQL konusunda o kadar hızlı düşünmeye başlarsınız ve bir süre sonra sorgu yazmak el alışkanlığına dönüşür.

Öncelikle sistemlerinizde Oracle 11g ve sample schema olan HR schema’nın kurulu olduğunu varsayıyorum. Örneklerimizi SQL Developer tool’unda gerçekleştireceğiz. Bu tool’u indirmek için; buraya tıklayabilirsiniz.

Yapı genelde şu şekilde olacak; yazının en başına senaryoyu yazacağım ardından gidiş yolunu yazacağım ve kod kısmını halledip ekran çıktısını vereceğim. Lütfen siz de kendiniz uygulamaya çalışın. (Elimden geldiğince git gide zorlaşacak şekilde senaryo hazırlamaya çalışacağım.)

Ve ilk senaryomuz ile başlıyalım :)

1) Employees tablosundaki PHONE_NUMBER alanındaki ilk 3 hane bize operatörleri veriyor olsun. (örneğin 515, 603, 650…). Kaç farklı operatör olduğunu ve bu operatörlere kullanan kaçar tane çalışan olduğunu raporlayalım. Yani çıktımız şu şekilde olmalı;

Bu çıktıyı elde etmek için GROUP BY kullanacağız. Operatörlerin ilk 3 hanesine göre gruplama yaparak sonuca ulaşacağız.

SELECT
 DISTINCT SUBSTR(PHONE_NUMBER,1,3) "Operatör",COUNT(0) "Adet"
FROM
 EMPLOYEES
GROUP BY SUBSTR(PHONE_NUMBER,1,3);

2) Az önce yaptığımız gibi aynı operatörü kullanan kaç tane çalışan var onu bulalım fakat bu sefer çıktımız tek satır olsun. Yani;

Böyle bir çıktıyı elde etmek için CASE yapısını kullanacağız. Yapı şöyle olacak; eğer telefon alanının ilk 3 hanesi 515 ise sen git oraya 1 yaz değil ise 0 yaz. Ve bu satırları topla dediğimiz zaman sadece ilk 3 hanesi 515 olan kayıtlara karşılık 1 yazacağından kaç adet 515 kullanan çalışan var bunu bulmuş olacağız. Ve aynı işlemi diğer operatörler için de yapacağız.

Yani sorgumuz şöyle olacak;

SELECT
 SUM(CASE WHEN substr(phone_number,1,3)=515 THEN 1 ELSE 0 END) "515",
 SUM(CASE WHEN substr(phone_number,1,3)=590 THEN 1 ELSE 0 END) "590",
 SUM(CASE WHEN substr(phone_number,1,3)=603 THEN 1 ELSE 0 END) "603",
 SUM(CASE WHEN substr(phone_number,1,3)=011 THEN 1 ELSE 0 END) "011",
 SUM(CASE WHEN substr(phone_number,1,3)=650 THEN 1 ELSE 0 END) "650"
FROM
 EMPLOYEES;

3) Employees tablosundaki SALARY alanındaki maaşların hangilerinin 4 farklı kişiye verildiğini bulalım. Yani 4 kez tekrar eden maaşların hangileri olduğunu bulalım.

Çıktımız şöyle olmalı;

Bunun için yazmamız gereken kodda group by kullanıcaz ancak sadece 4 kez tekrar eden kayıtları görmek içinse having kullanıcaz.

Sorgumuz şöyle;

SELECT
 SALARY, COUNT(0) "KİŞİ"
FROM
 EMPLOYEES
GROUP BY SALARY
HAVING COUNT(0)=4
ORDER BY 1;

Örneğin 2 ve 2den fazla tekrar eden maaşları görmek istersek de kodumuz şöyle olmalıydı.

SELECT
 SALARY, COUNT(0) "KİŞİ"
FROM
 EMPLOYEES
GROUP BY SALARY
HAVING COUNT(0)>2
ORDER BY 1;

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Connecting to %s