Xu Hướng 9/2023 # Sql Server: Các Lệnh Group By Trong Sql Server Có Thể Bạn Chưa Biết # Top 9 Xem Nhiều | Utly.edu.vn

Xu Hướng 9/2023 # Sql Server: Các Lệnh Group By Trong Sql Server Có Thể Bạn Chưa Biết # Top 9 Xem Nhiều

Bạn đang xem bài viết Sql Server: Các Lệnh Group By Trong Sql Server Có Thể Bạn Chưa Biết được cập nhật mới nhất tháng 9 năm 2023 trên website Utly.edu.vn. Hy vọng những thông tin mà chúng tôi đã chia sẻ là hữu ích với bạn. Nếu nội dung hay, ý nghĩa bạn hãy chia sẻ với bạn bè của mình và luôn theo dõi, ủng hộ chúng tôi để cập nhật những thông tin mới nhất.

Trong hướng dẫn này, bạn sẽ tìm hiểu các mệnh đề GROUP BY, GROUPING SET, CUBE, ROLLUP và HAVING trong SQL Server để sắp xếp các bản ghi theo nhóm.

Mệnh đề GROUP BY trong SQL Server Giới thiệu về mệnh đề GROUP BY trong SQL Server

Mệnh đề GROUP BY trong SQL Server cho phép bạn sắp xếp các bản ghi của một truy vấn theo nhóm. Các nhóm được xác định bởi các cột mà bạn chỉ định trong mệnh đề GROUP BY.

SELECT select_list FROM table_name GROUP BY column_name1, column_name2 ,...;

Trong truy vấn này, mệnh đề GROUP BY đã tạo ra một nhóm cho mỗi kết hợp các giá trị trong các cột được liệt kê trong mệnh đề GROUP BY.

Hãy xem ví dụ sau:

SELECT customer_id, YEAR (order_date) order_year FROM sales.orders WHERE customer_id IN (1, 2) ORDER BY customer_id;

Đây là kết quả:

Trong ví dụ này, chúng tôi đã truy xuất thông tin id khách hàng và năm đặt hàng của những khách hàng có id 1 và 2.

Như bạn có thể thấy ở kết quả đầu ra, khách hàng có id 1 đã đặt một đơn hàng vào năm 2023 và hai đơn hàng vào năm 2023. Khách hàng có id hai đã đặt hai đơn hàng vào năm 2023 và một đơn hàng vào năm 2023.

Hãy thêm mệnh đề GROUP BY vào truy vấn trên và xem kết quả:

SELECT customer_id, YEAR (order_date) order_year FROM sales.orders WHERE customer_id IN (1, 2) GROUP BY customer_id, YEAR (order_date) ORDER BY customer_id;

Đây là kết quả:

Mệnh đề GROUP BY đã sắp xếp ba bản ghi đầu tiên của khách hàng có id là 1 thành hai nhóm và ba bản ghi tiếp theo của khách hàng có id là 2 vào hai nhóm khác với sự kết hợp duy nhất của id khách hàng và năm đặt hàng.

Về mặt chức năng, mệnh đề GROUP BY trong truy vấn trên tạo ra kết quả tương tự như truy vấn sau sử dụng mệnh đề :

SELECT DISTINCT customer_id, YEAR (order_date) order_year FROM sales.orders WHERE customer_id IN (1, 2) ORDER BY customer_id;

Đây là kết quả:

Mệnh đề GROUP BY và hàm tập hợp của SQL Server

Trong thực tế, mệnh đề GROUP BY thường được sử dụng với các hàm tập hợp để tạo báo cáo tóm tắt.

Một hàm tập hợp thực hiện một phép tính vào một nhóm và trả về một giá trị duy nhất cho mỗi nhóm. Ví dụ, hàm COUNT() trả về số lượng bản ghi trong mỗi nhóm. Các hàm tập hợp thường được sử dụng khác là SUM() (tính tổng), (tính trung bình), MIN()(nhỏ nhất), MAX()(lớn nhất).

Mệnh đề GROUP BY sắp xếp các bản ghi thành các nhóm và thực hiện các hàm tập hợp (count, min, max, avg, sum, vv) cho mỗi nhóm.

Ví dụ: truy vấn sau đây trả về số lượng đơn đặt hàng của khách hàng theo năm:

SELECT customer_id, YEAR (order_date) order_year, COUNT (order_id) order_placed FROM sales.orders WHERE customer_id IN (1, 2) GROUP BY customer_id, YEAR (order_date) ORDER BY customer_id;

Đây là kết quả:

Nếu bạn muốn thêm bất kỳ cột hoặc biểu thức nào không được liệt kê trong mệnh đề GROUP BY, bạn phải sử dụng cột đó làm đầu vào của hàm tập hợp.

Nếu không, bạn sẽ gặp lỗi vì không có gì đảm bảo rằng cột hoặc biểu thức đó sẽ trả về một giá trị duy nhất cho mỗi nhóm.

Ví dụ: truy vấn sau sẽ thất bại:

SELECT customer_id, YEAR (order_date) order_year, order_status FROM sales.orders WHERE customer_id IN (1, 2) GROUP BY customer_id, YEAR (order_date) ORDER BY customer_id; Ví dụ về mệnh đề GROUP BY trong SQL Server

Chúng ta hãy lấy thêm một số ví dụ để hiểu cách hoạt động của mệnh đề GROUP BY.

Sử dụng mệnh đề GROUP BY với hàm COUNT() trong SQL Server

Truy vấn sau đây trả về số lượng khách hàng ở mỗi thành phố:

SELECT city, COUNT (customer_id) customer_count FROM sales.customers GROUP BY city ORDER BY city;

Đây là kết quả:

Trong ví dụ này, mệnh đề GROUP BY nhóm các khách hàng lại với nhau theo từng thành phố và hàm COUNT() trả về số lượng khách hàng ở mỗi thành phố.

Tương tự, truy vấn sau đây trả về số lượng khách hàng theo tiểu bang và thành phố.

SELECT city, state, COUNT (customer_id) customer_count FROM sales.customers GROUP BY state, city ORDER BY city, state;

Đây là kết quả:

GROUPING SET trong SQL Server Giới thiệu về GROUPING SETS trong SQL Server

Theo định nghĩa GROUPING SETS là một nhóm các cột mà bạn nhóm. Thông thường, một truy vấn với một tập hợp xác định một tập hợp nhóm duy nhất.

SELECT brand, category, SUM (sales) sales FROM sales.sales_summary GROUP BY brand, category ORDER BY brand, category;

Truy vấn sau đây trả về số lượng bán hàng theo thương hiệu. Nó xác định một tập hợp nhóm (brand):

SELECT brand, SUM (sales) sales FROM sales.sales_summary GROUP BY brand ORDER BY brand; SELECT category, SUM (sales) sales FROM sales.sales_summary GROUP BY category ORDER BY category; SELECT SUM (sales) sales FROM sales.sales_summary;

Bốn truy vấn trên trả về bốn tập kết quả với bốn nhóm:

(brand, category) (brand) (category) ()

Để có được tập hợp kết quả thống nhất với dữ liệu tổng hợp cho tất cả các tập hợp nhóm, bạn có thể sử dụng toán tử UNION ALL.

Vì toán tử UNION ALL yêu cầu tất cả tập hợp kết quả có cùng số cột, bạn cần thêm cột NULL vào danh sách các truy vấn như sau:

SELECT brand, category, SUM (sales) sales FROM sales.sales_summary GROUP BY brand, category UNION ALL SELECT brand, NULL, SUM (sales) sales FROM sales.sales_summary GROUP BY brand UNION ALL SELECT NULL, category, SUM (sales) sales FROM sales.sales_summary GROUP BY category UNION ALL SELECT NULL, NULL, SUM (sales) FROM sales.sales_summary ORDER BY brand, category;

