Anda di halaman 1dari 28

Laporan Tugas

ANALISIS SQL EXERCISES:


SUBQUERIES AND JOINS ON HR DATABASE

Diajukan untuk memenuhi salah satu tugas mata kuliah Sistem Manajemen Basis Data yang
diampu oleh :
Dr. Nur Rokhman, S.Si., M.Kom

Oleh : Kelompok 1 (HR Database)

Agus Darmawan 17/418616/PPA/05400


Arizal Notyasa 17/418623/PPA/05407
Guruh Marindra Pratama 17/418638/PPA/05422
I Gusti Made Jiwa Atmaja 17/418639/PPA/05423
Latifahny Aridia Alfitri 17/418644/PPA/05428
Mohammad Irham Akbar 17/418651/PPA/05435
Rian Apriansyah 17/418662/PPA/05446

Magister Ilmu Komputer


Fakultas Matematika dan Pengetahuan Alam
Universitas Gajah Mada
2017
Makna Sosial Database HR

Didalam database HR dapat di jelaskan bahwa

1. Setiap karyawan yang terdapat di table employee mempunyai relasi ke tabel


job_history, dimana karyawan dapat memiliki data riwayat kerja lebih dari
satu riwayat yang ditampung di tabel job_history, sehingga data
riwayat_kerjan setiap karyawan dapat dilihat dari karyawan itu mulai awal
masuk kerja sampai saat ini.

2. Tabel Job_history berelasi dengan tabel jobs dan tabel employee, dimana
tabel jobs memliki field job_id,job_title,min_salary, dan max_salary, field
tersebut memberikan informasi terkait record jenis pekerjaan yang tersimpan
di tabel jobs, sehingga dengan berelasinya tabel job_history dan jobs
maka setiap riwayat pekerjaan yang tersimpan di tabel history_jobs dapat
diketahui info dari pekerjaan tersebut sesuai dengan job_id yang ada.

3. Tabel employee berelasi dengan tabel departements, dimana tabel


departments ini berisi field yang memberikan info terkait tempat kerja setiap
karyawan, dengan terrelasinya tabel employee dan tabel departements
maka setiap karyawan memiliki tempat kerja sesuai dengan department_id
yang terdapat di tabel departements.

4. Pada tabel departments terdapat field location_id yang di hubungkan dari


tabel locations, sedangkan tabel locations berisi detail info lokasi, sehingga
setiap record data yang terdapat pada tabel departements memiliki info
lokasi sesuai location_id yang ada pada tabel locations.

5. Tabel location memiliki field country_id, dimana field tersebut merupakan


hasil relasi dari tabel countries ke tabel locations, setiap record pada tabel
countries berisi detail info dari suatu negara, sehingga dengan adanya relasi
tersebut maka setiap record yang terdapat pada tabel locations memiliki info
negara yang sesuai dengan country_id yang terdapat di tabel countries.

6. Tabel countries juga memiliki relasi dengan tabel regions, field yang
menjadi rujukan dari tabel regions adalah region_id, dimana setiap
region_id yang ada pada tabel regions mewakili info pada regional tertentu,
sehingga dengan adanya relasi tersebut tabel countries memiliki info region
sesuai dengan region_id yang ada pada tabel regions.

7. Tabel job_grades merupakan tabel refrensi yang meiliki fungsi sebagai


acuan grade setiap employee yang ada.

2
Tabel Penjelasan SUBQUERIES Query on HR Database

1. Write a query to display the name ( first name and last name ) for those
employees who gets more salary than the employee whose ID is 163.
Penjelasan: Solusi:
Membuat query untuk menampilkan nama SELECT first_name, last_name
(first name dan last name) dari semua FROM employees
karyawan yang mendapatkan salary/gaji WHERE salary >
lebih besar dari gaji karyawan dengan id ( SELECT salary
163. Data ini diambil dari tabel employees FROM employees
dengan menggunakan fungsi where untuk WHERE employee_id=163
mencari data gaji karyawan dengan id 163 );
untuk menjadi patokan pencarian.

2. Write a query to display the name ( first name and last name ), salary,
department id, job id for those employees who works in the same
designation as the employee works whose id is 169.
Penjelasan: Solusi:
Membuat query untuk menampilkan nama SELECT first_name, last_name, salary,
(first name dan last name), salary, department_id, job_id
departement id, dan job id dari semua FROM employees
karyawan yang bekerja di bawah WHERE job_id =
departemen yang sama dengan ( SELECT job_id
departemen karyawan dengan id 169. Data FROM employees
ini diambil dari tabel employees dengan WHERE employee_id=169
menggunakan fungsi where untuk mencari );
data departemen karyawan dengan id 169
untuk menjadi patokan pencarian.

3. Write a query to display the name ( first name and last name ), salary,
department id for those employees who earn such amount of salary
which is the smallest salary of any of the departments.
Penjelasan: Solusi:
Membuat query untuk menampilkan nama SELECT first_name, last_name, salary,
(first name dan last name), salary, dan department_id
departement id dari semua karyawan yang FROM employees
memiliki jumlah gaji yang sama dengan WHERE salary IN
jumlah gaji terkecil di setiap departemen. ( SELECT MIN(salary)
Meskipun gaji karyawan bukan merupakan FROM employees
yang terkecil di departemennya, namun jika GROUP BY department_id
nilai gaji tersebut bernilai sama dengan gaji );
terkecil di departemen lain maka tetap data
karyawan tersebut ditampilkan. Data ini
diambil dari tabel employees dengan
menggunakan fungsi where untuk mencari
nilai-nilai gaji terkecil dari setiap
departemen.

