SQL nâng cao
Cách đây không lâu, tôi đã tạo một hướng dẫn dành cho người mới bắt đầu về SQL, bạn có thể đọc nó tại đây . Hôm nay là lúc để nói với bạn về các chủ đề nâng cao hơn, chẳng hạn như toán tử GROUP BY và HAVING, câu lệnh MERGE và các thủ tục được lưu trữ.
NHÓM THEO
Mệnh đề GROUP BY trong SQL được sử dụng để nhóm các hàng trong tập hợp kết quả dựa trên một hoặc nhiều cột. Nó thường được sử dụng cùng với các hàm tổng hợp như COUNT, SUM, AVG, MIN và MAX để tính toán các giá trị cho từng nhóm.
SELECT category, SUM(sales)
FROM orders
GROUP BY category;
Một vi dụ khac:
SELECT department, COUNT(employee_id)
FROM employees
GROUP BY department;
Điều quan trọng cần lưu ý là bạn phải sử dụng các hàm tổng hợp trên bất kỳ cột nào bạn chọn không nằm trong mệnh đề GROUP BY để tránh gặp lỗi. Ngoài ra, điều quan trọng cần nhớ là các cột trong mệnh đề GROUP BY là những cột xác định các nhóm; thứ tự của các cột trong câu lệnh SELECT không ảnh hưởng đến tập kết quả.
ĐANG CÓ
Dựa trên các điều kiện đối với hàm tổng hợp, các nhóm hàng trong tập hợp kết quả có thể được lọc bằng cách sử dụng mệnh đề HAVING trong SQL. Nó thường được kết hợp với mệnh đề GROUP BY để loại bỏ các nhóm không phù hợp với các yêu cầu cụ thể.
Ví dụ: hãy xem xét truy vấn SQL sau để chọn tổng doanh số cho từng danh mục sản phẩm trong một orderbảng mẫu và chỉ trả về các danh mục có tổng doanh số lớn hơn 1000:
SELECT category, SUM(sales)
FROM orders
GROUP BY category
HAVING SUM(sales) > 1000;
Một vi dụ khac:
SELECT department, AVG(salary)
FROM employees
GROUP BY department
HAVING COUNT(employee_id) > 5;
Tương tự như mệnh đề WHERE, mệnh đề HAVING được sử dụng để lọc các nhóm sau khi mệnh đề GROUP BY đã tạo ra chúng và các hàm tổng hợp đã được áp dụng.
HỢP NHẤT
Câu lệnh SQL MERGE được sử dụng để cập nhật hoặc chèn dữ liệu vào bảng đích dựa trên dữ liệu trong bảng nguồn hoặc để kết hợp dữ liệu từ hai hoặc nhiều bảng thành một bảng. Nó thường được sử dụng thay thế cho các câu lệnh kết hợp INSERT, UPDATE và DELETE.
Cú pháp:
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);
Một số hệ thống quản lý cơ sở dữ liệu như MySQL và SQLite không hỗ trợ câu lệnh MERGE, vì vậy bạn cần sử dụng kết hợp các câu lệnh INSERT, UPDATE và DELETE để thay thế.
Lệnh MERGE nên được kiểm tra trên một tập hợp con dữ liệu nhỏ trước khi được sử dụng trên toàn bộ bảng vì nó có thể có tác động lớn đến hiệu suất trên các bảng lớn.
thủ tục lưu trữ
Một nhóm các câu lệnh SQL được biên dịch trước được lưu giữ trong cơ sở dữ liệu dưới dạng một thủ tục được lưu trữ. Chúng thường được sử dụng để thực hiện một nhiệm vụ hoặc tập hợp các hoạt động cụ thể, chẳng hạn như lấy thông tin từ cơ sở dữ liệu hoặc thực hiện các phép toán phức tạp. So với việc chạy nhiều câu lệnh SQL riêng biệt, các thủ tục được lưu trữ linh hoạt và hiệu quả hơn vì chúng có thể nhận các tham số đầu vào và trả về các giá trị đầu ra.
Đây là một ví dụ về một thủ tục được lưu trữ đơn giản để truy xuất tất cả các hàng từ một bảng employees:
CREATE PROCEDURE GetAllEmployees
AS
BEGIN
SELECT * FROM employees;
END
EXEC GetAllEmployees;
Hãy ủng hộ ấn phẩm của chúng tôi bằng cách theo dõi nó
Cũng tham khảo các bài viết sau.
Câu hỏi và câu trả lời phỏng vấn API luồng Java 8
![Dù sao thì một danh sách được liên kết là gì? [Phần 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































