ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comพัฒนาเว็บไซต์Programmingขอถามเรื่องการเชื่อ SQL 2 ตาราง เข้าด้วยกัน
หน้า: [1]   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: ขอถามเรื่องการเชื่อ SQL 2 ตาราง เข้าด้วยกัน  (อ่าน 9929 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
SL_master
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 57
ออฟไลน์ ออฟไลน์

กระทู้: 1,188



ดูรายละเอียด เว็บไซต์
« เมื่อ: 09 กรกฎาคม 2010, 14:57:04 »

รบกวนถามหน่อยนะครับ

ผมมีความรู้เรื่อง SQL จากการเรียนพิเศษ เพื่อแค่ให้ได้ใช้เป็นเท่านั้น
จึงรู้แค่ว่าใช้งานอย่างไร แต่ยังไม่รู้ลึก

พอดีมีโอกาสได้ไปแอบเรียน วิชา Database(SQL) ของ ป.โท
จึงได้ความรู้มาว่า การเชื่อมฐานข้อมูล 2 ฐานเข้าด้วยกัน
เกิดจากการที่เอาจำนวนข้อมูลของทั้ง 2 ฐาน มาคูณกันทุกๆตาราง แล้ว จึงค่อยมาหา WHERE

ดังเช่น(แบบที่1)
SELECT * FROM tableA,tableB
ก็จะเป็นการเอาจำนวนของทั้ง 2 ฐาน มาคูณกัน

แต่ถ้า(แบบที่2)
SELECT * FROM tableA,tableB WHERE tableA.ID_A = tableB.ID_B
ถึงแม้จะทำแบบนี้ ก็ยังเป็นการนำ 2 ฐานมาคุณกันอยู่ดี แล้วค่อยดึงข้อมูลเฉพาะ tableA.ID_A = tableB.ID_B ออกมา





ตามที่ผมเข้าใจ
1. ทั้ง 2 แบบนั้น ใช้ทรัพยากรเครื่องเท่ากัน ถ้าไม่นับmem ที่ต้องใช้เก็บข้อมูล?
2. โดยปรกติผมจะชอบเชื่อมตารางไว้ใน query เดียว แต่พอได้ความรู้นี้มาแล้ว ผมคิดว่าหากทั้ง 2 ฐาน มีข้อมูล 1หมื่นข้อมูลขึ้นไป ควรแยกเป็นการ query คนละที จะดีกว่า หรือไม่?


พอดีดันไปรู้เรื่องนี้มา จึงมานั่งเครียดว่าทั้งหมดที่ทำไป เป็นการเชื่อมฐานเข้าด้วยกัน ทั้งสิ้น หากเป็นจริงดังคำถาม
จะได้แยกฐานข้อมูลออกจากกัน


ขอบคุณครับ
« แก้ไขครั้งสุดท้าย: 09 กรกฎาคม 2010, 14:59:30 โดย SL_master » บันทึกการเข้า

djopor
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 43
ออฟไลน์ ออฟไลน์

กระทู้: 1,266



ดูรายละเอียด เว็บไซต์
« ตอบ #1 เมื่อ: 09 กรกฎาคม 2010, 18:06:39 »

งง ครับ - -*

ลอง search หาคำว่า php หรือ asp sql join table ดูครับ

แต่เป็นผมจะทำแค่ table เดียว เพราะขี้เกียจมา join ผมคิดว่าในบางเวลาที่คนใช้งานเยอะๆหรือข้อมูลเยอะ ผมว่ามันจะหนักใช้ได้เลยทีเดียวครับ
บันทึกการเข้า

รับทำเว็บไซต์, CMS, Android App,IOS App ตามสั่งตามเงิน สนใจ ดูผลงานและทักมาสอบถามได้ครับ ช่องทางติดต่อ

Freelance Website Fast Host inter
P2E
kitazawa1st
สมุนแก๊งเสียว
*

พลังน้ำใจ: 29
ออฟไลน์ ออฟไลน์

กระทู้: 563



ดูรายละเอียด
« ตอบ #2 เมื่อ: 10 กรกฎาคม 2010, 08:53:40 »

ถ้าคิดว่าข้อมูลจะเพิ่มขึ้นเรื่อยๆในอนาคต ก็เขียนให้มันแยก query ไปเลยดีกว่าครับ

และไม่ควรใช้ SELECT * นะครับ จะดึงอะไรก็ระบุไปเลย แล้วใน WHERE ควรตั้งเงื่อนไขให้ชัดเจน

อยู่ให้ห่าง join ไว้เป็นดีที่สุดครับ

 Lips Sealed
บันทึกการเข้า

เล็กสั้น ขยันซอย
kobkung
Verified Seller
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 103
ออฟไลน์ ออฟไลน์

กระทู้: 1,312



ดูรายละเอียด เว็บไซต์
« ตอบ #3 เมื่อ: 10 กรกฎาคม 2010, 15:58:15 »

เคยคิดเรื่องนี้เหมือนกัน ปวดหมองมากๆ

เพื่อนที่อินเดียเขาสรุปให้ผมมาว่า มันเป็นการรันบน net ไม่เหมือนพวก c ใช้แบบแยกดีกว่า
เห็นมีคนบอก join เร็วกว่า แต่เขาบอกว่า มัน query คนละที ไม่ต้องสร้างตัวแปรเพิ่ม  join มันต้อง as อีก
เหมือนสร้างลอยๆ มาใช้งาน  การทำงานเขาบอกว่าให้  base เป็นแค่ตัวเก็บข้อมูลแล้วเรียกใช้ อย่าไปให้มันทำงานมาก
ให้ผลักภาระมาที่ code เอา แล้วอัพ server เอา ไม่งั้น base จะหนักเกิน

ไม่รู้สิยังไม่ได้คำตอบแน่ชัด แต่ทุกวันนี้แยก แล้ว where เอา เห็นเขาลือกันว่าไม่ต่างกันมาก เอาแบบนี้ไปก่อนละกัน
ไว้โปรเจคเสร็จจะลองจับเวลาดู เว็บนี้ใหญ่หน่อย คนเข้าเป็นหมื่น จะเห็นความต่าง
เคยแปลๆ article นอก ยัง งงๆ อยู่ ไม่ได้จริงจังนักเรื่องนี้
บันทึกการเข้า

เราเป็นบริษัท รับทำเว็บไซต์ แก้เว็บเดิม เขียน Php+Mysql+jQuery+css+bootstrap  งานตามสั่ง ประสบการณ์ จะ 19 ปี ละจ้า
Smilephp.com รับทำเว็บไซต์บริษัท e-commerce + ระบบชำระเงิน paypal,ธนาคาร  เว็บบริษัท เว็บขายของ ระบบจอง เช่า เขียน PHP ได้ทุกแนว  ช่วงนี้เน้นรับงาน ERP ระบบเอกสารบริษัท ,บัญชี ,  Barcode, Stock , Warehouse , Logistic ติดต่อ 086-364-5262

งดตอบคนทำเว็บนอกลู่นอกทาง ไม่ทำเว็บ WP ปั่นแชร์ เว็บประมูล สคริปปั่นใดๆ ไม่ทำเว็บบอลและพ
Etaba
ก๊วนเสียว
*

พลังน้ำใจ: 16
ออฟไลน์ ออฟไลน์

กระทู้: 207



ดูรายละเอียด
« ตอบ #4 เมื่อ: 10 กรกฎาคม 2010, 16:09:45 »

ไม่รู้อะครับ เคยใช้แต่ join
บันทึกการเข้า
เฮียเล้ง
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 57
ออฟไลน์ ออฟไลน์

กระทู้: 1,196



ดูรายละเอียด
« ตอบ #5 เมื่อ: 10 กรกฎาคม 2010, 17:14:41 »

บางครั้ง join ก็ทำสิ่งที่ select ทำไม่ได้

เช่น
[programmer_id | projectman_id ] กับ [laber_id, laber_name]

เป็นแบบต้องการเอา ชื่อโปรแกรมเมอร์+ชื่อโปรเจกเมนเนเจอ ใช้ select ไม่ได้เพราะมัน form table เีดียวกัน เลยต้องมี join ที่เรียก table เดียวกันโดยใช้ as ได้

คิดว่าการทำงานคงหนักพอกัน

ปล. มั่วๆ  wanwan004
บันทึกการเข้า

massacre
Newbie
*

พลังน้ำใจ: 4
ออฟไลน์ ออฟไลน์

กระทู้: 48



ดูรายละเอียด
« ตอบ #6 เมื่อ: 10 กรกฎาคม 2010, 17:43:14 »

เชื่อม table ใช้ join .. on ..
where .. ใช้ค้นหาข้อมูลที่ต้องการ
ถ้าใช้ where ในการเชื่อม table ก็ผิดหลักการแล้วครับ
บันทึกการเข้า
designdd
Verified Seller
สมุนแก๊งเสียว
*

พลังน้ำใจ: 16
ออฟไลน์ ออฟไลน์

กระทู้: 801



ดูรายละเอียด
« ตอบ #7 เมื่อ: 10 กรกฎาคม 2010, 18:10:14 »

ปกติการเก็บข้อมูลควรวางโครงสร้างให้มันประหยัดเนื้อที่มากที่สุดอยู่แล้วนี่ครับ
บันทึกการเข้า
imodernlamp
ก๊วนเสียว
*

พลังน้ำใจ: 53
ออฟไลน์ ออฟไลน์

กระทู้: 263



ดูรายละเอียด
« ตอบ #8 เมื่อ: 10 กรกฎาคม 2010, 18:23:36 »

พอมีความรู้ด้านนี้อยู่บ้างเพราะต้องยุ่งกับข้อมูลใน DB จำนวนมากๆ (30M / Table) ขอ share เป็น idea นะครับ

1. การ Join ตัว DBMS ไม่ได้ใช้วิธีการ คูณ 2 Table เข้าด้วยกันนะคับ มี Technique มากมายที่ทำให้ได้ผลลัพธ์เร็วขึ้น
2. จากคำถามที่ท่านถามมาว่าถ้ามี 2 Table ใช้วิธีการ Query 2 ครั้งหรือใช้ Query (Join) แค่ครั้งเดียวดีกว่า
ถ้าวิธีแรกใช้การ Query 2 ครั้งแล้วมา Mapping ข้อมูลระหว่าง Table แรกกับ Table ที่ 2 เองน่าจะช้ากว่ามากครับ เปลือง resource บนเครื่อง client (แรม) สำหรับวน loop mapping ข้อมูลด้วยครับ โดยวิธีการ Join จะเร็วแค่ไหนขึ้นอยู่กับว่าวิธีการที่ DBMS เลือกดึงข้อมูล (execution plan) ดีแค่ไหน หลักคือต้องมี index ที่เหมาะกับการดึงข้อมูลครับ

ตอบแล้วทำให้งงเข้าไปอีกรึเปล่าครับ  Tongue

*ข้อมูลจาก Oracle, MS SQL Server จะรู้สึกได้ถ้าข้อมูล 1M Up / Table นะครับ MySQL ยังไม่เคยลองข้อมูลเยอะๆ ครับ

« แก้ไขครั้งสุดท้าย: 10 กรกฎาคม 2010, 18:27:31 โดย imodernlamp » บันทึกการเข้า

ขอบคุณทุกๆ ความรู้จาก ไทยเสียวบอร์ด ครับ

ทำโคมไฟ
โคมไฟ
รับทำโคมไฟผ้า งานคุณภาพ
โคมไฟ
kobkung
Verified Seller
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 103
ออฟไลน์ ออฟไลน์

กระทู้: 1,312



ดูรายละเอียด เว็บไซต์
« ตอบ #9 เมื่อ: 11 กรกฎาคม 2010, 08:34:01 »

อ่านๆ แล้วก็น่าสนใจอยากลองหาข้อมูลเพิ่มเลย ส่วนตัวผมก็ว่า join น่าจะ work กว่า
ไม่งั้นเขาจะมีมาทำไมฟะ เดี๋ยวไว้ไปแกล้งถามเพื่อนอีก  55 wanwan016
บันทึกการเข้า

เราเป็นบริษัท รับทำเว็บไซต์ แก้เว็บเดิม เขียน Php+Mysql+jQuery+css+bootstrap  งานตามสั่ง ประสบการณ์ จะ 19 ปี ละจ้า
Smilephp.com รับทำเว็บไซต์บริษัท e-commerce + ระบบชำระเงิน paypal,ธนาคาร  เว็บบริษัท เว็บขายของ ระบบจอง เช่า เขียน PHP ได้ทุกแนว  ช่วงนี้เน้นรับงาน ERP ระบบเอกสารบริษัท ,บัญชี ,  Barcode, Stock , Warehouse , Logistic ติดต่อ 086-364-5262

งดตอบคนทำเว็บนอกลู่นอกทาง ไม่ทำเว็บ WP ปั่นแชร์ เว็บประมูล สคริปปั่นใดๆ ไม่ทำเว็บบอลและพ
ohmohm
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 170
ออฟไลน์ ออฟไลน์

กระทู้: 3,098



ดูรายละเอียด เว็บไซต์
« ตอบ #10 เมื่อ: 11 กรกฎาคม 2010, 14:36:32 »

Join อาจได้ประโยชน์จาก index ของ table ด้วยนะเราว่า ถ้า SQL มัน Optimize ได้เก่งพอ

ถ้าใช้ MS SQL Server ลองเลือก Show Execution Plan เลย มันจะวาดออกมาเป็นภาพให้เห็นเลย และถ้ามีมากกว่า 1 SQL statement มันจะแสดง % เลยว่า statements ไหน ใช้เวลามากกว่ากัน
บันทึกการเข้า
thenetxx
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 41
ออฟไลน์ ออฟไลน์

กระทู้: 1,986



ดูรายละเอียด เว็บไซต์
« ตอบ #11 เมื่อ: 11 กรกฎาคม 2010, 16:38:18 »

จะใช้ where  หรือ left join หรือ right join หรือ join ปกติ

ในการทำงาน ควรลองทุกแบบ เพื่อหาความเหมาะสม และตรวจสอบการทำงาน ว่าอันไหนใช้ resource น้อบที่สุดครับ

เรื่องการ join ไม่ควร join เยอะมากจนเกินไป และควรหาวิธีเปรัยบเทียบว่า การ join ดึงข้อมูลที่ต้องการโดย query ครั้งเดียว ได้ข้อมูลทั้ง set
กับการ query เล็ก ๆ หลาย ๆ ครั้ง เพื่อให้ได้ข้อมูลที่ครบถ้วน วิธีไหนจะดีกว่ากันครับ (ผมชอบใช้วิธีหลัง query เล็ก ๆ เบา ๆ แต่ถึงหลายทีหน่อย)
บันทึกการเข้า

Develop site but can't develop life
ASIA
@@@
Administrator
สมุนแก๊งเสียว
*

พลังน้ำใจ: 33
ออฟไลน์ ออฟไลน์

กระทู้: 634



ดูรายละเอียด เว็บไซต์
« ตอบ #12 เมื่อ: 11 กรกฎาคม 2010, 21:09:23 »

จะใช้ join (where,left join,right join ,inner join)

หรือ จะ query สองรอบ

อันนี้ผมว่ามันขึ้นอยู่กับงานนะครับ

ว่าควรจะใช้งานแบบไหน

มันไม่มีกฏตายตัวไปเลยครับ

จะบอกว่าแบบไหนถูกผิดก็คงบอกไม่ได้ถ้าใช้ให้เหมาะกับงาน

มันอยู่ที่ ต้องลองทำก่อนครับแล้วท่านจะได้ผลว่าควรจะใช้แบบไหน
บันทึกการเข้า

รับซื้อเว็บ 100uip ต่อวันขึ้นไป EA Forex
hero_tor
คนรักเสียว
*

พลังน้ำใจ: 11
ออฟไลน์ ออฟไลน์

กระทู้: 143



ดูรายละเอียด
« ตอบ #13 เมื่อ: 30 กรกฎาคม 2010, 13:15:18 »

join table ถูกต้องกว่านะครับ แล้วถ้า tuning เป็น query มันก็ไม่ช้าหรอกครับ
บันทึกการเข้า

หน้า: [1]   ขึ้นบน
พิมพ์