3
4. Write a query to display the employee id, employee name (first name and
last name ) for all employees who earn more than the average salary.
Penjelasan: Solusi:
Membuat query untuk menampilkan nama SELECT employee_id,
(first name dan last name) dari semua first_name,last_name
karyawan yang mendapatkan gaji diatas FROM employees
gaji rata-rata. Data ini diambil dari tabel WHERE salary >
employees dengan menggunakan fungsi ( SELECT AVG(salary)
average untuk field salary dari tabel FROM employees
employees untuk menjadi sebagai patokan );
pencarian.

5. Write a query to display the employee name ( first name and last name ),
employee id and salary of all employees who report to Payam.
Penjelasan: Solusi:
Membuat query untuk menampilkan nama SELECT first_name, last_name,
(first name dan last name), employee id, employee_id, salary
dan salary dari semua karyawan yang FROM employees
memiliki manager dengan nama “Payam”. WHERE manager_id =
Data ini diambil dari tabel employees (SELECT employee_id
dengan menggunakan fungsi where untuk FROM employees
mencari data nama karyawan “Payam” dari WHERE first_name = 'Payam'
tabel employees sebagai patokan );
pencarian.

6. Write a query to display the department number, name ( first name and
last name ), job and department name for all employees in the Finance
department.
Penjelasan: Solusi:
Membuat query untuk menampilkan SELECT e.department_id, e.first_name,
departement number, nama (first name e.job_id , d.department_name
dan last name), job, dan departement FROM employees e , departments d
name dari semua karyawan yang ada di WHERE e.department_id = d.department_id
bawah departemen “Finance”. Data ini AND d.department_name = 'Finance';
diambil dari tabel employees dan
departements dengan menggunakan
fungsi where untuk mencari data nama
departemen “Finance” sebagai patokan
pencarian.

4
7. Write a query to display all the information of an employee whose salary
and reporting person id is 3000 and 121 respectively.
Penjelasan: Solusi:
Membuat query untuk menampilkan semua SELECT *
data karyawan yang memiliki kesamaan FROM employees
yaitu mendapatkan gaji sebesar “3000” dan WHERE (salary,manager_id)=
memiliki manager dengan id 121. Data ini (SELECT 3000,121);
diambil dari tabel employees dengan
menggunakan fungsi where untuk mencari
data salary bernilai 3000 dan manager id
121 sebagai patokan pencarian.

8. Write a statement to display all the information of an employee whose id


is any of the number 134, 159 and 183.
Penjelasan: Solusi:
Membuat query untuk menampilkan semua SELECT *
data karyawan yang memiliki id number FROM employees
134, 159, dan 183. Data ini diambil dari WHERE employee_id IN (134,159,183);
tabel employees dengan menggunakan
fungsi where untuk mencari data employe
id yaitu 134, 159, dan 183.

9. Write a query to display all the information of the employees whose


salary is within the range 1000 and 3000.
Penjelasan: Solusi:
Membuat query untuk menampilkan semua SELECT * FROM employees
data karyawan yang memiliki nilai gaji WHERE salary BETWEEN 1000 and 3000;
sebesar diantara 1000 dan 3000. Data ini
diambil dari tabel employees dengan
menggunakan fungsi where untuk mencari
data salary bernilai diantara 1000 dan 3000
sebagai patokan pencarian.

10. Write a query to display all the information of the employees whose
salary if within the range of smallest salary and 2500.
Penjelasan: Solusi:
Membuat query untuk menampilkan semua SELECT *
data karyawan yang memiliki nilai gaji FROM employees
sebesar diantara nilai gaji terkecil dan 2500. WHERE salary BETWEEN
Data ini diambil dari tabel employees (SELECT MIN(salary)
dengan menggunakan fungsi where untuk FROM employees) AND 2500;
mencari data salary bernilai diantara nilai
minimum dan 2500, untuk mencari nilai gaji
minimum dilakukan dengan menggunakan
fungsi min pada field salary dari tabel
employees.

5
11. Write a query to display all the information of the employees who does
not work in those departments where some employees works whose id
within the range 100 and 200.
Penjelasan: Solusi:
Membuat query untuk menampilkan semua SELECT *
data karyawan tidak bekerja di departemen FROM employees
yang sama dengan departemen karyawan WHERE department_id NOT IN
dengan diantara 100 dan 200. Data ini (SELECT department_id
diambil dari tabel employees dan FROM departments
departement dengan menggunakan fungsi WHERE manager_id BETWEEN 100 AND
where untuk mencari data manager id 200);
diantara 100 dan 200.

12. Tampilkan semua informasi mengenai karyawan yang memiliki gaji kedua
tertinggi
Penjelasan. Solusi.
Cari nilai salary tertinggi, kemudian SELECT *
dijadikan kondisi untuk mendapatkan FROM employees
employee_id yang memiliki salary tertinggi WHERE employee_id IN
kedua. Employee_id tersebut kemudian (SELECT employee_id
digunakan sebagai kondisi untuk
FROM employees
mendapatkan seluruh informasi karyawan
tersebut. WHERE salary =
(SELECT MAX(salary)
FROM employees
WHERE salary <
(SELECT MAX(salary)
FROM employees)));

13. Tampilkan nama depan dan belakang karyawan, tanggal masuk semua
karyawan yang satu departemen dengan Clara.
Penjelasan. Solusi.
SELECT first_name, last_name,
Cari department_id dari karyawan yang hire_date
memiliki first_name = “Clara”, kemudian FROM employees
department_id tersebut digunakan untuk WHERE department_id =
mendapatkan first_name, last_name, dan
( SELECT department_id
hire_date karywan di department itu.
FROM employees
WHERE first_name = "Clara")
AND first_name <> "Clara";

6
14. Tampilkan nomor dan nama dari semua karyawan yang bekerja di departemen
yang sama dengan karyawan yang namanya mengandung huruf ‘T’
Penjelasan. Solusi.
Cari department_id dari tabel karyawan SELECT employee_id, first_name,
yang first_name nya mengandung huruf ‘T’. last_name
Kemudain department_id tersebut FROM employees
digunakan untuk menampilkan WHERE department_id IN
employee_id, first_name, dan last_name
( SELECT department_id
karyawan di department tersebut.
FROM employees
WHERE first_name LIKE '%T%' );

