SQL แบบย่อ: การสร้างแบบสอบถามแบบโมดูลาร์และเข้าใจได้ด้วย CTE - KDnuggets

SQL แบบย่อ: การสร้างแบบสอบถามแบบโมดูลาร์และเข้าใจได้ด้วย CTE – KDnuggets

โหนดต้นทาง: 2457932

SQL แบบย่อ: การสร้างแบบสอบถามแบบแยกส่วนและเข้าใจง่ายด้วย CTE
ภาพโดยผู้เขียน 
 

ในโลกของข้อมูล SQL ยังคงเป็นภาษากลางสำหรับการโต้ตอบกับฐานข้อมูล 

ทุกวันนี้ภาษานี้ถือเป็นภาษาที่ใช้กันมากที่สุดภาษาหนึ่งในการจัดการกับข้อมูล และยังถือว่าเป็นสิ่งจำเป็นสำหรับผู้เชี่ยวชาญด้านข้อมูลที่ดี 

อย่างไรก็ตาม ใครก็ตามที่เคยทำงานกับคำสั่ง SQL ที่ซับซ้อนจะรู้ว่าพวกเขาสามารถกลายเป็นสัตว์ร้ายได้อย่างรวดเร็ว ซึ่งยากต่อการอ่าน บำรุงรักษา หรือนำมาใช้ซ้ำ 

นี่คือสาเหตุว่าทำไมทุกวันนี้การรู้ SQL ยังไม่เพียงพอ เราต้องเก่งในการสร้างคิวรีด้วย และนี่คืองานศิลปะประเภทหนึ่งจริงๆ 

นี่คือจุดที่ Common Table Expressions (CTE) เข้ามามีบทบาท โดยเปลี่ยนศิลปะของการเขียนแบบสอบถามให้เป็นงานฝีมือที่มีโครงสร้างและเข้าถึงได้มากขึ้น

ดังนั้น เรามาค้นพบวิธีเขียนโค้ดข้อความค้นหาที่อ่านได้และนำกลับมาใช้ใหม่ด้วยกัน

หากคุณสงสัยว่า CTE คืออะไร คุณมาถูกที่แล้ว 

Common Table Expression (CTE) คือชุดผลลัพธ์ชั่วคราวที่กำหนดไว้ภายในขอบเขตการดำเนินการของคำสั่ง SQL เดียว 

 

เป็นตารางชั่วคราวที่สามารถอ้างอิงได้หลายครั้งภายในแบบสอบถามเดียว และโดยทั่วไปจะใช้เพื่อลดความซับซ้อนของการรวมและแบบสอบถามย่อยที่ซับซ้อน โดยมีเป้าหมายสูงสุดในการเพิ่มความสามารถในการอ่านและการจัดระเบียบของโค้ด SQL

ดังนั้นจึงเป็นเครื่องมือที่มีประสิทธิภาพในการแบ่งแบบสอบถามที่ซับซ้อนออกเป็นส่วนที่เรียบง่าย

นี่คือเหตุผลที่คุณควรพิจารณาใช้ CTE:

  • modularity: คุณสามารถแยกตรรกะที่ซับซ้อนออกเป็นส่วนๆ ที่อ่านได้
  • การอ่าน: ช่วยให้เข้าใจขั้นตอนของการสืบค้น SQL ได้ง่ายขึ้น
  • การนำกลับมาใช้ใหม่: CTE สามารถอ้างอิงได้หลายครั้งในการสืบค้นครั้งเดียว เพื่อหลีกเลี่ยงการซ้ำซ้อน

ความมหัศจรรย์เริ่มต้นด้วยคำสั่งย่อย WITH ซึ่งนำหน้าแบบสอบถามหลักของคุณและกำหนดตารางชั่วคราว (CTE) ที่แตกต่างกันด้วยนามแฝง

ดังนั้นเราจึงจำเป็นต้องเริ่มการสืบค้นด้วยคำสั่ง “WITH” เพื่อเริ่มกำหนด CTE ของตัวเอง เมื่อใช้ CTE เราสามารถแบ่งการสืบค้น SQL ที่ซับซ้อนออกเป็น: 

– ตารางชั่วคราวขนาดเล็กที่คำนวณตัวแปรที่เกี่ยวข้อง 

– ตารางสุดท้ายที่รับเฉพาะตัวแปรที่เราต้องการเป็นเอาต์พุต

และนี่คือแนวทาง MODULAR ที่เราต้องการในโค้ดใดๆ ก็ตาม!

 

SQL แบบย่อ: การสร้างแบบสอบถามแบบแยกส่วนและเข้าใจง่ายด้วย CTE
ภาพโดยผู้เขียน
 

ดังนั้นการใช้ CTE ในการสืบค้นของเราช่วยให้เราสามารถ:

– ดำเนินการตารางชั่วคราวหนึ่งครั้งและอ้างอิงหลาย ๆ ครั้ง

– ปรับปรุงความสามารถในการอ่านและลดความซับซ้อนของตรรกะ

– ส่งเสริมการใช้รหัสซ้ำและการออกแบบโมดูลาร์

เพื่อให้เข้าใจสิ่งนี้ได้ดีขึ้น เราจึงนำตัวอย่างที่พัก Airbnb ในบาร์เซโลนามาใช้ได้จริง 

