 |
|
|
 |
 |
|
p(id,pname,c_id) //product
1,a,2
2,b,2
3,c,2
3,d,999
c(id,cname) //category
1,c1
2,c2
3,c3
เรา เอา p join c เพราะต้องการข้อมูลของตาราง c มาใช้
(จะไม่แสดงรายการที่มี c_id = 999 เพราะไม่มีค่า 999 อยู่ในตาราง c)
SELECT pname,cname FROM p INNER JOIN c ON p.c_id=c.id
a,c2
b,c2
c,c2
เรา เอา p join c เพราะต้องการข้อมูลของตาราง c มาใช้โดยไม่คำนึงว่า p.c_id จะมีอยู่ในตาราง c หรือเปล่า
(จะแสดงรายการที่มี c_id = 999 แม้ว่าไม่มีค่า 999 อยู่ในตาราง c
โดย column ต่างๆ ที่อยู่ในตาราง c ในรายการดังกล่าวจะมีค่า NULL )
SELECT pname,cname FROM p LEFT JOIN c ON p.c_id=c.id
a,c2
b,c2
c,c2
d,NULL
ถ้าจุดสำคัญคือต้องการแสดงรายการ product ทั้งหมดก็ใช้ left join ครับ
แต่ถ้าต้องการเฉพาะ product ที่มี category เท่านั้นก็ใช้ inner join ครับผม
|
 |
 |
 |
 |
Date :
2009-08-27 18:16:38 |
By :
num |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
inner join จะเป็นการ join กันของสองตารางโดยข้อมูลที่ออก มาจะต้อง มีการจับคู่ของสมาชิก ถ้า สมาชิกในตารางตัวใดไม่มีการจับคู่ จะไม่ถูกดึงออกมา เช่นสมมติว่า มี ตารางพนักงาน กับตาราง แผนก
แผนก
รหัสแผนก ชื่อแผนก
01 Computer
02 Business
พนักงาน
รหัสพนักงาน ชื่อพนักงาน รหัสแผนกที่สังกัด
01 สมชาย 01
02 สมหญิง NULL ==> ไม่มีแผนก ไม่ได้จับคู่กับแผนก
03 สมหมาย 01
สังเกตข้อมูลในสองตารางหาก เราใข้ inner join
(select รหัสพนักงาน , ชื่อพนักงาน , ชื่อแผนก
from แผนก , พนักงาน
where รหัสแผนกที่สังกัด = รหัสแผนก)
เพื่อดูว่า พนักงานอยู่แผนกอะไร สิ่งที่จะได้คือ
01 สมชาย computer
03 สมหมาย computer
เท่านั้น สังเกตว่า แผนกที่ไม่ได้จับคู่กับพนักงานซึ่งก็คือ business จะไม่ออก มา และ คนที่ไม่ได้ จับคู่กับแผนกคือ สมหญิง ก็จะไม่ออกมาเช่นกัน หาก ต้องการให้ออกเช่น
01 สมชาย computer
02 สมหญิง NULL ==> เพื่อให้ ทราบว่าพนักงานคนใดยังไม่มีแผนก
03 สมหมาย computer
ก็จะต้องใช้ outer join นั่นเองและต้องเลือกว่า จะ left outer join หรือ right outer join อีกด้วยค่ะ
|
 |
 |
 |
 |
Date :
2009-08-27 18:17:39 |
By :
cinderalla |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
OUTTER JOIN จะตรงข้ามกับ INNER JOIN
|
 |
 |
 |
 |
Date :
2009-08-28 11:32:52 |
By :
taobsd |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|