15. Tampilkan nomor employee, nama, dan gaji dari semua karyawan yang
memiliki gaji di atas rata-rata an satu departemen dengan karyawan yang
namanya mengandung huruf ‘J’
Penjelasan. Solusi.
Cari department_id yang memiliki karyawan SELECT employee_id, first_name ,
dengan first_name mengandung ‘J’. Juga salary
cari rata-rata salary semua karyawan. FROM employees
Kemudian dari table karyawan ambil WHERE salary >
employee_id, first_name, dan salary yang
(SELECT AVG (salary)
memenuhi kondisi salary lebih besar
daripada rata-rata salary dan department_id FROM employees )
sama dengan department_id yang dicari di AND department_id IN
atas. ( SELECT department_id
FROM employees
WHERE first_name LIKE '%J%');

16. Tampilkan nama karyawan, id karyawan, dan nama pekerjaan dari semua
karyawan yang departemennya berlokasi di Toronto.
Penjelasan. Solusi.
Cari location_id untuk ‘Toronto’. Kemudian SELECT first_name, last_name,
cari department_id yang berlokasi di employee_id, job_id
location_id tersebut. Kemudian tampilkan FROM employees
first_name, last_name, emploee_id, dan WHERE department_id =
job_id dari seluruh karyawan yang bekerja
(SELECT department_id
di department id tersebut.
FROM departments
WHERE location_id =
(SELECT location_id
FROM locations
WHERE city ='Toronto'));

7
17. Tampilkan nomor karyawan, nama, dan nama pekerjaan untuk semua
karyawan yang gajinya lebih kecil daripada gaji siapapun yang bekerja sebagai
MK-MAN.
Penjelasan. Solusi.
Tampilkan employee_id, first_name, SELECT
last_name, dan job_id dari tabel employees employee_id,first_name,last_name
yang memiliki salary lebih kecil dari ANY ,job_id
salary dari karyawan yang job_id nya sama FROM employees
dengan ‘MK_MAN’.
WHERE salary < ANY
( SELECT salary
FROM employees
WHERE job_id = 'MK_MAN' );

18. Tampilkan nomor karyawan, nama, dan nama pekerjaan dari semua karyawan
yang gajinya lebih kecil dari gaji siapapun yang bekerja sebgai MK_MAN, tidak
termasuk karyawan yang bekerja sebagai MK_MAN.
Penjelasan. Solusi.
Tampilkan employee_id, first_name, SELECT
last_name, dan job_id dari tabel employees employee_id,first_name,last_name
yang memiliki salary lebih kecil dari ANY , job_id
salary dari karyawan yang job_id nya sama FROM employees
dengan ‘MK_MAN’, lalu tambah kondisi
WHERE salary < ANY
untuk menghilangkan karyawan dengan
job_id ‘MK_MAN’ ( SELECT salary
FROM employees
WHERE job_id = 'MK_MAN' )
AND job_id <> 'MK_MAN' ;

19. Tampilkan nomor karyawan, nama, dan nama pekerjaan dari semua karyawan
yang gajinya lebih besar dari gaji siapapun karyawan yang bekerja sebagai
PU_MAN, tidak termasuk karyawan yang bekerja sebagai PU_MAN.
Penjelasan. Solusi.
Tampilkan employee_id, first_name, SELECT employee_id, first_name,
last_name, job_id dari tabel employees last_name, job_id
yang memiliki salary lebih besar dari ANY FROM employees
salary karyawan yang job_id nya sama WHERE salary > ALL
dengna ‘PU_MAN’, lalu tambah kondisi
( SELECT salary
untuk menghilangkan karyawan dengan
job_id ‘PU_MAN’ FROM employees
WHERE job_id = 'PU_MAN' )
AND job_id <> 'PU_MAN' ;

8
20. Tampilkan nomor karyawan, nama, dan nama pekerjaan dari semua karyawan
yang memiliki gaji di atas rata-rata dari gaji departemen manapun.
Penjelasan. Solusi.
Cari rata-rata salary dari tiap departemen SELECT employee_id, first_name,
dengan menggunakan AVG dan GROUP last_name, job_id
BY. Kemudian tampilkan employee_id, FROM employees
first_name, last_name, dan job_id yang WHERE salary > ALL
memiliki nilai salary lebih besar dari ALL
( SELECT AVG(salary)
rata-rata gaji tiap departemen tadi.
FROM employees
GROUP BY department_id
);

21. Tampilkan nama karyawan dan departemen dari semua karyawan yang
memiliki gaji lebih dari 3700.
Penjelasan. Solusi.
Tampilkan first_name,last_name, dan SELECT first_name, last_name,
department_id dar tabel employees apabila department_id
ada karyawan yang memiliki salary lebih FROM employees
besar dari 3700. WHERE EXISTS
(SELECT *
FROM employees
WHERE salary >3700 );

22. Tampilkan id departemen dan jumlah total gaji untuk setiap departemen yang
memiliki paling tidak 1 orang karyawan yang digaji.
Penjelasan. Solusi.
Cari jumlah total dari salary masing-masing SELECT
departemen dengan SUM dan GROUP BY departments.department_id,
department_id. Kemudian tampilkan result1.total_amt
department_id, dan total_amt dari hasil FROM departments,
SUM salary di atas.
( SELECT
employees.department_id,
SUM(employees.salary) total_amt
FROM employees
GROUP BY department_id) result1
WHERE result1.department_id =
departments.department_id;

