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

MySql. Cara menggunakan Gabung Sendiri

Kalian sangat dekat!

Karena Anda mengatakan Anda menampilkan negara dan tahun dari A dan dibatasi oleh A. Country dari Turki, hanya Turki yang akan Anda lihat. Anda juga perlu mengubah pilihan menjadi B.country dan B.year atau ubah klausa where menjadi B.country .

Ini menggunakan gabungan silang yang akan semakin lambat semakin banyak catatan yang ada di tabel.

SELECT DISTINCT b.Country, b.Year 
FROM table1 AS a, 
     table1 AS b 
WHERE a.Year=b.Year 
  and a.Country='Turkey';

dapat ditulis sebagai... dan kemungkinan akan memiliki rencana eksekusi yang sama.

SELECT DISTINCT b.Country, b.Year 
FROM table1 AS a 
CROSS JOIN table1 AS b 
WHERE a.Year=b.Year 
  and a.Country='Turkey';

ATAUIni menggunakan INNER JOIN yang membatasi pekerjaan yang harus dilakukan mesin dan tidak mengalami penurunan kinerja seperti yang akan terjadi pada cross join.

SELECT DISTINCT a.Country, a.Year 
FROM table1 AS a 
INNER JOIN table1 AS b 
   on a.Year=b.Year 
  and b.Country='Turkey';

MENGAPA:

Pertimbangkan apa yang akan dilakukan mesin SQL saat penggabungan terjadiA B

+------------+------+--------+------------+------+--------+
| A.Country  | Rank |  Year  | B.Country  | Rank |  Year  |
+------------+------+--------+------------+------+--------+
|France      |  55  |  2000  |France      |  55  |  2000  |
+------------+------+--------+------------+------+--------+
|Canada      |  30  |  2000  |France      |  55  |  2000  |
+------------+------+--------+------------+------+--------+ 
|Turkey      |  78  |  2000  |France      |  55  |  2000  |
+------------+------+--------+------------+------+--------+ 
|France      |  55  |  2000  |Canada      |  30  |  2000  |
+------------+------+--------+------------+------+--------+
|Canada      |  30  |  2000  |Canada      |  30  |  2000  |
+------------+------+--------+------------+------+--------+ 
|Turkey      |  78  |  2000  |Canada      |  30  |  2000  |
+------------+------+--------+------------+------+--------+ 
|France      |  55  |  2000  |Turkey      |  78  |  2000  |
+------------+------+--------+------------+------+--------+
|Canada      |  30  |  2000  |Turkey      |  78  |  2000  |
+------------+------+--------+------------+------+--------+ 
|Turkey      |  78  |  2000  |Turkey      |  78  |  2000  |
+------------+------+--------+------------+------+--------+ 

Jadi ketika Anda mengatakan tampilkan A.Country dan A.Year di mana A.Country adalah Turki, Anda dapat melihat semua yang dapat dikembalikan adalah Turki (karena hanya 1 catatan yang berbeda)

Tetapi jika Anda melakukan B.Country adalah Turki dan tampilkan A.Country , Anda akan mendapatkan Prancis, Kanada, dan Turki!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Stempel waktu paksa hibernasi untuk bertahan/memuat sebagai UTC

  2. ORD() Contoh – MySQL

  3. UPDATE tabel MySQl sederhana dari array php

  4. libmysqlclient15-dev di mac?

  5. Bagaimana cara memeriksa apakah PHP sudah terhubung ke database?