Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Ikhtisar jenis SQL Join dengan contoh

SQL JOIN adalah klausa yang digunakan untuk menggabungkan beberapa tabel dan mengambil data berdasarkan bidang umum dalam database relasional. Profesional basis data menggunakan normalisasi untuk memastikan dan meningkatkan integritas data. Dalam berbagai bentuk normalisasi, data didistribusikan ke dalam beberapa tabel logis. Tabel ini menggunakan batasan referensial – kunci utama dan kunci asing – untuk menerapkan integritas data dalam tabel SQL Server. Pada gambar di bawah ini, kita melihat sekilas proses normalisasi database.

Memahami berbagai jenis SQL JOIN

SQL JOIN menghasilkan data yang berarti dengan menggabungkan beberapa tabel relasional. Tabel-tabel ini terkait menggunakan kunci dan memiliki hubungan satu-ke-satu atau satu-ke-banyak. Untuk mengambil data yang benar, Anda harus mengetahui persyaratan data dan mekanisme bergabung yang benar. SQL Server mendukung beberapa gabungan dan setiap metode memiliki cara khusus untuk mengambil data dari beberapa tabel. Gambar di bawah menentukan gabungan SQL Server yang didukung.

Gabungan dalam SQL

Gabungan dalam SQL mencakup baris dari tabel di mana kondisi bergabung terpenuhi. Misalnya, dalam diagram Venn di bawah ini, gabungan dalam mengembalikan baris yang cocok dari Tabel A dan Tabel B.

Pada contoh di bawah ini, perhatikan hal-hal berikut:

  • Kami memiliki dua tabel – [Karyawan] dan [Alamat].
  • Kueri SQL digabungkan pada kolom [Karyawan].[EmpID] dan [Alamat].[ID].

Output kueri mengembalikan catatan karyawan untuk EmpID yang ada di kedua tabel.

Gabungan dalam mengembalikan baris yang cocok dari kedua tabel; oleh karena itu, ini juga dikenal sebagai Equi join. Jika kita tidak menentukan kata kunci dalam, SQL Server melakukan operasi gabung dalam.

Pada tipe inner join lainnya, theta join, kita tidak menggunakan operator persamaan (=) pada klausa ON. Sebagai gantinya, kami menggunakan operator non-kesetaraan seperti .

PILIH * DARI Tabel1 T1, Tabel2 T2 DI MANA T1.Harga

SQL self-join

Dalam self-join, SQL Server menggabungkan tabel dengan dirinya sendiri. Ini berarti nama tabel muncul dua kali dalam klausa from.

Di bawah ini, kami memiliki tabel [Emp] yang memiliki data karyawan dan manajer mereka. Self-join berguna untuk menanyakan data hierarkis. Misalnya, di tabel karyawan, kita dapat menggunakan self-join untuk mempelajari nama setiap karyawan dan manajer pelaporannya.

Kueri di atas menempatkan self-join pada tabel [Emp]. Ini menggabungkan kolom EmpMgrID dengan kolom EmpID dan mengembalikan baris yang cocok.

gabungan silang SQL

Dalam gabungan silang, SQL Server mengembalikan produk Cartesian dari kedua tabel. Misalnya, pada gambar di bawah, kami melakukan cross-join untuk tabel A dan B.

Cross join menghubungkan setiap baris dari tabel A ke setiap baris yang tersedia pada tabel B. Oleh karena itu, outputnya juga dikenal sebagai produk Cartesian dari kedua tabel. Pada gambar di bawah, perhatikan hal berikut:

  • Tabel [Karyawan] memiliki tiga baris untuk Emp ID 1,2 dan 3.
  • Tabel [Alamat] memiliki catatan untuk Emp ID 1,2,7 dan 8.

Pada output cross-join, baris 1 tabel [Employee] bergabung dengan semua baris tabel [Address] dan mengikuti pola yang sama untuk baris yang tersisa.

Jika tabel pertama memiliki x jumlah baris dan tabel kedua memiliki n jumlah baris, cross join memberikan x*n jumlah baris pada output. Anda harus menghindari penggabungan silang pada tabel yang lebih besar karena dapat mengembalikan sejumlah besar catatan dan SQL Server membutuhkan banyak daya komputasi (CPU, memori, dan IO) untuk menangani data yang begitu luas.

Gabungan luar SQL

Seperti yang kami jelaskan sebelumnya, gabungan dalam mengembalikan baris yang cocok dari kedua tabel. Saat menggunakan gabungan luar SQL, itu tidak hanya mencantumkan baris yang cocok, tetapi juga mengembalikan baris yang tidak cocok dari tabel lain. Baris yang tidak cocok bergantung pada kata kunci kiri, kanan, atau lengkap.

Gambar di bawah menjelaskan pada tingkat tinggi gabungan luar kiri, kanan dan penuh.

Gabung luar kiri

Gabung luar kiri SQL mengembalikan baris yang cocok dari kedua tabel bersama dengan baris yang tidak cocok dari tabel kiri. Jika record dari tabel kiri tidak memiliki baris yang cocok di tabel kanan, record dengan nilai NULL akan ditampilkan.

Pada contoh di bawah, gabungan luar kiri mengembalikan baris berikut:

  • Baris yang cocok:Emp ID 1 dan 2 ada di tabel kiri dan kanan.
  • Baris yang tidak cocok:Emp ID 3 tidak ada di tabel kanan. Oleh karena itu, kami memiliki nilai NULL dalam output kueri.

Gabung luar kanan

Gabung luar kanan SQL mengembalikan baris yang cocok dari kedua tabel bersama dengan baris yang tidak cocok dari tabel kanan. Jika record dari tabel kanan tidak memiliki baris yang cocok di tabel kiri, record dengan nilai NULL akan ditampilkan.

Pada contoh di bawah ini, kita memiliki baris output berikut:

  • Baris yang cocok:Emp ID 1 dan 2 ada di kedua tabel; oleh karena itu, baris ini adalah baris yang cocok.
  • Baris yang tidak cocok:Di tabel kanan, kami memiliki baris tambahan untuk Emp ID 7 dan 8, tetapi baris ini tidak tersedia di tabel kiri. Oleh karena itu, kami mendapatkan nilai NULL di gabungan luar kanan untuk baris ini.

Gabungan luar penuh

Gabung luar penuh mengembalikan baris berikut dalam output:

  • Mencocokkan baris antara dua tabel.
  • Baris yang tidak cocok mirip dengan gabungan luar kiri:Nilai NULL untuk baris yang tidak cocok dari tabel kanan.
  • Baris yang tidak cocok mirip dengan gabungan luar kanan:Nilai nol untuk baris yang tidak cocok dari tabel kiri.

SQL bergabung dengan beberapa tabel

Dalam contoh sebelumnya, kami menggunakan dua tabel dalam kueri SQL untuk melakukan operasi gabungan. Sebagian besar, kami menggabungkan beberapa tabel dan mengembalikan data yang relevan.

Kueri di bawah ini menggunakan beberapa gabungan dalam.

USE [AdventureWorks2019]
GO
SELECT 
e.[BusinessEntityID] 
,p.[FirstName] 
,p.[MiddleName] 
,p.[LastName] 
,e.[JobTitle]
,d.[Name] AS [Department] 
,d.[GroupName] 
,edh.[StartDate] 
FROM [HumanResources].[Employee] e
INNER JOIN [Person].[Person] p
ON p.[BusinessEntityID] = e.[BusinessEntityID]
INNER JOIN [HumanResources].[EmployeeDepartmentHistory] edh 
ON e.[BusinessEntityID] = edh.[BusinessEntityID] 
INNER JOIN [HumanResources].[Department] d 
ON edh.[DepartmentID] = d.[DepartmentID] 
WHERE edh.EndDate IS NULL
GO

Mari kita menganalisis kueri dalam langkah-langkah berikut:

  • Hasil antara 1:  Inner join pertama adalah antara tabel [HumanResources].[Employee] dan [Person].[Person].
  • Hasil antara 2:  Penggabungan dalam antara tabel [Hasil antara 1] dan [HumanResources].[EmployeeDepartmentHistory].
  • Hasil antara 3:  Penggabungan dalam antara tabel [Hasil antara 2] dan [Sumber Daya Manusia].[Departemen].

Setelah Anda menjalankan kueri dengan beberapa gabungan, pengoptimal kueri menyiapkan rencana eksekusi. Ini menyiapkan rencana eksekusi yang dioptimalkan biaya yang memenuhi kondisi gabungan dengan penggunaan sumber daya—misalnya, dalam rencana eksekusi aktual di bawah ini, kita dapat melihat beberapa loop bersarang (gabung dalam) dan pencocokan hash (gabung dalam) yang menggabungkan data dari beberapa tabel gabungan .

Nilai NULL dan SQL bergabung

Misalkan kita memiliki nilai NULL di kolom tabel, dan kita menggabungkan tabel pada kolom tersebut. Apakah SQL Server cocok dengan nilai NULL?

Nilai NULL tidak cocok satu sama lain. Oleh karena itu, SQL Server tidak dapat mengembalikan baris yang cocok. Dalam contoh di bawah ini, kami memiliki NULL di kolom EmpID dari tabel [Karyawan]. Oleh karena itu, dalam output, ia mengembalikan baris yang cocok untuk [EmpID] 2 saja.

Kita bisa mendapatkan baris NULL ini di output jika terjadi gabungan luar SQL karena ia juga mengembalikan baris yang tidak cocok.

SQL bergabung dengan praktik terbaik

Pada artikel ini, kami menjelajahi berbagai jenis gabungan SQL. Berikut adalah beberapa praktik terbaik yang penting untuk diingat dan diterapkan saat menggunakan gabungan SQL.

  • Inner join menampilkan baris yang cocok dari kondisi join di kedua tabel.
  • Gabungan silang mengembalikan produk Cartesian dari kedua tabel.
  • Gabungan luar mengembalikan baris yang cocok dan tidak cocok bergantung pada kata kunci kiri, kanan, dan lengkap.
  • SQL self-join menggabungkan tabel ke tabel itu sendiri.
  • Anda harus selalu menggunakan alias tabel saat menggunakan gabungan dalam kueri.
  • Selalu gunakan format nama dua bagian [tabel alias].[column] untuk kolom dalam kueri.
  • Dalam kasus beberapa SQL bergabung dalam kueri, Anda harus menggunakan urutan logis tabel sedemikian rupa untuk memenuhi kebutuhan data Anda dan meminimalkan aliran data antara berbagai operator dari rencana eksekusi.
  • Anda dapat menggabungkan beberapa gabungan seperti gabungan dalam, gabungan luar, dan gabungan mandiri. Namun, Anda harus menggunakan join dan order mereka untuk mendapatkan data yang dibutuhkan.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Mengurangi Ukuran File Data di SQL Server (T-SQL)

  2. Kembalikan Semua Batasan yang Dinonaktifkan di SQL Server (Contoh T-SQL)

  3. Tips untuk Memindahkan Database SQL Server dari Satu Server ke Server Lain - Tutorial SQL oleh Rajan Singh

  4. SQL Server dan Kerentanan Spectre/Meltdown

  5. Hitung jumlah catatan yang dikembalikan oleh grup menurut