9
23. Menampilkan data employee id, name (first name dan last name) serta job_id
dengan memberi titel Salesman untuk data pegawai dengan job title ST_MAN
dan memberi titel Developer bagi pegawai yang memiliki job title IT_PROG
Penjelasan. Solusi.
Menggunakan CASE dengan syarat ketika SELECT employee_id,
ada record “ST_MAN” maka akan diubah first_name, last_name,
menjadi “Salesman” dan ketika ada record CASE job_id
“IT_PROG” akan diubah menjadi WHEN 'ST_MAN' THEN 'SALESMAN'
“Developer”.
WHEN 'IT_PROG' THEN 'DEVELOPER'
ELSE job_id
END AS designation, salary
FROM employees;

24. Menampilkan data employee id, name (first name & last name), salary, dan
salarystatus dengan nilai HIGH dan LOW tergantung dengan salary yang
didapat lebih besar atau kecil dari rata-rata gaji karyawan.
Penjelasan. Solusi.
Gunakan Case dengan membandingkan SELECT employee_id,
gaji karyawan dengan rata-rata gaji first_name, last_name, salary,
karyawan yang sudah terlebih dahulu dicari CASE WHEN salary >=
dalam subquery kemudian bandingkan jika (SELECT AVG(salary)
lebih besar sama dengan (>=) maka akan
FROM employees) THEN 'HIGH'
tampil HIGH, selain itu LOW.
ELSE 'LOW'
END AS SalaryStatus
FROM employees;

25. Menampilkan employee id, name (first name & last name), Salary Drawn,
AvgCompare(salary - gaji rata-rata semua karyawan), dan salary status HIGH
atau LOW.
Penjelasan. Solusi.
Mencari gaji rata-rata dari semua karyawan SELECT employee_id,
kemudian salary dari karyawan dikurangi first_name, last_name, salary
rata-rata karyawan untuk mencari AS SalaryDrawn,
AvgCompare ROUND((salary -(SELECT
AVG(salary) FROM employees)),2)
AS AvgCompare,
CASE WHEN salary >=
(SELECT AVG(salary)
FROM employees) THEN 'HIGH'
ELSE 'LOW'
END AS SalaryStatus
FROM employees;

10
26. Menuliskan subquery yang menampilkan semua department memiliki satu atau
lebih karyawan
Penjelasan. Solusi.
Cari department name dari tabel SELECT department_name
department dengan juga melihat FROM departments
department id pada tabel employees untuk WHERE department_id IN
mengetahui department mana saja yang (SELECT DISTINCT(department_id)
memiliki pegawai
FROM employees);

27. Menampilkan semua pegawai yang bekerja di department yang berlokasi di


