การทำ JOIN ใน SQL คือการนำตาราง 2 ตารางมารวมกัน โดยเงื่อนไขการรวมจะมีดังนี้
ไวยากรณ์ของการ JOIN มีดังนี้
SELECT columns_list FROM left_table { INNER | OUTER | LEFT | RIGHT } JOIN right_table ON join_condition WHERE select_condition
ตัวอย่าง กำหนดให้ตาราง A และ B มีข้อมูลดังนี้
TABLE_A ------------------------ id Name ------------------------ 1 John 2 Susan 3 Tony
TABLE_B ------------------------ id Salary ------------------------ 1 23,000 2 12,000 5 32,100
ตัวอย่าง SQL Statement:
SELECT * FROM TABLE_A INNER JOIN TABLE_B ON TABLE_A.id = TABLE_B.id
ผลการการ JOIN แต่ละแบบจะได้ผลดังนี้:
INNER JOIN: ผลที่ได้จะเห็นว่าข้อมูลที่ไม่ตรงทั้งใน TABLE_A และ TABLE_B จะไม่แสดง
------------------------ id Name Salary ------------------------ 1 John 23,000 2 Susan 12,000
OUTER JOIN: จะได้ข้อมูลทั้งหมด เท่าที่จะแสดงได้ เช่น ใน TABLE_A มีข้อมูลของ Tony แต่ TABLE_B ไม่มีข้อมูลของ Tony (id 3) ดังนั้นข้อมูลที่ได้ จะมีข้อมูลของ Tony แสดงแต่ไม่มีข้อมูลเงินเดือนของ Tony
------------------------ id Name Salary ------------------------ 1 John 23,000 2 Susan 12,000 3 Tony 5 32,100
LEFT JOIN: ข้อมูลที่ได้จะยึดข้อมูลในตารางทางซ้ายเป็นหลัก ในที่นี้ให้ TABLE_A เป็น TABLE ด้านซ้าย จะเห็นได้จากข้อมูลใน TABLE_A ซึ่งมีรายชื่อของ John, Susan และ Tony ผลที่ได้ก็จะแสดงข้อมูลของพนักงานทั้ง 3 คน แต่ข้อมูลของ Tony จะไม่มีเงินเดือนแสดง เนื่องจากไม่มีข้อมูลของ Tony อยู่ในตาราง TABLE_B
------------------------ id Name Salary ------------------------ 1 John 23,000 2 Susan 12,000 3 Tony
RIGHT JOIN: หลักการจะเหมือนกับ LEFT JOIN แต่จะต่างกันตรงที่ข้อมูลที่ได้จะยึดเอาข้อมูลในตารางด้ายขวาเป็นหลัก
------------------------ id Name Salary ------------------------ 1 John 23,000 2 Susan 12,000 5 32,100
เพิ่มเติม
- ในกรณีที่ต้องการ Join ข้อมูลตั้งแต่ 3 table ขึ้นไป ให้เลือก Table ขึ้นมาสองอันแล้ว Join กันก่อน จากนั้นจึงค่อย Join กับ Table ที่เหลือ เช่น
SELECT Table1.id, Table2.salary, Table3.position FROM (Table1 INNER JOIN Table2 ON Table1.id = Table2.id) INNER JOIN Table3 ON Table1.id = Table3.id;
- กรณีที่ตารางมี key สำหรับ Join ตารางมีมากกว่าหนึ่ง key สามารถใส่เงื่อนไขการ Join เพิ่มเติมลงไปได้ เช่น ตาราง Employee และ Salary มี Key ที่ใช้ Join กัน คือ Branch_ID (รหัสสาขา) และ Staff_ID (รหัสพนักงานของแต่ละสาขา) ตามตัวอย่างข้างล่าง
Employee ---------------------------------------- Branch_ID Staff_ID Name ---------------------------------------- 1 1 John 1 2 Susan 1 3 Tony 2 1 Harry 2 2 Tom
Salary ---------------------------------------- Branch_ID Staff_ID Staff_Salary ---------------------------------------- 1 1 10000 1 2 20000 1 3 30000 2 1 15000 2 2 17000
ถ้าเราต้องการรายชื่อและเงินเดือนของพนักงานในสาขา 2 สามารถเขียน SQL ได้ดังนี้
SELECT Employee.Name, Salary.Staff_Salary FROM Employee INNER JOIN Salary ON Employee.Branch_id = Salary.Branch_id AND Employee.Staff_ID = Salary.Staff_ID WHERE Employee.Branch_id = 2
ผลการ Query
---------------------------------------- Name Salary_Salary ---------------------------------------- Harry 15000 Tom 17000
ตอนนี้ทำโปรเจกให้หัวข้อเบิกเงินสดย่อยนะค่ะมีปัญหาที่ว่า"""
อยากได้ข้อมูล ของการJOIN ที่ละเอียดมากกว่านี้นะค่ะ
ตอนนี้ติดที่ว่าจะJOIN Table ยังไงให้ได้ข้อมูลfieldของTableที่เรียกมาตรงกัน
อย่างเช่น
เรียกดูข้อมูลจาก Table member กับTable datacashและTable myadd
ซึ้งmemberสร้างเป็นฐานเก็บข้อมูลสมาชิก ซึ้งแสดงให้เห็นถึงข้อมูลผู้สมัครใช้ระบบ
ซึ้งจะเรียกข้อมูลmember มาJOINกับ datacash
ฐานtable datacashเป็นtableที่แสดงการขอเบิกเงินในแต่ละจำนวนจากผู้เบิกคนไหน ใครเป็นผู้รับเงิน ซึ้งจะJOIN เรียก Table member field 'firstname' ส่วน datacash field'price'ให้ข้อมูลชื่อกับราคา
เรียกค่าออกมาได้ตรงกันนะค่ะต้องทำอย่างไร
ช่วยยกตัวอย่าง field ในแต่ละ table ให้ดูหน่อยครับ มันสัมพันธ์กันยังไง แล้วผลลัพธ์ที่ต้องการคืออะไรครับ ผมอ่านข้อมูลที่ให้มาแล้วงงๆ ครับ
แล้วถ้าจะ join มากกว่า 2 ตารางจะเขียนอย่างไรครับ
SELECT *
FROM TABLE_A OUTER JOIN TABLE_B outer join TABLE_C
ON TABLE_A.id = TABLE_B.id and TABLE_A.name = TABLE_c.name
มั่วสนิทครับ รบกวนแนะนำหน่อย
ถ้ามีเงื่อนไขการจอยที่ ตารางที่ถูก join ต้องมีค่าสูงสุดอ่ะคัรบ สามารถทำได้ป่าว
หากต้องการ join ข้อมูลที่มีค่าสูงสุด ให้ใช้คำสั่ง MAX() ร่วมด้วยซิครับ รายละเอียดศึกษาคำสั่ง max ใน SQL เพิ่มนะครับ
ใช้รวมกับ ORDER BY TABLE ASC ได้ไหมครับ เช่น
SELECT * FROM TABLE_A OUTER JOIN TABLE_B outer join TABLE_C
ON TABLE_A.id = TABLE_B.id and TABLE_A.name = TABLE_c.name
WHERE ORDER BY TABLE_ID ASC
แล้วถ้าใน column ที่มา join กัน มีค่าซ้ำมากกว่า 1 ตัว เช่นมี id = {1,1,2,3} จะต้องเรียกอย่างไร ให้ใช้ค่า 1 ค่าเดียวคะ
อยากทราบค่ะคือจอย 3 ตารางลองคิวลี่ในแอฟเซิฟ และโปรแกรม navicat แล้วข้อมูลออกครบ
แต่พอเอาไปใส่ในเว็ป php ข้อมูลที่ควรออกไม่ได้ เช่น PK ของตารางเป็นต้น
ผมมีปัญหาคำสั่ง join แล้วดึงข้อมูลออกมาไม่หมดครับ ตอนนี้ผมทำรายงานเอกสารโครงการอยู่ครับ
select BarcodePR.ProjectCode,BarcodePR.BarcodeTransTime AS Scan1,BarcodePS.BarcodeTransTime AS Scan2
,DATEDIFF(DAY,BarcodePR.BarcodeTransTime,BarcodePS.CreateDate) AS Worktime
from bc_BarcodeTrans AS BarcodePR
inner join bc_BarcodeTrans AS BarcodePS
on BarcodePR.ProjectCode = BarcodePS.ProjectCode
where BarcodePR.Return_status = 0 and BarcodePR.FunctionsID = 0211
and BarcodePS.FunctionsID = 0411
เขาบอกว่าต้องการ 444 รายการ แต่ผมทำมาได้แค่่ 411 รายการครับ
ผมทำในตัวฐานจาก SQL server ครับ