Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

SQL Self Gabung

Artikel ini memberikan gambaran umum tentang self join di SQL, serta contoh dasarnya.

Apa itu Self Join?

SQL SELF JOIN bergabung dengan tabel untuk dirinya sendiri. Ini dapat berguna untuk membuat kueri data hierarki dalam tabel yang sama, atau untuk membandingkan baris dalam tabel yang sama.

Contoh 1 – Gabung Kiri Sendiri

Contoh klasik dari self join ada di tabel Employee. Dalam tabel seperti itu, satu karyawan mungkin melapor ke karyawan lain. Oleh karena itu, Anda dapat menggunakan self join untuk bergabung dengan tabel pada kolom ID karyawan dan kolom ID manajer.

Misalkan kita memiliki tabel berikut:

+--------------+-------------+------------+-------------+
| EmployeeId   | FirstName   | LastName   | ReportsTo   |
|--------------+-------------+------------+-------------|
| 1            | Homer       | Connery    | NULL        |
| 2            | Bart        | Pitt       | 1           |
| 3            | Maggie      | Griffin    | 1           |
| 4            | Peter       | Farnsworth | 2           |
| 5            | Marge       | Morrison   | NULL        |
| 6            | Lisa        | Batch      | 5           |
| 7            | Dave        | Zuckerberg | 6           |
| 8            | Vlad        | Cook       | 7           |
+--------------+-------------+------------+-------------+

Kita bisa melakukan self left join di tabel ini untuk mengembalikan semua karyawan dan manajernya.

SELECT
    CONCAT(e1.FirstName, ' ', e1.LastName) AS Employee,
    CONCAT(e2.FirstName, ' ', e2.LastName) AS Manager
FROM Employees e1
LEFT JOIN Employees e2 
ON e1.ReportsTo = e2.EmployeeId;

Hasil:

+------------------+-----------------+
| Employee         | Manager         |
|------------------+-----------------|
| Homer Connery    |                 |
| Bart Pitt        | Homer Connery   |
| Maggie Griffin   | Homer Connery   |
| Peter Farnsworth | Bart Pitt       |
| Marge Morrison   |                 |
| Lisa Batch       | Marge Morrison  |
| Dave Zuckerberg  | Lisa Batch      |
| Vlad Cook        | Dave Zuckerberg |
+------------------+-----------------+

Homer Connery dan Marge Morrison tidak melapor kepada siapa pun dan begitu pula Manager mereka bidang kosong. Sebenarnya, itu akan menjadi NULL jika saya tidak melakukan penggabungan string pada dua kolom.

Contoh 2 – Self Inner Join

Jika kita tidak ingin kedua head honchos dikembalikan, maka kita bisa melakukan inner join di atas meja. Ini akan menghilangkan setiap baris yang tidak memiliki kecocokan di kedua tabel (yaitu karyawan yang tidak memiliki manajer yang sesuai dan sebaliknya).

SELECT
    CONCAT(e1.FirstName, ' ', e1.LastName) AS Employee,
    CONCAT(e2.FirstName, ' ', e2.LastName) AS Manager
FROM Employees e1
INNER JOIN Employees e2 
ON e1.ReportsTo = e2.EmployeeId;

Hasil:

+------------------+-----------------+
| Employee         | Manager         |
|------------------+-----------------|
| Bart Pitt        | Homer Connery   |
| Maggie Griffin   | Homer Connery   |
| Peter Farnsworth | Bart Pitt       |
| Lisa Batch       | Marge Morrison  |
| Dave Zuckerberg  | Lisa Batch      |
| Vlad Cook        | Dave Zuckerberg |
+------------------+-----------------+

Contoh 3 – Bergabung dengan Hak Sendiri

Jika kita ingin melakukan self-right join, kita perlu mengacak beberapa kolom di dalam kueri.

SELECT
    CONCAT(e1.FirstName, ' ', e1.LastName) AS Manager,
    CONCAT(e2.FirstName, ' ', e2.LastName) AS Employee
FROM Employees e1
RIGHT JOIN Employees e2
ON e1.EmployeeId = e2.ReportsTo;

Hasil:

+-----------------+------------------+
| Manager         | Employee         |
|-----------------+------------------|
|                 | Homer Connery    |
| Homer Connery   | Bart Pitt        |
| Homer Connery   | Maggie Griffin   |
| Bart Pitt       | Peter Farnsworth |
|                 | Marge Morrison   |
| Marge Morrison  | Lisa Batch       |
| Lisa Batch      | Dave Zuckerberg  |
| Dave Zuckerberg | Vlad Cook        |
+-----------------+------------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Prosedur Tersimpan untuk Mendapatkan Informasi Tabel Database

  2. Hasilkan bilangan bulat acak tanpa tabrakan

  3. Hasilkan satu set atau urutan tanpa loop – bagian 3

  4. Mitos bahwa DROP dan TRUNCATE TABLE adalah Non-Logged

  5. Cara Menghapus Kolom di SQL