Mastering Subqueries and Joins for Maximum Impact

23-Jun-23

คัมภีร์เทพ IT

See the original english version Click here!

 

Subqueries และ Joins ถือเป็น 2 Tools สำคัญของ SQL ที่สามารถช่วยให้คุณดึง Data ได้อย่างมีประสิทธิภาพ อย่างไรก็ตาม การเลือก Tool ที่เหมาะสมสำหรับแต่ละสถานการณ์ อาจเป็นเรื่องที่ไม่ง่ายนัก โดยเฉพาะสำหรับมือใหม่ และบทความนี้ก็เป็น 4 ตัวอย่าง เพื่อให้เข้าใจการใช้ Subqueries และ Joins

Subqueries และ Joins คืออะไร

Subqueries: Subquery คือ Query ที่ฝังอยู่ภายใน Query อื่น โดย Subquery จะถูกดำเนินการก่อน และผลลัพธ์ของมันจะถูกใช้ใน Query ที่อยู่ภายนอก Subquery จะถูกใช้เพื่อ Filter, Aggregate หรือ Transform Data ก่อนที่จะใช้ใน Query ที่อยู่ภายนอก

Joins: การ Join จะถูกใช้เพื่อรวม Rows จาก Table ตั้งแต่ 2 Tables ขึ้นไป โดยยึดตาม Columns ที่เกี่ยวข้องกันระหว่าง Tables เหล่านั้น การ Join มีหลายประเภท ได้แก่ INNER JOIN, LEFT JOIN, RIGHT JOIN และ FULL OUTER JOIN

มาดูตัวอย่างการใช้ Subquery และ Join กัน

ตัวอย่างที่ 1ค้นหาจำนวนลูกค้าที่มีการสั่งซื้ออย่างน้อย 1 รายการ

เรามี "Customers" Table ที่มีข้อมูลของ Customer Level เช่น Customer ID, Country, Language เป็นต้น และ "Orders" Table ที่มีข้อมูล เช่น Order ID, Customer ID และ Total Spend

SUBQUERY:

ในตัวอย่างนี้ เราใช้ Subquery เพื่อดึง Customer IDs จาก "Orders" Table จากนั้นใช้ "IN" Operator ในการ Filter “Customers” Table เพื่อรวมเฉพาะ Customers รายที่มีการสั่งซื้ออย่างน้อย 1 รายการ จากนั้นเราจะใช้ COUNT Function เพื่อนับจำนวน Customers ดังกล่าวทั้งหมด

JOIN:

ในตัวอย่างนี้ เราใช้ INNER JOIN เพื่อรวม Rows จาก "Customers" Table และ "Orders" Table ตาม "id" Column และ "customer_id" Column ตามลำดับ จากนั้นเราจะใช้ COUNT Function กับ DISTINCT Keyword เพื่อจะได้ทราบจำนวนของ Customer IDs ที่ไม่ซ้ำกันทั้งหมดจากชุดผลลัพธ์

ตัวอย่างที่ 2: ค้นหาชื่อของพนักงานทุกคนที่มีเงินเดือนสูงกว่าผู้จัดการ

เรามีข้อมูลเกี่ยวกับ Employee ID, Name, Salary, Manager ID ของพนักงานทุกคนในองค์กร

SUBQUERY:

ในตัวอย่างนี้ เราใช้ Subquery เพื่อดึงข้อมูล Salary ของ Managers ของ Employees แต่ละคน จากนั้นก็ใช้ ">" Operator ในการ Filter “Employees” Table เพื่อรวมเฉพาะ Employees ที่มีเงินเดือนสูงกว่าผู้จัดการของแต่ละคน

JOIN:

ในตัวอย่างนี้ เราใช้ INNER JOIN เพื่อรวม Rows จาก “Employees” Table กับ Table ของมันเอง ตาม “manager_id” Column และ “id” Column ตามลำดับ จากนั้นเราจะใช้ WHERE Clause ในการ Filter ชุดผลลัพธ์ เพื่อรวมเฉพาะพนักงานที่มีเงินเดือนสูงกว่าผู้จัดการของพวกเขา

