Efenim halihazırda Oracle’a alışma işlemlerimiz devam ediyor. Oracle Express ile beraber gelen HR veritabanında biraz JOIN biraz subquery işlemleri yapalım

  1. Örnek: Çalışanlar arasında daha önce deneyimi olan herkesin maaşını ve maaşına %10 zam yapılmış halini isimleriyle beraber veren sorguyu yapalım :
SELECT first_name "Personel", salary "Onceki Maas", (salary * 1.1) "Sonraki Maas" from employees 
where employee_id IN 
( SELECT employee_id from job_history )

  1. İsmi LEX olan çalışanı ile aynı departmanda çalışan personelin isim soyismini bulan sorgumuz :

SELECT last_name, department_id FROM employees WHERE department_id = (SELECT department_id FROM employees 
WHERE first_name = 'Lex') ORDER BY last_name, department_id;

  1. Basit bir Inner JOIN işlemini özeleyelim : Bir e bir eşit olan kayıtlar döner sonuç olarak:
SELECT emp.employee_id, emp.first_name, jobs.start_date, jobs.end_date 
FROM employees emp, job_history jobs 
WHERE emp.employee_id = jobs.employee_id

  1. Şimdi RIGHT OUTHER JOIN örneği yapalım. Anlamı: sağ taraftaki tablodaki değerlere karşılık sol taraftaki tablodaki değerleri getirir.
    Not: Haliyle her çalışanın bu şirkette daha önce başka bir departmanda tecrübesi olmaması sebebiyle her çalışan için bir kayıt gelecek bazıları NULL görünecektir
SELECT emp.employee_id, emp.first_name, jobs.start_date, jobs.end_date FROM employees emp, job_history jobs 
WHERE emp.employee_id = jobs.employee_id (+)

5.Şimdide LEFT OTHER JOIN yapıyor. Haliyle burada daha önce iş tecrübesi olan personel için kayıtlar döneceği için NULL sonuç göremeyeceğiz.

SELECT emp.employee_id, emp.first_name, jobs.start_date, jobs.end_date 
FROM employees emp, job_history jobs WHERE emp.employee_id (+) = jobs.employee_id

  1. Son olarak location_id si 1700 olan departmanda çalışmayan kullanıcıların isimlerini isim sıralı olacak şekilde gösterelim:
SELECT first_name FROM employees 
WHERE department_id NOT IN 
(SELECT department_id FROM departments WHERE location_id = 1700) ORDER BY last_name;