Phiên bản được hỗ trợ:hiện tại(17)16 / 15 / 14 / 13
Phiên bản phát triển:18 / Devel
Phiên bản không được hỗ trợ:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1
Tài liệu này dành cho phiên bản không được hỗ trợ của PostgreSQL.
Bạn có thể muốn xem cùng một trang chohiện tạiPhiên bản hoặc một trong các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

8.15. tỷ lệ kèo bóng đá#

PostgreSQLCho phép các cột của bảng được xác định là tỷ lệ kèo bóng đá đa chiều dài thay đổi. Các tỷ lệ kèo bóng đá thuộc bất kỳ loại cơ sở, loại enum, loại tổng hợp, loại phạm vi hoặc miền có thể được xác định bởi người dùng.

8.15.1. Khai báo các loại tỷ lệ kèo bóng đá#

Để minh họa việc sử dụng các loại tỷ lệ kèo bóng đá, chúng tôi tạo bảng này:

Tạo bảng SAL_EMP (

Như được hiển thị, một loại dữ liệu tỷ lệ kèo bóng đá được đặt tên bằng cách nối các dấu ngoặc vuông ([]) đến tên kiểu dữ liệu của các phần tử tỷ lệ kèo bóng đá. Lệnh trên sẽ tạo một bảng có tênSAL_EMPVới một cột loạiText(tên), một tỷ lệ kèo bóng đá một chiều của loạiSố nguyên(pay_by_quarter), đại diện cho tiền lương của nhân viên theo quý và một tỷ lệ kèo bóng đá hai chiềuText(Lịch trình), đại diện cho lịch trình hàng tuần của nhân viên.

Cú pháp choTạo bảngCho phép kích thước chính xác của tỷ lệ kèo bóng đá được chỉ định, ví dụ:

Tạo bảng Tictactoe (

Tuy nhiên, việc triển khai hiện tại bỏ qua mọi giới hạn kích thước tỷ lệ kèo bóng đá được cung cấp, tức là, hành vi này giống như đối với các tỷ lệ kèo bóng đá có độ dài không xác định.

Việc triển khai hiện tại cũng không thực thi số lượng kích thước được khai báo. Các tỷ lệ kèo bóng đá thuộc loại phần tử cụ thể đều được coi là cùng loại, bất kể kích thước hoặc số lượng kích thước.Tạo bảngchỉ đơn giản là tài liệu; nó không ảnh hưởng đến hành vi thời gian chạy.

Một cú pháp thay thế, phù hợp với tiêu chuẩn SQL bằng cách sử dụng từ khóatỷ lệ kèo bóng đá, có thể được sử dụng cho các tỷ lệ kèo bóng đá một chiều.pay_by_quartercó thể được định nghĩa là:

pay_by_quarter tỷ lệ kèo bóng đá số nguyên [4],

Hoặc, nếu không có kích thước tỷ lệ kèo bóng đá nào được chỉ định:

pay_by_quarter tỷ lệ kèo bóng đá số nguyên,

Tuy nhiên, như trước đây,PostgreSQLKhông thực thi hạn chế kích thước trong mọi trường hợp.

8.15.2. Đầu vào giá trị tỷ lệ kèo bóng đá#

Để viết một giá trị tỷ lệ kèo bóng đá dưới dạng hằng số theo nghĩa đen, đặt các giá trị phần tử trong niềng răng xoăn và tách chúng bằng dấu phẩy. .

'Val1 Delim Val2 Delim... '

WHEREDelimlà ký tự phân cách cho loại, như được ghi trong nópg_typemục nhập. Trong số các loại dữ liệu tiêu chuẩn được cung cấp trongPostgreSQLPhân phối, tất cả đều sử dụng dấu phẩy (,), ngoại trừ loạiBoxsử dụng dấu chấm phẩy (;). MỗiVallà hằng số của loại phần tử tỷ lệ kèo bóng đá hoặc subarray. Một ví dụ về hằng số tỷ lệ kèo bóng đá là:

'1,2,3, 4,5,6, 7,8,9'

Hằng số này là một tỷ lệ kèo bóng đá hai chiều, 3 x 3 bao gồm ba số con số của số nguyên.

Để đặt phần tử của hằng số tỷ lệ kèo bóng đá thành null, viếtnullcho giá trị phần tử. (Bất kỳ biến thể trường hợp nào trên hoặc dưới củanullSẽ làm.) Nếu bạn muốn một giá trị chuỗi thực tếHồinullHồi, bạn phải đặt dấu ngoặc kép xung quanh nó.

(Các loại hằng số tỷ lệ kèo bóng đá này thực sự chỉ là một trường hợp đặc biệt của các hằng số loại chung được thảo luận trongPhần 4.1.2.7. Hằng số ban đầu được coi là một chuỗi và được chuyển đến thói quen chuyển đổi đầu vào tỷ lệ kèo bóng đá.

Bây giờ chúng ta có thể hiển thị một sốChèncâu lệnh:

Chèn vào sal_emp

Kết quả của hai lần chèn trước trông như thế này:

Chọn * từ SAL_EMP;

tỷ lệ kèo bóng đá đa chiều phải có phạm vi phù hợp cho mỗi chiều. Một sự không phù hợp gây ra lỗi, ví dụ:

Chèn vào sal_emp

Thetỷ lệ kèo bóng đáCú pháp Constructor cũng có thể được sử dụng:

Chèn vào sal_emp

Lưu ý rằng các phần tử tỷ lệ kèo bóng đá là các hằng số hoặc biểu thức SQL thông thường; Chẳng hạn, các chuỗi chữ được trích dẫn đơn, thay vì được trích dẫn gấp đôi vì chúng sẽ ở trong một tỷ lệ kèo bóng đá theo nghĩa đen.tỷ lệ kèo bóng đáCú pháp Constructor được thảo luận chi tiết hơn trongPhần 4.2.12.

8.15.3. Truy cập tỷ lệ kèo bóng đá#

Bây giờ, chúng ta có thể chạy một số truy vấn trên bảng. Đầu tiên, chúng tôi chỉ ra cách truy cập một phần tử duy nhất của một tỷ lệ kèo bóng đá.

Chọn tên từ SAL_EMP trong đó pay_by_quarter [1] < pay_by_quarter [2];

Số đăng ký tỷ lệ kèo bóng đá được viết trong dấu ngoặc vuông. Theo mặc địnhPostgreSQLSử dụng quy ước đánh số một dựa trên cho các tỷ lệ kèo bóng đá, nghĩa là một tỷ lệ kèo bóng đánCác phần tử bắt đầu bằngtỷ lệ kèo bóng đá [1]và kết thúc bằngtỷ lệ kèo bóng đá [n].

Truy vấn này lấy tiền lương quý thứ ba của tất cả nhân viên:

Chọn pay_by_quarter [3] từ sal_emp;

Chúng ta cũng có thể truy cập các lát hình chữ nhật tùy ý của một tỷ lệ kèo bóng đá hoặc subarrays. Một lát tỷ lệ kèo bóng đá được ký hiệu bằng cách viếtgiới hạn thấp hơn:giới hạn trêncho một hoặc nhiều kích thước tỷ lệ kèo bóng đá. Ví dụ: Truy vấn này lấy mục đầu tiên trong lịch trình của Bill trong hai ngày đầu tiên trong tuần:

Chọn Lịch trình [1: 2] [1: 1] từ SAL_EMP trong đó pay_by_quarter | = 'Bill';

Nếu bất kỳ kích thước nào được viết dưới dạng một lát cắt, tức là, chứa một dấu hai chấm, thì tất cả các chiều được coi là lát cắt. Bất kỳ kích thước nào chỉ có một số duy nhất (không có dấu hai chấm) được coi là từ 1 đến số được chỉ định.[2]được coi là[1: 2], như trong ví dụ này:

Chọn Lịch trình [1: 2] [2] từ SAL_EMP trong đó pay_by_quarter | = 'Bill';

Để tránh sự nhầm lẫn với trường hợp không phải là lát[1: 2] [1: 1], không[2] [1: 1].

Có thể bỏ quagiới hạn thấp hơnvà/hoặcgiới hạn trêncủa một nhà xác định lát cắt; Giới hạn bị thiếu được thay thế bằng giới hạn dưới hoặc trên của các chỉ số của tỷ lệ kèo bóng đá.

Lịch chọn [: 2] [2:] từ sal_emp trong đó tên = 'Bill';

21849_22090Lịch trìnhHiện tại có kích thước[1: 3] [1: 2]Sau đó tham khảoLịch trình [3] [3]mang lại null. Tương tự, một tham chiếu tỷ lệ kèo bóng đá với số lượng người đăng ký sai mang lại một null thay vì lỗi.

Một biểu thức lát tỷ lệ kèo bóng đá tương tự mang lại NULL nếu chính tỷ lệ kèo bóng đá hoặc bất kỳ biểu thức nào trong số các biểu thức phụ là null. Tuy nhiên, trong các trường hợp khác như chọn một lát tỷ lệ kèo bóng đá hoàn toàn bên ngoài giới hạn tỷ lệ kèo bóng đá hiện tại, một biểu thức lát cắt mang lại một tỷ lệ kèo bóng đá trống (không chiều) thay vì null.

Kích thước hiện tại của bất kỳ giá trị tỷ lệ kèo bóng đá nào cũng có thể được truy xuất vớiArray_DIMSchức năng:

chọn Array_DIMS (Lịch trình) từ SAL_EMP trong đó pay_by_quarter | = '';

Array_DIMSSản xuất ATextKết quả, thuận tiện cho mọi người đọc nhưng có lẽ bất tiện cho các chương trình. Kích thước cũng có thể được truy xuất vớimảng_upperArray_Lower, trả về giới hạn trên và dưới của một kích thước tỷ lệ kèo bóng đá được chỉ định, tương ứng:

Chọn Array_UPPER (Lịch trình, 1) từ Sal_emp trong đó Tên = 'Carol';

Array_lengthSẽ trả về chiều dài của một kích thước tỷ lệ kèo bóng đá được chỉ định:

chọn Array_Lpm (Lịch trình, 1) từ SAL_EMP trong đó Tên = 'Carol';

CardinalityTrả về tổng số phần tử trong một tỷ lệ kèo bóng đá trên tất cả các kích thước. Nó thực sự là số lượng hàng gọi đếnUnnestsẽ mang lại:

Chọn Cardinality (Lịch trình) từ SAL_EMP trong đó Tên = 'Carol';

8.15.4. Sửa đổi tỷ lệ kèo bóng đá#

Một giá trị tỷ lệ kèo bóng đá có thể được thay thế hoàn toàn:

CẬP NHẬT SAL_EMP SET PAY_BY_QUARTER = '25000,25000,27000,27000'

hoặc sử dụngtỷ lệ kèo bóng đáBiểu thức cú pháp:

CẬP NHẬT SAL_EMP SET PAY_BY_QUARTER = tỷ lệ kèo bóng đá [25000,25000,27000,27000]

Một tỷ lệ kèo bóng đá cũng có thể được cập nhật tại một phần tử duy nhất:

CẬP NHẬT SAL_EMP SET PAY_BY_QUARTER [4] = 15000

hoặc được cập nhật bằng một lát:

CẬP NHẬT SAL_EMP SET PAY_BY_QUARTER [1: 2] = '27000,27000'

Cú pháp lát cắt bị bỏ quagiới hạn thấp hơnvà/hoặcgiới hạn trêncũng có thể được sử dụng, nhưng chỉ khi cập nhật giá trị tỷ lệ kèo bóng đá không phải là NULL hoặc không chiều (nếu không, không có giới hạn chỉ số hiện có để thay thế).

Một giá trị tỷ lệ kèo bóng đá được lưu trữ có thể được mở rộng bằng cách gán cho các phần tử chưa có. Bất kỳ vị trí nào giữa các yếu tố hiện tại và các yếu tố mới được chỉ định sẽ được lấp đầy bằng null.MyArrayHiện tại có 4 yếu tố, nó sẽ có sáu yếu tố sau khi cập nhật gán choMyarray [6];MyArray [5]sẽ chứa null. Hiện tại, việc mở rộng theo kiểu này chỉ được phép cho các tỷ lệ kèo bóng đá một chiều, không phải tỷ lệ kèo bóng đá đa chiều.

Bài tập được đăng ký cho phép tạo các tỷ lệ kèo bóng đá không sử dụng các chỉ số một dựa trên. Ví dụ, người ta có thể gán choMyArray [-2: 7]Để tạo một tỷ lệ kèo bóng đá có giá trị đăng ký từ -2 đến 7.

Giá trị tỷ lệ kèo bóng đá mới cũng có thể được xây dựng bằng toán tử nối,||:

Chọn tỷ lệ kèo bóng đá [1,2] || tỷ lệ kèo bóng đá [3,4];

Toán tử nối cho phép một phần tử duy nhất được đẩy vào đầu hoặc cuối của tỷ lệ kèo bóng đá một chiều. Nó cũng chấp nhận hain-Dimensional tỷ lệ kèo bóng đá hoặc mộtn-Dimensional và ann+1-Dimensional Array.

Khi một phần tử được đẩy vào đầu hoặc đầu của tỷ lệ kèo bóng đá một chiều, kết quả là một tỷ lệ kèo bóng đá có cùng một chỉ số giới hạn dưới với toán hạng tỷ lệ kèo bóng đá. Ví dụ:

chọn Array_DIMS (1 || '[0: 1] = 2,3' :: int []);

27625_27923

chọn Array_DIMS (tỷ lệ kèo bóng đá [1,2] || tỷ lệ kèo bóng đá [3,4,5]);

Khin-Dimensional tỷ lệ kèo bóng đá được đẩy vào đầu hoặc cuối củan+1-Dimensional tỷ lệ kèo bóng đá, kết quả tương tự như trường hợp tỷ lệ kèo bóng đá phần tử ở trên. Mỗin28455_28513n+1kích thước bên ngoài của tỷ lệ kèo bóng đá chiều. Ví dụ:

chọn Array_DIMS (tỷ lệ kèo bóng đá [1,2] || tỷ lệ kèo bóng đá [[3,4], [5,6]]);

Một tỷ lệ kèo bóng đá cũng có thể được xây dựng bằng cách sử dụng các chức năngArray_Prepend, Array_Appendhoặcmảng_cat. Hai đầu tiên chỉ hỗ trợ các tỷ lệ kèo bóng đá một chiều, nhưngmảng_catHỗ trợ các tỷ lệ kèo bóng đá đa chiều. Một số ví dụ:

chọn Array_Prepend (1, tỷ lệ kèo bóng đá [2,3]);

Trong các trường hợp đơn giản, toán tử nối được thảo luận ở trên được ưu tiên sử dụng trực tiếp các chức năng này. Tuy nhiên, vì toán tử kết hợp bị quá tải để phục vụ cả ba trường hợp, nên có những tình huống sử dụng một trong các chức năng là hữu ích để tránh sự mơ hồ.

Chọn Array [1, 2] || '3, 4';

Trong các ví dụ trên, trình phân tích cú pháp nhìn thấy một tỷ lệ kèo bóng đá số nguyên ở một bên của toán tử nối và một loại không thể xác định ở bên kia. Heuristic mà nó sử dụng để giải quyết loại của hằng số là giả sử nó cùng loại với đầu vào khác của người vận hành - trong trường hợp này là tỷ lệ kèo bóng đá số nguyên.mảng_cat, khôngArray_Append. Khi đó là lựa chọn sai, nó có thể được sửa bằng cách đúc hằng số vào loại phần tử của tỷ lệ kèo bóng đá;Array_Appendcó thể là một giải pháp thích hợp hơn.

8.15.5. Tìm kiếm trong tỷ lệ kèo bóng đá#

Để tìm kiếm giá trị trong một tỷ lệ kèo bóng đá, mỗi giá trị phải được kiểm tra. Điều này có thể được thực hiện thủ công, nếu bạn biết kích thước của tỷ lệ kèo bóng đá.

Chọn * từ SAL_EMP trong đó pay_by_quarter [1] = 10000 hoặc

Tuy nhiên, điều này nhanh chóng trở nên tẻ nhạt đối với các tỷ lệ kèo bóng đá lớn và không hữu ích nếu kích thước của tỷ lệ kèo bóng đá không rõ. Một phương pháp thay thế được mô tả trongPhần 9.25. Truy vấn trên có thể được thay thế bằng:

Chọn * từ SAL_EMP WHERE 10000 = Any (pay_by_quarter);

Ngoài ra, bạn có thể tìm thấy các hàng trong đó tỷ lệ kèo bóng đá có tất cả các giá trị bằng 10000 với:

Chọn * từ SAL_EMP WHERE 10000 = all (pay_by_quarter);

Ngoài ra,Generate_subscriptsCó thể sử dụng chức năng. Ví dụ:

Chọn * Từ

Hàm này được mô tả trongBảng 9.70.

Bạn cũng có thể tìm kiếm một tỷ lệ kèo bóng đá bằng&&Toán tử, trong đó kiểm tra xem toán hạng bên trái có chồng chéo với toán hạng bên phải hay không. Ví dụ:

Chọn * từ SAL_EMP WHERE pay_by_quarter && tỷ lệ kèo bóng đá [10000];

Các toán tử tỷ lệ kèo bóng đá này và khác được mô tả thêm trongPhần 9.19. Nó có thể được tăng tốc bởi một chỉ mục thích hợp, như được mô tả trongPhần 11.2.

Bạn cũng có thể tìm kiếm các giá trị cụ thể trong một tỷ lệ kèo bóng đá bằng cách sử dụngArray_PocationArray_Pocationschức năng. Trước đây trả về chỉ số của lần xuất hiện đầu tiên của một giá trị trong một tỷ lệ kèo bóng đá;

33937_34188

TIP

tỷ lệ kèo bóng đá không phải là bộ; Tìm kiếm các yếu tố tỷ lệ kèo bóng đá cụ thể có thể là một dấu hiệu của cơ sở dữ liệu sai lệch.

8.15.6. tỷ lệ kèo bóng đá đầu vào và cú pháp đầu ra#

Biểu diễn văn bản bên ngoài của giá trị tỷ lệ kèo bóng đá bao gồm các mục được giải thích theo các quy tắc chuyển đổi I/O cho loại phần tử của tỷ lệ kèo bóng đá, cộng với trang trí cho biết cấu trúc tỷ lệ kèo bóng đá. Trang trí bao gồm niềng răng xoăn () Xung quanh giá trị tỷ lệ kèo bóng đá cộng với các ký tự phân cách giữa các mục liền kề. Ký tự phân định thường là dấu phẩy (,) Nhưng có thể là một cái gì đó khác: Nó được xác định bởitypdelimCài đặt cho loại phần tử của tỷ lệ kèo bóng đá. Trong số các loại dữ liệu tiêu chuẩn được cung cấp trongPostgreSQLPhân phối, tất cả đều sử dụng dấu phẩy, ngoại trừ loạiBox, sử dụng dấu chấm phẩy (;). Trong một tỷ lệ kèo bóng đá đa chiều, mỗi thứ nguyên (hàng, mặt phẳng, khối lập phương, v.v.) có mức độ niềng răng riêng của riêng mình và các dấu phân cách phải được viết giữa các thực thể giằng xoăn liền kề của cùng cấp độ.

35908_36113null. Báo giá kép và dấu gạch chéo ngược được nhúng trong các giá trị phần tử sẽ được trừ lại.

Theo mặc định, giá trị chỉ mục giới hạn dưới của kích thước của một tỷ lệ kèo bóng đá được đặt thành một. Để biểu diễn các tỷ lệ kèo bóng đá có giới hạn dưới khác, các phạm vi đăng ký tỷ lệ kèo bóng đá có thể được chỉ định rõ ràng trước khi viết nội dung tỷ lệ kèo bóng đá.[]) Xung quanh mỗi giới hạn dưới và trên của kích thước tỷ lệ kèo bóng đá, với một dấu hai chấm (:) ký tự dấu phân cách ở giữa. Trang trí kích thước tỷ lệ kèo bóng đá được theo sau bởi một dấu bằng (=). Ví dụ:

Chọn F1 [1] [-2] [3] AS E2, F1 [1] [-1] [5]

Thói quen đầu ra tỷ lệ kèo bóng đá sẽ bao gồm các kích thước rõ ràng trong kết quả của nó chỉ khi có một hoặc nhiều giới hạn thấp hơn khác với một.

Nếu giá trị được viết cho một phần tử lànull(Trong mọi trường hợp biến thể), phần tử được coi là null. Sự hiện diện của bất kỳ trích dẫn hoặc dấu gạch chéo ngược nào vô hiệu hóa điều này và cho phép giá trị chuỗi theo nghĩa đennullsẽ được nhập. Ngoài ra, để tương thích ngược với phiên bản trước 8.2 củaPOSTGRESQL, Themảng_nullsTham số cấu hình có thể được bậtTẮTĐể đàn áp nhận dạngnullnhư một null.

Như được hiển thị trước đây, khi viết một giá trị tỷ lệ kèo bóng đá, bạn có thể sử dụng dấu ngoặc kép xung quanh bất kỳ phần tử tỷ lệ kèo bóng đá riêng lẻ nào. BạnphảiLàm như vậy nếu giá trị phần tử sẽ gây nhầm lẫn cho trình phân tích cú pháp giá trị tỷ lệ kèo bóng đá. Ví dụ, các phần tử chứa niềng răng xoăn, dấu phẩy (hoặc ký tự phân cách của loại dữ liệu), trích dẫn kép, dấu gạch chéo ngược hoặc khoảng trắng dẫn đầu hoặc dấu vết phải được trích dẫn kép.nullcũng phải được trích dẫn. Để đặt một báo giá kép hoặc dấu gạch chéo ngược trong một giá trị phần tử tỷ lệ kèo bóng đá được trích dẫn, đi trước nó bằng một dấu gạch chéo ngược.

Bạn có thể thêm khoảng trắng trước khi nẹp trái hoặc sau khi nẹp phải. Bạn cũng có thể thêm khoảng trắng trước hoặc sau bất kỳ chuỗi mục riêng lẻ nào.

TIP

Thetỷ lệ kèo bóng đáCú pháp Constructor (xemPhần 4.2.12) thường dễ làm việc hơn so với cú pháp theo nghĩa chính của tỷ lệ kèo bóng đá khi viết các giá trị tỷ lệ kèo bóng đá trong các lệnh SQL. TRONGtỷ lệ kèo bóng đá, Các giá trị phần tử riêng lẻ được viết giống như cách chúng sẽ được viết khi không phải là thành viên của một tỷ lệ kèo bóng đá.