ต่อไปเรามาดู Queries ที่ Advance ขึ้นกัน

ตัวอย่างที่ 3: ค้นหาชื่อของลูกค้าทั้งหมดที่ได้ทำการสั่งซื้อสินค้าในราคาที่สูงกว่าราคาเฉลี่ยของสินค้าทั้งหมด

เรามี "Customers" Table ที่มีข้อมูลของ Customer Level เช่น Customer ID, Country, Language เป็นต้น และ "Orders" Table ที่มีข้อมูล เช่น Order ID, Customer ID และ Product ID นอกจากนี้ เรายังมี “Product” Table ที่มีข้อมูลของ Product Level เช่น Product ID, Price และ Attributes อื่น ๆ ของ Product

SUBQUERY:

ในตัวอย่างนี้ เราใช้ Subquery เพื่อคำนวณราคาเฉลี่ยของ Products ทั้งหมดก่อน จากนั้นเราจะใช้ Subquery อื่นภายใน EXISTS Clause เพื่อตรวจสอบว่า มีการ Order อย่างน้อย 1 รายการของลูกค้าสำหรับสินค้าที่มีราคาสูงกว่าราคาเฉลี่ย หรือไม่ ชุดผลลัพธ์จะประกอบไปด้วย ชื่อของลูกค้าดังกล่าวทั้งหมด

JOIN:

ในตัวอย่างนี้ เราใช้ชุดของการ Join เพื่อรวม Rows จาก "Customers" Table, “Orders” Table และ “Products” Table ตาม "id" Column, "customer_id" Column และ "product_id" Column ตามลำดับ จากนั้นเราจะใช้ WHERE Clause ในการ Filter ชุดผลลัพธ์ เพื่อรวมเฉพาะ Order สำหรับ Products ที่มีราคาสูงกว่าราคาเฉลี่ย ส่วน DISTINCT Keyword จะถูกใช้เพื่อลบชื่อลูกค้าที่ซ้ำกัน ออกจากชุดผลลัพธ์

ตัวอย่างที่ 4: ค้นหาชื่อของพนักงานทั้งหมด ที่ทำงานให้กับแผนกต่างๆ อย่างน้อย 3 แผนก

นอกเหนือจาก “Employee” Table แล้ว เราจะใช้ “Employee_departments” Table ที่มีข้อมูลเกี่ยวกับแผนกที่พนักงานทำงานอยู่ ซึ่งประกอบไปด้วย Employee_ID, Department_ID, Start_date, End_date

SUBQUERY:

ในตัวอย่างนี้ เราใช้ Subquery เพื่อนับจำนวนแผนกต่าง ๆ ที่ไม่ซ้ำกัน (ใช้ DISTINCT Keyword) ที่พนักงานแต่ละคนทำงานด้วย โดยใช้ "employee_id" Column ในการเชื่อมโยงกับ "employees" Table และ "employee_departments" Table จากนั้นเราจะใช้ “>=” Operator ในการ Filter “employees” Table เพื่อรวมเฉพาะพนักงานที่ทำงานในแผนกที่แตกต่างกันอย่างน้อย 3 แผนก

JOIN:

ในตัวอย่างนี้ เราใช้การ Join ตัวมันเองหลาย ๆ รายการของ “employee_departments” Table เพื่อเชื่อมโยง employees กับหลาย ๆ Department IDs และทำการตรวจสอบให้แน่ใจว่า ได้เอารายการที่ซ้ำกันออกไปแล้ว จากนั้นเราจะใช้ GROUP BY Clause เพื่อจัดกลุ่มของผลลัพธ์ที่กำหนดตาม Employee Name และใช้ HAVING Clause ในการ Filter ชุดผลลัพธ์ให้รวมเฉพาะพนักงานที่ทำงานในแผนกที่แตกต่างกันอย่างน้อย 3 แผนก

