Merhaba Habr!
3 yıldan fazla bir süredir çeşitli eğitim merkezlerinde SQL öğretiyorum ve gözlemlerimden biri, öğrencilerin yalnızca olasılıklar ve teorik temeller hakkında konuşmak yerine kendilerine bir görev verildiğinde SQL'de ustalaşıp daha iyi anladıklarıdır.
Bu yazımda sizlere SQL'i derinlemesine ve net bir şekilde anlamamızı sağlayan çeşitli beyin fırtınaları gerçekleştirdiğimiz ve öğrencilere ev ödevi olarak verdiğim görevler listemi paylaşacağım.
SQL (ˈɛsˈkjuˈɛl; eng. yapılandırılmış sorgu dili), uygun bir veritabanı yönetim sistemi tarafından yönetilen ilişkisel bir veritabanındaki verileri oluşturmak, değiştirmek ve yönetmek için kullanılan bildirime dayalı bir programlama dilidir.
SQL hakkında farklı kaynaklardan okuyabilirsiniz.
Bu makale size SQL'i sıfırdan öğretmeyi amaçlamamaktadır.
Hadi, gidelim.
Bilinenleri kullanacağız
Yalnızca SELECT üzerindeki görevleri dikkate alacağımızı unutmayın. DML ve DDL'de görev yoktur.
görevler
Verileri Kısıtlama ve Sıralama
Çalışanlar tablosu. Tüm çalışanlar hakkında bilgi içeren bir liste alın
karar
SELECT * FROM employees
Çalışanlar tablosu. 'David' adlı tüm çalışanların bir listesini alın
karar
SELECT *
FROM employees
WHERE first_name = 'David';
Çalışanlar tablosu. Job_id değeri "IT_PROG" değerine eşit olan tüm çalışanların listesini alın
karar
SELECT *
FROM employees
WHERE job_id = 'IT_PROG'
Çalışanlar tablosu. 50. departmandan (department_id) maaşı (maaş) 4000'den fazla olan tüm çalışanların bir listesini alın
karar
SELECT *
FROM employees
WHERE department_id = 50 AND salary > 4000;
Çalışanlar tablosu. 20. ve 30. departmandaki tüm çalışanların bir listesini alın (department_id)
karar
SELECT *
FROM employees
WHERE department_id = 20 OR department_id = 30;
Çalışanlar tablosu. Adındaki son harfi 'a' olan tüm çalışanların bir listesini alın
karar
SELECT *
FROM employees
WHERE first_name LIKE '%a';
Çalışanlar tablosu. 50. ve 80. departmanlardan (department_id) ikramiye alan tüm çalışanların listesini alın (komisyon_pct sütunundaki değer boş değildir)
karar
SELECT *
FROM employees
WHERE (department_id = 50 OR department_id = 80)
AND commission_pct IS NOT NULL;
Çalışanlar tablosu. Adında en az 2 harf 'n' bulunan tüm çalışanların bir listesini alın
karar
SELECT *
FROM employees
WHERE first_name LIKE '%n%n%';
Çalışanlar tablosu. Adı 4 harften uzun olan tüm çalışanların listesini alın
karar
SELECT *
FROM employees
WHERE first_name LIKE '%_____%';
Çalışanlar tablosu. Maaşı 8000 ile 9000 (dahil) arasında olan tüm çalışanların listesini alın
karar
SELECT *
FROM employees
WHERE salary BETWEEN 8000 AND 9000;
Çalışanlar tablosu. Adı '%' sembolünü içeren tüm çalışanların bir listesini alın
karar
SELECT *
FROM employees
WHERE first_name LIKE '%%%' ESCAPE '';
Çalışanlar tablosu. Tüm yönetici kimliklerinin bir listesini alın
karar
SELECT DISTINCT manager_id
FROM employees
WHERE manager_id IS NOT NULL;
Çalışanlar tablosu. Pozisyonlarıyla birlikte çalışanların bir listesini şu biçimde alın: Donald(sh_clerk)
karar
SELECT first_name || '(' || LOWER (job_id) || ')' employee FROM employees;
Çıktıyı Özelleştirmek için Tek Sıralı İşlevleri Kullanma
Çalışanlar tablosu. Adı 10 harften uzun olan tüm çalışanların listesini alın
karar
SELECT *
FROM employees
WHERE LENGTH (first_name) > 10;
Çalışanlar tablosu. Adında 'b' harfi bulunan tüm çalışanların listesini alın (büyük/küçük harf duyarlı değildir)
karar
SELECT *
FROM employees
WHERE INSTR (LOWER (first_name), 'b') > 0;
Çalışanlar tablosu. Adında en az 2 "a" harfi bulunan tüm çalışanların listesini alın
karar
SELECT *
FROM employees
WHERE INSTR (LOWER (first_name),'a',1,2) > 0;
Çalışanlar tablosu. Maaşı 1000'in katı olan tüm çalışanların listesini alın
karar
SELECT *
FROM employees
WHERE MOD (salary, 1000) = 0;
Çalışanlar tablosu. Numarası ХХХ.ХХХ.ХХХХ biçimindeyse, çalışanın telefon numarasının ilk 3 haneli numarasını alın
karar
SELECT phone_number, SUBSTR (phone_number, 1, 3) new_phone_number
FROM employees
WHERE phone_number LIKE '___.___.____';
Bölümler tablosu. Adında birden fazla kelime olanlar için ilk kelimeyi bölüm adından alın.
karar
SELECT department_name,
SUBSTR (department_name, 1, INSTR (department_name, ' ')-1)
first_word
FROM departments
WHERE INSTR (department_name, ' ') > 0;
Çalışanlar tablosu. Adındaki ilk ve son harf olmadan çalışan adlarını alın
karar
SELECT first_name, SUBSTR (first_name, 2, LENGTH (first_name) - 2) new_name
FROM employees;
Çalışanlar tablosu. Adındaki son harfi 'm' olan ve adın uzunluğu 5'ten büyük olan tüm çalışanların bir listesini alın
karar
SELECT *
FROM employees
WHERE SUBSTR (first_name, -1) = 'm' AND LENGTH(first_name)>5;
İkili masa. Gelecek Cuma tarihini al
karar
SELECT NEXT_DAY (SYSDATE, 'FRIDAY') next_friday FROM DUAL;
Çalışanlar tablosu. 17 yılı aşkın süredir şirkette olan tüm çalışanların bir listesini alın
karar
SELECT *
FROM employees
WHERE MONTHS_BETWEEN (SYSDATE, hire_date) / 12 > 17;
Çalışanlar tablosu. Telefon numarasının son rakamı tek olan ve nokta ile ayrılmış 3 sayıdan oluşan tüm çalışanların listesini alın
karar
SELECT *
FROM employees
WHERE MOD (SUBSTR (phone_number, -1), 2) != 0
AND INSTR (phone_number,'.',1,3) = 0;
Çalışanlar tablosu. '_' işaretinden sonraki job_id değeri en az 3 karakter olan ancak '_' işaretinden sonraki bu değer 'CLERK' değerine eşit olmayan tüm çalışanların listesini alın
karar
SELECT *
FROM employees
WHERE LENGTH (SUBSTR (job_id, INSTR (job_id, '_') + 1)) > 3
AND SUBSTR (job_id, INSTR (job_id, '_') + 1) != 'CLERK';
Çalışanlar tablosu. PHONE_NUMBER değerindeki tüm '.'leri değiştirerek tüm çalışanların bir listesini alın Açık '-'
karar
SELECT phone_number, REPLACE (phone_number, '.', '-') new_phone_number
FROM employees;
Dönüştürme İşlevlerini ve Koşullu İfadeleri Kullanma
Çalışanlar tablosu. Ayın ilk günü (herhangi biri) işe gelen tüm çalışanların listesini alın
karar
SELECT *
FROM employees
WHERE TO_CHAR (hire_date, 'DD') = '01';
Çalışanlar tablosu. 2008'de işe gelen tüm çalışanların bir listesini alın
karar
SELECT *
FROM employees
WHERE TO_CHAR (hire_date, 'YYYY') = '2008';
ÇİFT tablo. Yarının tarihini şu biçimde göster: Yarın Ocak ayının ikinci günü
karar
SELECT TO_CHAR (SYSDATE, 'fm""Tomorrow is ""Ddspth ""day of"" Month') info
FROM DUAL;
Çalışanlar tablosu. Tüm çalışanların bir listesini ve başlangıç tarihlerini şu biçimde alın: 21 Haziran 2007
karar
SELECT first_name, TO_CHAR (hire_date, 'fmddth ""of"" Month, YYYY') hire_date
FROM employees;
Çalışanlar tablosu. Maaşları %20 artan çalışanların listesini alın. Maaşı dolar işaretiyle göster
karar
SELECT first_name, TO_CHAR (salary + salary * 0.20, 'fm$999,999.00') new_salary
FROM employees;
Çalışanlar tablosu. Şubat 2007'de işe gelen tüm çalışanların bir listesini alın.
karar
SELECT *
FROM employees
WHERE hire_date BETWEEN TO_DATE ('01.02.2007', 'DD.MM.YYYY')
AND LAST_DAY (TO_DATE ('01.02.2007', 'DD.MM.YYYY'));
SELECT *
FROM employees
WHERE to_char(hire_date,'MM.YYYY') = '02.2007';
ÇİFT tablo. Geçerli tarihi, + saniye, + dakika, + saat, + gün, + ay, + yılı dışa aktar
karar
SELECT SYSDATE now,
SYSDATE + 1 / (24 * 60 * 60) plus_second,
SYSDATE + 1 / (24 * 60) plus_minute,
SYSDATE + 1 / 24 plus_hour,
SYSDATE + 1 plus_day,
ADD_MONTHS (SYSDATE, 1) plus_month,
ADD_MONTHS (SYSDATE, 12) plus_year
FROM DUAL;
Çalışanlar tablosu. Tam maaşlı (maaş + komisyon_pct(%)) tüm çalışanların listesini şu biçimde alın: $24,000.00
karar
SELECT first_name, salary, TO_CHAR (salary + salary * NVL (commission_pct, 0), 'fm$99,999.00') full_salary
FROM employees;
Çalışanlar tablosu. Tüm çalışanların bir listesini ve maaş ikramiyelerinin olup olmadığı hakkında bilgi alın (Evet/Hayır)
karar
SELECT first_name, commission_pct, NVL2 (commission_pct, 'Yes', 'No') has_bonus
FROM employees;
Çalışanlar tablosu. Her çalışanın maaş seviyesini öğrenin: 5000'den az Düşük seviye, 5000'den büyük veya eşit ve 10000'den küçük normal seviye, 10000'den büyük veya ona eşit Yüksek seviye olarak kabul edilir
karar
SELECT first_name,
salary,
CASE
WHEN salary < 5000 THEN 'Low'
WHEN salary >= 5000 AND salary < 10000 THEN 'Normal'
ELSE 'High'
END salary_level
FROM employees;
Ülkeler tablosu. Her ülke için bulunduğu bölgeyi gösterin: 1-Avrupa, 2-Amerika, 3-Asya, 4-Afrika (Katılmadan)
karar
SELECT country_name country,
DECODE (region_id,
1, 'Europe',
2, 'America',
3, 'Asia',
4, 'Africa',
'Unknown')
region
FROM countries;
SELECT country_name
country,
CASE region_id
WHEN 1 THEN 'Europe'
WHEN 2 THEN 'America'
WHEN 3 THEN 'Asia'
WHEN 4 THEN 'Africa'
ELSE 'Unknown'
END
region
FROM countries;
Grup İşlevlerini Kullanarak Toplu Verileri Raporlama
Çalışanlar tablosu. Minimum ve maksimum maaşı, erken ve geç varış tarihlerini ve çalışan sayısını içeren departman kimliğine göre bir rapor alın. Çalışan sayısına göre sırala (azalan)
karar
SELECT department_id,
MIN (salary) min_salary,
MAX (salary) max_salary,
MIN (hire_date) min_hire_date,
MAX (hire_date) max_hire_Date,
COUNT (*) count
FROM employees
GROUP BY department_id
order by count(*) desc;
Çalışanlar tablosu. İsimleri aynı harfle başlayan kaç çalışan var? Miktara göre sırala. Yalnızca sayının 1'den büyük olduğu yerleri göster
karar
SELECT SUBSTR (first_name, 1, 1) first_char, COUNT (*)
FROM employees
GROUP BY SUBSTR (first_name, 1, 1)
HAVING COUNT (*) > 1
ORDER BY 2 DESC;
Çalışanlar tablosu. Aynı departmanda kaç çalışan aynı maaşı alıyor?
karar
SELECT department_id, salary, COUNT (*)
FROM employees
GROUP BY department_id, salary
HAVING COUNT (*) > 1;
Çalışanlar tablosu. Haftanın her gününde kaç çalışanın işe alındığına dair bir rapor alın. Miktara göre sırala
karar
SELECT TO_CHAR (hire_Date, 'Day') day, COUNT (*)
FROM employees
GROUP BY TO_CHAR (hire_Date, 'Day')
ORDER BY 2 DESC;
Çalışanlar tablosu. Yıllara göre kaç çalışanın işe alındığına dair bir rapor alın. Miktara göre sırala
karar
SELECT TO_CHAR (hire_date, 'YYYY') year, COUNT (*)
FROM employees
GROUP BY TO_CHAR (hire_date, 'YYYY');
Çalışanlar tablosu. Çalışanı olan departmanların sayısını alın
karar
SELECT COUNT (COUNT (*)) department_count
FROM employees
WHERE department_id IS NOT NULL
GROUP BY department_id;
Çalışanlar tablosu. 30'dan fazla çalışanı olan departman_kimliği listesini alın
karar
SELECT department_id
FROM employees
GROUP BY department_id
HAVING COUNT (*) > 30;
Çalışanlar tablosu. Departman kimliklerinin bir listesini ve her departmandaki çalışanların ortalama maaşlarını alın.
karar
SELECT department_id, ROUND (AVG (salary)) avg_salary
FROM employees
GROUP BY department_id;
Ülkeler tablosu. 60'tan fazla olan tüm ülke_adlarının tüm harflerinin bölge_kimliği toplamının bir listesini alın
karar
SELECT region_id
FROM countries
GROUP BY region_id
HAVING SUM (LENGTH (country_name)) > 60;
Çalışanlar tablosu. Birkaç (>1) job_id çalışanının çalıştığı departman_id listesini alın
karar
SELECT department_id
FROM employees
GROUP BY department_id
HAVING COUNT (DISTINCT job_id) > 1;
Çalışanlar tablosu. Ast sayısı 5'ten fazla olan ve astlarının tüm maaşlarının toplamı 50000'den fazla olan manager_id listesini alın
karar
SELECT manager_id
FROM employees
GROUP BY manager_id
HAVING COUNT (*) > 5 AND SUM (salary) > 50000;
Çalışanlar tablosu. İkramiye almayan tüm astlarının ortalama maaşı 6000 ile 9000 arasında olan manager_id listesini alın (commission_pct boş)
karar
SELECT manager_id, AVG (salary) avg_salary
FROM employees
WHERE commission_pct IS NULL
GROUP BY manager_id
HAVING AVG (salary) BETWEEN 6000 AND 9000;
Çalışanlar tablosu. Tüm çalışanlardan maksimum maaşı alın 'CLERK' kelimesiyle biten job_id
karar
SELECT MAX (salary) max_salary
FROM employees
WHERE job_id LIKE '%CLERK';
SELECT MAX (salary) max_salary
FROM employees
WHERE SUBSTR (job_id, -5) = 'CLERK';
Çalışanlar tablosu. Bölüm için tüm ortalama maaşlar arasında en yüksek maaşı alın
karar
SELECT MAX (AVG (salary))
FROM employees
GROUP BY department_id;
Çalışanlar tablosu. İsimlerinde aynı sayıda harf bulunan çalışan sayısını alın. Aynı zamanda sadece ismi 5'ten uzun ve aynı isme sahip çalışan sayısı 20'den fazla olanları gösterin. İsim uzunluğuna göre sırala
karar
SELECT LENGTH (first_name), COUNT (*)
FROM employees
GROUP BY LENGTH (first_name)
HAVING LENGTH (first_name) > 5 AND COUNT (*) > 20
ORDER BY LENGTH (first_name);
SELECT LENGTH (first_name), COUNT (*)
FROM employees
WHERE LENGTH (first_name) > 5
GROUP BY LENGTH (first_name)
HAVING COUNT (*) > 20
ORDER BY LENGTH (first_name);
Birleştirmeleri Kullanarak Birden Çok Tablodan Veri Görüntüleme
Tablo Çalışanları, Departmanlar, Lokasyonlar, Ülkeler, Bölgeler. Bölgelerin listesini ve her bölgedeki çalışan sayısını alın
karar
SELECT region_name, COUNT (*)
FROM employees e
JOIN departments d ON (e.department_id = d.department_id)
JOIN locations l ON (d.location_id = l.location_id)
JOIN countries c ON (l.country_id = c.country_id)
JOIN regions r ON (c.region_id = r.region_id)
GROUP BY region_name;
Tablo Çalışanları, Departmanlar, Lokasyonlar, Ülkeler, Bölgeler. Her çalışan hakkında ayrıntılı bilgi alın:
Ad, Soyad, Departman, Meslek, Sokak, Ülke, Bölge
karar
SELECT First_name,
Last_name,
Department_name,
Job_id,
street_address,
Country_name,
Region_name
FROM employees e
JOIN departments d ON (e.department_id = d.department_id)
JOIN locations l ON (d.location_id = l.location_id)
JOIN countries c ON (l.country_id = c.country_id)
JOIN regions r ON (c.region_id = r.region_id);
Çalışanlar tablosu. 6'dan fazla çalışanı olan tüm yöneticileri göster
karar
SELECT man.first_name, COUNT (*)
FROM employees emp JOIN employees man ON (emp.manager_id = man.employee_id)
GROUP BY man.first_name
HAVING COUNT (*) > 6;
Çalışanlar tablosu. Kimseye rapor vermeyen tüm çalışanları göster
karar
SELECT emp.first_name
FROM employees emp
LEFT JOIN employees man ON (emp.manager_id = man.employee_id)
WHERE man.FIRST_NAME IS NULL;
SELECT first_name
FROM employees
WHERE manager_id IS NULL;
Çalışanlar tablosu, Job_history. Çalışan tablosu tüm çalışanları saklar. Job_history tablosu, şirketten ayrılan çalışanları saklar. Tüm çalışanlar ve şirketteki durumları hakkında rapor alın (İşten ayrılış tarihi ile çalışan veya şirketten ayrılan)
Örnek:
ilk_ad | durum
jennifer | 31 Aralık 2006 tarihinde şirketten ayrıldı.
Clara | Şuan çalışıyor
karar
SELECT first_name,
NVL2 (
end_date,
TO_CHAR (end_date, 'fm""Left the company at"" DD ""of"" Month, YYYY'),
'Currently Working')
status
FROM employees e LEFT JOIN job_history j ON (e.employee_id = j.employee_id);
Tablo Çalışanları, Departmanlar, Lokasyonlar, Ülkeler, Bölgeler. Avrupa'da (bölge_adı) yaşayan çalışanların listesini alın
karar
SELECT first_name
FROM employees
JOIN departments USING (department_id)
JOIN locations USING (location_id)
JOIN countries USING (country_id)
JOIN regions USING (region_id)
WHERE region_name = 'Europe';
SELECT first_name
FROM employees e
JOIN departments d ON (e.department_id = d.department_id)
JOIN locations l ON (d.location_id = l.location_id)
JOIN countries c ON (l.country_id = c.country_id)
JOIN regions r ON (c.region_id = r.region_id)
WHERE region_name = 'Europe';
Masa Çalışanları, Departmanlar. 30'dan fazla çalışanı olan tüm departmanları göster
karar
SELECT department_name, COUNT (*)
FROM employees e JOIN departments d ON (e.department_id = d.department_id)
GROUP BY department_name
HAVING COUNT (*) > 30;
Masa Çalışanları, Departmanlar. Herhangi bir departmanda olmayan tüm çalışanları göster
karar
SELECT first_name
FROM employees e
LEFT JOIN departments d ON (e.department_id = d.department_id)
WHERE d.department_name IS NULL;
SELECT first_name
FROM employees
WHERE department_id IS NULL;
Masa Çalışanları, Departmanlar. Çalışanı olmayan tüm departmanları göster
karar
SELECT department_name
FROM employees e
RIGHT JOIN departments d ON (e.department_id = d.department_id)
WHERE first_name IS NULL;
Çalışanlar tablosu. Astları olmayan tüm çalışanları göster
karar
SELECT man.first_name
FROM employees emp
RIGHT JOIN employees man ON (emp.manager_id = man.employee_id)
WHERE emp.FIRST_NAME IS NULL;
Masa Çalışanları, İşler, Departmanlar. Çalışanları şu biçimde gösterin: Ad_adı, İş_unvanı, Departman_adı.
Örnek:
ilk_ad | iş unvanı | Bölüm Adı
Donald | nakliye | Katip Nakliye
karar
SELECT first_name, job_title, department_name
FROM employees e
JOIN jobs j ON (e.job_id = j.job_id)
JOIN departments d ON (d.department_id = e.department_id);
Çalışanlar tablosu. Yöneticileri 2005'te iş bulan, ancak aynı zamanda bu işçilerin kendileri de 2005'ten önce iş bulan çalışanların bir listesini alın.
karar
SELECT emp.*
FROM employees emp JOIN employees man ON (emp.manager_id = man.employee_id)
WHERE TO_CHAR (man.hire_date, 'YYYY') = '2005'
AND emp.hire_date < TO_DATE ('01012005', 'DDMMYYYY');
Çalışanlar tablosu. Yöneticileri herhangi bir yılın Ocak ayında iş bulan çalışanların listesini alın ve bu çalışanların iş_başlığının uzunluğu 15 karakterden fazla olsun
karar
SELECT emp.*
FROM employees emp
JOIN employees man ON (emp.manager_id = man.employee_id)
JOIN jobs j ON (emp.job_id = j.job_id)
WHERE TO_CHAR (man.hire_date, 'MM') = '01' AND LENGTH (j.job_title) > 15;
Sorguları Çözmek için Alt Sorguları Kullanma
Çalışanlar tablosu. En uzun ada sahip çalışanların bir listesini alın.
karar
SELECT *
FROM employees
WHERE LENGTH (first_name) =
(SELECT MAX (LENGTH (first_name)) FROM employees);
Çalışanlar tablosu. Tüm çalışanların ortalama maaşından daha yüksek maaş alan çalışanların bir listesini alın.
karar
SELECT *
FROM employees
WHERE salary > (SELECT AVG (salary) FROM employees);
Tablo Çalışanları, Departmanlar, Konumlar. Çalışanların toplamda en az kazandığı şehri alın.
karar
SELECT city
FROM employees e
JOIN departments d ON (e.department_id = d.department_id)
JOIN locations l ON (d.location_id = l.location_id)
GROUP BY city
HAVING SUM (salary) =
( SELECT MIN (SUM (salary))
FROM employees e
JOIN departments d ON (e.department_id = d.department_id)
JOIN locations l ON (d.location_id = l.location_id)
GROUP BY city);
Çalışanlar tablosu. Yöneticisi 15000'den fazla maaş alan çalışanların bir listesini alın.
karar
SELECT *
FROM employees
WHERE manager_id IN (SELECT employee_id
FROM employees
WHERE salary > 15000)
Masa Çalışanları, Departmanlar. Çalışanı olmayan tüm departmanları göster
karar
SELECT *
FROM departments
WHERE department_id NOT IN (SELECT department_id
FROM employees
WHERE department_id IS NOT NULL);
Çalışanlar tablosu. Yönetici olmayan tüm çalışanları göster
karar
SELECT *
FROM employees
WHERE employee_id NOT IN (SELECT manager_id
FROM employees
WHERE manager_id IS NOT NULL)
Çalışanlar tablosu. 6'dan fazla çalışanı olan tüm yöneticileri göster
karar
SELECT *
FROM employees e
WHERE (SELECT COUNT (*)
FROM employees
WHERE manager_id = e.employee_id) > 6;
Masa Çalışanları, Departmanlar. BT departmanında çalışan çalışanları göster
karar
SELECT *
FROM employees
WHERE department_id = (SELECT department_id
FROM departments
WHERE department_name = 'IT');
Masa Çalışanları, İşler, Departmanlar. Çalışanları şu biçimde gösterin: Ad_adı, İş_unvanı, Departman_adı.
Örnek:
ilk_ad | iş unvanı | Bölüm Adı
Donald | nakliye | Katip Nakliye
karar
SELECT first_name,
(SELECT job_title
FROM jobs
WHERE job_id = e.job_id)
job_title,
(SELECT department_name
FROM departments
WHERE department_id = e.department_id)
department_name
FROM employees e;
Çalışanlar tablosu. Yöneticileri 2005'te iş bulan, ancak aynı zamanda bu işçilerin kendileri de 2005'ten önce iş bulan çalışanların bir listesini alın.
karar
SELECT *
FROM employees
WHERE manager_id IN (SELECT employee_id
FROM employees
WHERE TO_CHAR (hire_date, 'YYYY') = '2005')
AND hire_date < TO_DATE ('01012005', 'DDMMYYYY');
Çalışanlar tablosu. Yöneticileri herhangi bir yılın Ocak ayında iş bulan çalışanların listesini alın ve bu çalışanların iş_başlığının uzunluğu 15 karakterden fazla olsun
karar
SELECT *
FROM employees e
WHERE manager_id IN (SELECT employee_id
FROM employees
WHERE TO_CHAR (hire_date, 'MM') = '01')
AND (SELECT LENGTH (job_title)
FROM jobs
WHERE job_id = e.job_id) > 15;
Şimdilik hepsi bu.
Umarım görevler ilginç ve heyecan verici olmuştur.
Bu listeye mümkün olduğunca çok şey ekleyeceğim.
Ayrıca herhangi bir yorum ve öneriden memnuniyet duyacağım.
Not: Birisi SELECT'te ilginç bir görev bulursa, yorumlara yazın, listeye ekleyeceğim.
Teşekkür ederim.
Kaynak: habr.com