PostgreSQL giúp bạn dễ dàng so sánh các mảng giá trị bằng các toán tử đơn giản. Trong bài viết này, chúng ta sẽ xem xét cách so sánh các mảng trong cơ sở dữ liệu PostgreSQL.
Cách so sánh các mảng trong PostgreSQL
PostgreSQL cho phép bạn so sánh các mảng bằng cách sử dụng toán tử bình đẳng (=, <>), toán tử thứ tự (>, <,> =, <=), toán tử ngăn (@>, <@) và toán tử chồng chéo (&&).
Sau khi PostgreSQL so sánh các mảng, nó trả về t là true hoặc f là false.
Chúng ta hãy xem xét từng toán tử một.
So sánh Mảng cho bằng nhau
Các toán tử bình đẳng thực hiện so sánh từng phần tử để kiểm tra xem hai mảng có bằng nhau hay không.
Dưới đây là các truy vấn SQL mẫu để so sánh hai mảng bằng cách sử dụng toán tử bình đẳng. Hai mảng sau không bằng nhau.
postgres=# select array[2,3,4] = array[1,2,5] as compare;
compare
---------
f
postgres=# select array[2,3,4] <> array[1,2,5]
as compare;
compare
---------
t
So sánh Mảng cho Thứ tự
Toán tử thứ tự (>, <,> =, <=) thực hiện so sánh từng phần tử giữa hai mảng để kiểm tra xem mỗi cặp phần tử có tuân theo điều kiện thứ tự yêu cầu hay không. Nếu không có sự phù hợp nào, nó trả về t, còn lại là f.
Đây là một ví dụ
postgres=# select array[1,3,5] >= array[1,3,4] as compare1, array[1,3,5] <= array[1,3,4,5] as compare2; compare1 | compare2 ----------+---------- t | f
Trong phép so sánh đầu tiên, mỗi phần tử của mảng đầu tiên là> =mỗi phần tử của mảng thứ hai. Do đó, bạn hiểu đúng. Trong so sánh thứ hai, mảng đầu tiên không có phần tử thứ 4, bắt buộc để so sánh với phần tử thứ 4 của mảng thứ hai. Do đó, so sánh không thành công và kết quả là bạn nhận được sai.
So sánh các mảng để chứa
Toán tử vùng chứa (<@, @>) cho phép bạn kiểm tra xem một mảng có chứa một mảng khác bằng toán tử @> hay một mảng được chứa bởi một mảng khác bằng cách sử dụng toán tử <@.
#to check if elements of array['b', 'c', 'd'] contain elements of array['b', 'c'] postgres=# select array['b', 'c', 'd'] @> array['b', 'c'] as contains; contains ---------- t # to check if array[1, 2, 4] is contained by array[4, 5, 2, 1] postgres=#select array[1, 2, 4] <@ array[4, 5, 2, 1] as is_contained_by; is_contained_by ----------------- t
So sánh Mảng để chồng chéo
Toán tử chồng chéo (&&) cho phép bạn kiểm tra xem có bất kỳ phần tử chung nào trong hai mảng hay không.
postgres=# select postgres-# array[2, 4] && array[4, 3] as overlap1, postgres-# array[0, 2] && array[1, 4] as overlap2; overlap1 | overlap2 ----------+---------- t | f
Cần một công cụ báo cáo cho PostgreSQL? Ubiq giúp dễ dàng trực quan hóa dữ liệu trong vài phút và theo dõi trong trang tổng quan thời gian thực. Thử nó ngay hôm nay!