subquery คืออะไร
Data

Subquery เทคนิคง่ายๆ ช่วย query สบายกว่าที่เคย

SQL Subqueries

Subquery เทคนิคง่ายๆ ช่วย query สบายกว่าที่เคย | Skooldio Blog

Subquery คืออะไร? Subquery เหมือนกับการ Query ในภาษา SQL หรือคือการเขียน SELECT Statement เพื่อทำการดึงข้อมูลในคอลัมน์หรือค่าในคอลัมน์จากตารางหรือฐานข้อมูลที่เราต้องการ เพื่อนำไปใช้ประโยชน์ต่อไป แต่ Subquery จะคือการ Query ซ้อน Query อีกทีหนึ่ง

SELECT column_1, column_2
FROM table1

ตัวอย่างการใช้ SELECT ใน SQL

Subquery ในภาษา SQL คือ SELECT statement ย่อยที่ถูกครอบด้วย SELECT Statement อีกอันที่ใหญ่กว่า ซึ่งบางคนก็จะเรียกว่า Inner query หรือ Nested query โดยหน้าตาของ Subquery จะสังเกตได้ง่ายๆ จากวงเล็บ นั่นคือ Query ไหนที่มีวงเล็บครอบอยู่ Query นั้นจะถูกเรียกว่า Subquery และ Query ที่อยู่ด้านนอกเรียกว่า Outer Query หรือ Main Query นั่นเอง

SELECT ...
FROM ( SELECT ...
       FROM ...)

จากคำสั่งข้างบน (SELECT ...) คือ Subquery นั่นเอง

หากใครอ่านมาถึงตรงนี้โดยที่ยังไม่รู้จักภาษา SQL สามารถอ่านเพิ่มเติมได้ที่นี่


ประโยชน์หรือข้อดีของ Subquery

Subquery สามารถคืนค่าหลายรูปแบบ 

การคืนค่าได้หลายรูปแบบนี้ทำให้เราสามารถนำไปใช้ประโยชน์ต่อได้หลายรูปแบบมากยิ่งขึ้น

  • ไม่ว่าจะเป็น Scalar ที่เป็นค่าเดียว หรือตัวเลขหนึ่งตัว เช่น SELECT COUNT (x) ก็จะได้จำนวนแถวกลับมา 1 ค่า 
  • คืนค่ากลับมาเป็นแถว 1 แถว (Single row) ,คืนค่ากลับมาเป็นคอลัมน์ 1 คอลัมน์ (Single Column) หรือคืนค่ากลับมาเป็นตาราง 1 ตาราง

Subquery สามารถเอาไปใช้ได้หลายที่ 

  • Calculated value หรือใช้ใน SELECT Clause เพื่อคำนวณค่าอะไรบางอย่างที่ไม่สามารถทำได้ในการ query ครั้งเดียว (calculated value)
  • Data source หรือใช้ใน FROM Clause / JOIN เพื่อนำข้อมูลจากหลายๆ แหล่งมาประมวลผลก่อนนำไปใช้
  • Selection criteria หรือใช้ใน WHERE Clause เพื่อเป็นเงื่อนไขในการกรองข้อมูลก่อนนำไปใช้ เช่นเลือกเฉพาะแถว 1 แถว ที่อยู่ในอีกตารางมาประมวลผลกับอีกตาราง

ตัวอย่างการใช้ Subquery

เพื่อให้เห็นภาพการใช้งาน Subquery มากขึ้น จะขอยกตัวอย่างโดยใช้ข้อมูลภาพยนตร์จากวิกิพีเดีย ที่ประกอบไปด้วย ข้อมูล 4 คอลัมน์ ดังรูป 

ตัวอย่างผลลัพธ์การ query | Skooldio Blog

โดยเป็นการ Query ด้วยชุดคำสั่ง

SELECT *
FROM thai_boxoffice 
ORDER BY studio, gross

การใช้ Subquery ใน SELECT Clause

จากตัวอย่างข้างต้น แต่ละ Studio จะมีภาพยนตร์หลายเรื่อง ถ้าเราต้องการเพิ่มคอลัมน์ studio_max_gross ที่จะแสดงรายได้สูงสุดของภาพยนตร์ในค่ายนั้น สามารถทำได้โดยการเพิ่ม Subquery เข้าไป

SELECT *,
      ( SELECT MAX(gross)
        FROM thai_boxoffice
        WHERE studio = m.studio
      ) AS studio_max_gross
