คําสั่ง select sql แบบมีเงื่อนไข

เราสามารถเพิ่ม WHERE condition เพิ่มเข้าไปได้เลย เพื่อให้การ Query ที่แสดงถูกกรองเหลือเฉพาะข้อมูลที่อยู่ในเงื่อนไขที่ต้องการ

ในส่วนของ Condition เราสามารถนำเอา SQL Operator เช่น =, >, <, LIKE, NOT มากรองข้อมูลใน Table ตามที่เราต้องการ

ตัวอย่างการ Query ข้อมูลใน Table

ตัวอย่างการ Query ข้อมูลใน Table

ถ้าเราต้องการแสดงข้อมูลของ table order_cart โดยเอาเฉพาะ column order_inv, pap_user_id, grand_total มาแสดง เราจะใช้คำสั่ง SQL Select statement ดังนี้

SQL Select statement

ในตัวอย่างนี้ จะมี WHERE condition คือ pap_user_id = 54 คือ การกรองข้อมูลเฉพาะ  pap_user_id ที่เท่ากับ 54

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

April 2, 202125475 views0

Table of Contents

SQL Subqueries

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 ... FROM ( SELECT ... FROM ...)1 คือ Subquery นั่นเอง

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

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

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

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

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

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

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

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

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

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

SELECT * FROM thai_boxoffice ORDER BY studio, gross

การใช้ Subquery ใน SELECT Clause

จากตัวอย่างข้างต้น แต่ละ Studio จะมีภาพยนตร์หลายเรื่อง ถ้าเราต้องการเพิ่มคอลัมน์ SELECT ... FROM ( SELECT ... FROM ...)8 ที่จะแสดงรายได้สูงสุดของภาพยนตร์ในค่ายนั้น สามารถทำได้โดยการเพิ่ม 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 เข้าไปเพื่อทำการคำนวณหาค่า SELECT ... FROM ( SELECT ... FROM ...)9 และเพิ่มเข้าไปเป็นคอลัมน์ใหม่ที่ชื่อว่า SELECT ... FROM ( SELECT ... FROM ...)8 และตั้งชื่อของตาราง (Alias) SELECT * FROM thai_boxoffice ORDER BY studio, gross1 ที่ Main Query เป็น SELECT * FROM thai_boxoffice ORDER BY studio, gross2 โดยเขียนชื่อ Alias เข้ามาต่อท้าย SELECT * FROM thai_boxoffice ORDER BY studio, gross1 เพื่อให้สามารถกำหนดเงื่อนไข SELECT ... FROM ( SELECT ... FROM ...)6 ใน Subquery ให้ filter มาเฉพาะแถวที่ SELECT * FROM thai_boxoffice ORDER BY studio, gross5 (การที่เรากำหนดเงื่อนไขนี้ จะทำให้เห็นว่า subquery นี้เป็น Correlated Subquery)

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

อีกวิธีที่ทำได้ คือเราสามารถนำไปใช้ร่วมกับคำสั่ง 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 ใน SELECT ... FROM ( SELECT ... FROM ...)6 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 SELECT * FROM thai_boxoffice ORDER BY studio, gross7 ของ Subquery 

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

อีกวิธีที่ทำได้ คือเราสามารถนำไปใช้ร่วมกับคำสั่ง 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 ได้ที่

Toplist

โพสต์ล่าสุด

แท็ก

แปลภาษาไทย ไทยแปลอังกฤษ โปรแกรม-แปล-ภาษา-อังกฤษ พร้อม-คำ-อ่าน ห่อหมกฮวกไปฝากป้าmv แปลภาษาอาหรับ-ไทย lmyour แปลภาษา ข้อสอบคณิตศาสตร์ พร้อมเฉลย แปลภาษาอังกฤษเป็นไทย pantip ระเบียบกระทรวงการคลังว่าด้วยการจัดซื้อจัดจ้างและการบริหารพัสดุภาครัฐ พ.ศ. 2560 แอพแปลภาษาอาหรับเป็นไทย ห่อหมกฮวกไปฝากป้า หนังเต็มเรื่อง แปลภาษาเวียดนามเป็นไทยทั้งประโยค Google Translate การ์ดแคปเตอร์ซากุระ ภาค 4 หยน อาจารย์ ตจต เมอร์ซี่ อาร์สยาม ล่าสุด ศัพท์ทหาร ภาษาอังกฤษ pdf ห่อหมกฮวกไปฝากป้า คาราโอเกะ app แปลภาษาไทยเป็นเวียดนาม การ์ดแคปเตอร์ซากุระ ภาค 3 บบบย ศัพท์ทหารบก แปลภาษาจีน การประปาส่วนภูมิภาค การ์ดแคปเตอร์ซากุระ ภาค 1 ขุนแผนหลวงปู่ทิม มีกี่รุ่น ชขภใ ตม.เชียงใหม่ เซ็นทรัลเฟสติวัล พจนานุกรมศัพท์ทหาร รหัสจังหวัด อําเภอ ตําบล รหัสประจำจังหวัด 77 จังหวัด สอบโอเน็ต ม.3 จําเป็นไหม หนังสือราชการ ตัวอย่าง ห่อหมกฮวกไปฝากป้า คอร์ด อเวนเจอร์ส ทั้งหมด แปลภาษา มาเลเซีย ไทย ไทยแปลอังกฤษ ประโยค ่้แปลภาษา Egp G no Reconguista Google map ขุนแผนหลวงปู่ทิมรุ่นแรก ข้อสอบภาษาไทยพร้อมเฉลย ข้อสอบโอเน็ต ม.3 ออกเรื่องอะไรบ้าง ค้นหา ประวัติ นามสกุล จองคิว ตม เชียงใหม่ ชื่อเต็ม ร.9 คําอ่าน ดีแม็กมือสองราคาไม่เกิน350000 ตัวอย่างรายงานการประชุมสั้นๆ