ลองจินตนาการว่าเราต้องการวิเคราะห์ประสิทธิภาพของที่พักตามพื้นที่ใกล้เคียง และเปรียบเทียบกับประสิทธิภาพโดยรวมของเมือง คุณจะต้องรวบรวมข้อมูลเกี่ยวกับละแวกใกล้เคียง อพาร์ตเมนต์แต่ละห้อง เจ้าของที่พัก และราคาเข้าด้วยกัน

เพื่อเป็นตัวอย่าง เราจะใช้ อินไซด์แอร์บีแอนด์บี ตารางของบาร์เซโลนาซึ่งมีลักษณะดังนี้: 

 

SQL แบบย่อ: การสร้างแบบสอบถามแบบแยกส่วนและเข้าใจง่ายด้วย CTE
 

แนวทางที่ไร้เดียงสาอาจทำให้คุณสร้างแบบสอบถามย่อยแบบซ้อนซึ่งกลายเป็นฝันร้ายในการบำรุงรักษาอย่างรวดเร็ว ดังต่อไปนี้:

รหัสโดยผู้เขียน

แต่เราสามารถใช้ CTE เพื่อแบ่งการสืบค้นของเราออกเป็นส่วนเชิงตรรกะ โดยแต่ละส่วนจะกำหนดชิ้นส่วนของปริศนา

  • ข้อมูลพื้นที่ใกล้เคียง: สร้าง CTE เพื่อสรุปข้อมูลตามพื้นที่ใกล้เคียง
  • ข้อมูลอพาร์ตเมนต์และโฮสต์: กำหนด CTE เพื่อดูรายละเอียดเกี่ยวกับอพาร์ทเมนท์และเจ้าของที่พัก
  • ตัวชี้วัดทั่วทั้งเมือง: CTE อื่นเพื่อรวบรวมสถิติระดับเมืองเพื่อการเปรียบเทียบ
  • การประกอบขั้นสุดท้าย: รวม CTE ไว้ในคำสั่ง SELECT สุดท้ายเพื่อนำเสนอข้อมูลอย่างสอดคล้องกัน

 

SQL แบบย่อ: การสร้างแบบสอบถามแบบแยกส่วนและเข้าใจง่ายด้วย CTE
ภาพโดยผู้เขียน
 

และเราจะจบลงด้วยคำถามต่อไปนี้:

รหัสโดยผู้เขียน

ด้วยการใช้ CTE เราจะเปลี่ยนการสืบค้นเดี่ยวที่อาจเป็นอันตรายให้เป็นชุดโมดูลข้อมูลที่จัดระเบียบ วิธีการแบบโมดูลาร์นี้ทำให้โค้ด SQL ใช้งานง่ายขึ้นและปรับให้เข้ากับการเปลี่ยนแปลงได้ 

หากมีข้อกำหนดใหม่เกิดขึ้น คุณสามารถปรับเปลี่ยนหรือเพิ่ม CTE ได้โดยไม่ต้องยกเครื่องการสืบค้นทั้งหมด

เมื่อคุณสร้าง CTE ของคุณแล้ว คุณสามารถนำมาใช้ซ้ำเพื่อทำการวิเคราะห์เปรียบเทียบได้ ตัวอย่างเช่น หากคุณต้องการเปรียบเทียบข้อมูลพื้นที่ใกล้เคียงกับหน่วยวัดทั่วทั้งเมือง คุณสามารถอ้างอิง CTE ของคุณในชุดการดำเนินการ JOIN ได้ 

สิ่งนี้ไม่เพียงช่วยประหยัดเวลา แต่ยังช่วยให้โค้ดของคุณมีประสิทธิภาพ เนื่องจากคุณไม่จำเป็นต้องค้นหาคำเดิมซ้ำสองครั้ง!

CTE เป็นข้อพิสูจน์ถึงหลักการที่ว่าโครงสร้างเล็กๆ น้อยๆ สามารถช่วยการเขียนโปรแกรมได้ยาวนาน การนำ CTE มาใช้จะทำให้คุณสามารถเขียนคำสั่ง SQL ที่ชัดเจน บำรุงรักษาได้มากขึ้น และนำกลับมาใช้ใหม่ได้ 

ช่วยเพิ่มความคล่องตัวให้กับกระบวนการพัฒนาคิวรีและทำให้ง่ายต่อการสื่อสารตรรกะการเรียกค้นข้อมูลที่ซับซ้อนกับผู้อื่นได้ง่ายขึ้น

โปรดจำไว้ว่า ครั้งต่อไปที่คุณพบว่าตัวเองกำลังจะเริ่มต้นเขียน multi-join และซ้อนคิวรีย่อย ให้พิจารณาแยกย่อยด้วย CTE 

ตัวคุณในอนาคต—และใครก็ตามที่อาจอ่านโค้ดของคุณ—จะขอบคุณ
 
 

โจเซป เฟอร์เรอร์ เป็นวิศวกรวิเคราะห์จากบาร์เซโลนา เขาสำเร็จการศึกษาด้านวิศวกรรมฟิสิกส์และกำลังทำงานในสาขาวิทยาศาสตร์ข้อมูลที่ประยุกต์ใช้กับการเคลื่อนที่ของมนุษย์ เขาเป็นผู้สร้างเนื้อหานอกเวลาที่มุ่งเน้นด้านวิทยาศาสตร์ข้อมูลและเทคโนโลยี สามารถติดต่อเขาได้ที่ LinkedIn, Twitter or กลาง.

ประทับเวลา:

เพิ่มเติมจาก KD นักเก็ต