FROM thai_boxoffice m 
ORDER BY studio, gross

จากชุดคำสั่งข้างบน เราได้ทำการเพิ่ม Subquery เข้าไปเพื่อทำการคำนวณหาค่า MAX(gross) และเพิ่มเข้าไปเป็นคอลัมน์ใหม่ที่ชื่อว่า studio_max_gross และตั้งชื่อของตาราง (Alias) thai_boxoffice ที่ Main Query เป็น m โดยเขียนชื่อ Alias เข้ามาต่อท้าย thai_boxoffice เพื่อให้สามารถกำหนดเงื่อนไข WHERE ใน Subquery ให้ filter มาเฉพาะแถวที่ studio = m.studio (การที่เรากำหนดเงื่อนไขนี้ จะทำให้เห็นว่า subquery นี้เป็น Correlated Subquery)

ตัวอย่างผลลัพธ์จากการ Query | Skooldio Blog

ผลลัพท์จากคำสั่งข้างต้น

อีกวิธีที่ทำได้ คือเราสามารถนำไปใช้ร่วมกับคำสั่ง JOIN ได้ด้วยคำสั่ง

SELECT m.*, mm.studio_max_gross 
FROM thai_boxoffice m 
JOIN ( SELECT studio, MAX(gross) AS studio_max_gross
       FROM thai_boxoffice
       GROUP BY studio
     ) mm
ON m.studio = mm.studio
ORDER BY studio, gross

การใช้ Subquery ใน WHERE Clause

จากตัวอย่างเดิม เราต้องการแสดงเฉพาะรายละเอียดภาพยนตร์ที่ทำรายได้สูงสุดของแต่ละค่าย สามารถทำได้โดยการเพิ่ม Subquery เข้าไปในเงื่อนไข

SELECT *
FROM thai_boxoffice m 
WHERE gross = ( SELECT MAX(gross)
                FROM thai_boxoffice
                WHERE studio = m.studio
              )
ORDER BY studio

จากชุดคำสั่งข้างบน เราได้ทำการเพิ่ม Subquery เข้าไปเพื่อเป็นเงื่อไขในการ filter ค่า gross จาก mainquery = MAX(gross) ของ Subquery 

ตัวอย่างผลลัพท์จากการ Query | Skooldio Blog

ผลลัพท์จากคำสั่งข้างต้น

อีกวิธีที่ทำได้ คือเราสามารถนำไปใช้ร่วมกับคำสั่ง JOIN ได้ด้วยคำสั่ง

SELECT m.*
FROM thai_boxoffice m
JOIN ( SELECT studio, MAX(gross) AS studio_max_gross
       FROM thai_boxoffice
       GROUP BY studio
     ) mm
ON m.studio = mm.studio
WHEREE m.gross = mm.studio_max_gross
ORDER BY studio

นี่เป็นเพียงส่วนหนึ่งของ Subquery เท่านั้น และในความเป็นจริงก็มีวิธีอื่นที่สามารถทำให้ได้ผลลัพธ์อยู่เหมือนกัน ความเร็วในการทำงานก็อาจจะแตกต่างกันออกไป เช่น การใช้คำสั่ง JOIN  หากใครต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ Subquery และคำสั่งอื่นๆ ที่จะช่วยให้คุณใช้งาน SQL ได้อย่างเต็มประสิทธิภาพมากยิ่งขึ้น สามารถทดลองเรียน ดูตัวอย่างบทเรียนพร้อมทดลองเขียนภาษา SQL ได้ที่ Advanced SQL for Data Analytics with BigQuery

Advanced SQL for Data Analytics | Skooldio Blog

