Anda di halaman 1dari 14

SELECT last_name, salary, a.

department_id, rataSalary

FROM employees a, (SELECT department_id, AVG(salary) rataSalary

FROM employees GROUP BY department_id) b

WHERE a.department_id = b.department_id AND salary > rataSalary;

penjelasan kita ingin menampilkan last_name, salary, department_id dan rata-rata Salary per
department pada tabel employees dimana salary yang diperoleh lebih besar dari salary rata-rata per
department. hasilnya didapatkan dengan cara menggabungkan dua tabel yaitu tabel employees a dan
tabel B. B itu sendiri merupakan nama alias dari tabel subquery tersebut.

Pada tabel employees A kita menghasilkan last_name, salary, department_id dan pada Tabel B kita
menghasilkan department_id dan rataSalary. Lalu setelah kita mendapatkan hasil dari kedua tabel
tersebut, lalu kita gabungkan kedua tabel tersebut dengan menggunakan department_id pada tabel
employees dan department id yang ada pada tabel B sebagai penghubungnya.

select department_id, avg(salary)


from employees
group by department_id ;
PENJELASAN ;Tampilkan department id beserta dengan rata-rata salary dari tabel employees dimana
rata-rata salarynya dikelompokkan berdasar department_id. jadi intinya , kita mencari nilai rata-rata
salary dari tiap department.

select department_id as dept_id, job_id, AVG(salary)


from employees
group by department_id, job_id
pada contoh diatas, kita akan menampilkan dept_id , job_id beserta dengan rata-rata salary dimana rata-
rata salarynya didapatkan dengan mengelompokkan department_id terlebih dahulu lalu setelah itu
dikelompokkan berdasarkan job_id. Intinya, kita ingin mencari rata-rata salary dari tiap job_id dimana
job_id tersebut terdapat dalam department_id yang sama .

select department_id, max(salary)


from employees
group by department_id having max(salary)>10000
Contoh diatas akan menampilan salary terbesar pada tiap department_id dimana rata-rata salary nya lebih
besar dari 110000
SELECT last_name,salary, a.department_id, rataSalary
FROM employees a, (SELECT department_id, AVG(salary) rataSalary
FROM employees GROUP BY department_id) b
WHERE a.department_id = b.department_id AND salary > rataSalary;

PENJELASAN kita ingin menampilkan last_name,  salary,  department_id dan  rata-rata Salary per
department pada tabel employees dimana salary yang diperoleh lebih besar dari salary rata-rata per
department. hasilnya didapatkan dengan cara menggabungkan dua tabel yaitu tabel employees a dan
tabel B. B itu sendiri merupakan nama alias dari tabel subquery tersebut.

Pada tabel employees A kita menghasilkan last_name, salary, department_id dan pada Tabel B kita
menghasilkan department_id dan rataSalary. Lalu setelah kita mendapatkan hasil dari kedua tabel
tersebut, lalu kita gabungkan kedua tabel tersebut dengan menggunakan department_id pada tabel
employees dan department id yang ada pada tabel B sebagai penghubungnya.

select count(*)
from employees
where department_id = 40

PENJELASAN :Menampilkan berapa banyak jumlah baris dari tabel employees yang
mempunyai department_id = 40

select count(employee_id)
from employees
where department_id = 40

Menampilkan berapa banyak jumlah employee id (dihitung berdasarkan baris)dari tabel


employees dimana department id nya = 40

SELECT Employee_id,
first_name FROM Employees WHERE salaryBETWEEN 2000 AND 2300

Gunakan BETWEEN Condition untuk menampilkan baris data dengan rentang nilai tertentu


SELECT * FROM Employees WHERE last_name = ‘Kochhar’

SELECT first_name FROM Employees WHERE last_name like ‘Kochhar’

SELECT Employee_id, first_name FROM Employees WHERE last_name = ‘Kochhar’ AND


salary <2100
JOIN

JOIN merupakan salah satu cara dalam SQL untuk menggabungkan beberapa tabel. Sebelum memulai
perhatikan schema HR terlebih dahulu

Perbedaan INNER JOIN dengan OUTER JOIN

 INNER JOIN digunakan untuk mencari data yang sama antara dua table, sedangkan OUTER
JOIN digunakan untuk mencari data yang sama sekaligus data yang tidak sama

Tipe – tipe JOIN :

 Natural Joins
 Equijoin
 non-equijoin
 Cross Join
 outer join
 Full outter Join
 Self Join
 Cross Join

Ketentuan Natural JOIN

 2 Tabel yang ingin di NATURAL JOIN harus mempunyai minimal satu nama kolom yang sama
