PostgreSQL: soi kèo bóng đá | |||
---|---|---|---|
prev | UP | Chương 8. Kiểu dữ liệu | NEXT |
PostgreSQLCho phép các cột của bảng được xác định là kèo bóng đá cúp c2 đa chiều dài thay đổi. Các kèo bóng đá cúp c2 thuộc bất kỳ loại cơ sở, loại enum hoặc loại tổng hợp được định nghĩa hoặc người dùng có thể được tạo.
Để minh họa việc sử dụng các loại kèo bóng đá cúp c2, 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 kèo bóng đá cúp c2 đượ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ử kèo bóng đá cúp c2. 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 kèo bóng đá cúp c2 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 kèo bóng đá cúp c2 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 kèo bóng đá cúp c2 đượ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 kèo bóng đá cúp c2 được cung cấp, tức là, hành vi này giống như đối với các kèo bóng đá cúp c2 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 kèo bóng đá cúp c2 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óakèo bóng đá cúp c2, có thể được sử dụng cho các kèo bóng đá cúp c2 một chiều.pay_by_quartercó thể được định nghĩa là:
kèo bóng đá cúp c2 số nguyên pay_by_quarter [4],
Hoặc, nếu không có kích thước kèo bóng đá cúp c2 nào được chỉ định:
pay_by_quarter kèo bóng đá cúp c2 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.
Để viết một giá trị kèo bóng đá cúp c2 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ử kèo bóng đá cúp c2 hoặc subarray. Một ví dụ về hằng số kèo bóng đá cúp c2 là:
'1,2,3, 4,5,6, 7,8,9'
Hằng số này là một kèo bóng đá cúp c2 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ố kèo bóng đá cúp c2 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ế"NULL", bạn phải đặt dấu ngoặc kép xung quanh nó.
(Các loại hằng số kèo bóng đá cúp c2 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 kèo bóng đá cúp c2.
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;
kèo bóng đá cúp c2 đ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
Thekèo bóng đá cúp c2Cú 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ử kèo bóng đá cúp c2 là 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 kèo bóng đá cúp c2 theo nghĩa đen.kèo bóng đá cúp c2Cú pháp Constructor được thảo luận chi tiết hơn trongPhần 4.2.12.
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 kèo bóng đá cúp c2.
Chọn tên từ SAL_EMP trong đó pay_by_quarter [1] < pay_by_quarter [2];
Số đăng ký kèo bóng đá cúp c2 đượ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 kèo bóng đá cúp c2, nghĩa là một kèo bóng đá cúp c2nCác phần tử bắt đầu bằngkèo bóng đá cúp c2 [1]và kết thúc bằngkèo bóng đá cúp c2 [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 kèo bóng đá cúp c2 hoặc subarrays. Một lát kèo bóng đá cúp c2 đượ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 kèo bóng đá cúp c2. 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 đề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, tốt nhất là sử dụng cú pháp lát cắt cho tất cả các chiều, ví dụ:[1: 2] [1: 1], không[2] [1: 1].
18895_19136Lị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 kèo bóng đá cúp c2 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 kèo bóng đá cúp c2 tương tự mang lại NULL nếu chính kèo bóng đá cúp c2 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 kèo bóng đá cúp c2 hoàn toàn bên ngoài giới hạn kèo bóng đá cúp c2 hiện tại, một biểu thức lát cắt mang lại một kèo bóng đá cúp c2 trống (không chiều) thay vì null.
Kích thước hiện tại của bất kỳ giá trị kèo bóng đá cúp c2 nào cũng có thể được truy xuất vớiArray_DIMS
chức năng:
chọn Array_Dims (Lịch trình) từ Sal_emp trong đó pay_by_quarter | = '';
Array_DIMS
Sả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ớiArray_upper
vàArray_Lower
, trả về giới hạn trên và dưới của một kích thước kèo bóng đá cúp c2 được chỉ định, tương ứng:
chọn Array_UPPER (Lịch trình, 1) từ Sal_emp trong đó pay_by_quarter | = '';
Array_length
Sẽ trả về chiều dài của một kích thước kèo bóng đá cúp c2 được chỉ định:
chọn Array_Lpm (Lịch trình, 1) từ SAL_EMP trong đó pay_by_quarter | = '';
Cardinality
Trả về tổng số phần tử trong một kèo bóng đá cúp c2 trên tất cả các kích thước. Nó thực sự là số lượng hàng gọi đếnUnnest
sẽ mang lại:
Chọn Cardinality (Lịch trình) từ SAL_EMP trong đó pay_by_quarter | = '';
Một giá trị kèo bóng đá cúp c2 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ụngkèo bóng đá cúp c2Biểu thức cú pháp:
Cập nhật SAL_EMP SET PAY_BY_QUARTER = kèo bóng đá cúp c2 [25000,25000,27000,27000]
Một kèo bóng đá cúp c2 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 trong một lát:
Cập nhật SAL_EMP SET PAY_BY_QUARTER [1: 2] = '27000,27000'
Một giá trị kèo bóng đá cúp c2 đượ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 kèo bóng đá cúp c2 một chiều, không phải kèo bóng đá cúp c2 đa chiều.
Bài tập được đăng ký cho phép tạo các kèo bóng đá cúp c2 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 kèo bóng đá cúp c2 có giá trị đăng ký từ -2 đến 7.
Các giá trị kèo bóng đá cúp c2 mới cũng có thể được xây dựng bằng toán tử nối,||:
Chọn kèo bóng đá cúp c2 [1,2] || kèo bóng đá cúp c2 [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 kết thúc của một kèo bóng đá cúp c2 một chiều. Nó cũng chấp nhận hain-Dimensional kèo bóng đá cúp c2 hoặc mộtn-Dimensional và ann+1-Dimensional Array.
Khi một phần tử duy nhất được đẩy vào đầu hoặc đầu của kèo bóng đá cúp c2 một chiều, kết quả là một kèo bóng đá cúp c2 có cùng một chỉ số giới hạn dưới với toán hạng kèo bóng đá cúp c2. Ví dụ:
chọn Array_DIMS (1 || '[0: 1] = 2,3' :: int []);
Khi hai kèo bóng đá cúp c2 có số lượng kích thước bằng nhau được nối, kết quả vẫn giữ được chỉ số giới hạn dưới của kích thước bên ngoài của toán hạng bên trái. Kết quả là một kèo bóng đá cúp c2 bao gồm mọi yếu tố của toán hạng bên trái, theo sau là mọi yếu tố của toán hạng bên phải.
chọn Array_DIMS (kèo bóng đá cúp c2 [1,2] || kèo bóng đá cúp c2 [3,4,5]);
Khi mộtn-Dimensional kèo bóng đá cúp c2 được đẩy vào đầu hoặc cuối củan+1-Dimensional kèo bóng đá cúp c2, kết quả tương tự như trường hợp kèo bóng đá cúp c2 phần tử ở trên. Mỗin24755_24813n+1kích thước bên ngoài của Array -dimensional. Ví dụ:
chọn Array_DIMS (kèo bóng đá cúp c2 [1,2] || kèo bóng đá cúp c2 [[3,4], [5,6]]);
Một kèo bóng đá cúp c2 cũng có thể được xây dựng bằng cách sử dụng các chức năngArray_Prepend
, Array_Append
hoặcmảng_cat
. Hai đầu tiên chỉ hỗ trợ các kèo bóng đá cúp c2 một chiều, nhưngmảng_cat
Hỗ trợ các kèo bóng đá cúp c2 đa chiều. Một số ví dụ:
chọn Array_Prepend (1, kèo bóng đá cúp c2 [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 kèo bóng đá cúp c2 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à kèo bóng đá cúp c2 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 kèo bóng đá cúp c2;Array_Append
có thể là một giải pháp thích hợp hơn.
Để tìm kiếm giá trị trong một kèo bóng đá cúp c2, 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 kèo bóng đá cúp c2.
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 kèo bóng đá cúp c2 lớn và không hữu ích nếu kích thước của kèo bóng đá cúp c2 không rõ. Một phương pháp thay thế được mô tả trongPhần 9,23. 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 đó kèo bóng đá cúp c2 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_subscripts
có thể sử dụng chức năng. Ví dụ:
Chọn * Từ
Hàm này được mô tả trongBảng 9-56.
Bạn cũng có thể tìm kiếm một kèo bóng đá cúp c2 bằng&&toán tử, 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 && kèo bóng đá cúp c2 [10000];
Các toán tử kèo bóng đá cúp c2 này và khác được mô tả thêm trongPhần 9,18. 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 kèo bóng đá cúp c2 bằng cách sử dụngArray_Pocation
vàArray_Pocations
chứ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 kèo bóng đá cúp c2;
29669_29891
Tip:kèo bóng đá cúp c2 không phải là bộ; Tìm kiếm các yếu tố kèo bóng đá cúp c2 cụ thể có thể là một dấu hiệu của cơ sở dữ liệu sai lệch.
Biểu diễn văn bản bên ngoài của giá trị kèo bóng đá cúp c2 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 kèo bóng đá cúp c2, cộng với trang trí cho biết cấu trúc kèo bóng đá cúp c2. Trang trí bao gồm niềng răng xoăn (và) Xung quanh giá trị kèo bóng đá cúp c2 cộng với các ký tự phân định 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 kèo bóng đá cúp c2. 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 kèo bóng đá cúp c2 đ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 độ.
31383_31588null. 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 kèo bóng đá cúp c2 được đặt thành một. Để biểu diễn các kèo bóng đá cúp c2 có giới hạn dưới khác, các phạm vi đăng ký kèo bóng đá cúp c2 có thể được chỉ định rõ ràng trước khi viết nội dung kèo bóng đá cúp c2.[]) Xung quanh mỗi giới hạn dưới và trên của kích thước kèo bóng đá cúp c2, với dấu hai chấm (:) ký tự dấu phân cách ở giữa. Trang trí kích thước kèo bóng đá cúp c2 được theo sau bởi một dấu bằng (=). Ví dụ:
Chọn F1 [1] [-2] [3] là E2, F1 [1] [-1] [5]
Thói quen đầu ra kèo bóng đá cúp c2 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 dưới 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 đen"NULL"sẽ đượ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ị kèo bóng đá cúp c2, bạn có thể sử dụng dấu ngoặc kép xung quanh bất kỳ phần tử kèo bóng đá cúp c2 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ị kèo bóng đá cúp c2. 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ử kèo bóng đá cúp c2 đượ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:Thekèo bóng đá cúp c2Cú 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 kèo bóng đá cúp c2 khi viết các giá trị kèo bóng đá cúp c2 trong các lệnh SQL. TRONGkèo bóng đá cúp c2, Các giá trị phần tử riêng lẻ được viết giống như cách chúng được viết khi không phải là thành viên của một kèo bóng đá cúp c2.