Truy vấn tạo ra một kết quả duy nhất với các tổng hợp cho tất cả các nhóm nhóm như chúng tôi mong đợi.

Tuy nhiên, nó có hai vấn đề lớn:

Truy vấn khá dài.

Truy vấn chậm vì SQL Server cần thực hiện bốn truy vấn con và kết hợp các tập hợp kết quả thành một.

Để khắc phục những sự cố này, SQL Server cung cấp một mệnh đề con của mệnh đề được gọi là GROUPING SETS.

SELECT column1, column2, aggregate_function (column3) FROM table_name GROUP BY GROUPING SETS ( (column1, column2), (column1), (column2), () );

Truy vấn này tạo ra bốn nhóm như sau:

(column1, column2) (column1) (column2) ()

Bạn có thể sử dụng GROUPING SETS để viết lại truy vấn lấy dữ liệu bán hàng như sau:

SELECT brand, category, SUM (sales) sales FROM sales.sales_summary GROUP BY GROUPING SETS ( (brand, category), (brand), (category), () ) ORDER BY brand, category;

Như bạn có thể thấy, truy vấn tạo ra kết quả giống như truy vấn sử dụng toán tử UNION ALL. Tuy nhiên, truy vấn này dễ đọc hơn nhiều và tất nhiên là hiệu quả hơn.

Tìm hiểu thêm về GROUPING SET trong SQL Server ở bài viết sau:

Mệnh đề CUBE trong SQL Server Giới thiệu về mệnh đề CUBE trong SQL Server

GROUPING SETS định nghĩa các nhóm dữ liệu trong một truy vấn. Ví dụ: truy vấn sau định nghĩa một tập nhóm duy nhất được ký hiệu là (brand):

SELECT brand, SUM(sales) FROM sales.sales_summary GROUP BY brand;

Nếu bạn chưa làm theo hướng dẫn GROUPING SETS, bạn có thể tạo bảng sales.sales_summary bằng cách sử dụng truy vấn sau:

SELECT b.brand_name AS brand, c.category_name AS category, p.model_year, round( SUM ( quantity * i.list_price * (1 - discount) ), 0 ) sales INTO sales.sales_summary FROM sales.order_items i INNER JOIN production.products p ON p.product_id = i.product_id INNER JOIN production.brands b ON b.brand_id = p.brand_id INNER JOIN production.categories c ON c.category_id = p.category_id GROUP BY b.brand_name, c.category_name, p.model_year ORDER BY b.brand_name, c.category_name, p.model_year;

Ngay cả khi truy vấn sau không sử dụng mệnh đề , nó tạo ra một tập hợp nhóm trống được ký hiệu là ().

SELECT SUM(sales) FROM sales.sales_summary; SELECT d1, d2, d3, aggregate_function (c4) FROM table_name GROUP BY CUBE (d1, d2, d3);

Trong cú pháp này, hàm CUBE tạo tất cả các nhóm có thể dựa trên các cột d1, d2 và d3 mà bạn chỉ định trong mệnh đề CUBE.

Truy vấn trên trả về cùng một tập hợp kết quả như truy vấn sau, sử dụng hàm GROUPING SETS:

SELECT d1, d2, d3, aggregate_function (c4) FROM table_name GROUP BY GROUPING SETS ( (d1,d2,d3), (d1,d2), (d1,d3), (d2,d3), (d1), (d2), (d3), () );

Nếu bạn có N cột được chỉ định trong CUBE, bạn sẽ có 2 N tập nhóm kết quả.

Có thể giảm số lượng tập nhóm kết quả bằng cách sử dụng CUBE một phần như được hiển thị trong truy vấn sau:

SELECT d1, d2, d3, aggregate_function (c4) FROM table_name GROUP BY d1, CUBE (d2, d3);

Trong trường hợp này, truy vấn tạo ra bốn tập hợp nhóm vì chỉ có hai cột được chỉ định trong CUBE.

Ví dụ về mệnh đề CUBE trong SQL Server

Câu lệnh sau sử dụng CUBE để tạo bốn tập nhóm:

SELECT brand, category, SUM (sales) sales FROM sales.sales_summary GROUP BY CUBE(brand, category);

Đây là kết quả đầu ra:

Mệnh đề ROLLUP trong SQL Server Giới thiệu về mệnh đề ROLLUP trong SQL Server

ROLLUP trong SQL Server là một mệnh đề con của mệnh đề GROUP BY cung cấp cách viết tắt để xác định nhiều GROUPING SETS. Không giống như CUBE – tạo các tập nhóm với tất cả các kết hợp của các cột, ROLLUP không tạo tất cả các tập hợp nhóm có thể dựa trên các cột thứ nguyên.

Khi tạo các tập hợp nhóm, ROLLUP giả định một hệ thống phân cấp giữa các cột thứ nguyên và chỉ tạo các tập hợp nhóm dựa trên hệ thống phân cấp này.

ROLLUP thường được sử dụng để tạo ra tổng số phụ (subtotals) và tổng số (totals) cho mục đích báo cáo.

Hãy xem xét ví dụ sau đây: mệnh đề CUBE (d1,d2,d3) sẽ xác định tám tập hợp nhóm như sau:

(d1, d2, d3) (d1, d2) (d2, d3) (d1, d3) (d1) (d2) (d3) () (d1, d2, d3) (d1, d2) (d1) () Cú pháp của mệnh đề ROLLUP trong SQL Server

Cú pháp chung của ROLLUP trong SQL Server như sau:

SELECT d1, d2, d3, aggregate_function(c4) FROM table_name GROUP BY ROLLUP (d1, d2, d3);

Bạn cũng có thể ROLLUP một phần để giảm tổng số phụ (subtotals) được tạo bằng cách sử dụng cú pháp sau:

SELECT d1, d2, d3, aggregate_function(c4) FROM table_name GROUP BY d1, ROLLUP (d2, d3); Ví dụ về mệnh đề ROLLUP trong SQL Server

Chúng ta sẽ sử dụng lại bảng sales.sales_summary trong cơ sở dữ liệu mẫu BikeStores đã tạo trong phần hướng dẫn về GROUPING SETS để minh họa. Nếu bạn chưa tạo bảng sales.sales_summary, bạn có thể sử dụng câu lệnh sau để tạo bảng.

SELECT b.brand_name AS brand, c.category_name AS category, p.model_year, round( SUM ( quantity * i.list_price * (1 - discount) ), 0 ) sales INTO sales.sales_summary FROM sales.order_items i INNER JOIN production.products p ON p.product_id = i.product_id INNER JOIN production.brands b ON b.brand_id = p.brand_id INNER JOIN production.categories c ON c.category_id = p.category_id GROUP BY b.brand_name, c.category_name, p.model_year ORDER BY b.brand_name, c.category_name, p.model_year; SELECT brand, category, SUM (sales) sales FROM sales.sales_summary GROUP BY ROLLUP(brand, category);

Đây là đầu ra:

Mệnh đề HAVING trong SQL Server Giới thiệu về mệnh đề HAVING trong SQL Server SELECT select_list FROM table_name GROUP BY group_list HAVING conditions;

Trong cú pháp này, mệnh đề sẽ tổng hợp các bản ghi thành các nhóm và mệnh đề HAVING sẽ áp dụng một hoặc nhiều điều kiện cho các nhóm này.

Chỉ các nhóm thỏa mãn điều kiện trong mệnh đề HAVING mới được bao gồm trong tập kết quả.

Vì SQL Server xử lý mệnh đề HAVING sau mệnh đề GROUP BY, bạn không thể sử dụng bí danh cột để tham chiếu đến các hàm tập hợp được chỉ định trong câu lệnh . Truy vấn sau đây sẽ thất bại:

Thay vào đó, bạn phải sử dụng các hàm tập hợp trực tiếp trong mệnh đề HAVING một cách rõ ràng như sau:

Ví dụ về mệnh đề HAVING trong SQL Server

