Halo Habr!
Selama lebih dari 3 tahun saya mengajar SQL di berbagai pusat pelatihan, dan salah satu pengamatan saya adalah siswa lebih menguasai dan memahami SQL jika diberi tugas, dan tidak hanya berbicara tentang kemungkinan dan landasan teori.
Pada artikel ini, saya akan membagikan kepada Anda daftar tugas yang saya berikan kepada siswa sebagai pekerjaan rumah dan di mana kami melakukan berbagai jenis curah pendapat, yang mengarah pada pemahaman SQL yang mendalam dan jelas.
SQL (ΛΙsΛkjuΛΙl; eng. structured query language) adalah bahasa pemrograman deklaratif yang digunakan untuk membuat, memodifikasi, dan mengelola data dalam basis data relasional yang dikelola oleh sistem manajemen basis data yang sesuai.
Anda dapat membaca tentang SQL dari berbagai
Artikel ini tidak dimaksudkan untuk mengajari Anda SQL dari awal.
Jadi ayo pergi.
Kami akan menggunakan yang terkenal
Saya perhatikan bahwa kami hanya akan mempertimbangkan tugas di SELECT. Tidak ada tugas di DML dan DDL.
tugas
Membatasi dan Menyortir Data
Meja karyawan. Dapatkan daftar dengan informasi tentang semua karyawan
keputusan
SELECT * FROM employees
Meja karyawan. Dapatkan daftar semua karyawan bernama 'David'
keputusan
SELECT *
FROM employees
WHERE first_name = 'David';
Meja karyawan. Dapatkan daftar semua karyawan dengan job_id sama dengan 'IT_PROG'
keputusan
SELECT *
FROM employees
WHERE job_id = 'IT_PROG'
Meja karyawan. Dapatkan daftar semua karyawan dari departemen ke-50 (department_id) dengan gaji (salary) lebih besar dari 4000
keputusan
SELECT *
FROM employees
WHERE department_id = 50 AND salary > 4000;
Meja karyawan. Dapatkan daftar semua karyawan dari tanggal 20 dan dari departemen ke-30 (department_id)
keputusan
SELECT *
FROM employees
WHERE department_id = 20 OR department_id = 30;
Meja karyawan. Dapatkan daftar semua karyawan yang huruf terakhir namanya adalah 'a'
keputusan
SELECT *
FROM employees
WHERE first_name LIKE '%a';
Meja karyawan. Dapatkan daftar semua karyawan dari departemen ke-50 dan dari departemen ke-80 (department_id) yang memiliki bonus (nilai di kolom komisi_persen tidak kosong)
keputusan
SELECT *
FROM employees
WHERE (department_id = 50 OR department_id = 80)
AND commission_pct IS NOT NULL;
Meja karyawan. Dapatkan daftar semua karyawan yang namanya mengandung setidaknya 2 huruf 'n'
keputusan
SELECT *
FROM employees
WHERE first_name LIKE '%n%n%';
Meja karyawan. Dapatkan daftar semua karyawan yang namanya lebih dari 4 huruf
keputusan
SELECT *
FROM employees
WHERE first_name LIKE '%_____%';
Meja karyawan. Dapatkan daftar semua karyawan yang gajinya antara 8000 dan 9000 (inklusif)
keputusan
SELECT *
FROM employees
WHERE salary BETWEEN 8000 AND 9000;
Meja karyawan. Dapatkan daftar semua karyawan yang namanya mengandung simbol '%'
keputusan
SELECT *
FROM employees
WHERE first_name LIKE '%%%' ESCAPE '';
Meja karyawan. Dapatkan daftar semua ID manajer
keputusan
SELECT DISTINCT manager_id
FROM employees
WHERE manager_id IS NOT NULL;
Meja karyawan. Dapatkan daftar karyawan dengan posisi mereka dalam format: Donald(sh_clerk)
keputusan
SELECT first_name || '(' || LOWER (job_id) || ')' employee FROM employees;
Menggunakan Fungsi Baris Tunggal untuk Menyesuaikan Output
Meja karyawan. Dapatkan daftar semua karyawan yang namanya lebih dari 10 huruf
keputusan
SELECT *
FROM employees
WHERE LENGTH (first_name) > 10;
Meja karyawan. Dapatkan daftar semua karyawan yang memiliki huruf 'b' di namanya (peka huruf besar kecil)
keputusan
SELECT *
FROM employees
WHERE INSTR (LOWER (first_name), 'b') > 0;
Meja karyawan. Dapatkan daftar semua karyawan yang namanya mengandung setidaknya 2 huruf 'a'
keputusan
SELECT *
FROM employees
WHERE INSTR (LOWER (first_name),'a',1,2) > 0;
Meja karyawan. Dapatkan daftar semua karyawan yang gajinya kelipatan 1000
keputusan
SELECT *
FROM employees
WHERE MOD (salary, 1000) = 0;
Meja karyawan. Dapatkan nomor 3 digit pertama dari nomor telepon karyawan jika nomornya dalam format Π₯Π₯Π₯.Π₯Π₯Π₯.Π₯Π₯Π₯Π₯
keputusan
SELECT phone_number, SUBSTR (phone_number, 1, 3) new_phone_number
FROM employees
WHERE phone_number LIKE '___.___.____';
tabel departemen. Dapatkan kata pertama dari nama departemen untuk nama yang memiliki lebih dari satu kata
keputusan
SELECT department_name,
SUBSTR (department_name, 1, INSTR (department_name, ' ')-1)
first_word
FROM departments
WHERE INSTR (department_name, ' ') > 0;
Meja karyawan. Dapatkan nama karyawan tanpa huruf pertama dan terakhir pada namanya
keputusan
SELECT first_name, SUBSTR (first_name, 2, LENGTH (first_name) - 2) new_name
FROM employees;
Meja karyawan. Dapatkan daftar semua karyawan yang huruf terakhir namanya sama dengan 'm' dan panjang namanya lebih dari 5
keputusan
SELECT *
FROM employees
WHERE SUBSTR (first_name, -1) = 'm' AND LENGTH(first_name)>5;
Meja ganda. Dapatkan tanggal Jumat depan
keputusan
SELECT NEXT_DAY (SYSDATE, 'FRIDAY') next_friday FROM DUAL;
Meja karyawan. Dapatkan daftar semua karyawan yang telah bekerja di perusahaan selama lebih dari 17 tahun
keputusan
SELECT *
FROM employees
WHERE MONTHS_BETWEEN (SYSDATE, hire_date) / 12 > 17;
Meja karyawan. Dapatkan daftar semua karyawan yang digit terakhir nomor teleponnya ganjil dan terdiri dari 3 angka yang dipisahkan oleh titik
keputusan
SELECT *
FROM employees
WHERE MOD (SUBSTR (phone_number, -1), 2) != 0
AND INSTR (phone_number,'.',1,3) = 0;
Meja karyawan. Dapatkan daftar semua karyawan yang nilai job_id setelah tanda '_' memiliki setidaknya 3 karakter, tetapi nilai ini setelah '_' tidak sama dengan 'CLERK'
keputusan
SELECT *
FROM employees
WHERE LENGTH (SUBSTR (job_id, INSTR (job_id, '_') + 1)) > 3
AND SUBSTR (job_id, INSTR (job_id, '_') + 1) != 'CLERK';
Meja karyawan. Dapatkan daftar semua karyawan dengan mengganti semua '.' pada nilai PHONE_NUMBER pada '-'
keputusan
SELECT phone_number, REPLACE (phone_number, '.', '-') new_phone_number
FROM employees;
Menggunakan Fungsi Konversi dan Ekspresi Bersyarat
Meja karyawan. Dapatkan daftar semua karyawan yang datang bekerja pada hari pertama setiap bulan (apa saja)
keputusan
SELECT *
FROM employees
WHERE TO_CHAR (hire_date, 'DD') = '01';
Meja karyawan. Dapatkan daftar semua karyawan yang masuk kerja pada tahun 2008
keputusan
SELECT *
FROM employees
WHERE TO_CHAR (hire_date, 'YYYY') = '2008';
meja GANDA. Tampilkan tanggal besok dalam format: Besok adalah Hari Kedua Januari
keputusan
SELECT TO_CHAR (SYSDATE, 'fm""Tomorrow is ""Ddspth ""day of"" Month') info
FROM DUAL;
Meja karyawan. Dapatkan daftar semua karyawan dan tanggal mulai mereka dalam format: 21 Juni 2007
keputusan
SELECT first_name, TO_CHAR (hire_date, 'fmddth ""of"" Month, YYYY') hire_date
FROM employees;
Meja karyawan. Dapatkan daftar karyawan dengan kenaikan gaji sebesar 20%. Tampilkan gaji dengan tanda dolar
keputusan
SELECT first_name, TO_CHAR (salary + salary * 0.20, 'fm$999,999.00') new_salary
FROM employees;
Meja karyawan. Dapatkan daftar semua karyawan yang masuk kerja pada Februari 2007.
keputusan
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';
meja GANDA. Ekspor tanggal saat ini, + detik, + menit, + jam, + hari, + bulan, + tahun
keputusan
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;
Meja karyawan. Dapatkan daftar semua karyawan dengan gaji penuh (gaji + komisi_persen(%)) dalam format: $24,000.00
keputusan
SELECT first_name, salary, TO_CHAR (salary + salary * NVL (commission_pct, 0), 'fm$99,999.00') full_salary
FROM employees;
Meja karyawan. Dapatkan daftar semua karyawan dan informasi tentang ketersediaan bonus gaji (Ya/Tidak)
keputusan
SELECT first_name, commission_pct, NVL2 (commission_pct, 'Yes', 'No') has_bonus
FROM employees;
Meja karyawan. Dapatkan tingkat gaji setiap karyawan: Kurang dari 5000 dianggap Tingkat rendah, Lebih besar dari atau sama dengan 5000 dan kurang dari 10000 dianggap Tingkat normal, Lebih besar dari atau sama dengan 10000 dianggap Tingkat tinggi
keputusan
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;
Tabel negara. Untuk setiap negara, tunjukkan wilayah tempatnya berada: 1-Eropa, 2-Amerika, 3-Asia, 4-Afrika (tanpa Gabung)
keputusan
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;
Melaporkan Data Agregat Menggunakan Fungsi Grup
Meja karyawan. Dapatkan laporan dari department_id dengan gaji minimum dan maksimum, tanggal kedatangan awal dan akhir dan jumlah karyawan. Urutkan berdasarkan jumlah karyawan (desc)
keputusan
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;
Meja karyawan. Berapa banyak karyawan yang namanya dimulai dengan huruf yang sama? Urutkan berdasarkan kuantitas. Hanya tampilkan yang angkanya lebih besar dari 1
keputusan
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;
Meja karyawan. Berapa banyak karyawan yang bekerja di departemen yang sama dan menerima gaji yang sama?
keputusan
SELECT department_id, salary, COUNT (*)
FROM employees
GROUP BY department_id, salary
HAVING COUNT (*) > 1;
Meja karyawan. Dapatkan laporan tentang berapa banyak karyawan yang dipekerjakan pada setiap hari dalam seminggu. Urutkan berdasarkan kuantitas
keputusan
SELECT TO_CHAR (hire_Date, 'Day') day, COUNT (*)
FROM employees
GROUP BY TO_CHAR (hire_Date, 'Day')
ORDER BY 2 DESC;
Meja karyawan. Dapatkan laporan tentang berapa banyak karyawan yang dipekerjakan per tahun. Urutkan berdasarkan kuantitas
keputusan
SELECT TO_CHAR (hire_date, 'YYYY') year, COUNT (*)
FROM employees
GROUP BY TO_CHAR (hire_date, 'YYYY');
Meja karyawan. Dapatkan jumlah departemen yang memiliki karyawan
keputusan
SELECT COUNT (COUNT (*)) department_count
FROM employees
WHERE department_id IS NOT NULL
GROUP BY department_id;
Meja karyawan. Dapatkan daftar department_id dengan lebih dari 30 karyawan
keputusan
SELECT department_id
FROM employees
GROUP BY department_id
HAVING COUNT (*) > 30;
Meja karyawan. Dapatkan daftar id_departemen dan rata-rata gaji karyawan di setiap departemen.
keputusan
SELECT department_id, ROUND (AVG (salary)) avg_salary
FROM employees
GROUP BY department_id;
Tabel negara. Dapatkan daftar jumlah id_wilayah dari semua huruf dari semua nama_negara yang lebih dari 60
keputusan
SELECT region_id
FROM countries
GROUP BY region_id
HAVING SUM (LENGTH (country_name)) > 60;
Meja karyawan. Dapatkan daftar department_id tempat karyawan dari beberapa (>1) job_id bekerja
keputusan
SELECT department_id
FROM employees
GROUP BY department_id
HAVING COUNT (DISTINCT job_id) > 1;
Meja karyawan. Dapatkan daftar manager_id yang jumlah bawahannya lebih dari 5 dan jumlah semua gaji bawahannya lebih dari 50000
keputusan
SELECT manager_id
FROM employees
GROUP BY manager_id
HAVING COUNT (*) > 5 AND SUM (salary) > 50000;
Meja karyawan. Dapatkan daftar manager_id yang gaji rata-rata semua bawahannya antara 6000 dan 9000 yang tidak menerima bonus (komisi_persen kosong)
keputusan
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;
Meja karyawan. Dapatkan gaji maksimum dari semua karyawan job_id yang diakhiri dengan kata 'CLERK'
keputusan
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';
Meja karyawan. Dapatkan gaji maksimum di antara semua gaji rata-rata untuk departemen
keputusan
SELECT MAX (AVG (salary))
FROM employees
GROUP BY department_id;
Meja karyawan. Dapatkan jumlah karyawan dengan jumlah huruf yang sama di namanya. Pada saat yang sama, tampilkan hanya mereka yang namanya lebih panjang dari 5 dan jumlah karyawan dengan nama yang sama lebih dari 20. Urutkan berdasarkan panjang nama
keputusan
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);
Menampilkan Data dari Beberapa Tabel Menggunakan Penggabungan
Tabel Karyawan, Departemen, Lokasi, Negara, Wilayah. Dapatkan daftar wilayah dan jumlah karyawan di setiap wilayah
keputusan
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;
Tabel Karyawan, Departemen, Lokasi, Negara, Wilayah. Dapatkan informasi terperinci tentang setiap karyawan:
Nama_depan, Nama_belakang, Departemen, Pekerjaan, Jalan, Negara, Wilayah
keputusan
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);
Meja karyawan. Tampilkan semua manajer yang memiliki lebih dari 6 karyawan
keputusan
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;
Meja karyawan. Tampilkan semua karyawan yang tidak melapor kepada siapa pun
keputusan
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;
Tabel karyawan, Job_history. Tabel Karyawan menyimpan semua karyawan. Tabel Job_history menyimpan karyawan yang keluar dari perusahaan. Dapatkan laporan tentang semua karyawan dan status mereka di perusahaan (Bekerja atau keluar dari perusahaan dengan tanggal keberangkatan)
Contoh:
nama_depan | status
jennifer | Meninggalkan perusahaan pada tanggal 31 Desember 2006
Klara | Sedang bekerja
keputusan
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);
Tabel Karyawan, Departemen, Lokasi, Negara, Wilayah. Dapatkan daftar karyawan yang tinggal di Eropa (region_name)
keputusan
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';
Tabel Karyawan, Departemen. Tampilkan semua departemen dengan lebih dari 30 karyawan
keputusan
SELECT department_name, COUNT (*)
FROM employees e JOIN departments d ON (e.department_id = d.department_id)
GROUP BY department_name
HAVING COUNT (*) > 30;
Tabel Karyawan, Departemen. Tampilkan semua karyawan yang tidak berada di departemen mana pun
keputusan
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;
Tabel Karyawan, Departemen. Tampilkan semua departemen tanpa karyawan
keputusan
SELECT department_name
FROM employees e
RIGHT JOIN departments d ON (e.department_id = d.department_id)
WHERE first_name IS NULL;
Meja karyawan. Tampilkan semua karyawan yang tidak memiliki bawahan
keputusan
SELECT man.first_name
FROM employees emp
RIGHT JOIN employees man ON (emp.manager_id = man.employee_id)
WHERE emp.FIRST_NAME IS NULL;
Tabel Karyawan, Pekerjaan, Departemen. Tampilkan karyawan dalam format: First_name, Job_title, Department_name.
Contoh:
nama_depan | jabatan | Nama departemen
Donald | pengiriman | Petugas Pengiriman
keputusan
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);
Meja karyawan. Dapatkan daftar karyawan yang manajernya mendapat pekerjaan pada tahun 2005, tetapi pada saat yang sama, para pekerja ini sendiri mendapat pekerjaan sebelum tahun 2005
keputusan
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');
Meja karyawan. Dapatkan daftar karyawan yang manajernya mendapat pekerjaan di bulan Januari setiap tahun dan panjang jabatan_pekerjaan karyawan ini lebih dari 15 karakter
keputusan
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;
Menggunakan Subquery untuk Memecahkan Query
Meja karyawan. Dapatkan daftar karyawan dengan nama terpanjang.
keputusan
SELECT *
FROM employees
WHERE LENGTH (first_name) =
(SELECT MAX (LENGTH (first_name)) FROM employees);
Meja karyawan. Dapatkan daftar karyawan dengan gaji lebih besar dari gaji rata-rata semua karyawan.
keputusan
SELECT *
FROM employees
WHERE salary > (SELECT AVG (salary) FROM employees);
Tabel Karyawan, Departemen, Lokasi. Dapatkan kota di mana total penghasilan karyawan paling sedikit.
keputusan
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);
Meja karyawan. Dapatkan daftar karyawan yang manajernya menerima gaji lebih dari 15000.
keputusan
SELECT *
FROM employees
WHERE manager_id IN (SELECT employee_id
FROM employees
WHERE salary > 15000)
Tabel Karyawan, Departemen. Tampilkan semua departemen tanpa karyawan
keputusan
SELECT *
FROM departments
WHERE department_id NOT IN (SELECT department_id
FROM employees
WHERE department_id IS NOT NULL);
Meja karyawan. Tampilkan semua karyawan yang bukan manajer
keputusan
SELECT *
FROM employees
WHERE employee_id NOT IN (SELECT manager_id
FROM employees
WHERE manager_id IS NOT NULL)
Meja karyawan. Tampilkan semua manajer yang memiliki lebih dari 6 karyawan
keputusan
SELECT *
FROM employees e
WHERE (SELECT COUNT (*)
FROM employees
WHERE manager_id = e.employee_id) > 6;
Tabel Karyawan, Departemen. Tampilkan karyawan yang bekerja di departemen TI
keputusan
SELECT *
FROM employees
WHERE department_id = (SELECT department_id
FROM departments
WHERE department_name = 'IT');
Tabel Karyawan, Pekerjaan, Departemen. Tampilkan karyawan dalam format: First_name, Job_title, Department_name.
Contoh:
nama_depan | jabatan | Nama departemen
Donald | pengiriman | Petugas Pengiriman
keputusan
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;
Meja karyawan. Dapatkan daftar karyawan yang manajernya mendapat pekerjaan pada tahun 2005, tetapi pada saat yang sama, para pekerja ini sendiri mendapat pekerjaan sebelum tahun 2005
keputusan
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');
Meja karyawan. Dapatkan daftar karyawan yang manajernya mendapat pekerjaan di bulan Januari setiap tahun dan panjang jabatan_pekerjaan karyawan ini lebih dari 15 karakter
keputusan
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;
Itu saja untuk saat ini.
Saya harap tugasnya menarik dan mengasyikkan.
Saya akan menambahkan daftar ini sebanyak mungkin.
Saya juga akan senang untuk setiap komentar dan saran.
PS: Jika seseorang datang dengan tugas yang menarik di SELECT, tulis di komentar, saya akan menambahkannya ke daftar.
Terima kasih.
Sumber: www.habr.com