contoh : tabel A mempunyai kolom employee_id dan tabel B juga mempunyai kolom
employee_id. kolom employee_id inilah yang akan digunakan untuk menggabungkan ke dua
tabel tersebut
 Jika Kolom yang mempunyai nama sama tersebut memiliki type kolom yang berbeda, maka akan
terjadi error
contoh : Tabel A tipe kolom employee_idnya char sedangkan employee_id pada tabel B bertipe
integer
 Natural Join akan menampilkan data dimana data tersebut memiliki nilai yang sama antara nama
kolom yang sama pada tabel A dan Tabel B

contoh query :

SELECT department_id, department_name, location_id, city


FROM departments NATURAL JOIN locations

Penjelasan :
Pada query diatas field department_id, department_name, location_id terdapat pada tabel Departments
dan field location_id, city terdapat pada tabel Locations

JOIN dengan USING clause

Ketentuan dan Kegunaan USING Clause

 USING clause berguna untuk menutupi salah satu kekurangan dari NATURAL JOIN yaitu
menspesifikkan kolom mana yang akan digunakan sebagai penggabung 2 tabel. Hal ini bertujuan
untuk menghindari terjadinya error ketika diantara tabel A dan Tabel B mempunyai beberapa
nama kolom yang sama tetapi salah satu dari kolom yang sama tersebut memiliki tipe data yang
berbeda
 Gunakan hanya satu kolom yang akan dijadikan sebagai penggabung tabel
 Jangan gunakan tabel alias atau nama tabel kepada kolom yang akan menggunakan USING
clause

contoh query :

SELECT employees.employee_id, employees.last_name, departments.location_id,


department_id
FROM employees JOIN departments
USING (department_id) ; // perhatihan kolom department_id. kolom tersebut sama sekali
tidak memakai alias

Penjelasan :  employee_id, last_name, department_id terdapat pada tabel employees, sedangkan


department_id, location_id terdapat pada departments. Karena department_id terdapat pada tabel
employees dan departments, maka kolom tersebutlah yang akan digunakan sebagai penggabung.

Ambiguous Column Names

Ambiguouos Column Names atau nama kolom yang ambigu merupakan error yang terjadi pada saat
execute, si system yang meng execute tersebut menjadi ‘bingung’ kolom mana yang mau dia ambil.
untuk lebih jelasnya lihat contoh dibawah..

SELECT employee_id, last_name, department_id, department_name


FROM employees, departments
WHERE department_id = department_id

Jika query diatas dijalankan, pasti akan terjadi error, kenapa? karena pada tabel employee dan tabel
departments sama-sama terdapat nama kolom yang sama, yaitu kolom department_id, sehingga si
system menjadi pusing, kolom mana yang mau dia ambil, kolom di employees kah? atau kolom di
departments kah?.

Untuk  menghindari kerancuan tersebut maka digunakanlah tabel alias seperti query di bawah.

SELECT employee_id, last_name, a.department_id, department_name // bisa juga


b.department_id
FROM employees a, departments b
WHERE a.department_id = b.department_id

JOIN dengan ON Clause

Intinya penggunaan ON JOIN sama fungsinya dengan menggunakan query dibawah ini:

SELECT employee_id, last_name, a.department_id, department_name


FROM employees a, departments b
WHERE a.department_id = b.department_id

Kalau menggunakan Join dengan ON clause menjadi :

SELECT employee_id, last_name, a.department_id, department_name


FROM employees a JOIN departments b ON a.department_id = b.department_id

Menggabungkan 3 tabel dengan ON clause

SELECT employee_id, last_name, a.department_id, department_name, city


FROM employees a JOIN departments b ON a.department_id =
b.department_id JOIN Locations c
ON b.Location_id = b.location_id

SELF JOIN dengan menggunakan ON clause

Perhatikan tabel employees dibawah :


Pada gambar diatas kita dapat melihat donald dan douglas mempunyai seorang manager yang memiliki
ID = 124. bagaimana jika kasusnya kita ingin melihat siapa saja orang yang dikepalai oleh seorang
manager dengan id = 124?? dengan kasus seperti inilah kita dapat menggunakan SELF JOIN

Query :

SELECT e.employee_id mgr, m.first_name nama_bawahan, m.employee_id bawahan_ID


FROM employees e join employees m ON e.employee_id=m.manager_id
WHERE e.employee_id=124;

OUTER JOIN

Outer Join merupakan sebuah fungsi dimana fungsi tersebut dapat dipakai untuk menampilkan data yang
memiliki kesamaan seperti join yang telah kita bahas sebelumnya, JUGA menampilkan data yang tidak
memiliki kesamaan

Tipe-tipe OUTER JOIN


 LEFT OUTER JOIN
 RIGHT OUTER JOIN
 FULL OUTER JOIN

LEFT OUTER JOIN

