PostgreSQL Mảng: Hàm, Kiểu, Ví dụ

Là gì PostgreSQL Mảng?

In PostgreSQL, chúng ta có thể định nghĩa một cột là một mảng các kiểu dữ liệu hợp lệ. Kiểu dữ liệu có thể là kiểu tích hợp, do người dùng xác định hoặc kiểu liệt kê. Ngoài ra, mảng còn đóng một vai trò quan trọng trong PostgreSQL.

Mỗi tương ứng PostgreSQL kiểu dữ liệu đi kèm với một kiểu mảng có liên quan. Ví dụ, kiểu dữ liệu số nguyên có kiểu mảng số nguyên[], kiểu dữ liệu ký tự có kiểu mảng ký tự[], v.v.

Tạo PostgreSQL Mảng

Trong ví dụ sau, chúng ta sẽ tạo một bảng có tên là Employees với cột liên hệ được định nghĩa là một mảng văn bản:

CREATE TABLE Employees (
   id int PRIMARY KEY,
   name VARCHAR (100),
   contact TEXT []
);

Lệnh sẽ chạy thành công.

Tạo PostgreSQL Mảng

Chèn PostgreSQL Giá trị mảng

Hãy để chúng tôi bây giờ chèn giá trị vào bảng trên:

INSERT INTO Employees 
VALUES
   (
      1,
      'Alice John',
      ARRAY [ '(408)-743-9045',
      '(408)-567-7834' ]
   );

Việc chèn sẽ chạy thành công.

Chèn PostgreSQL Giá trị mảng

Các giá trị của cột thứ ba, tức là liên hệ, đã được chèn dưới dạng một mảng. Điều này đạt được bằng cách sử dụng hàm tạo ARRAY.

Trong ví dụ này, chúng tôi đã đặt chúng trong dấu ngoặc vuông []. Chúng tôi có hai địa chỉ liên hệ cho nhân viên Alice John.

Chúng ta vẫn có thể sử dụng dấu ngoặc nhọn {} như hình dưới đây:

INSERT INTO Employees 
VALUES
   (
    2,
      'Kate Joel',
      '{"(408)-783-5731"}'
   ),
   ( 
      3,
      'James Bush',
      '{"(408)-745-8965","(408)-567-78234"}'
   );

Lệnh sẽ chạy thành công.

Chèn PostgreSQL Giá trị mảng

