SQL ขั้นสูง
ไม่นานมานี้ ฉันได้สร้างบทช่วยสอนสำหรับผู้เริ่มต้นของ SQL คุณสามารถอ่านได้ที่นี่ วันนี้ถึงเวลาที่จะบอกคุณเกี่ยวกับหัวข้อขั้นสูง เช่น ตัวดำเนินการ GROUP BY และ HAVING, คำสั่ง MERGE และขั้นตอนการจัดเก็บ
กลุ่มโดย
GROUP BY clause ใน SQL ใช้เพื่อจัดกลุ่มแถวในชุดผลลัพธ์ตามคอลัมน์ตั้งแต่หนึ่งคอลัมน์ขึ้นไป โดยทั่วไปจะใช้ร่วมกับฟังก์ชันการรวม เช่น COUNT, SUM, AVG, MIN และ MAX เพื่อคำนวณค่าสำหรับแต่ละกลุ่ม
SELECT category, SUM(sales)
FROM orders
GROUP BY category;
ตัวอย่างอื่น:
SELECT department, COUNT(employee_id)
FROM employees
GROUP BY department;
โปรดทราบว่าคุณต้องใช้ฟังก์ชันการรวมในคอลัมน์ใดๆ ที่คุณเลือกซึ่งไม่ครอบคลุมโดย GROUP BY clause เพื่อหลีกเลี่ยงข้อผิดพลาด นอกจากนี้ สิ่งสำคัญคือต้องจำไว้ว่าคอลัมน์ใน GROUP BY clause คือคอลัมน์ที่กำหนดกลุ่ม ลำดับของคอลัมน์ในคำสั่ง SELECT ไม่มีผลต่อชุดผลลัพธ์
มี
ตามเงื่อนไขสำหรับฟังก์ชันการรวม กลุ่มของแถวในชุดผลลัพธ์สามารถกรองได้โดยใช้ HAVING clause ใน SQL โดยทั่วไปจะรวมกับ GROUP BY clause เพื่อกำจัดกลุ่มที่ไม่ตรงตามข้อกำหนดเฉพาะ
ตัวอย่างเช่น พิจารณาแบบสอบถาม SQL ต่อไปนี้ซึ่งเลือกยอดขายรวมสำหรับแต่ละประเภทผลิตภัณฑ์ในตารางตัวอย่างorderและส่งกลับเฉพาะประเภทที่มียอดขายรวมมากกว่า 1,000:
SELECT category, SUM(sales)
FROM orders
GROUP BY category
HAVING SUM(sales) > 1000;
ตัวอย่างอื่น:
SELECT department, AVG(salary)
FROM employees
GROUP BY department
HAVING COUNT(employee_id) > 5;
เช่นเดียวกับส่วนคำสั่ง WHERE ส่วนคำสั่ง HAVING จะใช้ในการกรองกลุ่มหลังจากที่ส่วนคำสั่ง GROUP BY ได้สร้างกลุ่มเหล่านั้นและมีการใช้ฟังก์ชันการรวม
ผสาน
คำสั่ง SQL MERGE ใช้เพื่ออัปเดตหรือแทรกข้อมูลลงในตารางเป้าหมายตามข้อมูลในตารางต้นฉบับ หรือเพื่อรวมข้อมูลจากสองตารางขึ้นไปเป็นตารางเดียว มักใช้เป็นทางเลือกแทนคำสั่งที่รวม INSERT, UPDATE และ DELETE
ไวยากรณ์:
MERGE INTO target_table
USING source_table
ON (join_condition)
WHEN MATCHED THEN
UPDATE SET target_table.column1 = source_table.column1, ...
WHEN NOT MATCHED THEN
INSERT (column1, column2, ...)
VALUES (source_table.column1, source_table.column2, ...)
MERGE INTO products
USING prices
ON (products.product_id = prices.product_id)
WHEN MATCHED THEN
UPDATE SET products.price = prices.price;
MERGE INTO employees
USING temp_employees
ON (employees.employee_id = temp_employees.employee_id)
WHEN MATCHED THEN
UPDATE SET employees.salary = temp_employees.salary
WHEN NOT MATCHED THEN
INSERT (employee_id, first_name, last_name, department, salary)
VALUES (temp_employees.employee_id, temp_employees.first_name, temp_employees.last_name, temp_employees.department, temp_employees.salary);
ระบบจัดการฐานข้อมูลบางระบบ เช่น MySQL และ SQLite ไม่รองรับคำสั่ง MERGE ดังนั้นคุณจึงต้องใช้คำสั่ง INSERT, UPDATE และ DELETE ร่วมกันแทน
คำสั่ง MERGE ควรได้รับการทดสอบกับข้อมูลชุดย่อยเล็กๆ ก่อนนำไปใช้กับทั้งตาราง เนื่องจากคำสั่งดังกล่าวอาจส่งผลกระทบต่อประสิทธิภาพการทำงานอย่างมากในตารางขนาดใหญ่
ขั้นตอนการจัดเก็บ
กลุ่มของคำสั่ง SQL ที่คอมไพล์แล้วซึ่งเก็บไว้ในฐานข้อมูลเป็นกระบวนงานที่เก็บไว้ พวกเขามักจะถูกว่าจ้างให้ทำงานเฉพาะหรือชุดของกิจกรรม เช่น การดึงข้อมูลจากฐานข้อมูลหรือการคำนวณที่ซับซ้อน เมื่อเทียบกับการเรียกใช้คำสั่ง SQL แยกกันจำนวนมาก กระบวนงานที่จัดเก็บมีความหลากหลายและมีประสิทธิภาพมากกว่าเนื่องจากสามารถรับพารามิเตอร์อินพุตและส่งคืนค่าเอาต์พุต
ต่อไปนี้คือตัวอย่างขั้นตอนง่ายๆ ที่จัดเก็บซึ่งดึงข้อมูลแถวทั้งหมดจากตารางemployees:
CREATE PROCEDURE GetAllEmployees
AS
BEGIN
SELECT * FROM employees;
END
EXEC GetAllEmployees;
สนับสนุนสิ่งพิมพ์ของเราโดยติดตาม
อ้างถึงบทความต่อไปนี้ด้วย
คำถามและคำตอบในการสัมภาษณ์ Java 8 Stream API




































![รายการที่เชื่อมโยงคืออะไร? [ส่วนที่ 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)