Hãy lấy một số ví dụ để hiểu cách HAVING hoạt động của mệnh đề.

Sử dụng HAVING với hàm COUNT trong SQL Server

Chúng ta sẽ sử dụng bảng orders trong cơ sở dữ liệu mẫu BikeStores để minh họa:

Câu lệnh sau đây sử dụng mệnh đề HAVING để tìm các khách hàng đã đặt ít nhất hai đơn hàng mỗi năm:

Trong ví dụ này:

Đầu tiên, mệnh đề GROUP BY nhóm các đơn đặt hàng theo khách hàng và năm đặt hàng. Hàm COUNT() trả về số lượng đơn đặt hàng mỗi khách hàng được đặt trong mỗi năm.

Thứ hai, mệnh đề HAVING sẽ lọc bỏ tất cả các khách hàng có số lượng đơn đặt hàng ít hơn hai.

Trong hướng dẫn này, bạn đã tìm hiểu các mệnh đề GROUP BY, GROUPING SET, CUBE, ROLLUP và HAVING trong SQL Server để sắp xếp các bản ghi theo nhóm.

Sql Server: Các Lệnh Lọc Dữ Liệu Trong Sql Server

Trong hướng dẫn này, bạn sẽ học cách sử dụng lệnh DISTINCT, WHERE, AND, OR, IN, BETWEEN và LIKE trong SQL Server để lọc dữ liệu trả về.

SELECT DISTINCT trong SQL Server Giới thiệu về mệnh đề SELECT DISTINCT trong SQL Server

Đôi khi, bạn có thể chỉ muốn nhận các giá trị riêng biệt trong một cột được chỉ định của bảng. Để làm điều này, bạn sử dụng mệnh đề SELECT DISTINCT như sau:

SELECT DISTINCT column_name FROM table_name;

Truy vấn chỉ trả về các giá trị riêng biệt trong cột được chỉ định. Nói cách khác, nó loại bỏ các giá trị trùng lặp trong cột khỏi tập kết quả.

Nếu bạn sử dụng nhiều cột như sau:

SELECT DISTINCT column_name1, column_name2 , ... FROM table_name;

Truy vấn sử dụng kết hợp các giá trị trong tất cả các cột được chỉ định trong mệnh đề để đánh giá tính duy nhất.

Nếu bạn áp dụng mệnh đề DISTINCT cho một cột NULL, mệnh đề DISTINCT sẽ chỉ giữ một giá trị NULL và loại bỏ những giá trị NULL khác. Nói cách khác, mệnh đề DISTINCT coi tất cả các giá trị NULL là cùng một giá trị.

Ví dụ về SELECT DISTINCT trong SQL Server

Chúng tôi sẽ sử dụng bảng customers từ cơ sở dữ liệu mẫu để làm ví dụ minh họa cho SELECT DISTINCT trong SQL Server.

SELECT DISTINCT một cột

Câu lệnh sau trả về tất cả các thành phố của tất cả các khách hàng trong bảng customers:

SELECT city FROM sales.customers ORDER BY city;

Đây là kết quả:

Như bạn có thể thấy trong kết quả đầu ra, các thành phố bị trùng lặp.

Để có được các thành phố riêng biệt không bị trùng lặp, bạn thêm từ khóa DISTINCT như sau:

SELECT DISTINCT city FROM sales.customers ORDER BY city;

Đây là kết quả:

Mệnh đề WHERE trong SQL Server Giới thiệu về mệnh đề WHERE trong SQL Server

Khi bạn sử dụng câu lệnh để truy vấn dữ liệu trong một bảng, bạn sẽ nhận được tất cả các bản ghi của bảng đó, điều này là không cần thiết vì ứng dụng chỉ có thể xử lý một số lượng các bản ghi nhất định tại thời điểm đó.

Để lấy các bản ghi từ bảng thỏa mãn một hoặc nhiều điều kiện, bạn sử dụng mệnh đề WHERE như sau:

SELECT select_list FROM table_name WHERE search_condition;

Điều kiện tìm kiếm là một biểu thức logic hoặc kết hợp nhiều biểu thức logic. Trong SQL, một biểu thức logic thường được gọi là một vị ngữ ( predicate).

Lưu ý rằng SQL Server sử dụng logic ba giá trị khi đánh giá một biểu thức logic là TRUE, FALSE hoặc UNKNOWN. Mệnh đề WHERE sẽ không trả lại bất kỳ bản ghi nào có điều kiện tìm kiếm được đánh giá là FALSE hoặc UNKNOWN.

Ví dụ về mệnh đề WHERE trong SQL Server

Chúng tôi sẽ sử dụng bảng products từ cơ sở dữ liệu mẫu để làm ví dụ minh họa cho mệnh đề WHERE trong SQL Server.

Tìm các bản ghi đáp ứng một điều kiện đơn giản

Câu lệnh sau lấy tất cả các sản phẩm có id loại sản phẩm là 1:

SELECT product_id, product_name, category_id, model_year, list_price FROM production.products WHERE category_id = 1 ORDER BY list_price DESC;

Đây là kết quả:

Tìm các bản ghi đáp ứng hai điều kiện

Ví dụ sau đây trả về các sản phẩm đáp ứng hai điều kiện: mã loại sản phẩm là 1 và năm kiểu mẫu là 2023. Nó sử dụng toán tử logic để kết hợp hai điều kiện.

SELECT product_id, product_name, category_id, model_year, list_price FROM production.products WHERE category_id = 1 AND model_year = 2023 ORDER BY list_price DESC;

Đây là kết quả:

Toán tử AND trong SQL Server Giới thiệu về toán tử AND trong SQL Server

Toán tử AND trong SQL Server là một toán tử logic cho phép bạn kết hợp hai biểu thức Boolean. Nó chỉ trả về TRUE khi cả hai biểu thức được đánh giá là TRUE.

boolean_expression AND boolean_expression

Khi bạn sử dụng nhiều toán tử logic trong một biểu thức, SQL Server luôn đánh giá các toán tử AND trước. Tuy nhiên, bạn có thể thay đổi thứ tự đánh giá bằng cách sử dụng dấu ngoặc đơn.

Ví dụ về toán tử AND trong SQL Server

Chúng tôi sẽ sử dụng bảng products từ cơ sở dữ liệu mẫu để làm ví dụ minh họa cho toán tử AND trong SQL Server.

Sử dụng một toán tử AND trong SQL Server

Ví dụ sau đây tìm kiếm các sản phẩm có id loại sản phẩm là 1 và giá niêm yết lớn hơn 400:

Đây là kết quả:

Sử dụng nhiều toán tử AND trong SQL Server

Câu lệnh sau đây tìm kiếm các sản phẩm đáp ứng tất cả các điều kiện sau: id loại sản phẩm là 1, giá niêm yết lớn hơn 400 và id thương hiệu là 1:

Đây là kết quả:

Toán tử OR trong SQL Server Giới thiệu về toán tử OR trong SQL Server

Toán tử OR trong SQL Server là một toán tử logic cho phép bạn kết hợp hai biểu thức Boolean. Nó trả về TRUE khi một trong các điều kiện được đánh giá là TRUE.

boolean_expression OR boolean_expression

Khi bạn sử dụng nhiều toán tử logic trong một câu lệnh, SQL Server sẽ đánh giá các toán tử OR sau toán tử . Tuy nhiên, bạn có thể sử dụng dấu ngoặc đơn để thay đổi thứ tự đánh giá.

Ví dụ về toán tử OR trong SQL Server

Chúng tôi sẽ sử dụng bảng products từ cơ sở dữ liệu mẫu để làm ví dụ minh họa cho toán tử OR trong SQL Server.

Sử dụng một toán tử OR trong SQL Server

Ví dụ sau đây tìm kiếm các sản phẩm có giá niêm yết dưới 200 hoặc lớn hơn 6.000:

Đây là kết quả:

