ในโลกแห่งการจัดการฐานข้อมูลด้วย SQL, คำสั่ง `SELECT` นับเป็นหนึ่งในคำสั่งพื้นฐานที่ทรงพลังที่สุด พูดได้ว่าไม่มีโปรเจกต์ไหนที่จะขาดคำสั่งนี้ไปได้ แต่ว่าถ้าหากเราขุดลึกลงไปในการใช้งาน `SELECT` จะพบว่ามีประเภทคำสั่งที่มีความซับซ้อนและเกี่ยวข้องกับการใช้ตรรกะ, การเข้าร่วมข้อมูล (join), และการประมวลผลซับซ้อนอื่น ๆ ที่สามารถช่วยให้ผู้พัฒนาได้ผลลัพธ์ที่ต้องการได้อย่างแม่นยำ วันนี้เราจะมาพูดถึง 5 SELECT Query ที่มีความซับซ้อนที่โปรแกรมเมอร์ทุกคนควรเข้าใจและสามารถใช้ได้
Subqueries หรือการสอบถามย่อยที่ทำให้เราสามารถทำการคิวรีชุดข้อมูลภายในคิวรีหลักได้ ซึ่งคิวรีชนิดนี้ช่วยให้เราสร้างการคิวรีที่ซับซ้อนยิ่งขึ้นได้ เช่นการค้าหาค่าเฉลี่ยของหมวดหมู่สินค้า โดยใช้ subquery ในการคำนวณค่าเฉลี่ยก่อน จึงนำค่านั้นไปเปรียบเทียบกับแต่ละรายการสินค้า
SELECT ProductName, Price
FROM Products
WHERE Price > (SELECT AVG(Price) FROM Products);
Common Table Expressions (CTEs) นั้นเป็นการประกาศ query ชั่วคราวที่เราจะใช้ในการดำเนินการคิวรีบางอย่างภายใน `SELECT` เดียวกัน
WITH AveragePrice AS (
SELECT AVG(Price) AS AvgPrice FROM Products
)
SELECT ProductName, Price
FROM Products, AveragePrice
WHERE Price > AvgPrice;
CTEs ช่วยให้การเขียนคิวรีเป็นระเบียบและสามารถทำให้โค้ดอ่านง่ายขึ้น เพราะไม่ต้องใช้ subquery ซ้อนกันหลายๆ ระดับ
JOIN ใน SQL ทำหน้าที่รวมข้อมูลจากตารางต่างๆ เข้าด้วยกัน โดยมีหลายประเภท เช่น INNER JOIN, LEFT JOIN, RIGHT JOIN, และ FULL JOIN เป็นต้น การเลือกใช้ JOIN ที่เหมาะสมสามารถช่วยไขปัญหาข้อมูลที่ซับซ้อนได้ดี ลองพิจารณาตัวอย่างการใช้ LEFT JOIN เพื่อค้นหาลูกค้าที่ยังไม่มีการสั่งซื้อใดๆ
SELECT Customers.CustomerName
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID
WHERE Orders.OrderID IS NULL;
การจัดกลุ่มข้อมูลด้วย `GROUP BY` และการตั้งเงื่อนไขกับกลุ่มข้อมูลด้วย `HAVING` สามารถตอบสนองการวิเคราะห์ข้อมูลที่ค่อนข้างซับซ้อน เนื่องจาก `HAVING` เป็นการกำหนดเงื่อนไขของข้อมูลหลังจากที่มีการจัดกลุ่มแล้ว ต่างจาก `WHERE` ที่ทำการกรองข้อมูลก่อนทำการจัดกลุ่ม
SELECT CustomerID, COUNT(OrderID) AS NumberOfOrders
FROM Orders
GROUP BY CustomerID
HAVING COUNT(OrderID) > 5;
Window Function ให้ความสามารถในการทำงานกับแต่ละกลุ่มข้อมูลโดยไม่ต้องทำการจัดกลุ่มข้อมูล ซึ่งสามารถทำงานได้หลายอย่าง เช่น การหาค่าที่เรียงลำดับ, การคำนวณค่าเฉลี่ยเคลื่อนที่, นับข้อมูล, ฯลฯ
SELECT
ProductName,
Price,
AVG(Price) OVER (PARTITION BY CategoryID) AS AvgPricePerCategory
FROM Products;
การรวมข้อมูลแบบมีเงื่อนไขยังเป็นอีกหนึ่งเทคนิคที่น่าสนใจ ด้วยการใช้ `CASE` หรือ `IF` ภายใน `SUM`, `AVG`, หรือ `COUNT` เราสามารถกำหนดการรวมข้อมูลที่มีเงื่อนไขซับซ้อนแตกต่างกันไป
SELECT
SalesPersonID,
SUM(CASE WHEN Year = 2020 THEN Amount ELSE 0 END) AS Sales2020,
SUM(CASE WHEN Year = 2021 THEN Amount ELSE 0 END) AS Sales2021
FROM Sales
GROUP BY SalesPersonID;
การเข้าใจและสามารถใช้ `SELECT` Query ที่มีความซับซ้อนเหล่านี้ได้คล่องแคล่วจะช่วยเพิ่มความสามารถในการเข้าถึง, วิเคราะห์ และแสดงข้อมูลในมุมที่มีคุณภาพให้แก่โปรแกรมเมอร์ ไม่ว่าจะเป็นคนที่เพิ่งเริ่มต้นหรือผู้ที่มีประสบการณ์ และหากคุณต้องการปูพื้นฐานหรือเพิ่มทักษะในการจัดการฐานข้อมูลด้วย SQL หรือใดๆ ที่เกี่ยวข้องกับการเขียนโปรแกรม, การเรียนรู้ในสถาบันเช่น EPT สามารถช่วยให้คุณไปถึงเป้าหมายและพัฒนาทักษะของคุณอย่างมีประสิทธิภาพ.
หมายเหตุ: การเขียนโค้ดในฐานข้อมูลจริงอาจต้องใช้การปรับแต่งรหัสให้เข้ากับโครงสร้างและความต้องการของฐานข้อมูลนั้นๆ
หมายเหตุ: ข้อมูลในบทความนี้อาจจะผิด โปรดตรวจสอบความถูกต้องของบทความอีกครั้งหนึ่ง บทความนี้ไม่สามารถนำไปใช้อ้างอิงใด ๆ ได้ ทาง EPT ไม่ขอยืนยันความถูกต้อง และไม่ขอรับผิดชอบต่อความเสียหายใดที่เกิดจากบทความชุดนี้ทั้งทางทรัพย์สิน ร่างกาย หรือจิตใจของผู้อ่านและผู้เกี่ยวข้อง
หากเจอข้อผิดพลาด หรือต้องการพูดคุย ติดต่อได้ที่ https://m.me/expert.Programming.Tutor/
Tag ที่น่าสนใจ: sql select_query subqueries common_table_expressions join group_by having window_functions conditional_aggregation programming
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM
Copyright (c) 2013 expert-programming-tutor.com. All rights reserved. | 085-350-7540 | 084-88-00-255 | ntprintf@gmail.com