Đề XuấT, 2024

Editor Choice

Sự khác biệt giữa mệnh đề ở đâu và có trong SQL

Mệnh đề WHERE và HAVING chủ yếu được sử dụng trong câu lệnh của các truy vấn SQL, chúng cho phép chúng ta hạn chế sự kết hợp trong mối quan hệ kết quả thông qua việc sử dụng một vị từ cụ thể. Sự khác biệt chính giữa WHERE và HAVING là mệnh đề WHERE chỉ định các điều kiện để chọn các bộ dữ liệu (hàng) từ các mối quan hệ, bao gồm cả các điều kiện nối nếu cần. Mặt khác, mệnh đề HAVING chỉ định một điều kiện trên các nhóm được chọn thay vì trên các bộ dữ liệu riêng lẻ.

SQL là viết tắt của Ngôn ngữ truy vấn có cấu trúc ; nó là ngôn ngữ cơ sở dữ liệu toàn diện hoặc khai báo được sử dụng để truy cập dữ liệu từ cơ sở dữ liệu.

Biểu đồ so sánh

Cơ sở để so sánhỞ ĐÂUĐANG CÓ
Căn bảnThực hiện trong các hoạt động hàng.Thực hiện trong các hoạt động cột.
Áp dụng choHàng đơnTóm tắt hàng hoặc nhóm.
Tìm nạp dữ liệuNó chỉ lấy dữ liệu cụ thể từ các hàng cụ thể theo điều kiện.Lúc đầu, dữ liệu hoàn chỉnh được tìm nạp sau đó được phân tách theo điều kiện.
Chức năng tổng hợpKhông thể xuất hiện trong mệnh đề WHERE.Có thể xuất hiện trong mệnh đề HAVING.
Được sử dụng vớiCHỌN và các câu lệnh khác như CẬP NHẬT, XÓA hoặc một trong số chúng.Không thể được sử dụng mà không có câu lệnh CHỌN.
Hành động nhưBộ lọc trướcBộ lọc sau
NHÓM THEOĐến sau WHERE.Đến sau khi có.

Định nghĩa mệnh đề ở đâu

Mệnh đề WHERE của SQL được sử dụng để mô tả một điều kiện tại thời điểm truy xuất dữ liệu từ một bảng hoặc bằng cách nối với nhiều bảng. Nó chỉ trả về giá trị cụ thể từ bảng nếu điều kiện đã cho được thỏa mãn. Mệnh đề WHERE được sử dụng để thẩm thấu các bản ghi và chỉ truy xuất các bản ghi cần thiết.

SQL cũng thực hiện các kết nối logic , hoặc không trong mệnh đề WHERE còn được gọi là điều kiện boolean ; điều kiện phải đúng để lấy các bộ dữ liệu. Các toán hạng của các biểu thức kết nối logic liên quan đến các toán tử so sánh, chẳng hạn như <, <=, >, > =, = và . Các toán tử so sánh này so sánh các chuỗi và biểu thức số học. Nó có thể được sử dụng trong câu lệnh CHỌN, cũng như trong các câu lệnh CẬP NHẬT, XÓA .

Hãy lấy một ví dụ. Bảng hiển thị bên dưới có tên là bảng ' Bán hàng ' bao gồm các thuộc tính ' Sản phẩm ' và ' Sales_amount '.

Truy vấn sau đây sẽ được viết để tính Total_sales của điện thoại và loa.

 CHỌN Sản phẩm, tổng (Sales_amount) NHƯ Total_sales TỪ Doanh số WHERE Sản phẩm trong ('Điện thoại', 'Loa') NHÓM THEO Sản phẩm; 

Đầu ra sau là đầu ra kết quả trong đó các hàng được lọc trước, các hàng điện thoại và loa được lấy ra sau đó chức năng tổng hợp được thực hiện.

Định nghĩa có khoản

