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