Contoh Soal Query Lanjutan Sistem Manajemen Basis Data

1.      Buat query untuk menampilkan nama, nomer departemen, dan gaji dari pegawai yang yang memiliki nomer departemen dan gaji yang sama dengan nomer departemen dan gaji dari pegawai yang memiliki komisi.
Jawab :
SELECT last_name, departement_id,salary
FROM employees
WHERE (departement_id,salary) IN (SELECT departement_id,salary FROM employees WHERE commission_pct IS NOT NULL);

2.      Buat query untuk menampilkan nama pegawai, nama departemen, dan gaji dari pegawai yang memiliki gaji dan komisi yang sama dengan gaji dan komisi dari pegawai yang memiliki location ID 1700.
Jawab :
SELECT first_name,departement_name,salary
FROM employees e, departements d
WHERE e.departement_id=d.departement_id
AND (salary,nvl (commission_pct,0)) IN (SELECT salary,nvl (commission_pct,0)) FROM employees e, departement d WHERE departement_id= d.departement_id and location_id=1700));

3.      Buat query untuk menampilkan nama pegawai, tanggal mulai masuk kerja (hiredate), dan gaji untuk semua pegawai yang memiliki gaji dan komisi seperti yang dimiliki oleh pegawai yang bernama Kochhar.
Note: Data Kochhar tidak ditampilkan dalam hasil query.
Jawab :
SELECT last_name,hire_date,salary
FROM employees
WHERE (salary,nvl(commission_pct,0) IN (SELECT salary,nvl(commission_pct,0) FROM employees WHERE last_name=’Kochar’) AND last_name!=’Kochhar’;

4.      Buat query untuk menampilkan detail dari nomer pegawai, nama pegawai dan nomer pegawai yang sama dengan pegawai yang bertempat tinggal di kota yang nama kotanya diawali dengan huruf T.
Jawab :
SELECT e.employee_id, e.first_name,b_employee_id
FROM employees e, (select employee_id from employees e, departements d, location l where e.departement_id=d.departement_id and d.location_id=l.location_id and citylke’T%’) b where e.employee_id=b.employee_id;

5.      Buat query untuk menampilkan data semua pegawai yang memiliki gaji yang lebih dari rata-rata gaji pada departemen tempat mereka bekerja. Data yang ditampilkan yaitu nama pegawai, gaji, nomer departemen, dan rata-rata gaji pada departemen tempat mereka bekerja. Urutkan berdasarkan rata-rata gaji.
Jawab :
SELECT a.first_name,a.salary,a.departement_id,b.rata
FROM employees a,(SELECT departmenet_id,AVG(salary) rata FROM employees GROUP BY departement_id)b
WHERE a.departement_id = b.departement_id
AND a.salary > b.rata
ORDER BY b.rata;

6.  Tampilkan semua pegawai yang bukan supervisor
a. Cara pertama gunakan  operator NOT EXISTS.
Jawab :
SELECT firts_name from employees e where not exist (select first_name from employees where manager_id = e.manager_id)
b. Apakah persoalan dapat dipecahkan dengan menggunakan operator NOT IN? Jika bisa bagaimana caranya, dan jika tidak bisa mengapa ? (Supervisor adalah pegawai yang punya bawahan pegawai yang lain => employee_id nya menjadi manager_id dari pegawai yang lain)
jawab :
SELECT e.employee_id,e.last_name
FROM employees e
WHERE employee_id NOT IN (SELECT employee_id FROM employees WHERE manager_id = e.manager_id);

7.      Buat query untuk menampilkan nama pegawai yang gajinya kurang dari rata-rata gaji pada departemen tempat dia bekerja.
Jawab :
SELECT ename FROM  emp a, (SELECT deptno,avg,sal) avg FROM emp GROUP BY deptno) b WHERE a.deptno = b.deptno AND a.sal < b.avg;

8.      Buat query untuk menampilkan nama dari pegawai yang memiliki satu atau lebih kolega (teman satu departemen) dimana kolega tersebut masuk lebih akhir tapi memiliki gaji lebih tinggi.
Jawab :
SELECT last_name, salary FROM employees outter WHERE hire_date > (SELECT hire_date FROM employees WHERE departement_id = outter.departement_id) AND salary > (SELECT salary FROM employees WHERE departement_id = outter.departement_id);

9.      Buat query untuk menampilkan nomer pegawai, nama pegawai dan nama departemen dari semua pegawai yang ada Note: Gunakan scalar subquery untuk mendapatkan nama departemen dalam statemen SELECT.
Jawab :
SELECT employee_id,last_name
FROM employees e
ORDER BY (SELECT departement_name FROM departements d WHERE e.departement_id = d.departement_id);

10.  Buat query untuk menampilkan nama departemen dari tiap departemen yang memiliki total gaji diatas 1/8 dari total gaji keseluruhan pada perusahaan. Gunakan klausa WITH untuk menulis query tersebut. Beri nama SUMMARY.
Jawab :
WITH
Dept_sal AS (SELECT d.departement_name,  SUM(e.salary)AS dept_total FROM employees e,departements d WHERE e.departement_id=d.departement_id GROUP BY d.departement_name), summary AS (SELECT departement_name, dept_total FROM dept_sal, employees e WHERE dept_total > SUM(e.salary)

11.  Buat query untuk menampilkan peagwai yang memiliki gaji yang lebih tinggi dari gaji semua sales managers (JOB_ID = 'SA_MAN'). Urutkan berdasarkan jumlah gaji dari tinggi ke rendah.
Jawab :
SELECT last_name,salary FROM employees WHERE salary > (SELECT MAX (salary) FROM emploees WHERE job_id=’SA_MAN’) ORDER BY salary;
Previous
Next Post »
Thanks for your comment