Munu

การดึงข้อมูลจากหลายตาราง

หน้าแรก » ข่าวสาร » การดึงข้อมูลจากหลายตาราง

การเชื่อมตาราง
ในการปฏิบัติงานจริงข้อมูลที่เก็บในฐานข้อมูลจะประกอบด้วยข้อมูลในหลายตารางซึ่งมีความสัมพันธ์กัน ดังนั้นจึงมีหลายคำถามซึ่งไม่สามารถตอบคำถามได้ ด้วยการดึงหรืออ่านข้อมูลจากตารางเพียงตารางเดียว แต่ต้องทำการสอบถามข้อมูลจากหลายตารางพร้อมๆ กัน โดยอาศัยคอลัมน์ที่ตรงกันของสองตารางมาเชื่อมสัมพันธ์กัน และเรียกความสัมพันธ์นี้ว่า “JOIN”
เตรียมข้อมูล

Customer
ID

CFirst
Name

CLast
Name

CAdress

City

Region

Postal
Code

Phone

Payment
Period

C0001 พิรพร หมุนสนิท 11 ถ.สุขุมวิท คลองตัน กรุงเทพฯ กลาง 10110 02952212 30
C0002 นวรัตน์ ธนะรุ่งรัตน์ 36 ถ.ลาดพร้าว วังทองหลาง กรุงเทพฯ กลาง 10310 02952213 30
C0003 สุธี พงศาสกุลชัย  25 ถ.สุขสวัสดิ์ พระประแดง สมุทรปราการ กลาง 11000 02952214 15
C0004 สุรเชษฐ์ วงค์ชัยพรพงษ์ 72 ถ.วิทยุ ปทุมวัน กรุงเทพฯ กลาง 10330 02952215 15
C0005 ปิ่นอนงค์ ศรีงาม NULL NULL NULL NULL 02952216 15

UPDATE Customers
SET CAddress=NULL,City=NULL,Region=NULL,PostalCode=NULL
WHERE CustomerID=’C0005’

SELECT * FROM Customers;

5.1.1 Inner Join
inner join เป็นการจับเอาตาราง 2 ตาราง มารวมกัน โดยยึดหลักว่า ข้อมูลจะต้องมีตรงกัน ในทั้งสองตาราง ถึงจะเอามา
รูปแบบของคำสั่ง INNER JOIN

SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name

ตัวอย่างการใช้คำสั่ง SQL INNER JOIN
ตาราง Persons

P_Id
LastName FirstName Address City
1 Hensen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Petterson Kari Storgt 20 Stavanger

ตาราง Oders


O_Id
OrderNo P_Id
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 15

ใช้คำสั่ง

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.P_Id=Orders.P_Id
ORDER BY Persons.LastName
ได้ผลลัพธ์ดังนี้


LastName
FirstName OrderNo
Hensen Ola 22456
Hensen Ola 24562
Petterson Kari 77895
Petterson Kari 44678

Equijoin และ Non- Equijoin
Equijoin เป็นรูปแบบการ Join มาตรฐานของ Inner Join จะระบุเงื่อนไขด้วยเครื่องหมายเท่ากับ (=)และในเงื่อนไขต้องระบุชื่อคอลัมน์ของตาราง 1 เท่ากับชื่อคอลัมน์ของตาราง 2 มีรูปแบบคำสั่งดังนี้

ชื่อตาราง1 Inner Join ชื่อตาราง2 ON ชื่อตาราง1.ชื่อคอลัมน์ =ชื่อตาราง2.ชื่อคอลัมน์

Non- Equijoin เป็นการรวมสองตารางขึ้นไปด้วยการเปรียบเทียบค่าในคอลัมน์ของแต่ละตาราง โดยไม่ใช้เครื่องหมายเท่ากับ แต่ใช้เครื่องหมาย <,>,<=,>= ซึ่งมีรูปแบบคำสั่งของ Non- Equijoin จะเหมือนกับ Equijoin
Cross Join
Cross Join หรือเรียกชื่อหนึ่งว่า ผลคูณคาร์ทีเชียน (Cartesian Product) เป็นการ Join โดยที่ไม่ต้องนำประโยค ON มาใช้เป็นเงื่อนไขในการเชื่อมตารางผลคูณของสองตาราง ซึ่งืเป็นการคูณจำนวนแถวทั้งหมดของตาราง 1 กับจำนวนแถวทั้งหมดของตาราง2 มีรูปแบบคำสั่งดังนี้