Sử dụng nhiều toán tử OR trong SQL Server

Câu lệnh sau đây tìm kiếm các sản phẩm có id thương hiệu là 1, 2 hoặc 4:

SELECT product_name, brand_id FROM production.products WHERE brand_id = 1 OR brand_id = 2 OR brand_id = 4 ORDER BY brand_id DESC;

Đây là kết quả:

Bạn có thể thay thế nhiều toán tử OR bởi toán tử như trong truy vấn sau:

SELECT product_name, brand_id FROM production.products WHERE brand_id IN (1, 2, 3) ORDER BY brand_id DESC; Toán tử IN trong SQL Server Tổng quan về toán tử IN trong SQL Server

Các toán tử IN trong SQL Server là một toán tử logic cho phép bạn kiểm tra xem một giá trị cụ thể phù hợp với bất kỳ giá trị trong danh sách.

Trong cú pháp này:

Đầu tiên, chỉ định cột hoặc biểu thức để kiểm tra.

Thứ hai, chỉ định một danh sách các giá trị để kiểm tra. Tất cả các giá trị phải có cùng kiểu dữ liệu với kiểu dữ liệu của cột hoặc biểu thức.

Nếu một giá trị trong cột hoặc biểu thức bằng với bất kỳ giá trị nào trong danh sách, kết quả của toán tử IN là TRUE.

Các toán tử IN là tương đương với nhiều toán tử , do đó hai biểu thức sau là tương đương:

column IN (v1, v2, v3) column = v1 OR column = v2 OR column = v3

Để phủ định toán tử IN, bạn sử dụng toán tử NOT IN như sau:

Kết quả toán tử NOT IN là TRUE nếu cột hoặc biểu thức không bằng bất kỳ giá trị nào trong danh sách.

Trong cú pháp này, truy vấn con là một câu lệnh trả về một danh sách các giá trị của một cột.

Lưu ý rằng nếu một danh sách chứa , kết quả của toán tử IN hoặc NOT IN sẽ là UNKNOWN.

Ví dụ về toán tử IN trong SQL Server

Chúng tôi sẽ sử dụng bảng products từ cơ sở dữ liệu mẫu để làm ví dụ minh họa cho toán tử IN trong SQL Server.

Sử dụng toán tử IN với một danh sách giá trị trong SQL Server

Câu lệnh sau đây tìm kiếm các sản phẩm có giá niêm yết là một trong các giá trị sau: 89,99, 109,99 và 159,99:

SELECT product_name, list_price FROM production.products WHERE list_price IN (89.99, 109.99, 159.99) ORDER BY list_price;

Đây là kết quả:

Truy vấn trên tương đương với truy vấn sau sử dụng toán tử để thay thế:

SELECT product_name, list_price FROM production.products WHERE list_price = 89.99 OR list_price = 109.99 OR list_price = 159.99 ORDER BY list_price;

Để tìm các sản phẩm có giá niêm yết không phải là một trong các giá trên, bạn sử dụng toán tử NOT IN như trong truy vấn sau:

SELECT product_name, list_price FROM production.products WHERE list_price NOT IN (89.99, 109.99, 159.99) ORDER BY list_price;

Đây là kết quả:

Toán tử BETWEEN trong SQL Server Tổng quan về toán tử BETWEEN trong SQL Server

Toán tử BETWEEN trong SQL Server là một toán tử logic cho phép bạn chỉ định một phạm vi để kiểm tra.

Trong cú pháp này:

Đầu tiên, chỉ định cột hoặc biểu thức để kiểm tra.

Thứ hai, đặt các biểu thức start_expression và end_expression ở giữa các từ khóa BETWEEN và AND. Các biểu thức start_expression, end_expression và expression để kiểm tra phải có cùng kiểu dữ liệu.

Để phủ nhận kết quả của toán tử BETWEEN, bạn sử dụng toán tử NOT BETWEEN như sau:

Ví dụ về toán tử BETWEEN trong SQL Server

Chúng ta sẽ xem một số ví dụ về việc sử dụng toán tử BETWEEN để hiểu cách thức hoạt động của nó.

Sử dụng toán tử BETWEEN với số trong SQL Server

Chúng tôi sẽ sử dụng bảng products từ cơ sở dữ liệu mẫu để làm ví dụ minh họa cho ví dụ này.

Truy vấn sau đây tìm kiếm các sản phẩm có giá niêm yết nằm trong khoảng từ 149,99 đến 199,99:

SELECT product_id, product_name, list_price FROM production.products WHERE list_price BETWEEN 149.99 AND 199.99 ORDER BY list_price;

Đây là kết quả:

Để có được các sản phẩm có giá niêm yết nằm ngoài khoảng 149,99 và 199,99, bạn sử dụng toán tử NOT BETWEEN như sau:

SELECT product_id, product_name, list_price FROM production.products WHERE list_price NOT BETWEEN 149.99 AND 199.99 ORDER BY list_price;

Đây là kết quả:

Toán tử LIKE trong SQL Server Tổng quan về toán tử LIKE trong SQL Server

Toán tử LIKE trong SQL Server là một toán tử logic xác định xem một chuỗi ký tự có khớp với mẫu đã chỉ định hay không. Một mẫu có thể bao gồm các ký tự thông thường và ký tự đại diện.

Toán tử LIKE được sử dụng trong các mệnh đề của các câu lệnh , và để lọc các bảng ghi dựa trên biểu thức khởp mẫu.

Pattern

Mẫu (pattern) là một chuỗi các ký tự để tìm kiếm trong cột hoặc biểu thức. Nó có thể bao gồm các ký tự đại diện hợp lệ sau:

Ký tự đại diện phần trăm (%): bất kỳ chuỗi nào có 0 hoặc nhiều ký tự.

Ký tự đại diện gạch dưới (_): bất kỳ ký tự đơn nào.

Ký tự đại diện [danh sách các ký tự]: bất kỳ ký tự đơn nào trong tập đã chỉ định.

[Ký tự-ký tự]: bất kỳ ký tự đơn nào trong phạm vi đã chỉ định.

[^]: Bất kỳ ký tự đơn nào không nằm trong danh sách hoặc phạm vi.

Các ký tự đại diện làm cho toán tử LIKE linh hoạt hơn các toán tử so sánh chuỗi bằng (=) và không bằng (!=).

ESCAPE

Ký tự thoát hướng dẫn toán tử LIKE xem các ký tự đại diện là các ký tự thông thường. Ký tự thoát không có giá trị mặc định và phải được ước lượng chỉ một ký tự.

Toán tử LIKE trả về TRUE nếu cột hoặc biểu thức khớp với mẫu được chỉ định.

Để phủ nhận kết quả của toán tử LIKE, bạn sử dụng toán tử NOT LIKE như sau:

Ví dụ về toán tử LIKE trong SQL Server

Chúng tôi sẽ dụng bảng customers trong cơ sở dữ liệu mẫu để làm ví dụ cho toán tử LIKE trong SQL Server.

Sử dụng toán tử LIKE với ký tự đại diện % trong SQL Server

Ví dụ sau đây tìm kiếm các khách hàng có họ bắt đầu bằng chữ cái Z:

SELECT customer_id, first_name, last_name FROM sales.customers WHERE last_name LIKE 'Z%' ORDER BY first_name;

Đây là kết quả:

Ví dụ sau đây trả về các khách hàng có họ kết thúc bằng chuỗi er:

SELECT customer_id, first_name, last_name FROM sales.customers WHERE last_name LIKE '%er' ORDER BY first_name;

Đây là kết quả:

Câu lệnh sau lấy ra các khách hàng có họ bắt đầu bằng chữ cái T và kết thúc bằng chữ cái s:

SELECT customer_id, first_name, last_name FROM sales.customers WHERE last_name LIKE 'T%s' ORDER BY first_name;

Đây là kết quả:

