คำสั่ง join ของภาษา SQL นั้นใช้สำหรับดึงข้อมูลออกมาจากตาราง ตั้งแต่ 2 ตารางขึ้นไป (ขึ้นไปนะครับ นั่นหมายความว่าคุณจะ join กันกี่ตารางก็ได้ แต่แนะนำว่า อย่าเยอะมากเดี๋ยวโปรแกรมจะช้า) โดยอาศัยความสัมพันธ์ระหว่าง primary key และ foreign key
primary key ก็คือฟิลด์ที่มีค่าไม่ซ้ำกันเลย
foreign key ก็คือฟิลด์ที่เก็บ primary key ของอีกตาราง ใช้สำหรับสร้างความสัมพันธ์ของข้อมูลระหว่าง 2 ตาราง
ดูตัวอย่างตารางนี้
P_Id | LastName | FirstName | Address | City |
---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes |
2 | Svendson | Tove | Borgvn 23 | Sandnes |
3 | Pettersen | Kari | Storgt 20 | Stavanger |
โปรดสังเกตว่าคอลัมน์ “P_Id” ก็คือ primary key ของตาราง ซึ่งข้อมูลจะไม่ซ้ำกันเลยในแต่ละแถว (คุณอย่ามองว่า LastName ก็มีค่าไม่ซ้ำ อันนี้ข้อมูลมันน้อย ถ้าข้อมูลเยอะ มันมีโอกาสที่คนจะชื่อเหมือนกันได้ แต่ “P_Id” มันจะมีค่า +1 ไปเรื่อยๆ จนเป็นล้าน ก็ไม่ซ้ำ)
ต่อไปดูที่ตารางนี้
O_Id | OrderNo | P_Id |
---|---|---|
1 | 77895 | 3 |
2 | 44678 | 3 |
3 | 22456 | 1 |
4 | 24562 | 1 |
5 | 34764 | 15 |
คอลัมน์ “O_Id” เป็น primary key ของตารางนี้ และคอลัมน์ “P_Id” เป็น foreign key (เราให้เก็บ primary key ของตารางข้างบน)
โปรดสังเกตว่า เราสามารถทราบได้ว่า OrderNo หมายเลข 44678 เป็นของใคร ก็โดยการเอา P_Id ไปหาในอีกตาราง
พูดไปซะยาวถึงเรื่อง join หรือยังเนี่ย เอาล่ะ ทีนี้ถ้าเราใช้คำสั่ง SQL
SELECT * FROM tbl_order JOIN tbl_person ON (tbl_order.P_Id=tbl_person.P_Id) |
ผลลัพธ์ที่ได้จะเท่ากับเอา 2 ตารางมารวมกัน โดยเอา P_Id สร้างความสัมพันธ์ระหว่าง 2 ตาราง ซึ่ง P_Id จะต้องมีทั้ง 2 ตารางจึงจะให้ผลลัพธ์ ถ้ามีในตารางใดตารางหนึ่ง จะถูกคัดทิ้ง
mc says:
16/10/2552 at 16/10/2552
อยากถามครับ มือใหม่จริงๆ
ต้องการ join ตาราง 3 ตารางเข้าด้วยกันครับ
สมมุติ
table1=field(ID_member,Subject,ect.)
table2=field(ID_member,realname,ID_board,ect.)
table3=field(ID_board,board_name)
ต้องการดึง Subject จาก table1 ออกมาแสดง และใช้ ID_member จาก table1 ไปเป็นตัวอ้างอิง ID_member จาก table2 เพื่อดึง realname ออกมาแสดง
และใช้ ID_board จาก table2 เป็นตัวอ้างอิง ID_board จาก table3 เพื่อดึง board_name ออกมาแสดง
ต้องทำอย่างไรครับ
administrator says:
16/10/2552 at 16/10/2552
อ่านได้ที่นี่ครับ http://www.select2web.com/mysql/left-join-3-table.html
mc says:
17/10/2552 at 17/10/2552
ได้แล้วครับ….ขอบคุณมากครับ โอกาสหน้าถ้ามีปัญหาจะนำมาถามอีกครับ
pongtornz says:
24/02/2553 at 24/02/2553
SELECT * from ชื่อตาราง1
LEFT JOIN ชื่อตาราง2 ON (ชื่อตาราง1.คีร่วม = ชื่อตาราง2.คีร่วม)
LEFT JOIN ชื่อตาราง3 ON (ชื่อตาราง3.คีร่วม=ชื่อตาราง1.คีร่วม)
;
kitty says:
20/05/2554 at 20/05/2554
ขอบคุณมากนะคะ….ที่ให้ความรู้
ขอบคุณค๊าบบบบบบ
phet says:
25/01/2556 at 25/01/2556
สะหวัดดี ครับ
จาก table tbl_order ,tbl_person ข้างบน
คือผมยาก search คำว่า Pettersen แล้วให้ สะแดง ข้อมูน ของ Pettersen ที่มือยูใน ,tbl_person ได้ยังไงครับ
phet says:
25/01/2556 at 25/01/2556
ขอโทดครับ พีมผิดคับ พีมไทยไม เก่งครับ เปันคน ลาว ครับ
สะหวัดดี ครับ
จาก table tbl_order ,tbl_person ข้างบน
คือผมยาก search คำว่า Pettersen แล้วให้ สะแดง ข้อมูน ของ Pettersen ที่มือยูใน , tbl_order ได้ยังไงครับ
วัชรเมธน์ ชิษณุคุปต์ ศรีเนธิโรทัย says:
25/01/2556 at 25/01/2556
ยินดีต้อนรับพี่น้องชาวลาวครับ คุณใช้ภาษาไทยได้ดีมากเลยครับ ยอดเยี่ยมครับขอคารวะ
ค้นหาแบบตรงตัว
หรือ
ค้นหาแบบคำใกล้เคียง
phet says:
25/01/2556 at 25/01/2556
คอบคุน ครับ พี วัชรเมธน์
เรวัฒน์ บุญชู says:
31/12/2556 at 31/12/2556
ขอบคุณมากเลยครับ ผมอ่านมาหลายเว็บมาเข้าใจ กับเว็บ http://www.select2web.com/mysql/sql-join.html
ขอบคุณจริงๆ