Sebelum memulai kita asumsikan Tabel Employees berada Disebelah kiri Dan tabel Departments berada
disebelah kanan. Jika kita melakukan LEFT OUTER JOIN terhadap kedua tabel tersebut, maka kita akan
mendapatkan semua data di tabel employees yang sama dan tidak sama dengan di tabel departments.
jadi ibaratnya kita menampilkan data Employees yang tidak dipakai di Departments

contoh :

SELECT last_name, e.department_id, department_name


FROM employees e LEFT OUTER JOIN departments d
ON (e.department_id = d.department_id)

RIGHT OUTER JOIN

Right Outer Join kebalikan dari LEFT OUTER JOIN

contoh :

SELECT last_name, e.department_id, department_name


FROM employees e RIGHT OUTER JOIN departments d
ON (e.department_id = d.department_id)
FULL OUTER JOIN

Full Outer Join merupakan gabungan dari LEFT OUTER JOIN dan RIGHT OUTER JOIN

contoh :

SELECT last_name, e.department_id, department_name


FROM employees e FULL OUTER JOIN departments d
ON (e.department_id = d.department_id)
CROSS JOIN

Cross Join disebut juga dengan CARTESIAN PRODUCT yaitu perkalian dari 2 buah tabel

contoh :

data tabel A : {a,b,c,d } , data Tabel B {F,G,H,I}

 Jika tabel A CROSS JOIN tabel B menjadi : {aF, aG, aH, aI, bF, bG, bH, bI, cF, cG, cH, cI, dF, dG, dH,
dI}

query nya :

SELECT last_name, department_name FROM employees
CROSS JOIN departments
1. Menampilkan detail pekerjaan yang gaji minimumnya lebih dari 10.000.

2. Menampilkan nama depan dan tanggal bergabung dari karyawan yang bergabung antara
tahun 2002 dan 2005.

3. Menampilkan nama depan dan tanggal bergabung dari karyawan yang merupakan
Programmer IT atau Sales Man.

4. Menampilkan karyawan yang bergabung setelah 1 Januari 2008.

5. Menampilkan detail karyawan dengan ID 150 atau 160.

6. Menampilkan nama depan, gaji, persen komisi, dan tanggal perekrutan untuk karyawan
dengan gaji kurang dari 10.000.

7. Menampilkan Judul Pekerjaan, selisih antara gaji minimum dan maksimum untuk pekerjaan
dengan gaji maksimum dalam kisaran 10.000 hingga 20.000.

8. Tampilkan nama depan, gaji, dan bulatkan gaji menjadi ribuan.

9. Tampilkan detail pekerjaan dalam urutan judul.

10. Tampilkan karyawan di mana nama depan atau nama belakang dimulai dengan S.

11. Menampilkan karyawan yang bergabung di bulan Mei.

12. Menampilkan detail karyawan di mana persentase komisinya nol dan gaji dalam kisaran
5.000 hingga 10.000 dan departemen adalah 30.

13. Menampilkan nama depan dan tanggal gaji pertama karyawan.

14. Menampilkan nama depan dan pengalaman karyawan.

15. Menampilkan nama depan karyawan yang bergabung tahun 2001.

16. Tampilkan nama depan dan nama belakang setelah mengubah huruf pertama dari setiap
nama menjadi huruf besar dan sisanya menjadi huruf kecil.

17. Menampilkan kata pertama dalam judul pekerjaan.

18. Menampilkan panjang nama depan karyawan yang nama belakangnya mengandung
karakter 'b' setelah jabatan ke-3.
19. Tampilkan nama depan dalam huruf besar dan alamat email dalam huruf kecil untuk
karyawan di mana nama depan dan alamat emailnya sama terlepas dari kasusnya.

20. Menampilkan karyawan yang bergabung pada tahun ini.

21. Menampilkan jumlah hari antara tanggal sistem dan 1 Januari 2011.

22. Tampilkan berapa banyak karyawan yang bergabung setiap bulan dalam tahun ini.

23. Menampilkan ID manajer dan jumlah karyawan yang dikelola oleh manajer.

24. Tunjukkan ID karyawan dan tanggal dia mengakhiri pekerjaan sebelumnya.

25. Menampilkan jumlah karyawan yang bergabung setelah tanggal 15 setiap bulan.

26. Tampilkan ID negara dan jumlah kota yang kita miliki di negara tersebut.

27. Menampilkan gaji rata-rata karyawan di setiap departemen yang memiliki persentase
komisi.

28. Menampilkan ID pekerjaan, jumlah karyawan, jumlah gaji, dan perbedaan antara gaji
tertinggi dan gaji terendah karyawan pekerjaan tersebut.

29. Menampilkan ID pekerjaan untuk pekerjaan dengan gaji rata-rata lebih dari 10.000.

