การใช้ Semi Join และ Anti Join ร่วมกับ Subquery

การ Join ข้อมูลใน SQL

Maham Faisal Khan

Senior Content Developer, DataCamp

รู้จัก Join ทุกประเภท

ไดอะแกรมของ INNER JOIN บนฟิลด์ id

ไดอะแกรมแสดงสองตาราง: left_table และ right_table โดยผลลัพธ์ของการ join แสดงทางขวา ซึ่งคืนเฉพาะแถวที่ตรงกันในคอลัมน์ id ของทั้งสองตาราง

การ Join ข้อมูลใน SQL

Additive Join

SELECT *
FROM left_table
INNER JOIN right_table
ON left_table.id = right_table.id;
การ Join ข้อมูลใน SQL

Additive Join

ไดอะแกรมอธิบาย additive join ด้านซ้ายแสดงสองตาราง left_table และ right_table ด้านขวาแสดงผลลัพธ์ของ INNER JOIN โดยใช้คอลัมน์ id ฟิลด์ที่ชื่อต่างกันจะถูกเพิ่มด้วยชื่อเดิม และเนื่องจากฟิลด์ date ปรากฏในทั้งสองตาราง จึงถูกเพิ่มสองครั้ง

การ Join ข้อมูลใน SQL

Semi Join

Semi join คือการเลือกแถวจากตารางแรกที่ตรงตามเงื่อนไขในตารางที่สอง

ไดอะแกรมแสดงสองตาราง left_table และ right_table สำหรับสาธิต semi join โดย left_table มีสองคอลัมน์ คือ id และ col1 ส่วน right_table มีเพียงคอลัมน์ col2

การ Join ข้อมูลใน SQL

Semi Join

ไดอะแกรมแสดงสองตาราง left_table และ right_table สำหรับสาธิต semi join โดย col2 ใช้กรองค่า col1 แถวใน left_table ที่ col1 ไม่พบคู่ใน col2 จะถูกทำให้จางลง

การ Join ข้อมูลใน SQL

Semi Join

ไดอะแกรมแสดงสองตาราง left_table และ right_table ผลลัพธ์ของ semi join แสดงทางขวา โดยคืนเฉพาะแถวใน left_table ที่ col1 พบคู่ใน col2 ซึ่งตรงกับ id 2 และ 3

การ Join ข้อมูลใน SQL

เริ่มต้น Semi Join

SELECT country, continent, president
FROM presidents;
| country  | continent     | president               |
| -------- | ------------- | ----------------------- |
| Egypt    | Africa        | Abdel Fattah el-Sisi    |
| Portugal | Europe        | Marcelo Rebelo de Sousa | 
| USA      | North America | Joe Biden               |
| Uruguay  | South America | Luis Lacalle Pou        |
| Pakistan | Asia          | Asif Ali Zardari        |
| Chile    | South America | Gabriel Boric           |
| India    | Asia          | Droupadi Murmu          |
การ Join ข้อมูลใน SQL

ต่อยอด Semi Join

SELECT country
FROM states
WHERE indep_year < 1800;
|----------|
| country  |
|----------|
| Portugal |
| Spain    |
|----------|
การ Join ข้อมูลใน SQL

เสร็จสิ้น Semi Join (เริ่มต้นกับ Subquery)

SELECT president, country, continent
FROM presidents
WHERE country IN
    (SELECT country
     FROM states
     WHERE indep_year < 1800);
|-------------------------|-----------|-------------|
| president               | country   | continent   |
|-------------------------|-----------|-------------|
| Marcelo Rebelo de Sousa | Portugal  | Europe      |
|-------------------------|-----------|-------------|
การ Join ข้อมูลใน SQL

Anti Join

ไดอะแกรมแสดงสองตาราง left_table และ right_table สำหรับสาธิต anti join โดย col2 ใช้กรองค่า col1 แถวใน left_table ที่ col1 ไม่พบคู่ใน col2 จะไม่ถูกทำให้จางลง

การ Join ข้อมูลใน SQL

Anti Join

ไดอะแกรมแสดงสองตาราง left_table และ right_table ผลลัพธ์ของ anti join แสดงทางขวา โดยคืนเฉพาะแถวใน left_table ที่ col1 ไม่พบคู่ใน col2 ซึ่งตรงกับ id 1 และ 4

การ Join ข้อมูลใน SQL

Anti Join กับตาราง presidents

SELECT country, president
FROM presidents
WHERE continent LIKE '%America' 
    AND country NOT IN
        (SELECT country
         FROM states
         WHERE indep_year < 1800);
| country  |  president       |
| -------- | ---------------- | 
| Uruguay  | Luis Lacalle Pou |
| Chile    | Gabriel Boric    |
การ Join ข้อมูลใน SQL

มาฝึกกันเถอะ!

การ Join ข้อมูลใน SQL

Preparing Video For Download...