Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

จะใช้ MySQL JOIN โดยไม่มีเงื่อนไขได้อย่างไร?


เราสามารถใช้ 'การเข้าร่วมแบบไขว้' โดยไม่มีเงื่อนไข Cross join ให้ผลลัพธ์ในรูปแบบผลิตภัณฑ์คาร์ทีเซียน ตัวอย่างเช่น หากในตารางหนึ่งมี 3 ระเบียนและอีกตารางมี 2 ระเบียน ระเบียนแรกจะตรงกับระเบียนตารางที่สองทั้งหมด จากนั้น กระบวนการเดียวกันจะถูกทำซ้ำสำหรับบันทึกที่สองเป็นต้น

ตัวอย่างการโยงข้าม

การสร้างตารางแรก

mysql> สร้างตาราง ForeignTableDemo -> ( -> Id int, -> ชื่อ varchar(100), -> FK int -> ); ตกลง ตกลง 0 แถวได้รับผลกระทบ (0.47 วินาที)

การสร้างตารางที่สอง

mysql> สร้างตาราง PrimaryTableDemo -> ( -> FK int, -> Address varchar(100), -> primary key(FK) -> );Query OK, 0 แถวได้รับผลกระทบ (0.47 วินาที)

การเพิ่มข้อจำกัด

mysql> แก้ไขตาราง ForeignTableDemo เพิ่มข้อจำกัด FKConst foreign key(FK) อ้างอิง PrimaryTableDemo(FK) แบบสอบถามตกลง 0 แถวได้รับผลกระทบ (1.54 วินาที) ระเบียน:0 รายการซ้ำ:0 คำเตือน:0

เพื่อเพิ่มบันทึกลงในตารางที่สอง

mysql> INSERT เป็นค่า PrimaryTableDemo (1,'US');Query OK, 1 แถวได้รับผลกระทบ (0.10 วินาที)mysql> INSERT เป็นค่า PrimaryTableDemo (2,'UK');Query OK, 1 แถวได้รับผลกระทบ (0.14 วินาที )mysql> INSERT ลงในค่า PrimaryTableDemo (3,'Unknown');Query OK, 1 แถวได้รับผลกระทบ (0.08 วินาที)

กำลังแสดงบันทึกของตารางที่สอง

mysql> SELECT * จาก PrimaryTableDemo;

ต่อไปนี้เป็นผลลัพธ์ของแบบสอบถามข้างต้น

<ก่อนหน้า>+----+---------+| FK | ที่อยู่ |+---+---------+| 1 | สหรัฐอเมริกา || 2 | สหราชอาณาจักร || 3 | Unknown |+----+---------+3 แถวในชุด (0.00 วินาที)

หากต้องการเพิ่มระเบียนลงในตารางแรก

mysql> INSERT เป็นค่า ForeignTableDemo (1,'John',1);Query OK, 1 แถวได้รับผลกระทบ (0.20 วินาที)mysql> INSERT เป็นค่า ForeignTableDemo (2,'Bob',2); แบบสอบถามตกลง 1 แถว ได้รับผลกระทบ (0.27 วินาที)

การแสดงระเบียนโดยใช้คำสั่ง SELECT

mysql> SELECT * จาก ForeignTableDemo;

ต่อไปนี้เป็นผลลัพธ์

<ก่อนหน้า>+------+------+------+| รหัส | ชื่อ | FK |+------+------+------+| 1 | จอห์น | 1 || 2 | บ๊อบ | 2 |+------+------+------+2 แถวในชุด (0.00 วินาที)

เราได้สร้างข้อจำกัดของคีย์ต่างประเทศสำหรับตารางทั้งหมด ตอนนี้หากต้องการใช้ "การเข้าร่วมแบบไขว้" โดยไม่เปิด ให้เราดูไวยากรณ์

mysql> SELECT ForeignTableDemo.Id, ForeignTableDemo.Name, PrimaryTableDemo.Address -> จาก ForeignTableDemo -> ข้ามเข้าร่วม PrimaryTableDemo;

นี่คือผลลัพธ์

<ก่อนหน้า>+------+------+---------+| รหัส | ชื่อ | ที่อยู่ |+------+------+---------+| 1 | จอห์น | สหรัฐอเมริกา || 2 | บ๊อบ | สหรัฐอเมริกา || 1 | จอห์น | สหราชอาณาจักร || 2 | บ๊อบ | สหราชอาณาจักร || 1 | จอห์น | Unknown || 2 | บ๊อบ | Unknown |+------+------+---------+6 แถวในชุด (0.00 วินาที)