Bí danh (alias) cho cột và bảng cũng thường xuyên được sử dụng kết hợp với các mệnh đề/toán tử lọc dữ liệu trong SQL Server. Bạn có thể tìm hiểu thêm về alias trong SQL Server ở bài viết sau:

Trong hướng dẫn này, bạn đã học cách sử dụng lệnh DISTINCT, WHERE, AND, OR, IN, BETWEEN và LIKE trong SQL Server để lọc dữ liệu trả về.

Group By Trong Sql Server

Ở trong những phần trước, bạn đã được học về cách sử dụng các mệnh đề join trong SQL Server để truy vấn dữ liệu từ hai hoặc nhiều bảng.

Trong hướng dẫn này, bạn sẽ tìm hiểu cách sử dụng mệnh đề GROUP BY trong SQL Server để sắp xếp các bản ghi theo nhóm theo một hoặc nhiều cột.

Giới thiệu về mệnh đề GROUP BY trong SQL Server

Mệnh đề GROUP BY trong SQL Server cho phép bạn sắp xếp các bản ghi của một truy vấn theo nhóm. Các nhóm được xác định bởi các cột mà bạn chỉ định trong mệnh đề GROUP BY.

SELECT select_list FROM table_name GROUP BY column_name1, column_name2 ,...;

Trong truy vấn này, mệnh đề GROUP BY đã tạo ra một nhóm cho mỗi kết hợp các giá trị trong các cột được liệt kê trong mệnh đề GROUP BY.

Hãy xem ví dụ sau:

SELECT customer_id, YEAR (order_date) order_year FROM sales.orders WHERE customer_id IN (1, 2) ORDER BY customer_id;

Đây là kết quả:

Trong ví dụ này, chúng tôi đã truy xuất thông tin id khách hàng và năm đặt hàng của những khách hàng có id 1 và 2.

Như bạn có thể thấy ở kết quả đầu ra, khách hàng có id 1 đã đặt một đơn hàng vào năm 2023 và hai đơn hàng vào năm 2023. Khách hàng có id hai đã đặt hai đơn hàng vào năm 2023 và một đơn hàng vào năm 2023.

Hãy thêm mệnh đề GROUP BY vào truy vấn trên và xem kết quả:

SELECT customer_id, YEAR (order_date) order_year FROM sales.orders WHERE customer_id IN (1, 2) GROUP BY customer_id, YEAR (order_date) ORDER BY customer_id;

Đây là kết quả:

Mệnh đề GROUP BY đã sắp xếp ba bản ghi đầu tiên của khách hàng có id là 1 thành hai nhóm và ba bản ghi tiếp theo của khách hàng có id là 2 vào hai nhóm khác với sự kết hợp duy nhất của id khách hàng và năm đặt hàng.

Về mặt chức năng, mệnh đề GROUP BY trong truy vấn trên tạo ra kết quả tương tự như truy vấn sau sử dụng mệnh đề :

SELECT DISTINCT customer_id, YEAR (order_date) order_year FROM sales.orders WHERE customer_id IN (1, 2) ORDER BY customer_id;

Đây là kết quả:

Mệnh đề GROUP BY và hàm tập hợp của SQL Server

Trong thực tế, mệnh đề GROUP BY thường được sử dụng với các hàm tập hợp để tạo báo cáo tóm tắt.

Một hàm tập hợp thực hiện một phép tính vào một nhóm và trả về một giá trị duy nhất cho mỗi nhóm. Ví dụ, hàm COUNT() trả về số lượng bản ghi trong mỗi nhóm. Các hàm tập hợp thường được sử dụng khác là SUM() (tính tổng), (tính trung bình), MIN()(nhỏ nhất), MAX()(lớn nhất).

Mệnh đề GROUP BY sắp xếp các bản ghi thành các nhóm và thực hiện các hàm tập hợp (count, min, max, avg, sum, vv) cho mỗi nhóm.

Ví dụ: truy vấn sau đây trả về số lượng đơn đặt hàng của khách hàng theo năm:

SELECT customer_id, YEAR (order_date) order_year, COUNT (order_id) order_placed FROM sales.orders WHERE customer_id IN (1, 2) GROUP BY customer_id, YEAR (order_date) ORDER BY customer_id;

Đây là kết quả:

Nếu bạn muốn thêm bất kỳ cột hoặc biểu thức nào không được liệt kê trong mệnh đề GROUP BY, bạn phải sử dụng cột đó làm đầu vào của hàm tập hợp.

Nếu không, bạn sẽ gặp lỗi vì không có gì đảm bảo rằng cột hoặc biểu thức đó sẽ trả về một giá trị duy nhất cho mỗi nhóm.

Ví dụ: truy vấn sau sẽ thất bại:

SELECT customer_id, YEAR (order_date) order_year, order_status FROM sales.orders WHERE customer_id IN (1, 2) GROUP BY customer_id, YEAR (order_date) ORDER BY customer_id; Ví dụ về mệnh đề GROUP BY trong SQL Server

Chúng ta hãy lấy thêm một số ví dụ để hiểu cách hoạt động của mệnh đề GROUP BY.

Sử dụng mệnh đề GROUP BY với hàm COUNT() trong SQL Server

Truy vấn sau đây trả về số lượng khách hàng ở mỗi thành phố:

SELECT city, COUNT (customer_id) customer_count FROM sales.customers GROUP BY city ORDER BY city;

Đây là kết quả:

Trong ví dụ này, mệnh đề GROUP BY nhóm các khách hàng lại với nhau theo từng thành phố và hàm COUNT() trả về số lượng khách hàng ở mỗi thành phố.

Tương tự, truy vấn sau đây trả về số lượng khách hàng theo tiểu bang và thành phố.

SELECT city, state, COUNT (customer_id) customer_count FROM sales.customers GROUP BY state, city ORDER BY city, state;

Đây là kết quả:

Sử dụng mệnh đề GROUP BY với hàm MIN() và MAX() trong SQL Server

Câu lệnh sau đây trả về giá niêm yết tối thiểu và tối đa của tất cả các sản phẩm với mẫu năm 2023 theo từng nhãn hiệu:

SELECT brand_name, MIN (list_price) min_price, MAX (list_price) max_price FROM production.products p INNER JOIN production.brands b ON b.brand_id = p.brand_id WHERE model_year = 2023 GROUP BY brand_name ORDER BY brand_name;

Đây là kết quả:

Trong ví dụ này, WHEREmệnh đề được xử lý trước GROUP BY mệnh đề, như mọi khi.

Sử dụng mệnh đề GROUP BY với hàm AVG() trong SQL Server

Câu lệnh sau đây sử dụng hàm AVG() trả về giá niêm yết trung bình theo nhãn hiệu cho tất cả các sản phẩm có mẫu năm 2023:

SELECT brand_name, AVG (list_price) avg_price FROM production.products p INNER JOIN production.brands b ON b.brand_id = p.brand_id WHERE model_year = 2023 GROUP BY brand_name ORDER BY brand_name;

Đây là kết quả:

Sử dụng mệnh đề GROUP BY với hàm SUM() trong SQL Server

Xem bảng order_items sau :

Truy vấn sau đây sử dụng hàm SUM() để lấy thành tiền của mỗi đơn hàng:

SELECT order_id, SUM ( quantity * list_price * (1 - discount) ) net_value FROM sales.order_items GROUP BY order_id;

Đây là kết quả:

Trong hướng dẫn này, bạn đã học cách sử dụng mệnh đề GROUP BY trong SQL Server để sắp xếp các bản ghi theo nhóm theo một hoặc nhiều cột được chỉ định.

Lọc Dữ Liệu Trong Sql Server

Trong hướng dẫn này, bạn sẽ tìm hiểu cách sử dụng câu lệnh SELECT DISTINCT, mệnh đề WHERE và các toán tử AND, OR, IN, BETWEEN, LIKE trong SQL Server lọc dữ liệu trả về trong một truy vấn.

