Dalam SQL, kita mungkin menggunakan klausa JOIN untuk menerima hasil gabungan dari satu atau lebih dari satu tabel. Namun terkadang, kita menginginkan hasil yang berisi data dari satu tabel, dan catatan tidak boleh tersedia di tabel lainnya. Dalam hal ini, SQL memiliki nama konsep SQL Kecuali.
Untuk memurnikan data dari lebih dari satu tabel, kami menggunakan SQL Kecuali. SQL Kecuali sama dengan operator minus yang kita lakukan dalam matematika. SQL Kecuali pertama-tama menggabungkan dua atau lebih dari dua pernyataan SELECT dalam kueri dan mengembalikan data dari pernyataan SELECT pertama. Kami tidak tersedia di hasil pernyataan SELECT lainnya.
SQL KECUALI Aturan
Kita harus memahami semua aturan dan regulasi sebelum menggunakan kueri KECUALI dalam SQL:
- Jumlah dan urutan kolom dalam tabel yang diberikan harus sama di seluruh kueri SELECT.
- Tipe data kolom harus sama atau kompatibel.
Sintaks untuk SQL KECUALI
SELECT * FROM table1 EXCEPT SELECT * FROM table2;
Tabel1 dan Tabel2 akan menjadi nama tabel.
Contoh:
Asumsikan kita memiliki dua tabel dengan jumlah kolom dan urutan kolom yang sama.
- Tabel 1:T1, Jumlah Kolom:3, Data:A, B, C, D
- Tabel 2:T2, Jumlah Kolom:3, Data:B, D, F, G
Setiap kali kita mengeksekusi query KECUALI pada dua tabel ini, kita akan mendapatkan A dan C karena kedua data ini tidak ada di tabel T2, B dan D adalah umum di kedua tabel, yang dibuang.
Mari kita pahami konsep SQL KECUALI dengan contoh. Perhatikan tabel berikut beserta catatan yang diberikan.
Tabel1:Emp
KARYAWAN | FIRST_NAME | LAST_NAME | GAJI | KOTA | DEPARTEMEN | MANAGERID |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | ORACLE | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | ORACLE | 1 |
1003 | NIKHIL | VANI | 50.000 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORACLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUCHIKA | JAIN | 50.000 | MUMBAI | UJI | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | DIMANA | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4001 | RAJESH | BAIK | 60500 | MUMBAI | UJI | 4 |
Tabel2:Karyawan
KARYAWAN | FIRST_NAME | LAST_NAME | GAJI | KOTA | DEPARTEMEN | MANAGERID |
1001 | Vaibhav | Sharma | 65000 | PUNE | ORACLE | 1 |
1002 | Nikhil | Vani | 60000 | NOIDA | ORACLE | 1 |
1003 | Vaibhavi | Mishra | 50.000 | JAIPUR | FMW | 2 |
2001 | Ruchika | Jain | 55500 | CHANDIGARH | ORACLE | 1 |
2002 | Prachi | Sharma | 65500 | PUNE | FMW | 2 |
2003 | Bahagia | Jain | 50.000 | MUMBAI | UJI | 4 |
3001 | Deepam | Jauhari | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | DIMANA | 50500 | JAIPUR | FMW | 2 |
3003 | Pranoti | Shende | 58500 | MUMBAI | JAVA | 3 |
4001 | RAJESH | BAIK | 60500 | MUMBAI | UJI | 4 |
Tabel3:Manajer
Pengelola | nama_manajer | manajer_departemen |
1 | Snehdeep Kaur | ORACLE |
2 | Kirti Kirtane | FMW |
3 | Abhishek Manish | JAVA |
4 | Anupam Mishra | UJI |
Tabel4:Manajer1
Pengelola | nama_manajer | manajer_departemen |
1 | Ishita Agrawal | ORACLE |
2 | Kirti Kirtane | FMW |
3 | Abhishek Manish | JAVA |
4 | Paul Oakip | UJI |
Contoh 1: Misalkan kita ingin menggabungkan dua tabel di atas Emp dan Karyawan dalam kueri SELECT kita menggunakan operator KECUALI.
SELECT EMPLOYEEID, CONCAT(FIRST_NAME, LAST_NAME) AS NAME, CITY, DEPARTMENT MANAGER1.MANAGERID, MANAGER1.MANAGER_NAME FROM EMPLOYEE INNER JOIN MANAGER ON EMP.MANAGERID = MANAGER.MANAGERID EXCEPT SELECT EMPLOYEEID, CONCAT(FIRST_NAME, LAST_NAME) AS NAME, CITY, DEPARTMENT, MANAGER1.MANAGERID, MANAGER1.MANAGER_NAME FROM EMPLOYEE INNER JOIN MANAGER1 ON EMPLOYEE.MANAGERID = MANAGER1.MANAGERID;
Kami menggunakan klausa INNER JOIN antara tabel Emp dan Employee dimana kami menampilkan Employee Id, Name, City, Department, Manager Id, dan Manager Name menggunakan operator KECUALI. Kueri di atas hanya akan menampilkan nilai unik di antara kedua tabel.
Query di atas memberikan output berikut:
Jika kita amati data tabel, ada dua data umum antara kedua tabel Emp table dan tabel Employee, yaitu Employee id 3002 dan 4001. Tampilan detail Employee id 4001 kecuali 3002. Karena Employee id 3002 Nama Manager sama di kedua tabel Manager dan Manajer1 tetapi ID Karyawan 4001 Nama manajer berbeda di kedua tabel, detail id karyawan 4002 ditampilkan.
Contoh 2: Misalkan kita ingin menggabungkan dua tabel di atas Emp dan Karyawan dalam kueri SELECT kita menggunakan operator KECUALI dan mengurutkan hasil yang ditetapkan berdasarkan gaji mereka dalam urutan menurun. Kami akan menggunakan klausa ORDER BY untuk mengurutkan hasil yang ditetapkan dalam kueri SQL.
SELECT EMPLOYEEID, CONCAT(FIRST_NAME, LAST_NAME) AS NAME, CITY, SALARY, MANAGER1.MANAGERID, MANAGER1.MANAGER_NAME FROM EMPLOYEE INNER JOIN MANAGER ON EMP.MANAGERID = MANAGER.MANAGERID EXCEPT SELECT EMPLOYEEID, CONCAT(FIRST_NAME, LAST_NAME) AS NAME, CITY, SALARY, MANAGER1.MANAGERID, MANAGER1.MANAGER_NAME FROM EMPLOYEE INNER JOIN MANAGER1 ON EMPLOYEE.MANAGERID = MANAGER1.MANAGERID ORDER BY SALARY;
Query di atas menunjukkan output berikut:
Contoh 3: Misalkan kita ingin menggabungkan dua tabel Emp dan Karyawan di atas dalam kueri SELECT kita menggunakan operator KECUALI di mana gaji karyawan lebih besar dari 55000 dari tabel Emp dan kota karyawan termasuk 'Pune', 'Mumbai', 'Jaipur' dari tabel Karyawan.
SELECT * FROM EMP WHERE SALARY > 55000 EXCEPT SELECT * FROM EMPLOYEE WHERE CITY IN ('Pune', 'Mumbai', 'Jaipur');
Pernyataan SELECT pertama kueri di atas mengambil semua detail karyawan yang gajinya lebih besar dari 55000 dari tabel Emp. Pernyataan SELECT kedua mengambil semua detail karyawan yang kotanya termasuk Pune, Mumbai, Jaipur dari tabel Karyawan. Kemudian, operator KECUALI akan dieksekusi antara tabel Emp dan tabel Karyawan.
Ini memberikan output berikut: