Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Pengantar SQL Bergabung

Biasanya, Anda menarik data dari dua atau lebih tabel menggunakan WHERE klausa dalam kueri. Tetapi dalam sistem basis data relasional (RDBMS), ini dapat dicapai dengan menggunakan SELECT single tunggal pertanyaan. Ini adalah kekuatan sebenarnya dari sistem database relasional. Dalam panduan ini, Anda mempelajari tentang SQL Joins, cara yang ampuh untuk membandingkan dan memilih baris dan tabel.

Apa itu SQL Join?

Dalam SQL, sebuah join klausa memperluas kemampuan membandingkan dan memilih baris dari tabel. Ini menggunakan proses aljabar menggabungkan baris dari dua atau lebih tabel berdasarkan kolom terkait dalam tabel tersebut. Menurut definisi SQL standar ANSI, ada lima jenis Gabung –Cross Joins , Gabungan Dalam , Gabungan Kiri (Luar) , Gabungan Kanan(Luar) , dan Gabungan Penuh (Luar) . Gabung ini diimplementasikan di semua sistem basis data relasional dan tercakup dalam bagian di bawah ini.

Catatan Gabung dapat dilakukan pada sejumlah tabel dalam kueri tertentu. Untuk singkatnya dan kejelasan, panduan ini membahas Gabung yang diterapkan pada dua tabel.

Panduan ini menggunakan dua tabel, Employees dan Address , masing-masing, untuk mendemonstrasikan SQL Joins. Masing-masing tabel ini berisi definisi kolom dan data berikut:

  • Meja Karyawan

    EmployeeId EmployeeName
    1 John
    2 Maria
    3 Robert
  • Tabel Alamat

    Id State
    1 New York
    2 New Jersey
    3 Idaho
    4 Hawaii
Catatan Kecuali disebutkan sebaliknya, semua perintah dalam panduan ini bekerja dengan baik di kedua MySQL dan PostgreSQL database.

SQL Cross Bergabung

Juga dikenal sebagai Gabung Kartesius , Cross Joins terjadi ketika Anda menentukan beberapa tabel sebagai sumber untuk SELECT . Anda daftar kolom. Dalam hal ini, Anda meninggalkan WHERE klausa bergabung dengan ekspresi untuk mencocokkan baris. Himpunan hasil berisi satu baris untuk setiap kombinasi baris di antara tabel. Dalam skenario dua tabel, setiap baris dalam satu tabel dipasangkan dengan setiap baris tabel lainnya. Produk yang dihasilkan dikenal sebagai Produk Cartesian dari dua tabel. Sintaks untuk Cross Join adalah sebagai berikut:

(# Rows in Table A) TIMES (# of Rows in Table B)
Catatan

Dalam teori himpunan, Produk Cartesian adalah operasi perkalian yang menghasilkan semua pasangan terurut dari himpunan yang diberikan. Misalnya, pertimbangkan untuk mengatur A dengan elemen {a,b} dan atur B dengan elemen {1,2,3} . Hasil Kali Kartesius dari A dan B dilambangkan dengan AxB dan hasilnya adalah sebagai berikut:

AxB ={(a,1), (a,2), (a,3), (b,1), (b,2), (b,3)}

Sintaks SQL untuk Cross Join adalah sebagai berikut:

SELECT ColumnName_1,
       ColumnName_2,
       ColumnName_N
FROM [Table_1]
     CROSS JOIN [Table_2]

Dari sintaks di atas, Column_1 , Column_2 , Column_N mewakili kolom dalam tabel, dan CROSS JOIN klausa berfungsi untuk menggabungkan dua tabel, Table_1 dan Table_2 . Dari contoh tabel di atas, jika Anda perlu melakukan Cross Join pada Employees dan Address tabel, gunakan kode SQL berikut:

SELECT EmployeeName, State
FROM Employees
CROSS JOIN Address

Output dari kode SQL di atas menyerupai berikut ini:

+--------------+--------------+
| EmployeeName | State        |
+---------------+-------------+
| John         |   New York   |
| John         |   New Jersey |
| John         |   Idaho      |
| John         |   Hawaii     |
| John         |   New York   |
| Mary         |   New York   |
| Mary         |   New Jersey |
| Mary         |   Idaho      |
| Mary         |   Hawaii     |
| Robert       |   New York   |
| Robert       |   New Jersey |
| Robert       |   Idaho      |
| Robert       |   Hawaii     |
+------------+----------------+

Gabung Dalam SQL

Inner Join mengembalikan baris yang memiliki nilai yang cocok di kedua tabel. Jika tidak ada catatan yang cocok, maka tidak ada baris yang dikembalikan dalam hasil.

Sintaks SQL untuk Inner Join adalah sebagai berikut:

SELECT ColumnName_1,
       ColumnName_2,
       ColumnName_N
FROM Table_1
INNER JOIN Table_2
ON Table_1.key = Table_2.key;

Pada contoh di atas, key adalah kunci masing-masing dari tabel. Jika Anda perlu melakukan inner join pada Employees dan Address tabel, gunakan kode SQL berikut:

SELECT EmployeeName, State
FROM Employees
INNER JOIN Address
ON Employees.EmployeeId = Address.Id

Output dari kode SQL di atas menyerupai berikut ini:

+--------------+--------------+
| EmployeeName | State        |
+---------------+-------------+
| John         |   New York   |
| Mary         |   New Jersey |
+------------+----------------+

SQL Left (Luar) Bergabung

Gabung Kiri mengembalikan satu set lengkap baris dari tabel kiri bersama dengan baris yang cocok dari tabel kanan. Jika tidak ada record yang cocok, maka NULL nilai dikembalikan dari tabel kanan.

Catatan Beberapa implementasi database relasional menggunakan kata kunci “Left Outer Join”, sebagai lawan dari “Left Join”, tetapi secara fungsional setara.

Sintaks SQL untuk Left Join adalah sebagai berikut:

SELECT * FROM Table_1
LEFT JOIN Table_2
ON Table_1.key = Table_2.key

Pada contoh di atas, key adalah kunci masing-masing dari tabel. Jika Anda perlu melakukan join kiri pada Employees dan Address tabel, gunakan kode SQL berikut:

SELECT EmployeeName, State
FROM Employees
LEFT JOIN Address
ON Employees.EmployeeId = Address.Id

Output dari kode SQL di atas adalah sebagai berikut:

+--------------+--------------+
| EmployeeName | State        |
+---------------+-------------+
| John         |   New York   |
| Mary         |   New Jersey |
| Robert       |   NULL       |
+------------+----------------+

SQL Kanan (Luar) Gabung

Gabung Kanan mengembalikan satu set lengkap baris dari tabel kanan dan baris yang cocok dari tabel kiri. Ini juga dikenal sebagai Gabung Luar Kanan. Jika tidak ada record yang cocok, maka NULL nilai dikembalikan dari tabel kanan, untuk baris yang terpengaruh di tabel kiri.

Catatan Beberapa implementasi database relasional menggunakan kata kunci “Right Outer Join”, sebagai lawan dari “Right Join”, tetapi secara fungsional setara.

Sintaks SQL untuk Right Join adalah sebagai berikut:

SELECT * FROM Table_1
RIGHT JOIN Table_2
ON Table_1.key = Table_2.key

Dari kode di atas, key adalah kunci masing-masing dari tabel. Jika Anda perlu melakukan join yang benar pada Employees dan Address tabel, gunakan kode SQL berikut:

SELECT EmployeeName, State
FROM Employees
RIGHT JOIN Address
ON Employees.EmployeeId = Address.Id

Output dari kode SQL di atas adalah sebagai berikut:

+--------------+--------------+
| EmployeeName | State        |
+---------------+-------------+
| John         |   New York   |
| Mary         |   New Jersey |
| NULL         |   Idaho      |
| NULL         |   Hawaii     |
+------------+----------------+

Gabung SQL Penuh (Luar)

Gabung Penuh mengembalikan semua baris dari tabel kiri, semua baris dari tabel kanan. Ini juga dikenal sebagai Full Outer Join. Gabung Penuh juga mengembalikan semua catatan yang cocok dari kedua tabel jika tersedia. Jika tidak ada record yang cocok, maka NULL nilai dikembalikan dari tabel kiri. Itu juga mengembalikan NULL nilai dari tabel kanan.

Catatan Beberapa implementasi basis data relasional menggunakan kata kunci “Full Outer Join”, sebagai lawan dari “Full Join”, tetapi keduanya secara fungsional setara.

Sintaks SQL untuk Full Join adalah sebagai berikut:

SELECT * FROM Table1
FULL JOIN Table2
ON Table1.key = Table2.key

Pada kode di atas, key adalah kunci masing-masing dari tabel. Jika Anda perlu melakukan join penuh pada Employees dan Address tabel, gunakan kode SQL berikut:

SELECT EmployeeName, State
FROM Employees
FULL JOIN Address
ON Employees.EmployeeId = Address.Id

Output dari kode SQL di atas adalah sebagai berikut:

+--------------+--------------+
| EmployeeName | State        |
+---------------+-------------+
| John         |   New York   |
| Mary         |   New Jersey |
| Robert       |   NULL       |
| NULL         |   Idaho      |
| NULL         |   Hawaii     |
+------------+----------------+
Catatan Selama perhitungan Gabung, jika Anda membandingkan data tabel dengan NULL nilai, mereka tidak cocok satu sama lain. Oleh karena itu, NULL nilai hanya dikembalikan sebagai bagian dari hasil Gabung dan diabaikan selama perhitungan Gabung.

Perbandingan Kinerja SQL Joins

Mempertimbangkan tabel contoh di atas, Inner Join biasanya yang tercepat dari lima klausa Join dalam hal kinerja database. Gabung Kiri dan Gabung Kanan adalah yang tercepat berikutnya tergantung pada ukuran kedua tabel. Gabung Penuh biasanya lebih lambat daripada Gabung Kiri atau Gabung Kanan. Cross Join, bergantung pada produk Cartesian dari dua tabel, biasanya paling lambat dalam hal kinerja database. Hirarki kinerja yang ditentukan mungkin berbeda tergantung pada panjang kolom tabel, tipe data kolom, dan definisi kunci.

Kesimpulan

Penggunaan SQL Joins memperluas fungsionalitas untuk dapat membandingkan baris tabel, melalui WHERE tradisional pertanyaan klausa. Gabung adalah mekanisme yang berharga untuk menerapkan logika aljabar ke dua atau lebih tabel.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. menghitung jumlah waktu tipe menggunakan sql

  2. Query MySQL Umum Teratas

  3. menampilkan data dari database SQL ke tabel php/html

  4. Haruskah saya menggunakan tipe data datetime atau timestamp di MySQL?

  5. Bagaimana cara mendapatkan semua nilai dalam kolom menggunakan PHP?