United Kingdom
Penjelasan. Solusi.
Cara untuk mencari lokasi dan di relasikan SELECT first_name
dengan department dengan melihat relasi FROM employees
antar tabel dari employees -> department -> WHERE department_id IN
location -> country dimana counrty name = (SELECT department_id
“United Kingdom”.
FROM departments
WHERE location_id IN
(SELECT location_id
FROM locations
WHERE country_id =
(SELECT country_id
FROM countries
WHERE country_name='United
Kingdom')));

28. Menampilkan semua pegawai dengan pendapat lebih dari rata-rata gaji dan
bekerja di department IT
Penjelasan. Solusi.
Mencari rata-rata gaji karyawan untuk SELECT last_name
dibandingkan kemudian mencari FROM employees
department name yang sesuai dengan WHERE department_id IN
record department id dalam tabel employee (SELECT department_id
FROM departments
WHERE department_name LIKE
'IT%')
AND salary >
(SELECT avg(salary)
FROM employees);

11
29. Menampilkan pegawai yang memiliki pendapatan lebih besar dari Mr. Ozer
Penjelasan. Solusi.
Mencari gaji dari “Ozer” untuk dibandingkan SELECT first_name, last_name,
dengan gaji dari karyawan lain salary
FROM employees
WHERE salary >
(SELECT salary
FROM employees
WHERE last_name='Ozer')
ORDER BY last_name;

30. Menampilkan pegawai yang memiliki manajer yang berkerja di department yang
berlokasi di US
Penjelasan. Solusi.
Mencari employee id dari manajer SELECT first_name,last_name FROM
kemudian cari lokasi bekerja dari id tersebut employees
dengan melihat relasi antar tabel WHERE manager_id IN
(SELECT employee_id
FROM employees
WHERE department_id IN
(SELECT department_id
FROM departments
WHERE location_id IN
(SELECT location_id
FROM locations
WHERE country_id='US')));

31. Menampilkan nama dari semua employee yang gajinya lebih besar dari 50%
dari total gaji dalam sebuah department
Penjelasan. Solusi.
Cari terlebih dahulu 50% gaji karyawan SELECT e1.first_name,
dalam sebuah department kemudian e1.last_name
bandingkan dengan semua karyawan yang FROM employees e1
memiliki department id yang sesuai. WHERE salary >
( SELECT (SUM(salary))*.5
FROM employees e2
WHERE
e1.department_id=e2.department_i
d);

12
32. Menampilkan data dari semua manajer
Penjelasan. Solusi.
Cari terlebih dahulu pegawai yang SELECT *
manager_id = employee_id, jika ada makan FROM employees
akan data dari pegawai dengan id tersebut WHERE EXISTS
akan tertampil (SELECT *
FROM departments
WHERE manager_id = employee_id);

33. Menampilkan detail dari karyawan yang bertanggung jawab dalam sebuah
department
Penjelasan. Solusi.
Mencari manager_id dari tabel department SELECT *
dimana data karyawan yang tertampil FROM employees
adalah data karyawan yang employee_id = WHERE employee_id=ANY
manager_id ( SELECT manager_id FROM
departments );

34. Write a query to display the employee id, name ( first name and last
name ), salary, department name and city for all the employees who gets
the salary as the salary earn by the employee which is maximum within
the joining person January 1st, 2002 and December 31st, 2003.
Penjelasan. Solusi.

Mengambil data employee_id, first_name, SELECT a.employee_id,


last_name, salaray dari table employee, a.first_name, a.last_name,
department_name dari table departments
a.salary, b.department_name,
dan city dari table location dimana
parameter salary adalah sama dengan hasil c.city
dari output salary terbesar di lokasi dan FROM employees a, departments
department dari employee tersebut bekerja b, locations c
dengan parameter hire_date dari tanggal WHERE a.salary =
01/01/2002 sampai dengan 12/31/2003. (SELECT MAX(salary)
FROM employees
WHERE hire_date BETWEEN
'01/01/2002' AND '12/31/2003')
AND
a.department_id=b.department_id
AND b.location_id=c.location_id;

13
35. Write a query in SQL to display the department code and name for all
departments which located in the city London
Penjelasan. Solusi.

Menampilkan department_id dan SELECT department_id,


department_name yang berlokasi di london. department_name
FROM departments
WHERE location_id =
(
SELECT location_id
FROM locations
WHERE city =
'London'
);

36. Write a query in SQL to display the first and last name, salary, and
department ID for all those employees who earn more than the average
salary and arrange the list in descending order on salary
Penjelasan. Solusi.
Menampilkan data first_name, last_name,
salary, department_id yang mempunyai SELECT first_name, last_name ,
salary diatas rata-rata dan mengurutkan salary, department_id
data berdasarkan salary terbesar FROM employees
WHERE salary > (
SELECT
AVG(salary)
FROM
employees )
ORDER BY salary DESC;

37. Write a query in SQL to display the first and last name, salary, and
department ID for those employees who earn more than the maximum
salary of a department which ID is 40
Penjelasan. Solusi.
Menampilkan first_name, last_name, salary SELECT first_name, last_name,
dan department id yang mempunyai salary salary, department_id
lebih dari salary yang ada di department_id FROM employees
40 WHERE salary > ALL
(SELECT salary
FROM
employees
WHERE
department_id = 40);

14
38. Write a query in SQL to display the department name and Id for all
departments where they located, that Id is equal to the Id for the location
where department number 30 is located
Penjelasan. Solusi.
Menampilkan list dari department_name SELECT department_name,
dan department_id dari table department department_id
yang mempunyai location_id sama dengan FROM departments
location_id yang dimana department_id WHERE location_id =
dengan nomor 30 berada.
(
SELECT location_id
FROM departments
WHERE department_id
= 30);

39. Write a query in SQL to display the first and last name, salary, and
department ID for all those employees who work in that department
where the employee works who hold the ID 201
Penjelasan. Solusi.
Menampilkan list dari first_name, SELECT first_name, last_name,
last_name, salary, department_id yang salary, department_id
bekerja di department dimana employee id FROM employees
201 bekerja WHERE department_id =
(SELECT department_id
FROM employees
WHERE employee_id =
201);

40. Write a query in SQL to display the first and last name, salary, and
department ID for those employees whose salary is equal to the salary of
the employee who works in that department which ID is 40
Penjelasan. Solusi.
Menampilkan list data first_name, SELECT first_name, last_name,
last_name, salary dan department_id yang salary, department_id
mempunyai salary sama dengan salary FROM employees
employee yang bekerja di department yang WHERE salary IN (
mempunyai department_id 40
SELECT salary
FROM
employees
WHERE
department_id = 40);

15
41. Write a query in SQL to display the first and last name, and department
code for all employees who work in the department Marketing
Penjelasan. Solusi.
Menampilkan list first_name, last_name, SELECT first_name, last_name,
department_id untuk semua yang bekerja di department_id
department Marketing FROM employees
WHERE department_id =
(SELECT department_id
FROM departments
WHERE department_name
= 'Marketing');

42. Write a query in SQL to display the first and last name, salary, and
department ID for those employees who earn more than the minimum
salary of a department which ID is 40
Penjelasan. Solusi.
Menampilkan list first_name, last_name, SELECT first_name, last_name,
salary dan department_Id yang salary, department_id
mendapatkan salary paling sedikit dari FROM employees
department 40 WHERE salary > ANY
(SELECT salary
FROM employees
WHERE department_id =
40);

43. Write a query in SQL to display the full name,email, and designation for
all those employees who was hired after the employee whose ID is 165
Penjelasan. Solusi.
Menampilkan list Full name (first_name & SELECT first_name ||' '||
last_name) dan hire_date yang di hire last_name AS Full_Name ,
setelah employee_Id 165 hire_date
FROM employees
WHERE hire_date > (
SELECT
hire_date
FROM
employees
WHERE
employee_id = 165);

16
44. Write a query in SQL to display the first and last name, salary, and
department ID for those employees who earn less than the minimum
salary of a department which ID is 70
Penjelasan. Solusi.
SELECT first_name, last_name,
Menampilkan first_name, last_name, salary, salary, department_id
department_id yang mempunyai salary FROM employees
lebih kecil dari pada salary terkecil dari WHERE salary < ALL
department 70
(SELECT salary
FROM employees
WHERE department_id =
70);

45. Display the first and last name, salary, and department ID for those employees
who earn less than the average salary, and also work at the department where
the employee Laura is working as a first name holder
Penjelasan. Solusi.
Subquery diatas menjelaskan cara untuk SELECT first_name, last_name,
menampilkan first name, last name, salary salary, department_id
dan department ID yang memiliki salary
FROM employees
dibawah salary rata-rata dimana
department tersebut terdapat karyawan WHERE salary <
bernama Laura. (SELECT AVG(salary)
FROM employees )
AND department_id =
(SELECT department_id
FROM employees
WHERE first_name =
'Laura');

46. Write a query in SQL to display the first and last name, salary and department
ID for those employees whose department is located in the city London.
Penjelasan. Solusi.
Subquery diatas berfungsi untuk SELECT first_name, last_name,
menampilkan first name, last name, salary salary, department_id
dan department ID yang mana department FROM employees
tersebut berlokasi di London. WHERE department_id IN
(SELECT department_id
FROM departments
WHERE location_id =
(SELECT
location_id
FROM locations
WHERE city =
'London'));

17
47. Display the city of the employee whose ID 134 and works there
Penjelasan. Solusi.
Berfungsi untuk menampilkan city dari SELECT city
employee yang memiliki employee ID 134 FROM locations
dan bekerja di city tersebut. WHERE location_id =
(SELECT location_id
FROM departments
WHERE department_id =
(SELECT department_id
FROM employees

WHERE employee_id=134));

48. Display the the details of departments which max salary is 7000 or above for
those employees who already done one or more jobs
Penjelasan. Solusi.
Berfungsi untuk menampilkan informasi SELECT *
detail dari tabel department yang memliki FROM departments
salary 7000 atau lebih dari 7000 dan telah WHERE DEPARTMENT_ID IN
menyelesaikan 1 atau lebih jobs. (SELECT DEPARTMENT_ID
FROM employees
WHERE EMPLOYEE_ID IN
(SELECT EMPLOYEE_ID
FROM job_history
GROUP BY EMPLOYEE_ID
HAVING
COUNT(EMPLOYEE_ID) > 1)
GROUP BY DEPARTMENT_ID
HAVING MAX(SALARY) > 7000);

49. Display the detail information of departments which starting salary is at least
8000.
Penjelasan. Solusi.
Berfungsi menampilkan semua data dari SELECT * FROM departments
table department yang memiliki salary mulai WHERE department_id IN
dari 8000 keatas. ( SELECT department_id
FROM employees
GROUP BY department_id
HAVING MIN(salary)>=8000);

18
50. Display the full name of manager who is supervising 4 or more employees
Penjelasan. Solusi.
Berfungsi menampilkan full name dari SELECT first_name || \' \' ||
manager yang memiliki 4 atau lebih last_name AS
employees Manager_name,department_id
FROM employees
WHERE employee_id IN
(SELECT manager_id
FROM employees
GROUP BY manager_id
HAVING COUNT(*)>=4);

51. Display the details of the current job for those employees who worked as a
Sales Representative in the past.
Penjelasan. Solusi.
Berfungsi menampilkan data dari table jobs SELECT *
yang mana karyawannya pernah bekerja FROM jobs
sebagai sales representative dahulu. WHERE job_id IN
(SELECT job_id
FROM employees
WHERE employee_id IN
(SELECT employee_id
FROM job_history
WHERE job_id='SA_REP'));

52. Display all the infromation about those employees who earn second lowest
salary of all the employees.
Penjelasan. Solusi.
Berfungsi menampilkan informasi employee SELECT *
yang mana merupakan 2 employee dengan FROM employees m
salary paling rendah dari semua employee WHERE 2 = (SELECT
COUNT(DISTINCT salary )
FROM employees
WHERE salary <= m.salary);

53. Display the details of departments managed by Susan


Penjelasan. Solusi.
Menampilkan data dari department yang SELECT *
mana manager nya adalah Susan FROM departments
WHERE manager_id IN
(SELECT employee_id
FROM employees
WHERE first_name='Susan');

19
54. Display the department ID, full name, salary for highest salary drawar in a
department.
Penjelasan. Solusi.
Menampilkan department ID, first name dan
last name diganti gabung menjadi field baru
SELECT department_id, first_name
dengan nama Employee_name dan salary || ' ' || last_name AS
dari tabel employee yang mana memiliki
gaji tertinggi dari masing2 deparment. Employee_name, salary
FROM employees a
WHERE salary =
(SELECT MAX(salary)
FROM employees
WHERE department_id =
a.department_id);

55. Display all the information of those employees who did not have any job in the
past
Penjelasan. Solusi.
Menampilkan data employee yang mana SELECT *
tidak memiliki history job sebelumnya. FROM employees
WHERE employee_id NOT IN
(SELECT employee_id
FROM job_history);

Tabel Penjelasan JOINS Query HR Database

56. Write a query in SQL to display the first name, last name, department number,
and department name for each employee
Penjelasan. Solusi.
Query di SQL tersebut digunakan untuk SELECT E.first_name , E.last_name ,
menampilkan nama depan, nama belakang, E.department_id ,
nomor departemen, dan nama departemen dari
D.department_name
tabel employee untuk setiap karyawan
FROM employees E
JOIN departments D
ON E.department_id = D.department_id;

20
57. Write a query in SQL to display the first and last name, department, city,
and state province for each employee
Penjelasan. Solusi.
Queri di SQL tersebut digunakan untuk SELECT E.first_name,E.last_name,
menampilkan nama depan dan nama belakang, D.department_name, L.city,
departemen, kota, dan provinsi menggunakan
L.state_province
join untuk setiap karyawan dari tabel employee
FROM employees E
JOIN departments D
ON E.department_id =
D.department_id
JOIN locations L
ON D.location_id = L.location_id;

58. Write a query in SQL to display the first name, last name, salary, and job
grade for all employees
Penjelasan. Solusi.
Query di SQL tersebut digunakan untuk SELECT E.first_name, E.last_name,
menampilkan nama depan, nama belakang, E.salary, J.grade_level
gaji, dan nilai pekerjaan untuk semua
karyawan menggunakan join antara FROM employees E
karyawan dengan gaji terendah dengan JOIN job_grades J
tertinggi ON E.salary BETWEEN J.lowest_sal
AND J.highest_sal;

59. Write a query in SQL to display the first name, last name, department
number and department name, for all employees for departments 80 or
40
Penjelasan. Solusi.
Query di SQL tersebut digunakan untuk SELECT E.first_name , E.last_name ,
menampilkan nama depan, nama belakang, E.department_id ,
nomor departemen dan nama departemen,
D.department_name
untuk semua karyawan untuk departemen 80
atau 40 FROM employees E
JOIN departments D
ON E.department_id =
D.department_id
AND E.department_id IN (80 ,
40)
ORDER BY E.last_name;

21
60. Write a query in SQL to display those employees who contain a letter z
to their first name and also display their last name, department, city, and
state province
Penjelasan. Solusi.
Query di SQL tersebut digunakan untuk SELECT E.first_name , E.last_name ,
menampilkan karyawan yang berisi huruf z E.department_id ,
ke nama depan mereka dan juga tampilkan
nama belakang, departemen, kota, dan D.department_name
provinsi mereka. FROM employees E
JOIN departments D
ON E.department_id =
D.department_id
AND E.department_id IN (80 ,
40)
ORDER BY E.last_name;

61. Write a query in SQL to display all departments including those where
does not have any employee
Penjelasan. Solusi.
Query di SQL tersebut berfungsi untuk SELECT E.first_name,E.last_name,
menampilkan semua departemen termasuk D.department_name, L.city,
yang tidak memiliki karyawan
menggunakan right outer join L.state_province
FROM employees E
JOIN departments D
ON E.department_id =
D.department_id
JOIN locations L
ON D.location_id = L.location_id
WHERE E.first_name LIKE '%z%';

62. Write a query in SQL to display the first and last name and salary for
those employees who earn less than the employee earn whose number
is 182
Penjelasan. Solusi.
Query di SQL tersebut berfungsi untuk untuk SELECT E.first_name,
menampilkan nama depan dan nama belakang E.last_name, E.department_id,
dan gaji untuk karyawan yang berpenghasilan
D.department_name
kurang dari jumlah karyawan yang 182
FROM employees E
RIGHT OUTER JOIN departments
D
ON E.department_id =
D.department_id;

22
63. Write a query in SQL to display the first name of all employees including
the first name of their manager
Penjelasan. Solusi.
Query di SQL tersebut berfungsi untuk SELECT E.first_name,
menampilkan nama depan semua karyawan E.last_name, E.salary
termasuk nama depan manajer mereka
FROM employees E
JOIN employees S
ON E.salary < S.salary
AND S.employee_id = 182;

64. Write a query in SQL to display the department name, city, and state
province for each department
Penjelasan. Solusi.
Query di SQL tersebut berfungsi untuk SELECT E.first_name AS "Employee
menampilkan nama departemen, kota, dan Name",
provinsi untuk setiap departemen
M.first_name AS "Manager"
FROM employees E
JOIN employees M
ON E.manager_id = M.employee_id;

65. Write a query in SQL to display the first name, last name, department
number and name, for all employees who have or have not any
department
Penjelasan. Solusi.
Query di SQL tersebut berfungsi untuk SELECT D.department_name ,
menampilkan nama depan, nama belakang, L.city , L.state_province
nomor dan nama departemen, untuk semua
FROM departments D
karyawan yang memiliki atau tidak memiliki
departemen menggunakan left outer join JOIN locations L
ON D.location_id =
L.location_id;

66. Write a query in SQL to display the first name of all employees and the
first name of their manager including those who does not working under
any manager
Penjelasan. Solusi.
Query di SQL tersebut digunakan untuk SELECT E.first_name AS "Employee
menampilkan nama depan semua karyawan Name",
dan nama depan manajer mereka termasuk
M.first_name AS "Manager"
mereka yang tidak bekerja di bawah manajer
manapun menggunakan left outer join FROM employees E
LEFT OUTER JOIN employees M

23
ON E.manager_id = M.employee_id;

67. Query untuk menampilkan semua informasi


Penjelasan. Solusi.
Query di SQL tersebut digunakan untuk SELECT E.first_name ,
menampilkan nama depan, nama belakang, dan E.last_name , E.department_id
nomor departemen untuk karyawan yang
FROM employees E
bekerja di departemen yang sama dengan
karyawan yang memegang nama belakang JOIN employees S
sebagai Taylor ON E.department_id =
S.department_id
AND S.last_name = 'Taylor';

68. Query menampilkantabel job history


Penjelasan. Solusi.
Query di SQL tersebut digunakan untuk SELECT job_title,
menampilkan judul pekerjaan, nama department_name, first_name || '
departemen, nama lengkap (nama depan dan
' || last_name AS Employee_name,
nama belakang) karyawan, dan tanggal mulai
untuk semua pekerjaan yang dimulai pada atau start_date
setelah tanggal 1 Januari 1993 dan berakhir FROM job_history
pada atau sebelum 31 Agustus 1997 JOIN jobs USING
(job_id)
JOIN departments
USING (department_id)
JOIN
employees USING (employee_id)
WHERE start_date>='1993-01-
01' AND start_date<='1997-08-
31';

69. Write a query in SQL to display job title, full name (first and last name ) of
employee, and the difference between maximum salary for the job and
salary of the employee
Penjelasan. Solusi.
Query di SQL tersebut digunakan untuk SELECT job_title, first_name ||
menampilkan job title, nama lengkap (nama ' ' || last_name AS
depan dan nama belakang) karyawan, dan
Employee_name,
selisih antara gaji maksimum untuk pekerjaan
dan gaji karyawan menggunakan natural join max_salary-salary AS
salary_difference
FROM employees
NATURAL JOIN jobs;

24
70. Write a query in SQL to display the name of the department, average
salary and number of employees working in that department who got
commission
Penjelasan. Solusi.
Query di SQL tersebut digunakan untuk SELECT department_name,
menampilkan nama departemen, gaji rata-rata AVG(salary),
dan jumlah karyawan yang bekerja di
COUNT(commission_pct)
departemen yang mendapat komisi
menggunakan group by FROM departments
JOIN employees USING
(department_id)
GROUP BY department_name;

71. Write a query in SQL to display the full name (first and last name ) of
employee, and job title of those employees who is working in the
department which ID 80 and deserve a commission percentage
Penjelasan. Solusi.
Query di SQL digunakan untuk menampilkan SELECT job_title, first_name ||
nama lengkap (nama depan dan nama ' ' || last_name AS
belakang) karyawan, dan jabatan karyawan
Employee_name,
mereka yang bekerja di departemen yang ID 80
dan berhak mendapatkan persentase komisi max_salary-salary AS
menggunakan natural join salary_difference
FROM employees
NATURAL JOIN jobs
WHERE department_id = 80;

72. Write a query in SQL to display the name of the country, city, and the
departments which are running there
Penjelasan. Solusi.
Query di SQL berfungsi untuk menampilkan SELECT country_name,city,
nama negara, kota, dan departemen yang department_name
sedang berjalan di sana.
FROM countries
JOIN locations USING
(country_id)
JOIN departments USING
(location_id);

25
73. Write a query in SQL to display department name and the full name (first
and last name) of the manager
Penjelasan. Solusi.
Query di SQL berfungsi untuk menampilkan SELECT department_name, first_name || ' '
nama departemen dan nama lengkap (nama || last_name AS name_of_manager
depan dan nama belakang) manajer FROM departments D
JOIN employees E
ON (D.manager_id=E.employee_id);

74. Write a query in SQL to display job title and average salary of employees
Penjelasan. Solusi.
Query di SQL berfungsi untuk menampilkan job SELECT job_title, AVG(salary)
title dan rata-rata gaji karyawan menggunakan FROM employees
natural join dan group by
NATURAL JOIN jobs
GROUP BY job_title;

75. Write a query in SQL to display the details of jobs which was done by
any of the employees who is presently earning a salary on and above
12000
Penjelasan Solusi.
Query di SQL berfungsi untuk menampilkan SELECT a.*
rincian pekerjaan yang dilakukan oleh salah satu FROM job_history a
karyawan yang saat ini menghasilkan gaji di atas JOIN employees m
12.000 ON (a.employee_id =
m.employee_id)
WHERE salary >= 12000

76. Write a query in SQL to display the country name, city, and number of
those departments where at leaste 2 employees are working
Penjelasan. Solusi.
Query di SQL untuk menampilkan nama SELECT country_name,city,
negara, kota, dan jumlah departemen COUNT(department_id)
dimana di tempat tinggal 2 karyawan FROM countries
bekerja menggunakan group by JOIN locations USING
(country_id)
JOIN departments
USING (location_id)
WHERE department_id IN
(SELECT department_id
FROM employees
GROUP BY department_id
HAVING

26
COUNT(department_id)>=2)
GROUP BY country_name,city;

77. Write a query in SQL to display the department name, full name (first and
last name) of manager, and their city
Penjelasan. Solusi.
Query di SQL untuk menampilkan nama SELECT department_name,
departemen, nama lengkap (nama depan first_name || ' ' || last_name
dan nama belakang) manajer, dan kota AS name_of_manager, city
mereka FROM departments D
JOIN employees E
ON
(D.manager_id=E.employee_id)
JOIN
locations L USING (location_id);

78. Write a query in SQL to display the employee ID, job name, number of
days worked in for all those jobs in department 80
Penjelasan. Solusi.
Query di SQL untuk menampilkan nomor SELECT employee_id, job_title,
karyawan, nama pekerjaan, jumlah hari end_date-start_date DAYS
kerja untuk semua pekerjaan di departemen FROM job_history
80 menggunakan natural join NATURAL JOIN jobs
WHERE
department_id=80;

79. Write a query in SQL to display the full name (first and last name), and
salary of those employees who working in any department located in
London
Penjelasan. Solusi.
Query di SQL tersebut digunakan untuk SELECT first_name || ' ' ||
menampilkan nama lengkap (nama depan last_name AS Employee_name,
dan belakang), dan gaji karyawan yang salary
bekerja di departemen mana pun yang FROM employees
berada di London
JOIN departments
USING (department_id)
JOIN locations USING
(location_id)
WHERE city = 'London';

27
80. Write a query in SQL to display full name(first and last name), job title,
starting and ending date of last jobs for those employees with worked
without a commission percentage
Penjelasan. Solusi.
Query di SQL berfungsi untuk menampilkan SELECT first_name || ' ' ||
nama lengkap (nama depan dan belakang), last_name AS Employee_name,
jabatan, tanggal mulai dan akhir dari job_title, start_date,
pekerjaan terakhir bagi karyawan yang end_date
bekerja tanpa persentase komisi
FROM job_history a
JOIN jobs b USING
(job_id)
JOIN employees c
ON ( a.employee_id =
c.employee_id)
WHERE commission_pct IS NULL;

81. Write a query in SQL to display the department name and number of
employees in each of the department
Penjelasan. Solusi.
Query di SQL tersebut untuk menampilkan SELECT department_name, COUNT(*)
nama departemen dan jumlah karyawan di FROM employees
masing-masing departemen NATURAL JOIN
departments
GROUP BY
department_name;

82. Write a query in SQL to display the full name (firt and last name ) of
employee with ID and name of the country presently where (s)he is
working
Penjelasan. Solusi.
Query di SQL berfungsi untuk menampilkan SELECT first_name || ' ' ||
nama lengkap (nama depan dan nama last_name AS Employee_name,
belakang) karyawan dengan ID dan nama employee_id, country_name
negara saat ini dimana dia bekerja FROM employees
JOIN departments
USING(department_id)
JOIN locations
USING( location_id)
JOIN countries USING
( country_id);

28

Anda mungkin juga menyukai