Python ดึงข้อมูล 3 ตารางมาแสดง ด้วยการ join ตาราง บทความนี้สอนการเขียนคำสั่ง SQL สำหรับ join ตารางเพื่อดึงข้อมูล 3 ตารางมาแสดงด้วยภาษา Python ร่วมกับฐานข้อมูล MySQL สามารถเขียนโปรแกรมได้ดังนี้
ตัวอย่าง โครงสร้างข้อมูลตาราง book, category และ author
ตาราง book
+---------+-------------+-------------+-------------+
| book_id | book_name | book_cgy_id | book_ath_id |
+---------+-------------+-------------+-------------+
| 1 | PHP & MySQL | 1 | 1 |
| 2 | Python | 1 | 1 |
| 3 | SQL | 2 | 2 |
| 4 | Java | 2 | 2 |
+---------+-------------+-------------+-------------+
ตาราง category
+--------+-------------+
| cgy_id | cgy_name |
+--------+-------------+
| 1 | Programming |
| 2 | Networking |
+--------+-------------+
ตาราง author
+--------+----------+
| ath_id | ath_name |
+--------+----------+
| 1 | Mr.A |
| 2 | Mrs.B |
| 3 | Mr.C |
+--------+----------+
ตัวอย่าง Python ดึงข้อมูล 3 ตารางมาแสดง ด้วยการ join ตาราง
import mysql.connector
cnx = mysql.connector.connect(user='root', password='', host='127.0.0.1', database='demo')
cur = cnx.cursor()
cur.execute(" SELECT book_id, book_name, cgy_name, ath_name FROM book INNER JOIN category ON ( book_cgy_id = cgy_id ) INNER JOIN author ON ( book_ath_id = ath_id ) ")
records = cur.fetchall()
for row in records:
print(row[0],"/",row[1],"/",row[2],"/",row[3])
cnx.close()
ผลลัพธ์
1 / PHP & MySQL / Programming / Mr.A
2 / Python / Programming / Mr.A
3 / SQL / Networking / Mrs.B
4 / Java / Networking / Mrs.B
Python ดึงข้อมูล 3 ตารางมาแสดง พิจารณาความสัมพันธ์ของทั้ง 3 ตารางก่อน ตาราง book เชื่อมกับ category ด้วย book_cgy_id กับ cgy_id และตาราง book เชื่อมกับ author ด้วย book_ath_id กับ ath_id คำสั่ง SQL สามารถเขียนได้ดังนี้
1. SELECT book_id, book_name, cgy_name, ath_name FROM book คือ กำหนดชื่อ columns ที่ต้องการแสดงจากตาราง book และตารางที่มาเชื่อม (category และ author)
2. INNER JOIN category ON ( book_cgy_id = cgy_id ) คือ join ตาราง book กับ category ผ่านข้อมูลที่เหมือนกันระหว่าง column book_cgy_id และ cgy_id
3. INNER JOIN author ON ( book_ath_id = ath_id ) คือ join ตาราง book กับ author ผ่านข้อมูลที่เหมือนกันระหว่าง column book_ath_id และ ath_id