Patchara Boonmathanaruk
Business Development Associate | Skooldio

    You may also like

    Web Scraping คืออะไร?
    Data

    Web Scraping คืออะไร? ไม่เก่งเขียน Code สามารถทำได้ไหม?

    ในปัจจุบันที่โลกก้าวสู่ยุค Digital และมีความเติบโตของจำนวนผู้ใช้อินเตอร์เน็ตจำนวนมาก ไม่ว่าจะเป็น การค้นหาข้อมูลข่าวสาร, ซื้อขายสินค้า หรือเป็นแหล่งชุมชน Community และอื่นๆ อีกมากมายอยู่บนเว็บไซต์ กลายเป็นแหล่งข้อมูล (Data Source) ชั้นดี สำหรับธุรกิจต่างๆ ...
    แนะนำเครื่องมือดึงข้อมูลฟรี Webscraper.io
    Data

    แนะนำเครื่องมือดึงข้อมูลจากเว็บไซต์ฟรี !! WebScraper.io

    ปัจจุบัน ‘เว็บไซต์’ ถือว่าเป็นแหล่งข้อมูลชั้นดี (Data source) และมีบทบาทความสำคัญในการขับเคลื่อนธุรกิจทุกระดับไม่ว่าจะเป็นธุรกิจขนาดเล็กหรือขนาดใหญ่ แต่การดึงข้อมูลบนเว็บไซต์ (Web Scraping) อาจจะฟังดูเป็นเรื่องไกลตัวสำหรับผู้ที่ไม่ใช่โปรแกรมเมอร์ที่สามารถเขียนโค้ดโปรแกรมดึงข้อมูลออกมาใช้งานได้ 😎 จะดีกว่ามั้ย!? ถ้าคุณสามารถใช้เครื่องมือดึงข้อมูลที่สนใจบนเว็บไซต์ได้ด้วยตัวเอง ถึงแม้ว่าคุณอาจจะเขียนโปรแกรมไม่เก่งก็สามารถทำได้ ฟรี ...

    More in:Data

    Data

    Apache Airflow คืออะไร แล้วทำไมองค์กรชั้นนำส่วนใหญ่ถึงเลือกใช้

    Apache Airflow คือ 1 ใน Workflow Management ที่ได้รับความนิยม และองค์กรชั้นนำระดับโลกหลายๆ องค์กรเลือกใช้ โดยเฉพาะอย่างยิ่งในการสร้าง Data Pipelines เพื่อจัดการกับข้อมูลจำนวนมหาศาล ส่วนหนึ่งเพราะองค์กรต่าง ...
    Performance Marketing คืออะไร Business

    Performance Marketing คืออะไร? รู้จักวิธีการทำการตลาดแบบวัดผลได้

    ถ้าให้คุณจ่ายเงินเกินสิ่งที่ได้รับ หรือจ่ายไปโดยไม่รู้ด้วยซ้ำว่าได้ผลหรือเปล่า คุณจะยอมไหม? แน่นอนว่าคุณคงไม่แฮปปี้ แต่นี่แหละคือ ‘วิธีทำการตลาด’ ที่หลาย ๆ บริษัทกำลังทำอยู่ แล้วจะดีแค่ไหน หากเราสามารถเลือกใช้เงินเฉพาะกับผลลัพธ์ที่เราได้รับเท่านั้น ซึ่งทั้งหมดนี้คืองาน Performance Marketing การทำธุรกิจเปลี่ยนไปอย่างรวดเร็วตั้งแต่อินเตอร์เน็ตเข้ามามีบทบาทกับพฤติกรรมของมนุษย์ ...
    data-driven-with-moneyball-theory Data

    MoneyBall Theory ถอดบทเรียนชัยชนะแห่งศตวรรษด้วย Data

    สำหรับใครหลายๆ คนมักจะคิดว่าการใช้ Data นั้นจะถูกจำกัดไว้อยู่เพียงแค่กับการทำธุรกิจ หรือการทำวิจัยเท่านั้น แต่ความเป็นจริงแล้วข้อมูลสามารถใช้ในการวิเคราะห์ได้หลากหลายสิ่งมากๆ และอยู่ได้ในแทบทุกวงการ แม้กระทั่งกับวงการกีฬาเองที่การวิเคราะห์ข้อมูล และใช้ Data ก็สามารถทำให้ทีมได้ชัยชนะได้ไม่ยาก ย้อนกลับไปในช่วงก่อนปี 2002 วงการเบสบอลในสหรัฐอเมริกาจะมีแมวมองไปดูตามโรงเรียนมัธยมต่าง ๆ ...
    Data

    สร้าง Profile สาย Data ยังไงดี เมื่อบริษัทไม่ได้มองหาแค่คนมีสกิล?

    อยากทำงานสายงาน Data Analyst แต่ไม่มีประสบการณ์ จะเก็บโปรไฟล์ยังไงดี? หลายคนที่กำลังเรียน หรือกำลังสนใจจะเรียน Data Analytics อาจมีความกังวล เพราะแม้เราจะมีสกิลครบตามตำแหน่งงาน (SQL, Spreadsheets, Business Intelligence ...

    Comments are closed.