30. Menampilkan tahun-tahun di mana lebih dari 10 karyawan bergabung.

31. Menampilkan departemen di mana lebih dari lima karyawan memiliki persentase komisi.

32. Menampilkan ID karyawan untuk karyawan yang melakukan lebih dari satu pekerjaan di
masa lalu.

33. Menampilkan ID pekerjaan dari pekerjaan yang dilakukan oleh lebih dari 3 karyawan selama
lebih dari 100 hari.

34. Menampilkan ID departemen, tahun, dan Jumlah karyawan yang bergabung.

35. Menampilkan departemen di mana manajer mana pun mengelola lebih dari 5 karyawan.

36. Ubah gaji karyawan 115 menjadi 8000 jika gaji yang ada kurang dari 6000.

37. Masukkan karyawan baru ke dalam karyawan dengan semua detail yang diperlukan.

38. Hapus departemen 20.


39. Ubah ID pekerjaan karyawan 110 menjadi IT_PROG jika karyawan tersebut milik
departemen 10 dan ID pekerjaan yang ada tidak dimulai dengan IT.

40. Masukkan baris ke dalam tabel departemen dengan ID manajer 120 dan ID lokasi di setiap
ID lokasi untuk kota Tokyo.

41. Tampilkan nama departemen dan jumlah karyawan di departemen tersebut.

42. Tampilkan judul pekerjaan, ID karyawan, jumlah hari antara tanggal berakhir dan tanggal
mulai untuk semua pekerjaan di departemen 30 dari riwayat pekerjaan.

43. Tampilkan nama departemen dan nama depan manajer.

44. Tampilkan nama departemen, nama manajer, dan kota.

45. Tampilkan nama negara, kota, dan nama departemen.

46. Menampilkan judul pekerjaan, nama departemen, nama belakang karyawan, tanggal mulai
untuk semua pekerjaan dari tahun 2000 hingga 2005.

47. Menampilkan jabatan dan gaji rata-rata karyawan

48. Menampilkan jabatan, nama karyawan, dan selisih antara gaji maksimum untuk pekerjaan
tersebut dan gaji karyawan tersebut.

49. Menampilkan nama belakang, jabatan karyawan yang memiliki persentase komisi dan
termasuk dalam departemen 30.

50. Menampilkan detail pekerjaan yang telah dilakukan oleh setiap karyawan yang saat ini
mendapatkan gaji lebih dari 15.000.

51. Menampilkan nama departemen, nama manajer, dan gaji manajer untuk semua manajer
yang memiliki pengalaman lebih dari 5 tahun.

52. Tampilkan nama karyawan jika karyawan tersebut bergabung sebelum manajernya.

53. Tampilkan nama karyawan, jabatan untuk pekerjaan yang dilakukan karyawan di masa lalu
di mana pekerjaan itu dilakukan kurang dari enam bulan.

54. Tampilkan nama karyawan dan negara tempat dia bekerja.

55. Tampilkan nama departemen, gaji rata-rata dan jumlah karyawan dengan komisi dalam
departemen.
56. Menampilkan bulan di mana lebih dari 5 karyawan bergabung di departemen mana pun
yang berlokasi di Sydney.

57. Tampilkan rincian departemen yang gaji maksimumnya lebih dari 10.000.

58. Menampilkan detail departemen yang dikelola oleh 'Smith'.

59. Menampilkan pekerjaan yang diikuti karyawan pada tahun ini.

60. Tampilkan karyawan yang tidak melakukan pekerjaan apa pun di masa lalu.

61. Menampilkan jabatan dan gaji rata-rata untuk karyawan yang melakukan pekerjaan di masa
lalu.

62. Tampilkan nama negara, kota, dan jumlah departemen di mana departemen memiliki lebih
dari 5 karyawan.

63. Menampilkan detail manajer yang mengelola lebih dari 5 karyawan.

64. Tampilkan nama karyawan, jabatan, tanggal mulai, dan tanggal akhir pekerjaan sebelumnya
dari semua karyawan dengan persentase komisi nol.

65. Tampilkan departemen di mana tidak ada karyawan yang bergabung dalam dua tahun
terakhir.

66. Tampilkan rincian departemen yang gaji maksimalnya lebih dari 10.000 untuk karyawan
yang melakukan pekerjaan di masa lalu.

67. Menampilkan detail pekerjaan saat ini untuk karyawan yang bekerja sebagai Pemrogram IT
di masa lalu.

68. Tampilkan detail karyawan yang menggambar gaji tertinggi di departemen.

69. Menampilkan kota karyawan dengan ID karyawan 105.

70. Menampilkan gaji tertinggi ketiga dari semua karyawan

Anda mungkin juga menyukai