Lưu ý: Chúng tôi sẽ dụng cơ sở dữ liệu mẫu để làm ví dụ minh họa cho lọc dữ liệu trong SQL Server.

Câu lệnh SELECT DISTINCT trong SQL Server

Đôi khi, bạn có thể chỉ muốn nhận các giá trị riêng biệt trong một cột được chỉ định của bảng. Để làm điều này, bạn sử dụng mệnh đề SELECT DISTINCT như sau:

SELECT DISTINCT column_name FROM table_name;

Truy vấn chỉ trả về các giá trị riêng biệt trong cột được chỉ định. Nói cách khác, nó loại bỏ các giá trị trùng lặp trong cột khỏi tập kết quả.

Nếu bạn sử dụng nhiều cột như sau:

SELECT DISTINCT column_name1, column_name2 , ... FROM table_name;

Truy vấn sử dụng kết hợp các giá trị trong tất cả các cột được chỉ định trong mệnh đề để đánh giá tính duy nhất.

Nếu bạn áp dụng mệnh đề DISTINCT cho một cột NULL, mệnh đề DISTINCT sẽ chỉ giữ một giá trị NULL và loại bỏ những giá trị NULL khác. Nói cách khác, mệnh đề DISTINCT coi tất cả các giá trị NULL là cùng một giá trị.

Câu lệnh sau trả về tất cả các thành phố của tất cả các khách hàng trong bảng customers:

SELECT city FROM sales.customers ORDER BY city;

Đây là kết quả:

Như bạn có thể thấy trong kết quả đầu ra, các thành phố bị trùng lặp.

Để có được các thành phố riêng biệt không bị trùng lặp, bạn thêm từ khóa DISTINCT như sau:

SELECT DISTINCT city FROM sales.customers ORDER BY city;

Đây là kết quả:

Bây giờ, truy vấn trả về một giá trị riêng cho từng thành phố. Nói cách khác, nó đã xóa tất cả các thành phố trùng lặp khỏi tập kết quả.

Câu lệnh sau trả về tất cả các thành phố và tiểu bang của tất cả các khách hàng:

SELECT city, state FROM sales.customers ORDER BY city, state;

Đây là kết quả:

Câu lệnh sau đây trả về thành phố và tiểu bang riêng biệt không trùng lặp của tất cả các khách hàng.

SELECT DISTINCT city, state FROM sales.customers

Đây là kết quả:

Trong ví dụ này, câu lệnh đã sử dụng kết hợp các giá trị trong cả hai cột city và state để đánh giá trùng lặp.

Mệnh đề WHERE trong SQL Server

Khi bạn sử dụng câu lệnh để truy vấn dữ liệu trong một bảng, bạn sẽ nhận được tất cả các bản ghi của bảng đó, điều này là không cần thiết vì ứng dụng chỉ có thể xử lý một số lượng các bản ghi nhất định tại thời điểm đó.

Để lấy các bản ghi từ bảng thỏa mãn một hoặc nhiều điều kiện, bạn sử dụng mệnh đề WHERE như sau:

SELECT select_list FROM table_name WHERE search_condition;

Điều kiện tìm kiếm là một biểu thức logic hoặc kết hợp nhiều biểu thức logic. Trong SQL, một biểu thức logic thường được gọi là một vị ngữ ( predicate).

Lưu ý rằng SQL Server sử dụng logic ba giá trị khi đánh giá một biểu thức logic là TRUE, FALSE hoặc UNKNOWN. Mệnh đề WHERE sẽ không trả lại bất kỳ bản ghi nào có điều kiện tìm kiếm được đánh giá là FALSE hoặc UNKNOWN.

Câu lệnh sau lấy tất cả các sản phẩm có id loại sản phẩm là 1:

SELECT product_id, product_name, category_id, model_year, list_price FROM production.products WHERE category_id = 1 ORDER BY list_price DESC;

Đây là kết quả:

Ví dụ sau đây trả về các sản phẩm đáp ứng hai điều kiện: mã loại sản phẩm là 1 và năm kiểu mẫu là 2023. Nó sử dụng toán tử logic để kết hợp hai điều kiện.

SELECT product_id, product_name, category_id, model_year, list_price FROM production.products WHERE category_id = 1 AND model_year = 2023 ORDER BY list_price DESC;

Đây là kết quả:

Toán tử AND trong SQL Server

Toán tử AND trong SQL Server là một toán tử logic cho phép bạn kết hợp hai biểu thức Boolean. Nó chỉ trả về TRUE khi cả hai biểu thức được đánh giá là TRUE.

boolean_expression AND boolean_expression

Khi bạn sử dụng nhiều toán tử logic trong một biểu thức, SQL Server luôn đánh giá các toán tử AND trước. Tuy nhiên, bạn có thể thay đổi thứ tự đánh giá bằng cách sử dụng dấu ngoặc đơn.

Ví dụ sau đây tìm kiếm các sản phẩm có id loại sản phẩm là 1 và giá niêm yết lớn hơn 400:

Đây là kết quả:

Câu lệnh sau đây tìm kiếm các sản phẩm đáp ứng tất cả các điều kiện sau: id loại sản phẩm là 1, giá niêm yết lớn hơn 400 và id thương hiệu là 1:

Đây là kết quả:

Toán tử OR trong SQL Server

Toán tử OR trong SQL Server là một toán tử logic cho phép bạn kết hợp hai biểu thức Boolean. Nó trả về TRUE khi một trong các điều kiện được đánh giá là TRUE.

boolean_expression OR boolean_expression

Khi bạn sử dụng nhiều toán tử logic trong một câu lệnh, SQL Server sẽ đánh giá các toán tử OR sau toán tử . Tuy nhiên, bạn có thể sử dụng dấu ngoặc đơn để thay đổi thứ tự đánh giá.

Ví dụ sau đây tìm kiếm các sản phẩm có giá niêm yết dưới 200 hoặc lớn hơn 6.000:

Đây là kết quả:

Câu lệnh sau đây tìm kiếm các sản phẩm có id thương hiệu là 1, 2 hoặc 4:

SELECT product_name, brand_id FROM production.products WHERE brand_id = 1 OR brand_id = 2 OR brand_id = 4 ORDER BY brand_id DESC;

Đây là kết quả:

Toán tử IN trong SQL Server

Các toán tử IN trong SQL Server là một toán tử logic cho phép bạn kiểm tra xem một giá trị cụ thể phù hợp với bất kỳ giá trị trong danh sách.

Trong cú pháp này:

Đầu tiên, chỉ định cột hoặc biểu thức để kiểm tra.

Thứ hai, chỉ định một danh sách các giá trị để kiểm tra. Tất cả các giá trị phải có cùng kiểu dữ liệu với kiểu dữ liệu của cột hoặc biểu thức.

Nếu một giá trị trong cột hoặc biểu thức bằng với bất kỳ giá trị nào trong danh sách, kết quả của toán tử IN là TRUE.

Các toán tử IN là tương đương với nhiều toán tử , do đó hai biểu thức sau là tương đương:

column IN (v1, v2, v3) column = v1 OR column = v2 OR column = v3

Để phủ định toán tử IN, bạn sử dụng toán tử NOT IN như sau:

Kết quả toán tử NOT IN là TRUE nếu cột hoặc biểu thức không bằng bất kỳ giá trị nào trong danh sách.

Trong cú pháp này, truy vấn con là một câu lệnh trả về một danh sách các giá trị của một cột.

Lưu ý rằng nếu một danh sách chứa , kết quả của toán tử IN hoặc NOT IN sẽ là UNKNOWN.

Câu lệnh sau đây tìm kiếm các sản phẩm có giá niêm yết là một trong các giá trị sau: 89,99, 109,99 và 159,99:

SELECT product_name, list_price FROM production.products WHERE list_price IN (89.99, 109.99, 159.99) ORDER BY list_price;

Đây là kết quả:

Bạn có thể sử dụng toán tử IN kết hợp subquery như được trình bày trong truy vấn sau:

Đây là kết quả:

Toán tử BETWEEN trong SQL Server

Toán tử BETWEEN trong SQL Server là một toán tử logic cho phép bạn chỉ định một phạm vi để kiểm tra.

Trong cú pháp này:

Đầu tiên, chỉ định cột hoặc biểu thức để kiểm tra.

Thứ hai, đặt các biểu thức start_expression và end_expression ở giữa các từ khóa BETWEEN và AND. Các biểu thức start_expression, end_expression và expression để kiểm tra phải có cùng kiểu dữ liệu.

Để phủ nhận kết quả của toán tử BETWEEN, bạn sử dụng toán tử NOT BETWEEN như sau:

Truy vấn sau đây tìm kiếm các sản phẩm có giá niêm yết nằm trong khoảng từ 149,99 đến 199,99:

SELECT product_id, product_name, list_price FROM production.products WHERE list_price BETWEEN 149.99 AND 199.99 ORDER BY list_price;

Đây là kết quả:

Truy vấn sau đây tìm kiếm các đơn đặt hàng mà khách hàng đặt từ ngày 15/01/2023 đến ngày 17/01/2023:

SELECT order_id, customer_id, order_date, order_status FROM sales.orders WHERE order_date BETWEEN '20230115' AND '20230117' ORDER BY order_date;

Đây là kết quả:

Toán tử LIKE trong SQL Server

Toán tử LIKE trong SQL Server là một toán tử logic xác định xem một chuỗi ký tự có khớp với mẫu đã chỉ định hay không. Một mẫu có thể bao gồm các ký tự thông thường và ký tự đại diện.

Toán tử LIKE được sử dụng trong các mệnh đề của các câu lệnh , và để lọc các bảng ghi dựa trên biểu thức khởp mẫu.

Pattern

Mẫu (pattern) là một chuỗi các ký tự để tìm kiếm trong cột hoặc biểu thức. Nó có thể bao gồm các ký tự đại diện hợp lệ sau:

Ký tự đại diện phần trăm (%): bất kỳ chuỗi nào có 0 hoặc nhiều ký tự.

Ký tự đại diện gạch dưới (_): bất kỳ ký tự đơn nào.

Ký tự đại diện [danh sách các ký tự]: bất kỳ ký tự đơn nào trong tập đã chỉ định.

[Ký tự-ký tự]: bất kỳ ký tự đơn nào trong phạm vi đã chỉ định.

[^]: Bất kỳ ký tự đơn nào không nằm trong danh sách hoặc phạm vi.

Các ký tự đại diện làm cho toán tử LIKE linh hoạt hơn các toán tử so sánh chuỗi bằng (=) và không bằng (!=).

ESCAPE

Ký tự thoát hướng dẫn toán tử LIKE xem các ký tự đại diện là các ký tự thông thường. Ký tự thoát không có giá trị mặc định và phải được ước lượng chỉ một ký tự.

Toán tử LIKE trả về TRUE nếu cột hoặc biểu thức khớp với mẫu được chỉ định.

Để phủ nhận kết quả của toán tử LIKE, bạn sử dụng toán tử NOT LIKE như sau:

Ví dụ sau đây tìm kiếm các khách hàng có họ bắt đầu bằng chữ cái Z:

SELECT customer_id, first_name, last_name FROM sales.customers WHERE last_name LIKE 'Z%' ORDER BY first_name;

Đây là kết quả:

Ví dụ sau đây trả về các khách hàng có họ kết thúc bằng chuỗi er:

SELECT customer_id, first_name, last_name FROM sales.customers WHERE last_name LIKE '%er' ORDER BY first_name;

Đây là kết quả:

Mệnh Đề Group By Trong Sql Là Gì? Một Số Câu Lệnh Group By Sql

Câu lệnh group by trong sql được dùng để kết hợp với lệnh SELECT để sắp xếp dữ liệu đồng nhất vào các nhóm, hàm này trong ngôn ngữ sql đi sau mệnh đề WHERE trong một lệnh SELECT và ở trước mệnh đề ORDER BY. SQL và những mệnh đề như GROUP BY ngày càng đóng vai trò quan trọng không kém đối với hệ quản trị CSDL.

Biết cách sử dụng GROUP BY khi dùng ngôn ngữ SQL là một điều cần thiết.

Không có một câu lệnh nào là thừa thải của một hàm CSDL, chỉ là bạn chưa cần thiết dùng đến chúng hoặc chưa áp dụng đúng mục đích. Mệnh đề group by sql được thêm vào bởi vì các hàm tập hợp (như SUM) trả về một tập của các giá trị ở cột đó mỗi khi chúng được gọi, nhờ lệnh GROUP BY trong sql, ta có thể tính tổng của các giá trị theo từng nhóm lẻ tại cột.Cách thực hiện nội dung như sau:

SELECT tên_cột, SUM (tên _cột) FROM tên_bảng GROUP BY tên_cột

Ví dụ ta có bản ghi “HOCPHISINHVIEN” như sau:

Cách sử dụng mệnh đề nhìn chung cũng khá đơn giản, chỉ cần nắm rõ cú pháp, bạn cũng không cần phải thuộc nằm lòng mới có thể sử dụng được, đây cũng có thể được xem là một lợi thế của người tạo ngôn ngữ truy vấn SQL.

Một số hàm tổng hợp thường đi kèm với Group by khi lập trình SQL.

Theo công thức cấu trúc, group by trong sql server thường được đi kèm với một số hàm nhất định, cụ thể nhất đó là:

AVG: Hàm AVG trong SQL được sử dụng để tìm giá trị trung bình của một trường của các bản ghi đa dạng, khi sử dụng kèm mệnh đề group by trong sql, hàm sẽ trả về giá trị trung bình của nhóm cột.

COUNT: Hàm COUNT là hàm đơn giản nhất và rất hữu dụng để đếm số bản ghi, được mong đợi trả về bởi một lệnh SELECT. Khi sử dụng, mệnh đề này sẽ trả về số lần xuất hiện ở một cột.

MAX: Hàm MAX trong SQL được tận dụng để tìm ra giá trị lớn nhất trong một tập hợp bản ghi, người dùng có thể tìm ra được giá trị lớn nhất của tất cả các bản ghi được cung cấp bởi tên với mỗi mệnh đề group by sql server

MIN: Tương tự, hàm MIN trả về giá trị nhỏ nhất trong nhóm cột khi đi kèm với group by SQL.

Như vậy, nội dung về group by sql là gì thì chắc hẳn sau bài viết này bí mật đã được bật mí, người dùng có thể tự tìm hiểu cho mình biết khi nào dùng group by sql, vận dụng ngôn ngữ máy tính sẽ trở nên dễ dàng hơn khi bạn tinh thông về nó.

Ví dụ về câu lệnh group by để lập trình sql

Một vài ví dụ về câu lệnh group by in sql để bạn đọc có thể tham khảo.

SELECT cot1, cot2, … cot_N,

Ham_tong (cot)

[WHERE dieukien]

GROUP BY cot1, cot2, … cot_N;

– Cot1, cot2, … cotN: là giá trị không nằm ở hàm tổng và phải nằm ở mệnh đề GROUP BY.

– Ham_tong: có thể là các hàm như MIN, MAX, COUNT, SUM, AVG

– Bang: bảng cần lấy bảng ghi và phải có ít nhất 1 bảng thuộc lệnh FROM

– WHERE dieukien: điều kiện phù hợp đáp ứng với mệnh đề WHERE

SELECT maso_thietbi, SUM(soluong) AS “Tong so luong”

FROM thietbi

GROUP BY maso_thietbi

Ví dụ 3: Cú pháp group by sql Server dùng hàm MIN. Cú pháp này dùng hàm MIN nhỏ nhất để cho bạn kết quả tên sản phẩm và số lượng tối thiểu của tên sản phẩm đó.