SELECT ชื่อคอลัมน์1 , ชื่อคอลัมน์2 ,…,ชื่อคอลัมน์n
FROM ตารางที่1
CROSS JOIN ชื่อตารางที่2

Self-Join
เป็นการ Join ที่มีการเปรียบเทียบข้อมูลจากตารางเดียวกัน และต้องกำหนดชื่อรอง (Aliase) ให้กับคอลัมน์ใหม่หรือตารางใหม่ โดยใช้คำสั่ง AS เพื่อใช้อ้างอิงระหว่างคอลัมน์เหมือนกับมี 2 ตาราง

5.1.2 เชื่อมตารางแบบ Outer join
ในการเชื่อมตารางบางครั้งก็อาจอยากจะทราบว่ามีข้อมูลใดในตารางที่ไม่มีในอีกตารางหนึ่ง ซึ่งการสอบถามข้อมูลจะต้องใช้การเชื่อมตารางแบบ Outer join ซึ่งมีรูปแบบการเขียนคือ
SELECT <column_name> FROM <table_name> WHERE table1.column_name (+)= table2.column_name;
หรือ
SELECT <column_name> FROM <table_name> WHERE table1.column_name = table2.column_name (+);

Outer join นี้จะใช้เครื่องหมาย (+) ไว้หลังคอลัมน์ที่ไม่มีข้อมูลที่ตรงกันในอีกตารางหนึ่ง (คือวางหลังตารางที่มีข้อมูลในคอลัมน์นั้นน้อยกว่า จึงสามารถจะอยู่ทางด้านใดด้านหนึ่งของเครื่องหมาย = ใน WHERE ก็ได้ แต่จะใส่ทั้งสองด้านพร้อมกันไม่ได้)

Left Outer Join
การเชื่อมตารางแบบ Left Outer Join จะได้ผลลัพธ์เป็นแถวทั้งหมดในตารางที่อยู่ทางซ้ายของคำสั่ง Left Outer Join ส่วนแถวของตารางทางขวาที่ไม่สามารถจับคู่ได้จะไม่แสดงผลลัพธ์ออกมามีรูปแบบคำสั่งดังนี้

SELECT ชื่อคอลัมน์1 , ชื่อคอลัมน์2 ,…,ชื่อคอลัมน์n
FROM ตารางที่1 LEFT OUTER JOIN ชื่อตารางที่ 2
ON เงื่อนไข

Right Outer Join
Right Outer Join มีรูปแบบการเชื่อมตารางคล้าย Left Outer Join แต่ผลลัพธ์ที่ได้จะมาจากแถวทั้งหมดของตารางที่อยู่ทางขวาของคำสั่ง Right Outer Join ไม่ว่าแถวด้านขวาจะจับคู่กับตารางทางซ้ายหรือไม่ ส่วนแถวที่ไม่สามารถจับคู่ได้ของทางซ้ายจะไม่แสดงผลลัพธ์ออกมา มีรูปแบบคำสั่งดังนี้

SELECT ชื่อคอลัมน์1 , ชื่อคอลัมน์2 ,…,ชื่อคอลัมน์n
FROM ตารางที่1 RIGHT OUTER JOIN ชื่อตารางที่ 2
ON เงื่อนไข

เรามีทีมงานผู้เชี่ยวชาญที่มีประสบการณ์ด้านเว็บไซต์

มาประยุกต์ในการพัฒนาการให้บริการอยู่ตลอดเวลา เพื่อสร้างความพึงพอใจสูงสุดให้แก่ลูกค้าทุกท่าน
ด้วยประสบการณ์ที่เรามีอยู่นั้น ทำให้มั่นใจได้ว่าลูกค้าทุกท่านจะได้รับการบริการที่ดีจากเรา

Call

082-493-2295

E-mail

Konyubyub@Gmail.com

Location

บริษัท ดีไซน์นำโชค จำกัด
58/146 หมู่ที่ 6 หมู่บ้านซื่อตรง คลอง13 ตำบลบึงน้ำรักษ์ อำเภอธัญบุรี จังหวัดปทุมธานี 12110

2014 Powered by IYATHAI.com
Tel: 082-493-2295 E-mail: Konyubyub@gmail.com