เราดู 4 ตัวอย่างที่แตกต่างกันของการใช้ Subquery และ Join ใน SQL Queries แล้ว หวังว่ามันจะช่วยให้คุณมีไอเดียเกี่ยวกับวิธีการใช้งานของทั้ง 2 อย่างเพื่อให้ได้ผลลัพธ์ออกมา

ตอนนี้ คำถามคือ: แล้วเราควรใช้อันไหน? และเมื่อไหร่?

เรามาดูข้อดีและข้อเสียของ Subquery และ Join ใน SQL เพื่อให้เข้าใจได้ดีขึ้นว่า ควรใช้อันไหนในสถานการณ์ใดบ้าง:

ข้อดีของ Subqueries:

  1. Subqueries นั้นง่ายต่อการเขียนและทำความเข้าใจ มันจะช่วยให้คุณสามารถแบ่ง Queries ที่ซับซ้อนออกเป็นส่วนย่อย ๆ ทำให้คุณสามารถจัดการได้สะดวกขึ้น
  2. Subqueries จะมีประสิทธิภาพมากขึ้น เมื่อชุดผลลัพธ์มีขนาดเล็ก

ข้อเสียของ Subqueries:

  1. Subqueries อาจไม่มีประสิทธิภาพ เมื่อชุดผลลัพธ์มีขนาดใหญ่ มันอาจทำให้ประสิทธิภาพของการ Query ของคุณช้าลง
  2. Subqueries อาจถูกปรับให้เหมาะสมได้ยาก เนื่องจากพวกมันถูกดำเนินการแยกจาก Query ที่อยู่ภายนอก

ข้อดีของ Joins:

  1. Joins จะมีประสิทธิภาพเมื่อชุดผลลัพธ์มีขนาดใหญ่ มันดูจะทำงานได้ดีกว่า Subqueries เมื่อมีการ Join Tables ที่มีขนาดใหญ่
  2. Joins นั้นง่ายต่อการ Optimize และสามารถปรับแต่งประสิทธิภาพได้

ข้อเสียของ Joins:

  1. Joins นั้น อาจถูกเขียนและทำความเข้าใจได้ยากกว่า Subqueries โดยเฉพาะอย่างยิ่งสำหรับ Queries ที่ซับซ้อน
  2. Joins สามารถสร้าง Rows ที่ซ้ำกันได้หากไม่มีกำหนดให้ชัดเจนไว้ก่อนสำหรับการ Join Columns

สรุป

ทั้ง Subqueries และ Joins เป็น Tools ที่มีประสิทธิภาพสำหรับการรวม Data จากหลาย Tables ใน SQL ตัวเลือกสำหรับการใช้งานระหว่างพวกมัน ขึ้นอยู่กับข้อกำหนดที่เฉพาะเจาะจงของ Query ของคุณ

Subqueries เหมาะที่สุดสำหรับชุดผลลัพธ์ที่มีขนาดเล็ก โดยที่ไม่ให้ความสำคัญกับประสิทธิภาพมากนัก ส่วน Joins เหมาะสมกว่าสำหรับชุดผลลัพธ์ที่ใหญ่ขึ้นและการ Queries ซับซ้อน ซึ่งประสิทธิภาพถือเป็นสิ่งสำคัญ

โดยทั่วไป จะเป็นการดีที่สุดที่จะเริ่มต้นด้วย Subquery จากนั้นก็หันไปที่ Join หากจำเป็น อย่างไรก็ตาม เช่นเดียวกับส่วนใหญ่ใน SQL แนวทางที่ดีที่สุดนั้น ขึ้นอยู่กับข้อกำหนดที่เฉพาะเจาะจงของ Query ของคุณ

ที่มาhttps://medium.com/

 

 

รับตำแหน่งงานไอทีใหม่ๆ ด้วยบริการ IT Job Alert

 

อัพเดทบทความจากคนวงในสายไอทีทาง LINE ก่อนใคร
อย่าลืมแอดไลน์ @techstarth เป็นเพื่อนนะคะ

เพิ่มเพื่อน

 

บทความล่าสุด