SELECT ten_sanpham, MIN(Soluong) AS “So luong it nhat”

FROM sanpham

GROUP BY ten_san pham

SELECT fieldlist

WHERE criteria

[GROUP BY groupfieldlist]

– Fieldlist là tên của một hoặc nhiều trường cần truy xuất

– Table là tên bảng cần truy xuất các bản ghi

– Criteria là điều kiện cho mệnh đề WHERE

– Groupfieldlist là tên tối đa 10 trường được dùng để nhóm các bản ghi theo thứ tự cấp độ nhóm cao nhất đến thấp nhất.

3. Lưu ý về lệnh group by

– Mệnh đề GROUP BY phải luôn theo sau các điều kiện thuộc mệnh đề WHERE, tức sau khi viết mệnh đề WHERE xong xuống dòng đến mệnh đề GROUP BY. – Mệnh đề ORDER BY luôn theo sau mệnh đề GROUP BY nếu được sử dụng ở trong cú pháp truy vấn dữ liệu.

Lệnh Insert Trong Mysql &Amp; Php

Trong bài Hướng dẫn tự học PHP này, bạn sẽ được tìm hiểu cách chèn các bản ghi trong bảng MySQL bằng PHP với lệnh INSERT.

Chèn dữ liệu vào bảng cơ sở dữ liệu MySQL

Qua 2 bài trước, bạn đã hiểu cách tạo cơ sở dữ liệu và cách tạo bảng trong MySQL. Trong hướng dẫn này, bạn sẽ tìm hiểu cách thực hiện truy vấn SQL để chèn các bản ghi vào bảng.

Câu lệnh INSERT INTO sẽ được sử dụng để chèn các hàng mới trong bảng cơ sở dữ liệu mà chúng ta đã tạo.

Chúng ta hãy tạo một truy vấn SQL bằng cách sử dụng câu lệnh INSERT INTO với các giá trị phù hợp, sau đó chúng ta sẽ thực hiện truy vấn chèn này thông qua việc chuyển nó đến hàm mysqli_query() của PHP để chèn dữ liệu vào bảng.

3 Cách chèn dữ liệu vào bảng cơ sở dữ liệu sử dụng MySQLi hướng thủ tục, MySQLi OOP và PDO Ví dụ 1: Chèn dữ liệu bằng cách sử dụng MySQLi hướng thủ tục Ví dụ 2: Chèn dữ liệu bằng cách sử dụng MySQLi hướng đối tượng Ví dụ 3: Chèn dữ liệu bằng cách sử dụng PDO

Nếu bạn nhớ từ bài trước, trường id được đánh dấu là AUTO_INCREMENT. Nó yêu cầu MySQL tự động gán giá trị cho trường này nếu nó không được chỉ định, bằng cách tăng giá trị trước đó lên 1.

3 Cách chèn nhiều hàng vào một bảng trong MySQL với PHP

Bạn cũng có thể chèn nhiều hàng vào một bảng CSDL MySQL với một truy vấn chèn cùng một lúc.

Để thực hiện việc này, trong câu lệnh INSERT INTO chúng ta chỉ cần thêm nhiều giá trị cùng một lúc, trong đó các giá trị của từng cột cho mỗi hàng phải được đặt trong dấu ngoặc đơn và được phân tách bằng dấu phẩy.

Hãy chèn thêm vài hàng vào bảng person, như ví dụ sau:

Ví dụ 4: Chèn nhiều hàng vào một bảng CSDL sử dụng MySQLi hướng thủ tục

Như bạn thấy, chúng ta chỉ cần thay đổi câu lệnh INSERT INTO đi một chút.

Ví dụ 5: Chèn nhiều hàng vào một bảng CSDL sử dụng MySQLi hướng đối tượng Ví dụ 5: Chèn nhiều hàng vào một bảng CSDL sử dụng PDO

Bây giờ, hãy truy cập phpMyAdmin (http://localhost/phpmyadmin/) và kiểm tra dữ liệu bảng người trong cơ sở dữ liệu demo. Bạn sẽ tìm thấy giá trị cho cột id được gán tự động bằng cách tăng giá trị của id trước đó lên 1.

Lưu ý: Bất kỳ số lần ngắt dòng nào cũng có thể xảy ra trong một câu lệnh SQL, với điều kiện là bất kỳ ngắt dòng nào sẽ không phá vỡ các từ khóa, giá trị, biểu thức, v.v.

Hướng dẫn chèn dữ liệu vào một bảng CSDL từ một form HTML

Trong phần trước, chúng ta đã học cách chèn dữ liệu vào cơ sở dữ liệu từ tập lệnh PHP. Bây giờ, chúng ta sẽ xem làm thế nào chúng ta có thể chèn dữ liệu vào cơ sở dữ liệu thu được từ một biểu mẫu HTML.

Thực tế, khi lập trình web, để tiện cho việc quản trị website, người quản trị sẽ chỉ làm việc trên các giao diện trực quan chứ không phải thao tác code.

Do đó, để có thể thêm dữ liệu vào bảng, người quản trị web sẽ nhập từ form HTML.

Việc của lập trình viên web chúng ta là,

Tạo một biểu mẫu HTML có thể được sử dụng để chèn các bản ghi mới vào bảng person.

Bước 1: Tạo một form HTML Bước 2: Lấy dữ liệu và chèn dữ liệu vào bảng CSDL

Khi người dùng nhấp vào nút gửi của Form thêm bản ghi, trong ví dụ trên, dữ liệu biểu mẫu được gửi đến tệp ‘insert.php’ thông qua phương thức POST trong PHP.

Tệp ‘ chúng tôi ‘ sẽ thực hiện kết nối với máy chủ cơ sở dữ liệu MySQL. Chúng ta lấy dữ liệu của các trường bằng biến $_REQUEST của PHP và cuối cùng thực hiện truy vấn chèn để thêm các bản ghi.

Đây là mã hoàn chỉnh của tệp ‘insert.php’ của chúng ta:

Mã Lấy dữ liệu và Chèn dữ liệu sử dụng MySQLi hướng thủ tục Mã Lấy dữ liệu và Chèn dữ liệu sử dụng MySQLi hướng đối tượng Mã Lấy dữ liệu và Chèn dữ liệu sử dụng PDO

Trong bài tiếp theo, chúng ta sẽ mở rộng ví dụ truy vấn chèn này và tiến thêm một bước bằng cách triển khai câu lệnh đã chuẩn bị để bảo mật và hiệu suất tốt hơn.

Lưu ý: Hàm mysqli_real_escape_string() được sử dụng để loại bỏ các ký tự đặc biệt trong một chuỗi người dùng / quản trị viên nhập vào và tạo một chuỗi SQL hợp lệ để tránh khỏi vấn đề SQL injection.

Bạn đã hiểu cách chèn dữ liệu vào bảng CSLD MySQL bằng PHP chưa?

Đây là ví dụ rất cơ bản về việc chèn dữ liệu biểu mẫu vào bảng cơ sở dữ liệu MySQL. Bạn có thể mở rộng ví dụ này và làm cho nó tương tác hơn bằng cách xác thực dữ liệu người dùng trước khi chèn nó vào các bảng cơ sở dữ liệu.

Vui lòng xem bài Hướng dẫn validate form để tìm hiểu thêm về cách làm sạch và xác thực các dữ liệu đầu vào của người dùng bằng PHP.

Cập nhật thông tin chi tiết về Sql Server: Các Lệnh Group By Trong Sql Server Có Thể Bạn Chưa Biết trên website Utly.edu.vn. Hy vọng nội dung bài viết sẽ đáp ứng được nhu cầu của bạn, chúng tôi sẽ thường xuyên cập nhật mới nội dung để bạn nhận được thông tin nhanh chóng và chính xác nhất. Chúc bạn một ngày tốt lành!