Hello, Habr!
Selama lebih dari 3 tahun saya telah mengajar SQL di pelbagai pusat latihan, dan salah satu pemerhatian saya ialah pelajar menguasai dan memahami SQL dengan lebih baik jika mereka diberi tugas, dan bukan hanya diberitahu tentang kemungkinan dan asas teori.
Dalam artikel ini, saya akan berkongsi dengan anda senarai masalah saya yang saya berikan kepada pelajar sebagai kerja rumah dan di mana kami menjalankan pelbagai jenis sumbang saran, yang membawa kepada pemahaman yang mendalam dan jelas tentang SQL.
SQL (ΛΙsΛkjuΛΙl; bahasa pertanyaan berstruktur Inggeris) ialah bahasa pengaturcaraan deklaratif yang digunakan untuk mencipta, mengubah suai dan mengurus data dalam pangkalan data hubungan yang diuruskan oleh sistem pengurusan pangkalan data yang sesuai.
Anda boleh membaca tentang SQL dari pelbagai
Artikel ini tidak bertujuan untuk mengajar anda SQL dari awal.
Jadi mari kita pergi.
Kami akan menggunakan yang terkenal
Saya ambil perhatian bahawa kami hanya akan mempertimbangkan tugas SELECT. Tiada tugasan DML atau DDL di sini.
tugas-tugas
Menyekat dan Mengisih Data
Meja pekerja. Dapatkan senarai dengan maklumat tentang semua pekerja
keputusan
SELECT * FROM employees
Meja pekerja. Dapatkan senarai semua pekerja bernama 'David'
keputusan
SELECT *
FROM employees
WHERE first_name = 'David';
Meja pekerja. Dapatkan senarai semua pekerja dengan job_id bersamaan dengan 'IT_PROG'
keputusan
SELECT *
FROM employees
WHERE job_id = 'IT_PROG'
Meja pekerja. Dapatkan senarai semua pekerja dari jabatan ke-50 (department_id) dengan gaji (gaji) melebihi 4000
keputusan
SELECT *
FROM employees
WHERE department_id = 50 AND salary > 4000;
Meja pekerja. Dapatkan senarai semua pekerja dari jabatan ke-20 dan ke-30 (id_jabatan)
keputusan
SELECT *
FROM employees
WHERE department_id = 20 OR department_id = 30;
Meja pekerja. Dapatkan senarai semua pekerja yang huruf terakhir dalam nama mereka ialah 'a'
keputusan
SELECT *
FROM employees
WHERE first_name LIKE '%a';
Meja pekerja. Dapatkan senarai semua pekerja dari jabatan ke-50 dan ke-80 (department_id) yang mempunyai bonus (nilai dalam ruangan commission_pct tidak kosong)
keputusan
SELECT *
FROM employees
WHERE (department_id = 50 OR department_id = 80)
AND commission_pct IS NOT NULL;
Meja pekerja. Dapatkan senarai semua pekerja yang namanya mengandungi sekurang-kurangnya 2 huruf 'n'
keputusan
SELECT *
FROM employees
WHERE first_name LIKE '%n%n%';
Meja pekerja. Dapatkan senarai semua pekerja yang namanya lebih panjang daripada 4 huruf
keputusan
SELECT *
FROM employees
WHERE first_name LIKE '%_____%';
Meja pekerja. Dapatkan senarai semua pekerja yang gajinya dalam lingkungan 8000 hingga 9000 (termasuk)
keputusan
SELECT *
FROM employees
WHERE salary BETWEEN 8000 AND 9000;
Meja pekerja. Dapatkan senarai semua pekerja yang namanya mengandungi simbol '%'
keputusan
SELECT *
FROM employees
WHERE first_name LIKE '%%%' ESCAPE '';
Meja pekerja. Dapatkan senarai semua ID pengurus
keputusan
SELECT DISTINCT manager_id
FROM employees
WHERE manager_id IS NOT NULL;
Meja pekerja. Dapatkan senarai pekerja dengan jawatan mereka dalam format: Donald(sh_clerk)
keputusan
SELECT first_name || '(' || LOWER (job_id) || ')' employee FROM employees;
Menggunakan Fungsi Satu Baris untuk Menyesuaikan Output
Meja pekerja. Dapatkan senarai semua pekerja yang namanya lebih panjang daripada 10 huruf
keputusan
SELECT *
FROM employees
WHERE LENGTH (first_name) > 10;
Meja pekerja. Dapatkan senarai semua pekerja yang mempunyai huruf 'b' dalam nama mereka (tidak peka huruf besar-besaran)
keputusan
SELECT *
FROM employees
WHERE INSTR (LOWER (first_name), 'b') > 0;
Meja pekerja. Dapatkan senarai semua pekerja yang namanya mengandungi sekurang-kurangnya 2 huruf 'a'
keputusan
SELECT *
FROM employees
WHERE INSTR (LOWER (first_name),'a',1,2) > 0;
Meja pekerja. Dapatkan senarai semua pekerja yang gajinya adalah gandaan 1000
keputusan
SELECT *
FROM employees
WHERE MOD (salary, 1000) = 0;
Meja pekerja. Dapatkan nombor 3 digit pertama nombor telefon pekerja jika nombornya dalam format XXX.XXX.XXXX
keputusan
SELECT phone_number, SUBSTR (phone_number, 1, 3) new_phone_number
FROM employees
WHERE phone_number LIKE '___.___.____';
Meja jabatan. Dapatkan perkataan pertama daripada nama jabatan bagi mereka yang mempunyai lebih daripada satu perkataan dalam nama itu
keputusan
SELECT department_name,
SUBSTR (department_name, 1, INSTR (department_name, ' ')-1)
first_word
FROM departments
WHERE INSTR (department_name, ' ') > 0;
Meja pekerja. Dapatkan nama pekerja tanpa nama huruf pertama dan terakhir
keputusan
SELECT first_name, SUBSTR (first_name, 2, LENGTH (first_name) - 2) new_name
FROM employees;
Meja pekerja. Dapatkan senarai semua pekerja yang huruf terakhir dalam nama mereka ialah 'm' dan namanya lebih panjang daripada 5
keputusan
SELECT *
FROM employees
WHERE SUBSTR (first_name, -1) = 'm' AND LENGTH(first_name)>5;
Jadual Dual. Dapatkan tarikh Jumaat depan
keputusan
SELECT NEXT_DAY (SYSDATE, 'FRIDAY') next_friday FROM DUAL;
Meja pekerja. Dapatkan senarai semua pekerja yang telah bekerja untuk syarikat selama lebih daripada 17 tahun
keputusan
SELECT *
FROM employees
WHERE MONTHS_BETWEEN (SYSDATE, hire_date) / 12 > 17;
Meja pekerja. Dapatkan senarai semua pekerja yang digit terakhir nombor telefon mereka adalah ganjil dan terdiri daripada 3 nombor yang dipisahkan dengan titik
keputusan
SELECT *
FROM employees
WHERE MOD (SUBSTR (phone_number, -1), 2) != 0
AND INSTR (phone_number,'.',1,3) = 0;
Meja pekerja. Dapatkan senarai semua pekerja yang mempunyai nilai job_id selepas tanda '_' mempunyai sekurang-kurangnya 3 aksara, tetapi nilai ini selepas '_' 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 pekerja. Dapatkan senarai semua pekerja dengan menggantikan semua '.' dalam nilai PHONE_NUMBER pada '-'
keputusan
SELECT phone_number, REPLACE (phone_number, '.', '-') new_phone_number
FROM employees;
Menggunakan Fungsi Penukaran dan Ungkapan Bersyarat
Meja pekerja. Dapatkan senarai semua pekerja yang datang bekerja pada hari pertama bulan itu (mana-mana)
keputusan
SELECT *
FROM employees
WHERE TO_CHAR (hire_date, 'DD') = '01';
Meja pekerja. Dapatkan senarai semua pekerja yang datang bekerja pada tahun 2008
keputusan
SELECT *
FROM employees
WHERE TO_CHAR (hire_date, 'YYYY') = '2008';
Jadual DUAL. Tunjukkan tarikh esok dalam format: Esok ialah hari Kedua bulan Januari
keputusan
SELECT TO_CHAR (SYSDATE, 'fm""Tomorrow is ""Ddspth ""day of"" Month') info
FROM DUAL;
Meja pekerja. Dapatkan senarai semua pekerja dan tarikh setiap pekerja tiba di tempat kerja dalam format: 21 Jun, 2007
keputusan
SELECT first_name, TO_CHAR (hire_date, 'fmddth ""of"" Month, YYYY') hire_date
FROM employees;
Meja pekerja. Dapatkan senarai pekerja dengan kenaikan gaji sebanyak 20%. Tunjukkan gaji dengan tanda dolar
keputusan
SELECT first_name, TO_CHAR (salary + salary * 0.20, 'fm$999,999.00') new_salary
FROM employees;
Meja pekerja. Dapatkan senarai semua pekerja yang mula bekerja 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';
Jadual DUAL. Keluarkan tarikh semasa, + saat, + minit, + 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 pekerja. Dapatkan senarai semua pekerja dengan gaji penuh (gaji + komisen_pct(%)) 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 pekerja. Dapatkan senarai semua pekerja dan maklumat tentang ketersediaan bonus gaji (Ya/Tidak)
keputusan
SELECT first_name, commission_pct, NVL2 (commission_pct, 'Yes', 'No') has_bonus
FROM employees;
Meja pekerja. Dapatkan tahap gaji setiap pekerja: Kurang daripada 5000 dianggap Tahap Rendah, Lebih daripada atau sama dengan 5000 dan kurang daripada 10000 dianggap Tahap Normal, Lebih daripada atau sama dengan 10000 dianggap Tahap 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;
Negara Meja. Untuk setiap negara, tunjukkan wilayah di mana ia berada: 1-Eropah, 2-Amerika, 3-Asia, 4-Afrika (tanpa Sertai)
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 Kumpulan
Meja pekerja. Terima laporan oleh department_id dengan gaji minimum dan maksimum, tarikh awal dan lewat tiba di tempat kerja dan bilangan pekerja. Isih mengikut bilangan pekerja (menurun)
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 pekerja. Berapa ramai pekerja yang namanya bermula dengan huruf yang sama? Isih mengikut kuantiti. Tunjukkan hanya yang kuantitinya lebih besar daripada 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 pekerja. Berapa ramai pekerja yang bekerja di jabatan yang sama dan menerima gaji yang sama?
keputusan
SELECT department_id, salary, COUNT (*)
FROM employees
GROUP BY department_id, salary
HAVING COUNT (*) > 1;
Meja pekerja. Dapatkan laporan tentang bilangan pekerja yang diambil pada setiap hari dalam seminggu. Isih mengikut kuantiti
keputusan
SELECT TO_CHAR (hire_Date, 'Day') day, COUNT (*)
FROM employees
GROUP BY TO_CHAR (hire_Date, 'Day')
ORDER BY 2 DESC;
Meja pekerja. Dapatkan laporan bilangan pekerja yang diambil mengikut tahun. Isih mengikut kuantiti
keputusan
SELECT TO_CHAR (hire_date, 'YYYY') year, COUNT (*)
FROM employees
GROUP BY TO_CHAR (hire_date, 'YYYY');
Meja pekerja. Dapatkan bilangan jabatan yang mempunyai pekerja
keputusan
SELECT COUNT (COUNT (*)) department_count
FROM employees
WHERE department_id IS NOT NULL
GROUP BY department_id;
Meja pekerja. Dapatkan senarai department_id yang mempunyai lebih daripada 30 pekerja
keputusan
SELECT department_id
FROM employees
GROUP BY department_id
HAVING COUNT (*) > 30;
Meja pekerja. Dapatkan senarai jabatan_id dan purata gaji pekerja di setiap jabatan.
keputusan
SELECT department_id, ROUND (AVG (salary)) avg_salary
FROM employees
GROUP BY department_id;
Negara Meja. Dapatkan senarai region_id jumlah semua huruf semua negara_nama yang mengandungi lebih daripada 60
keputusan
SELECT region_id
FROM countries
GROUP BY region_id
HAVING SUM (LENGTH (country_name)) > 60;
Meja pekerja. Dapatkan senarai department_id di mana pekerja beberapa (>1) job_id berfungsi
keputusan
SELECT department_id
FROM employees
GROUP BY department_id
HAVING COUNT (DISTINCT job_id) > 1;
Meja pekerja. Dapatkan senarai pengurus_id yang bilangan pekerjanya lebih daripada 5 dan jumlah semua gaji pekerja bawahannya melebihi 50000
keputusan
SELECT manager_id
FROM employees
GROUP BY manager_id
HAVING COUNT (*) > 5 AND SUM (salary) > 50000;
Meja pekerja. Dapatkan senarai pengurus_id yang purata gaji semua pekerja bawahannya berada dalam lingkungan 6000 hingga 9000 dan yang tidak menerima bonus (komisen_pct 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 pekerja. Dapatkan gaji maksimum daripada semua job_id pekerja yang berakhir dengan perkataan '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 pekerja. Dapatkan gaji maksimum antara semua gaji purata untuk jabatan
keputusan
SELECT MAX (AVG (salary))
FROM employees
GROUP BY department_id;
Meja pekerja. Dapatkan bilangan pekerja dengan bilangan huruf yang sama dalam nama mereka. Pada masa yang sama, tunjukkan hanya mereka yang panjang namanya lebih daripada 5 dan bilangan pekerja dengan nama yang sama adalah lebih daripada 20. Isih mengikut 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);
Memaparkan Data daripada Berbilang Jadual Menggunakan Cantuman
Kakitangan Meja, Jabatan, Lokasi, Negara, Wilayah. Dapatkan senarai wilayah dan bilangan pekerja 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;
Kakitangan Meja, Jabatan, Lokasi, Negara, Wilayah. Dapatkan maklumat terperinci tentang setiap pekerja:
First_name, Last_name, Jabatan, 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 pekerja. Tunjukkan semua pengurus yang mempunyai lebih daripada 6 pekerja bawahan kepada mereka
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 pekerja. Tunjukkan semua pekerja yang tidak melaporkan kepada sesiapa
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;
Pekerja Jadual, Job_history. Meja Pekerja menyimpan semua pekerja. Jadual Job_history menyimpan pekerja yang telah meninggalkan syarikat. Dapatkan laporan tentang semua pekerja dan status mereka dalam syarikat (Bekerja atau meninggalkan syarikat dengan tarikh berlepas)
Contoh:
nama_pertama | status
Jennifer | Meninggalkan syarikat pada 31 Disember 2006
Clara | 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);
Kakitangan Meja, Jabatan, Lokasi, Negara, Wilayah. Dapatkan senarai pekerja yang tinggal di Eropah (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';
Kakitangan Meja, Jabatan. Tunjukkan semua jabatan yang mempunyai lebih daripada 30 pekerja
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;
Kakitangan Meja, Jabatan. Tunjukkan semua pekerja yang tidak berada di mana-mana jabatan
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;
Kakitangan Meja, Jabatan. Tunjukkan semua jabatan yang tiada pekerja di dalamnya
keputusan
SELECT department_name
FROM employees e
RIGHT JOIN departments d ON (e.department_id = d.department_id)
WHERE first_name IS NULL;
Meja pekerja. Tunjukkan semua pekerja yang tidak mempunyai sesiapa di bawahnya
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;
Pekerja Meja, Pekerjaan, Jabatan. Tunjukkan pekerja dalam format: First_name, Job_title, Department_name.
Contoh:
First_name | Job_title | Nama jabatan
Donald | Penghantaran | Kerani Penghantaran
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 pekerja. Dapatkan senarai pekerja yang pengurusnya mendapat pekerjaan pada tahun 2005, tetapi pada masa yang sama pekerja ini sendiri mendapat pekerjaan sebelum 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 pekerja. Dapatkan senarai pekerja yang pengurusnya mendapat pekerjaan pada bulan Januari bagi mana-mana tahun dan tempoh job_title pekerja ini adalah lebih daripada 15 aksara
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 Subqueries untuk Menyelesaikan Pertanyaan
Meja pekerja. Dapatkan senarai pekerja dengan nama terpanjang.
keputusan
SELECT *
FROM employees
WHERE LENGTH (first_name) =
(SELECT MAX (LENGTH (first_name)) FROM employees);
Meja pekerja. Dapatkan senarai pekerja dengan gaji lebih besar daripada gaji purata semua pekerja.
keputusan
SELECT *
FROM employees
WHERE salary > (SELECT AVG (salary) FROM employees);
Kakitangan, Jabatan, Jadual lokasi. Dapatkan bandar di mana pekerja secara keseluruhan memperoleh pendapatan 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 pekerja. Dapatkan senarai pekerja yang pengurusnya menerima gaji lebih daripada 15000.
keputusan
SELECT *
FROM employees
WHERE manager_id IN (SELECT employee_id
FROM employees
WHERE salary > 15000)
Kakitangan Meja, Jabatan. Tunjukkan semua jabatan yang tiada pekerja di dalamnya
keputusan
SELECT *
FROM departments
WHERE department_id NOT IN (SELECT department_id
FROM employees
WHERE department_id IS NOT NULL);
Meja pekerja. Tunjukkan semua pekerja yang bukan pengurus
keputusan
SELECT *
FROM employees
WHERE employee_id NOT IN (SELECT manager_id
FROM employees
WHERE manager_id IS NOT NULL)
Meja pekerja. Tunjukkan semua pengurus yang mempunyai lebih daripada 6 pekerja bawahan kepada mereka
keputusan
SELECT *
FROM employees e
WHERE (SELECT COUNT (*)
FROM employees
WHERE manager_id = e.employee_id) > 6;
Kakitangan Meja, Jabatan. Tunjukkan pekerja yang bekerja di bahagian IT
keputusan
SELECT *
FROM employees
WHERE department_id = (SELECT department_id
FROM departments
WHERE department_name = 'IT');
Pekerja Meja, Pekerjaan, Jabatan. Tunjukkan pekerja dalam format: First_name, Job_title, Department_name.
Contoh:
First_name | Job_title | Nama jabatan
Donald | Penghantaran | Kerani Penghantaran
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 pekerja. Dapatkan senarai pekerja yang pengurusnya mendapat pekerjaan pada tahun 2005, tetapi pada masa yang sama pekerja ini sendiri mendapat pekerjaan sebelum 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 pekerja. Dapatkan senarai pekerja yang pengurusnya mendapat pekerjaan pada bulan Januari bagi mana-mana tahun dan tempoh job_title pekerja ini adalah lebih daripada 15 aksara
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 sahaja buat masa ini.
Saya harap tugasan itu menarik dan menarik.
Saya akan menambah senarai tugasan ini sebanyak mungkin.
Saya juga akan gembira menerima sebarang komen dan cadangan.
PS: Jika seseorang datang dengan tugas PILIH yang menarik, tulis dalam ulasan dan saya akan menambahkannya ke senarai.
Terima kasih.
Sumber: www.habr.com