SQL cung cấp mệnh đề HAVING có thể được sử dụng cùng với mệnh đề GROUP BY . Điều khoản HAVING này giúp lấy các giá trị cho các nhóm đáp ứng các điều kiện nhất định. Mệnh đề WHERE cũng có thể sử dụng kết hợp với mệnh đề HAVING trong quá trình lựa chọn, mệnh đề WHERE lọc hàng riêng lẻ. Các hàng sau đó được nhóm lại và các phép tính tổng hợp được thực hiện, tại mệnh đề HAVING cuối cùng lọc các nhóm.

Nó hoạt động giống như WHERE khi từ khóa GROUP BY không được sử dụng. Các hàm Nhóm như min, max, avg, sum và Count chỉ có thể xuất hiện trong hai mệnh đề: mệnh đề SELECT và HAVING. Nó cung cấp một điều kiện trên các bộ dữ liệu tương ứng với từng giá trị trong nhóm các thuộc tính. Tập hợp duy nhất của các bản ghi thỏa mãn điều kiện sẽ được hiển thị như là kết quả.

Ở đây, chúng tôi cũng lấy ví dụ tương tự như mệnh đề WHERE và xem xét cùng bảng ' Bán hàng '. Khi chúng tôi muốn tính Total_sales của điện thoại và loa bằng mệnh đề HAVING, chúng tôi sẽ viết truy vấn sau.

 CHỌN Sản phẩm, tổng (Sales_amount) NHƯ Total_sales TỪ NHÓM BÁN HÀNG THEO Sản phẩm CÓ sản phẩm trong ('phone', 'Loa'); 

Truy vấn tạo ra đầu ra sau trong đó các sản phẩm được truy xuất trước, sau đó hàm tổng hợp (tổng) được thực hiện và tại các nhóm cuối cùng được lọc không giống như mệnh đề WHERE.

Khi chúng tôi chỉ muốn tìm những sản phẩm có Total_sales lớn hơn 1000. Truy vấn có thể được viết là:

 CHỌN Sản phẩm, tổng (Sales_amount) NHƯ Total_sales TỪ NHÓM BÁN HÀNG THEO Tổng sản phẩm CÓ (Sales_amount)> 1000; 

Sản lượng được sản xuất là:

Điều này không thể được thực hiện bằng cách sử dụng mệnh đề WHERE mặc dù có HAVING và nó tạo ra một thông báo lỗi vì mệnh đề WHERE không thể được sử dụng với các hàm tổng hợp.

Sự khác biệt chính giữa nơi và có khoản

  1. Mệnh đề WHERE được sử dụng trong các hoạt động hàng và được áp dụng trên một hàng trong khi mệnh đề HAVING được sử dụng trong các hoạt động cột và có thể được áp dụng cho các hàng hoặc nhóm tóm tắt.
  2. Trong mệnh đề WHERE, dữ liệu mong muốn được tìm nạp theo điều kiện được áp dụng. Ngược lại, mệnh đề HAVING tìm nạp toàn bộ dữ liệu sau đó phân tách được thực hiện theo điều kiện.
  3. Các hàm tổng hợp như min, sum, max, avg không bao giờ có thể xuất hiện cùng với mệnh đề WHERE. Đối với, các hàm này có thể xuất hiện trong mệnh đề HAVING.
  4. Mệnh đề HAVING không thể sử dụng nếu không có câu lệnh SELECT. Ngược lại, WHERE có thể được sử dụng với CHỌN, CẬP NHẬT, XÓA, v.v.
  5. Mệnh đề WHERE hoạt động như một bộ lọc trước trong khi mệnh đề HAVING hoạt động như một bộ lọc hậu.
  6. Mệnh đề WHERE khi được sử dụng với GROUP BY, xuất hiện trước GROUP BY. Điều này biểu thị rằng các hàng bộ lọc WHERE trước khi tính toán tổng hợp được thực hiện. Mặt khác, HAVING xuất hiện sau GROUP BY, có nghĩa là nó lọc sau khi tính toán tổng hợp được thực hiện.

Phần kết luận

Mệnh đề WHERE và HAVING hoạt động theo cùng một cách ngoại trừ tính năng bổ sung mà mệnh đề HAVING phổ biến cho. Mệnh đề HAVING có thể hoạt động hiệu quả với các hàm tổng hợp trong khi WHERE không thể được vận hành với các hàm tổng hợp.

Top