SQLite - เข้าร่วม
SQLite Joinsอนุประโยคใช้เพื่อรวมระเบียนจากตารางสองตารางขึ้นไปในฐานข้อมูล JOIN เป็นวิธีการรวมฟิลด์จากสองตารางโดยใช้ค่าร่วมกันสำหรับแต่ละตาราง
SQL กำหนดการรวมสามประเภทหลัก ๆ -
- CROSS เข้าร่วม
- การเข้าร่วมภายใน
- การเข้าร่วมภายนอก
ก่อนที่เราจะดำเนินการต่อลองพิจารณาสองตาราง COMPANY และ DEPARTMENT เราได้เห็นคำสั่ง INSERT เพื่อเติมข้อมูลตาราง COMPANY แล้ว สมมติว่ารายการบันทึกที่มีอยู่ในตาราง COMPANY -
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
1 Paul 32 California 20000.0
2 Allen 25 Texas 15000.0
3 Teddy 23 Norway 20000.0
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0
6 Kim 22 South-Hall 45000.0
7 James 24 Houston 10000.0
ตารางอื่นคือ DEPARTMENT โดยมีคำจำกัดความดังต่อไปนี้ -
CREATE TABLE DEPARTMENT(
ID INT PRIMARY KEY NOT NULL,
DEPT CHAR(50) NOT NULL,
EMP_ID INT NOT NULL
);
นี่คือรายการคำสั่ง INSERT เพื่อเติมข้อมูลตาราง DEPARTMENT -
INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID)
VALUES (1, 'IT Billing', 1 );
INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID)
VALUES (2, 'Engineering', 2 );
INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID)
VALUES (3, 'Finance', 7 );
ในที่สุดเรามีรายการบันทึกต่อไปนี้ในตาราง DEPARTMENT -
ID DEPT EMP_ID
---------- ---------- ----------
1 IT Billing 1
2 Engineering 2
3 Finance 7
CROSS เข้าร่วม
CROSS JOIN จับคู่ทุกแถวของตารางแรกกับทุกแถวของตารางที่สอง หากตารางอินพุตมีแถว x และ y ตามลำดับตารางผลลัพธ์จะมีแถว x * y เนื่องจาก CROSS JOIN มีศักยภาพในการสร้างตารางขนาดใหญ่มากจึงต้องใช้ความระมัดระวังในการใช้งานตามความเหมาะสมเท่านั้น
ต่อไปนี้เป็นไวยากรณ์ของ CROSS JOIN -
SELECT ... FROM table1 CROSS JOIN table2 ...
จากตารางด้านบนคุณสามารถเขียน CROSS JOIN ได้ดังนี้ -
sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY CROSS JOIN DEPARTMENT;
ข้อความค้นหาข้างต้นจะให้ผลลัพธ์ดังต่อไปนี้ -
EMP_ID NAME DEPT
---------- ---------- ----------
1 Paul IT Billing
2 Paul Engineering
7 Paul Finance
1 Allen IT Billing
2 Allen Engineering
7 Allen Finance
1 Teddy IT Billing
2 Teddy Engineering
7 Teddy Finance
1 Mark IT Billing
2 Mark Engineering
7 Mark Finance
1 David IT Billing
2 David Engineering
7 David Finance
1 Kim IT Billing
2 Kim Engineering
7 Kim Finance
1 James IT Billing
2 James Engineering
7 James Finance
การเข้าร่วมภายใน
INNER JOIN สร้างตารางผลลัพธ์ใหม่โดยการรวมค่าคอลัมน์ของสองตาราง (table1 และ table2) ตามการรวมเพรดิเคต แบบสอบถามเปรียบเทียบแต่ละแถวของ table1 กับแต่ละแถวของ table2 เพื่อค้นหาคู่ของแถวทั้งหมดที่ตรงกับเพรดิเคตรวม เมื่อเข้าร่วมเพรดิเคตเป็นที่พอใจค่าของคอลัมน์สำหรับแถว A และ B ที่ตรงกันแต่ละคู่จะรวมกันเป็นแถวผลลัพธ์
INNER JOIN เป็นประเภทการเข้าร่วมที่พบบ่อยที่สุดและเป็นค่าเริ่มต้น คุณสามารถใช้คำหลักภายในหรือไม่ก็ได้
ต่อไปนี้เป็นไวยากรณ์ของ INNER JOIN -
SELECT ... FROM table1 [INNER] JOIN table2 ON conditional_expression ...
เพื่อหลีกเลี่ยงความซ้ำซ้อนและทำให้วลีสั้นลงสามารถประกาศเงื่อนไข INNER JOIN ด้วย a USINGนิพจน์. นิพจน์นี้ระบุรายการคอลัมน์อย่างน้อยหนึ่งคอลัมน์
SELECT ... FROM table1 JOIN table2 USING ( column1 ,... ) ...
NATURAL JOIN คล้ายกับไฟล์ JOIN...USINGเพียง แต่จะทดสอบความเท่าเทียมกันโดยอัตโนมัติระหว่างค่าของทุกคอลัมน์ที่มีอยู่ในทั้งสองตาราง -
SELECT ... FROM table1 NATURAL JOIN table2...
จากตารางด้านบนคุณสามารถเขียน INNER JOIN ได้ดังนี้ -
sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY INNER JOIN DEPARTMENT
ON COMPANY.ID = DEPARTMENT.EMP_ID;
ข้อความค้นหาข้างต้นจะให้ผลลัพธ์ดังต่อไปนี้ -
EMP_ID NAME DEPT
---------- ---------- ----------
1 Paul IT Billing
2 Allen Engineering
7 James Finance
การเข้าร่วมภายนอก
OUTER JOIN เป็นส่วนเสริมของ INNER JOIN แม้ว่ามาตรฐาน SQL จะกำหนดการเข้าร่วมภายนอกสามประเภท: LEFT, RIGHT และ FULL แต่ SQLite รองรับเฉพาะLEFT OUTER JOIN.
การเข้าร่วมภายนอกมีเงื่อนไขที่เหมือนกับการเข้าร่วมภายในซึ่งแสดงโดยใช้คีย์เวิร์ด ON, USING หรือ NATURAL ตารางผลลัพธ์เริ่มต้นคำนวณในลักษณะเดียวกัน เมื่อคำนวณ JOIN หลักแล้ว OUTER JOIN จะนำแถวที่ไม่ได้เข้าร่วมจากตารางหนึ่งหรือทั้งสองตารางใส่ค่า NULL และผนวกเข้ากับตารางผลลัพธ์
ต่อไปนี้เป็นไวยากรณ์ของ LEFT OUTER JOIN -
SELECT ... FROM table1 LEFT OUTER JOIN table2 ON conditional_expression ...
เพื่อหลีกเลี่ยงความซ้ำซ้อนและทำให้วลีสั้นลงสามารถประกาศเงื่อนไข OUTER JOIN ด้วยนิพจน์ USING นิพจน์นี้ระบุรายการคอลัมน์อย่างน้อยหนึ่งคอลัมน์
SELECT ... FROM table1 LEFT OUTER JOIN table2 USING ( column1 ,... ) ...
จากตารางด้านบนคุณสามารถเขียนการรวมภายในได้ดังนี้ -
sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY LEFT OUTER JOIN DEPARTMENT
ON COMPANY.ID = DEPARTMENT.EMP_ID;
ข้อความค้นหาข้างต้นจะให้ผลลัพธ์ดังต่อไปนี้ -
EMP_ID NAME DEPT
---------- ---------- ----------
1 Paul IT Billing
2 Allen Engineering
Teddy
Mark
David
Kim
7 James Finance