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

SQL Cross Gabung

Artikel ini memberikan gambaran umum tentang CROSS JOIN dalam SQL, serta beberapa contoh dasar.

SQL CROSS JOIN (atau FULL OUTER JOIN ) mengembalikan baris yang menggabungkan setiap baris dari tabel pertama dengan setiap baris dari tabel kedua.

Dengan kata lain, ini mengembalikan produk Cartesian dari baris dari tabel di gabungan.

Sintaks

Anda menentukan gabungan silang di FROM ayat.

Sintaksnya seperti ini:

SELECT *
FROM Table1 CROSS JOIN Table2 
ON Table1.Column = Table2.Column;

Contoh 1

Berikut ini contoh untuk didemonstrasikan.

Contoh Data

Pertama, berikut adalah tabel yang akan kita gunakan sebagai contoh.

t1 tabel:

+--------+
| col1   |
|--------|
| a      |
| b      |
| c      |
+--------+

t2 tabel:

+--------+
| col1   |
|--------|
| 1      |
| 2      |
| 3      |
+--------+

Kueri Gabung Salib

Berikut adalah contoh melakukan cross join terhadap kedua tabel tersebut.

SELECT * FROM t1 
CROSS JOIN t2;

Hasil:

+--------+--------+
| col1   | col1   |
|--------+--------|
| a      | 1      |
| b      | 1      |
| c      | 1      |
| a      | 2      |
| b      | 2      |
| c      | 2      |
| a      | 3      |
| b      | 3      |
| c      | 3      |
+--------+--------+
(9 rows affected)

Jadi kueri kami mengembalikan 9 baris, meskipun hanya ada 3 baris di setiap tabel.

Ini karena cara kerja cross join. Jumlah baris yang dikembalikan adalah jumlah baris pada tabel kiri, dikalikan dengan jumlah baris pada tabel kanan.

Lihat bagaimana iterasi melalui tabel kiri, menampilkan setiap baris di tabel kanan untuk setiap baris di tabel kiri.

Ini memiliki efek yang sama dengan melakukan hal berikut:

SELECT * FROM t1, t2

Hasil:

+--------+--------+
| col1   | col1   |
|--------+--------|
| a      | 1      |
| b      | 1      |
| c      | 1      |
| a      | 2      |
| b      | 2      |
| c      | 2      |
| a      | 3      |
| b      | 3      |
| c      | 3      |
+--------+--------+
(9 rows affected)

Contoh 2

Inilah yang terjadi jika kita menambahkan WHERE klausa untuk bergabung silang kami.

SELECT * FROM t1 
CROSS JOIN t2
WHERE t1.col1 = 'a';

Hasil:

+--------+--------+
| col1   | col1   |
|--------+--------|
| a      | 1      |
| a      | 2      |
| a      | 3      |
+--------+--------+
(3 rows affected)

Contoh 3

Misalkan kita memiliki tabel berikut.

PetTypes tabel:

+-------------+-----------+
| PetTypeId   | PetType   |
|-------------+-----------|
| 1           | Bird      |
| 2           | Cat       |
| 3           | Dog       |
| 4           | Rabbit    |
+-------------+-----------+
(4 rows affected)

Pets tabel:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 1       | 2           | 3         | Fluffy    | 2020-11-20 |
| 2       | 3           | 3         | Fetch     | 2019-08-16 |
| 3       | 2           | 2         | Scratch   | 2018-10-01 |
| 4       | 3           | 3         | Wag       | 2020-03-15 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
| 6       | 3           | 4         | Fluffy    | 2020-09-17 |
| 7       | 3           | 2         | Bark      | NULL       |
| 8       | 2           | 4         | Meow      | NULL       |
+---------+-------------+-----------+-----------+------------+
(8 rows affected)

Dalam hal ini, Pets.PetTypeId kolom adalah kunci asing dari PetTypes.PetTypeId kolom.

Sekarang, inilah contoh menjalankan cross join pada kedua tabel tersebut, tetapi menggunakan WHERE klausa.

SELECT 
    p.PetName,
    pt.PetType
FROM Pets p 
CROSS JOIN PetTypes pt
WHERE p.PetTypeId = pt.PetTypeId;

Hasil:

+-----------+-----------+
| PetName   | PetType   |
|-----------+-----------|
| Fluffy    | Cat       |
| Fetch     | Dog       |
| Scratch   | Cat       |
| Wag       | Dog       |
| Tweet     | Bird      |
| Fluffy    | Dog       |
| Bark      | Dog       |
| Meow      | Cat       |
+-----------+-----------+
(8 rows affected)

Menambahkan WHERE klausa ke cross join mengubahnya menjadi inner join.

Inilah yang terjadi jika kita menghapus WHERE klausa.

SELECT 
    p.PetName,
    pt.PetType
FROM Pets p 
CROSS JOIN PetTypes pt;

Hasil:

+-----------+-----------+
| PetName   | PetType   |
|-----------+-----------|
| Fluffy    | Bird      |
| Fetch     | Bird      |
| Scratch   | Bird      |
| Wag       | Bird      |
| Tweet     | Bird      |
| Fluffy    | Bird      |
| Bark      | Bird      |
| Meow      | Bird      |
| Fluffy    | Cat       |
| Fetch     | Cat       |
| Scratch   | Cat       |
| Wag       | Cat       |
| Tweet     | Cat       |
| Fluffy    | Cat       |
| Bark      | Cat       |
| Meow      | Cat       |
| Fluffy    | Dog       |
| Fetch     | Dog       |
| Scratch   | Dog       |
| Wag       | Dog       |
| Tweet     | Dog       |
| Fluffy    | Dog       |
| Bark      | Dog       |
| Meow      | Dog       |
| Fluffy    | Rabbit    |
| Fetch     | Rabbit    |
| Scratch   | Rabbit    |
| Wag       | Rabbit    |
| Tweet     | Rabbit    |
| Fluffy    | Rabbit    |
| Bark      | Rabbit    |
| Meow      | Rabbit    |
+-----------+-----------+
(32 rows affected)

Kami mendapatkan gabungan silang yang mengembalikan 32 baris.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL ORDER BY:5 Tindakan dan Larangan untuk Mengurutkan Data Seperti Seorang Profesional

  2. Apa itu Aplikasi Waktu Nyata?

  3. Menggunakan Ekspresi untuk Memfilter Data Database

  4. Pengoptimalan Basis Data:Indeks

  5. Spreadsheet vs. Database:Apakah Saatnya Beralih? Bagian 1