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.
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.
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.
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:
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:
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:
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:
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:
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:
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ự 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:
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:
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:
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)
- Từ thanh điều hướng ở bên trái- Nhấp vào rbase.
- Bấm vào nút Demo
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.
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:
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:
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:
Nó sẽ trả về kết quả sau:
Bước 3) Để xem các liên hệ đầu tiên của nhân viên:
- Nhập truy vấn sau vào trình soạn thảo truy vấn:
SELECT name, contact[1] FROM Employees;
- Nhấp vào nút Thực hiện.
Nó sẽ trả về kết quả sau:
Bước 4) Để kết hợp câu lệnh SELECT với mệnh đề WHERE:
- 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';
- Nhấp vào nút Thực hiện.
Nó sẽ trả về kết quả sau:
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.
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.
Nó sẽ trả về kết quả sau:
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.
Nó sẽ trả về kết quả sau:
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.
Nó sẽ trả về kết quả sau:
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