Các câu lệnh trên sẽ chèn hai hàng vào bảng Employees. Khi sử dụng dấu ngoặc nhọn, mảng được bao bọc trong dấu ngoặc đơn (') trong khi các mục mảng văn bản được bao bọc trong dấu ngoặc kép (“).

Truy vấn dữ liệu mảng

Để truy vấn các phần tử của mảng, chúng ta sử dụng câu lệnh SELECT.

Để xem nội dung của bảng Employees, chúng ta chạy lệnh sau:

SELECT * FROM Employees;

Điều này trả về như sau:

Truy vấn dữ liệu mảng

Các phần tử của cột mảng, tức là liên hệ, đã được đặt trong dấu ngoặc nhọn {}.

Để truy cập vào các phần tử của mảng, chúng ta thêm một chỉ số trong dấu ngoặc vuông []. Phần tử đầu tiên trong mảng nằm ở vị trí 1.

Ví dụ: chúng ta cần lấy tên của nhân viên và chỉ liên hệ đầu tiên của họ đối với những nhân viên có nhiều liên hệ. Chúng tôi có thể truy cập thông tin này dưới dạng liên hệ [1].

Chúng ta hãy xem điều này:

SELECT name, contact[1]
FROM Employees;

Kết quả trả về sẽ như sau:

Truy vấn dữ liệu mảng

Chúng ta có thể sử dụng câu lệnh SELECT cùng với mệnh đề WHERE để lọc các hàng dựa trên cột mảng.

Ví dụ, để xem nhân viên có số (408)-567-78234 là người liên hệ thứ hai, chúng ta có thể chạy lệnh sau:

SELECT
   name
FROM
   Employees
WHERE
   contact [ 2 ] = '(408)-567-78234';

Kết quả trả về sẽ như sau:

Truy vấn dữ liệu mảng

Sửa đổi PostgreSQL Mảng

Bạn có thể cập nhật tất cả hoặc một phần tử của mảng.

Dưới đây là nội dung của bảng Nhân viên:

Sửa đổi PostgreSQL Mảng

Hãy để chúng tôi cập nhật số điện thoại thứ hai của nhân viên James Bush, có id là 3:

Sửa đổi PostgreSQL Mảng

Chạy lệnh sau:

UPDATE Employees
SET contact [ 2 ] = '(408)-589-89347'
WHERE
   id = 3;

Lệnh sẽ chạy thành công:

Sửa đổi PostgreSQL Mảng

Chúng ta hãy truy vấn bảng để kiểm tra xem thay đổi có thành công hay không:

Sửa đổi PostgreSQL Mảng

Sự thay đổi đã thành công.

Tìm kiếm trong một PostgreSQL Mảng

Hiện tại bảng Nhân viên của chúng ta như sau:

Tìm kiếm trong một PostgreSQL Mảng

Giả sử chúng ta cần biết ai sở hữu liên hệ (408)-783-5731 bất kể vị trí trong mảng liên hệ là gì, chúng ta có thể sử dụng hàm ANY() như hiển thị bên dưới:

SELECT
   name,
   contact
FROM
   Employees
WHERE
   '(408)-783-5731' = ANY (contact);

Kết quả trả về sẽ như sau:

Tìm kiếm trong một PostgreSQL Mảng

Mảng mở rộng

Chúng ta có thể chia các giá trị của mảng thành các hàng. Quá trình này được gọi là mở rộng mảng.

Trong ví dụ về bảng Nhân viên, có một số nhân viên có hai liên hệ trong mảng liên hệ. Chúng ta có thể chia chúng thành các hàng riêng biệt.

PostgreSQL cung cấp hàm unnest() có thể được sử dụng cho việc này.

Ví dụ:

SELECT
   name,
   unnest(contact)
FROM
   Employees;

Kết quả trả về sẽ như sau:

Mảng mở rộng

Các nhân viên Alice John và James Bush có hai người liên hệ. Chúng ta có thể chia thành các hàng riêng biệt.

Sử dụng pgAdmin

Tạo PostgreSQL Mảng

Để thực hiện điều tương tự thông qua pgAdmin, hãy làm điều này:

Bước 1) Đăng nhập vào tài khoản pgAdmin của bạn.

Bước 2)

  1. Từ thanh điều hướng ở bên trái- Nhấp vào rbase.
  2. Bấm vào nút Demo

Tạo PostgreSQL Mảng sử dụng pgAdmin

Bước 3) Nhập truy vấn vào trình soạn thảo truy vấn để tạo bảng Nhân viên:

CREATE TABLE Employees (
   id int PRIMARY KEY,
   name VARCHAR (100),
   contact TEXT []
);

Bước 4) Nhấp vào nút Thực hiện.

Tạo PostgreSQL Mảng sử dụng pgAdmin

Chèn PostgreSQL Giá trị mảng

Bước 1) Nhập truy vấn sau vào trình soạn thảo truy vấn:

INSERT INTO Employees 
VALUES
   (
      1,
      'Alice John',
      ARRAY [ '(408)-743-9045',
      '(408)-567-7834' ]
   );

Bước 2) Bấm vào nút Thực hiện:

Chèn PostgreSQL Giá trị mảng

Bước 3)

Để sử dụng dấu ngoặc nhọn trong truy vấn

Bước 1) Nhập truy vấn sau vào trình soạn thảo truy vấn:

INSERT INTO Employees 
VALUES
   (
    2,
      'Kate Joel',
      '{"(408)-783-5731"}'
   ),
   ( 
      3,
      'James Bush',
      '{"(408)-745-8965","(408)-567-78234"}'
   );

Bước 2) Bấm vào nút Thực hiện:

Chèn PostgreSQL Giá trị mảng

Truy vấn dữ liệu mảng

Bước 1) Để xem nội dung của bảng Nhân viên, hãy nhập truy vấn sau vào trình soạn thảo truy vấn:

SELECT * FROM Employees;

Bước 2) Bấm vào nút Thực hiện:

Truy vấn dữ liệu mảng bằng pgAdmin

Nó sẽ trả về kết quả sau:

Truy vấn dữ liệu mảng bằng pgAdmin

Bước 3) Để xem các liên hệ đầu tiên của nhân viên:

  1. Nhập truy vấn sau vào trình soạn thảo truy vấn:
    SELECT name, contact[1]
    FROM Employees;
    
  2. Nhấp vào nút Thực hiện.

Truy vấn dữ liệu mảng bằng pgAdmin

Nó sẽ trả về kết quả sau:

Truy vấn dữ liệu mảng bằng pgAdmin

Bước 4) Để kết hợp câu lệnh SELECT với mệnh đề WHERE:

  1. Nhập lệnh sau vào trình soạn thảo truy vấn:
    SELECT
       name
    FROM
       Employees
    WHERE
       contact [ 2 ] = '(408)-567-78234';
    
  2. Nhấp vào nút Thực hiện.

Truy vấn dữ liệu mảng bằng pgAdmin

Nó sẽ trả về kết quả sau:

Truy vấn dữ liệu mảng bằng pgAdmin

Sửa đổi PostgreSQL Mảng

Bước 1) Để cập nhật liên hệ thứ hai của người dùng có id là 3, hãy chạy lệnh sau:

UPDATE Employees
SET contact [ 2 ] = '(408)-589-89347'
WHERE
   id = 3;

Bước 2) Nhấp vào nút Thực hiện.

Sửa đổi PostgreSQL Mảng Sử dụng pgAdmin

Bước 3)

1. Nhập lệnh sau vào trình soạn thảo truy vấn để kiểm tra xem thay đổi có thành công hay không:

SELECT * FROM Employees;

2.Nhấp vào nút Thực thi.

Sửa đổi PostgreSQL Mảng Sử dụng pgAdmin

Nó sẽ trả về kết quả sau:

Sửa đổi PostgreSQL Mảng Sử dụng pgAdmin

Tìm kiếm trong một PostgreSQL Mảng

Bước 1) Nhập truy vấn sau vào trình soạn thảo truy vấn:

SELECT
   name,
   contact
FROM
   Employees
WHERE
   '(408)-783-5731' = ANY (contact);

Bước 2) Nhấp vào nút Thực hiện.

Tìm kiếm trong một PostgreSQL Mảng Sử dụng pgAdmin

Nó sẽ trả về kết quả sau:

Tìm kiếm trong một PostgreSQL Mảng Sử dụng pgAdmin

Mảng mở rộng

Bước 1) Nhập truy vấn sau vào trình soạn thảo truy vấn:

SELECT
   name,
   unnest(contact)
FROM
   Employees;

Bước 2) Nhấp vào nút Thực hiện.

Mở rộng mảng bằng pgAdmin

Nó sẽ trả về kết quả sau:

Mở rộng mảng bằng pgAdmin

Tổng kết

  • PostgreSQL cho phép chúng ta định nghĩa một cột trong bảng là một kiểu mảng.
  • Mảng phải có giá trị loại dữ liệu chẳng hạn như số nguyên, ký tự hoặc kiểu do người dùng xác định.
  • Để chèn giá trị vào cột mảng, chúng ta sử dụng hàm tạo ARRAY.
  • Nếu có nhiều hơn một phần tử trong cùng một hàng của cột mảng thì phần tử đầu tiên ở vị trí 1.
  • Mỗi giá trị có thể được truy cập bằng cách truyền một chỉ số dưới trong dấu ngoặc vuông [].
  • Các phần tử của mảng có thể được truy xuất bằng câu lệnh SELECT.
  • Các giá trị của cột mảng có thể được đặt trong dấu ngoặc vuông [] hoặc dấu ngoặc nhọn {}.
  • Chúng ta có thể tìm kiếm các giá trị cột mảng bằng hàm ANY().

Tải xuống Cơ sở dữ liệu được sử dụng trong Hướng dẫn này