Aloại tổng tỷ lệ kèo bóng đá tối nayđại diện cho cấu trúc của một hàng hoặc bản ghi; Nó thực chất chỉ là một danh sách các tên trường và tỷ lệ kèo bóng đá tối nay dữ liệu của chúng.PostgreSQLCho phép các loại tổng tỷ lệ kèo bóng đá tối nay được sử dụng theo nhiều cách giống nhau mà các loại đơn giản có thể được sử dụng. Ví dụ: một cột của bảng có thể được khai báo là loại tổng tỷ lệ kèo bóng đá tối nay.
Đây là hai ví dụ đơn giản về việc xác định các loại tổng tỷ lệ kèo bóng đá tối nay:
Tạo loại phức tạp như (
Cú pháp có thể so sánh vớiTạo bảng
, ngoại trừ chỉ có thể chỉ định tên trường và loại trường; Không có ràng buộc (chẳng hạn nhưkhông null
) hiện có thể được bao gồm. Lưu ý rằngAS
Từ khóa là cần thiết; Không có nó, hệ thống sẽ nghĩ một loại khácTạo loại
Lệnh có nghĩa là và bạn sẽ nhận được lỗi cú pháp lẻ.
Đã xác định tỷ lệ kèo bóng đá tối nay, chúng ta có thể sử dụng chúng để tạo bảng:
Tạo bảng on_hand (
hoặc tỷ lệ kèo bóng đá tối nay chức năng:
12683_12847
Bất cứ khi nào bạn tạo bảng, loại tổng tỷ lệ kèo bóng đá tối nay cũng được tạo tự động, với cùng tên với bảng, để biểu thị loại hàng của bảng. Ví dụ, chúng tôi đã nói:
Tạo bảng kiểm kê_item (
Sau đó, giống nhauInventory_Item
Loại tổng tỷ lệ kèo bóng đá tối nay được hiển thị ở trên sẽ ra đời như một sản phẩm phụ và có thể được sử dụng như trên. Tuy nhiên, lưu ý một hạn chế quan trọng của việc thực hiện hiện tại: vì không có ràng buộc nào được liên kết với loại tổng tỷ lệ kèo bóng đá tối nay, các ràng buộc được hiển thị trong định nghĩa bảngKhông áp dụngvới các giá trị của loại tổng tỷ lệ kèo bóng đá tối nay bên ngoài bảng. (Để làm việc xung quanh điều này, hãy tạo một miền trên loại tổng tỷ lệ kèo bóng đá tối nay và áp dụng các ràng buộc mong muốn làKiểm tra
tỷ lệ kèo bóng đá tối nay ràng buộc của miền.)
Để viết một giá trị tổng tỷ lệ kèo bóng đá tối nay dưới dạng hằng số theo nghĩa đen, đặt các giá trị trường trong ngoặc đơn và tách chúng bằng dấu phẩy. Bạn có thể đặt dấu ngoặc kép xung quanh bất kỳ giá trị trường nào và phải làm như vậy nếu nó chứa dấu phẩy hoặc dấu ngoặc đơn.bên dưới.) Vì vậy, định dạng chung của hằng số tổng tỷ lệ kèo bóng đá tối nay là như sau:
'(Val1
,Val2
, ...) '
Một ví dụ là:
'("Xúc xắc mờ", 42,1,99)'
đó sẽ là giá trị tỷ lệ kèo bóng đá tối nay lệ củaInventory_Item
Loại được xác định ở trên. Để làm cho một trường được null, hãy viết không có ký tự ở vị trí của nó trong danh sách.
'("Xúc xắc mờ", 42,)'
Nếu bạn muốn một chuỗi trống chứ không phải null, hãy viết dấu ngoặc kép:
'("", 42,)'
Ở đây trường đầu tiên là chuỗi trống không null, thứ ba là null.
(Những hằng số này thực sự chỉ là một trường tỷ lệ kèo bóng đá tối nay đặ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 truyền đến thói quen chuyển đổi đầu vào loại tổng tỷ lệ kèo bóng đá tối nay.
Thehàng
Cú pháp biểu thức cũng có thể được sử dụng để xây dựng các giá trị tổng tỷ lệ kèo bóng đá tối nay. Trong hầu hết các trường tỷ lệ kèo bóng đá tối nay, điều này đơn giản hơn đáng kể để sử dụng so với cú pháp theo yêu cầu chuỗi vì bạn không phải lo lắng về nhiều lớp trích dẫn.
hàng ('Dice mờ', 42, 1.99)
Từ khóa hàng thực sự là tùy chọn miễn là bạn có nhiều hơn một trường trong biểu thức, vì vậy chúng có thể được đơn giản hóa thành:
('42 |', 42, 1.99)
Thehàng
Biểu thức cú pháp được thảo luận chi tiết hơn trongPhần 4.2.13.
Để truy cập một trường của cột tổng tỷ lệ kèo bóng đá tối nay, người ta viết một dấu chấm và tên trường, giống như chọn một trường từ tên bảng. Trên thực tế, nó rất giống với việc chọn từ một tên bảng mà bạn thường phải sử dụng dấu ngoặc đơn để không làm nhầm lẫn trình phân tích cú pháp.on_hand
Bảng ví dụ với một cái gì đó như:
chọn item.name từ on_hand WHERE item.price 9,99;
Điều này sẽ không hoạt động vì tênMục
được coi là tên bảng, không phải tên cột củaon_hand
, theo quy tắc cú pháp SQL. Bạn phải viết nó như thế này:
Chọn (mục) .Name từ on_hand WHERE (Mục) .Price 9,99;
Hoặc nếu bạn cũng cần sử dụng tên bảng (ví dụ như trong một truy vấn đa thể), như thế này:
Chọn (on_hand.item) .Name từ on_hand ở đâu (on_hand.item).
Bây giờ đối tượng được giải thích chính xác là tham chiếu đếnMục
Cột, và sau đó trường con có thể được chọn từ nó.
Các vấn đề cú pháp tương tự được áp dụng bất cứ khi nào bạn chọn một trường từ giá trị tổng tỷ lệ kèo bóng đá tối nay. Chẳng hạn, để chọn chỉ một trường từ kết quả của hàm trả về giá trị tổng tỷ lệ kèo bóng đá tối nay, bạn cần phải viết một cái gì đó như:
Chọn (my_func (...)). Trường từ ...
Không có dấu ngoặc đơn, điều này sẽ tạo ra lỗi cú pháp.
Tên trường đặc biệt*
có nghĩa làHồiTất cả tỷ lệ kèo bóng đá tối nay trườngHồi, như được giải thích thêm trongPhần 8.16.5.
Dưới đây là một số ví dụ về cú pháp thích tỷ lệ kèo bóng đá tối nay để chèn và cập nhật các cột tổng tỷ lệ kèo bóng đá tối nay. Đầu tiên, chèn hoặc cập nhật toàn bộ cột:
Chèn vào tỷ lệ kèo bóng đá tối nay giá trị MyTab (Complex_col) ((1.1,2.2));
Ví dụ đầu tiên bỏ quahàng
, lần thứ hai sử dụng nó; chúng ta có thể đã làm điều đó theo bất kỳ cách nào.
Chúng ta có thể cập nhật một trường con riêng lẻ của cột tổng tỷ lệ kèo bóng đá tối nay:
Cập nhật MyTab Set Complex_col.r = (Complex_col) .R + 1 trong đó ...;
Lưu ý ở đây rằng chúng ta không cần (và thực sự không thể) đặt dấu ngoặc đơn xung quanh tên cột xuất hiện ngay sauset
, nhưng chúng ta cần dấu ngoặc đơn khi tham chiếu cùng một cột trong biểu thức ở bên phải của dấu bằng.
Và chúng ta có thể chỉ định tỷ lệ kèo bóng đá tối nay trường con là mục tiêu choChèn
, quá:
Chèn vào tỷ lệ kèo bóng đá tối nay giá trị MyTab (Complex_col.r, Complex_col.i) (1.1, 2.2);
Nếu chúng tôi không cung cấp tỷ lệ kèo bóng đá tối nay giá trị cho tất cả tỷ lệ kèo bóng đá tối nay trường con của cột, tỷ lệ kèo bóng đá tối nay trường con còn lại sẽ được lấp đầy bằng tỷ lệ kèo bóng đá tối nay giá trị null.
Có nhiều quy tắc và hành vi cú pháp đặc biệt khác nhau liên quan đến các loại tổng tỷ lệ kèo bóng đá tối nay trong truy vấn. Các quy tắc này cung cấp các phím tắt hữu ích, nhưng có thể gây nhầm lẫn nếu bạn không biết logic đằng sau chúng.
inPostgreSQL, Tham chiếu đến tên bảng (hoặc bí danh) trong truy vấn thực sự là một tham chiếu đến giá trị tổng tỷ lệ kèo bóng đá tối nay của hàng hiện tại của bảng. Ví dụ: nếu chúng ta có một bảngInventory_Item
như được hiển thịở trên, chúng ta có thể viết:
Chọn C từ Incentory_Item C;
Truy vấn này tạo ra một cột có giá trị tổng tỷ lệ kèo bóng đá tối nay duy nhất, vì vậy chúng tôi có thể nhận được đầu ra như:
c
Tuy nhiên, lưu ý rằng tỷ lệ kèo bóng đá tối nay tên đơn giản được khớp với tên cột trước tên bảng, vì vậy ví dụ này chỉ hoạt động vì không có cột có tênC
Trong bảng của truy vấn.
Cú pháp tên cột đủ điều kiện thông thườngTable_Name
.
Cột_name
có thể được hiểu là áp dụngLựa chọn trườngvới giá trị tổng tỷ lệ kèo bóng đá tối nay của hàng hiện tại của bảng. (Vì lý do hiệu quả, nó không thực sự được thực hiện theo cách đó.)
Khi chúng ta viết
Chọn C.* Từ Inventory_Item C;
Sau đó, theo tiêu chuẩn SQL, chúng ta nên lấy nội dung của bảng được mở rộng thành tỷ lệ kèo bóng đá tối nay cột riêng biệt:
Tên | Nhà cung cấp_id |
như thể truy vấn là
22360_22424
PostgreSQLSẽ áp dụng hành vi mở rộng này cho bất kỳ biểu thức có giá trị tổng tỷ lệ kèo bóng đá tối nay nào, mặc dù như được hiển thịở trên, bạn cần viết dấu ngoặc đơn xung quanh giá trị.*
được áp dụng cho bất cứ khi nào nó không phải là một tên bảng đơn giản. Ví dụ: nếumyfunc ()
là một hàm trả về loại tổng tỷ lệ kèo bóng đá tối nay với các cộtA
, B
vàC
, thì hai truy vấn này có cùng kết quả:
Chọn (myfunc (x)).* Từ một số_table;
PostgreSQLXử lý mở rộng cột bằng cách thực sự chuyển đổi biểu mẫu thứ nhất thành mẫu thứ hai. Vì vậy, trong ví dụ này,myfunc ()
Sẽ được gọi ba lần mỗi hàng với một trong hai cú pháp. Nếu đó là một chức năng đắt tiền, bạn có thể muốn tránh điều đó, điều mà bạn có thể làm với một truy vấn như:
Chọn m.
Đặt chức năng trong Abên
từ
Mục giữ cho nó không được gọi nhiều hơn một lần mỗi hàng.m.*
vẫn được mở rộng thànhM.A, M.B, M.C
, nhưng bây giờ tỷ lệ kèo bóng đá tối nay biến đó chỉ là tỷ lệ kèo bóng đá tối nay tham chiếu đến đầu ra củatừ
Mục. (Thebên
Từ khóa là tùy chọn ở đây, nhưng chúng tôi hiển thị để làm rõ rằng chức năng đang nhận đượcx
từsomer_table
.)
Thecomposite_value
.*
Kết quả cú pháp trong việc mở rộng cột của loại này khi nó xuất hiện ở cấp cao nhất của AChọn
24628_24642, ATrở về
Danh sáchinChèn
/Cập nhật
/Xóa
, AGiá trị
mệnh đềhoặc ATrình xây dựng hàng. Trong tất cả tỷ lệ kèo bóng đá tối nay bối cảnh khác (bao gồm cả khi được lồng bên trong một trong tỷ lệ kèo bóng đá tối nay cấu trúc đó), đính kèm.*
thành giá trị tổng tỷ lệ kèo bóng đá tối nay không thay đổi giá trị, vì nó có nghĩa làHồiTất cả tỷ lệ kèo bóng đá tối nay cộtHồiVà do đó, giá trị tổng tỷ lệ kèo bóng đá tối nay tương tự được tạo lại. Ví dụ: nếuSomerfunc ()
Chấp nhận đối số có giá trị tổng tỷ lệ kèo bóng đá tối nay, các truy vấn này giống nhau:
Chọn một sốFunc (c.*) Từ incent_item c;
Trong cả hai trường tỷ lệ kèo bóng đá tối nay, hàng hiện tại củaInventory_Item
được chuyển đến hàm như một đối số có giá trị tổng tỷ lệ kèo bóng đá tối nay duy nhất. Mặc dù.*
Không làm gì trong các trường tỷ lệ kèo bóng đá tối nay như vậy, sử dụng nó là kiểu tốt, vì nó cho thấy rõ rằng giá trị tổng tỷ lệ kèo bóng đá tối nay được dự định. Cụ thể, trình phân tích cú pháp sẽ xem xétC
inc.*
để chỉ tên bảng hoặc bí danh, không phải tên cột, do đó không có sự mơ hồ; vì không có.*
, không rõ liệu liệuC
Có nghĩa là tên bảng hoặc tên cột và trên thực tế, việc diễn giải tên cột sẽ được ưu tiên nếu có một cột có tênC
.
Một ví dụ khác chứng minh tỷ lệ kèo bóng đá tối nay khái niệm này là tất cả tỷ lệ kèo bóng đá tối nay truy vấn này có ý nghĩa tương tự:
Chọn * từ Inventory_Item C Order của C;
Tất cả những điều nàyĐặt hàng bởi
Các điều khoản chỉ định giá trị tổng tỷ lệ kèo bóng đá tối nay của hàng, dẫn đến việc sắp xếp các hàng theo các quy tắc được mô tả trongPhần 9.23.6. Tuy nhiên, nếuincent_item
chứa một cột có tênC
, trường tỷ lệ kèo bóng đá tối nay đầu tiên sẽ khác với các trường tỷ lệ kèo bóng đá tối nay khác, vì nó chỉ có nghĩa là sắp xếp theo cột đó. Cho các tên cột được hiển thị trước đó, các truy vấn này cũng tương đương với các truy vấn trên:
27422_27576
(Trường tỷ lệ kèo bóng đá tối nay cuối cùng sử dụng hàm tạo hàng với từ khóahàng
bị bỏ qua.)
Một hành vi cú pháp đặc biệt khác được liên kết với các giá trị tổng tỷ lệ kèo bóng đá tối nay là chúng ta có thể sử dụngKý hiệu chức năngĐể trích xuất một trường có giá trị tổng tỷ lệ kèo bóng đá tối nay. Cách đơn giản để giải thích điều này là các ký hiệu
vàtrường
(Bảng
)
có thể hoán đổi cho nhau. Ví dụ: tỷ lệ kèo bóng đá tối nay truy vấn này tương đương:Bảng
.trường
Chọn C.Name từ Inventory_Item C trong đó c.price 1000;
Hơn nữa, nếu chúng ta có một hàm chấp nhận một đối số duy nhất của một loại tổng tỷ lệ kèo bóng đá tối nay, chúng ta có thể gọi nó với một trong hai ký hiệu. Các truy vấn này đều tương đương:
28617_28747
Tương đương này giữa ký hiệu chức năng và ký hiệu trường cho phép sử dụng các chức năng trên các loại tổng tỷ lệ kèo bóng đá tối nay để thực hiệnTrường được tính toánHồi. Một ứng dụng sử dụng truy vấn cuối cùng ở trên sẽ không cần phải biết trực tiếp rằngSOMEFUNC
không phải là một cột thực của bảng.
Vì hành vi này, không khôn ngoan khi đưa ra một hàm có một đối số loại tổng tỷ lệ kèo bóng đá tối nay duy nhất tên giống như bất kỳ trường nào thuộc loại tổng tỷ lệ kèo bóng đá tối nay đó. Nếu có sự mơ hồ, việc giải thích tên trường sẽ được chọn nếu cú pháp tên trường được sử dụng, trong khi hàm sẽ được chọn nếu sử dụng cú pháp gọi chức năng.PostgreSQLPhiên bản trước 11 luôn chọn cách giải thích tên trường, trừ khi cú pháp của cuộc gọi yêu cầu nó là một cuộc gọi chức năng. Một cách để buộc giải thích chức năng trong tỷ lệ kèo bóng đá tối nay phiên bản cũ hơn là trình độ Schema đủ điều kiện, nghĩa là viết
.lược đồ
.func
(compositeValue
)
Biểu diễn văn bản bên ngoài của giá trị tổng tỷ lệ kèo bóng đá tối nay bao gồm các mục được giải thích theo các quy tắc chuyển đổi I/O cho các loại trường riêng lẻ, cộng với trang trí cho biết cấu trúc tổng tỷ lệ kèo bóng đá tối nay. Trang trí bao gồm dấu ngoặc đơn ((
và)
) xung quanh toàn bộ giá trị, cộng với dấu phẩy (,
) giữa tỷ lệ kèo bóng đá tối nay mục liền kề. Khoảng trắng bên ngoài dấu ngoặc đơn bị bỏ qua, nhưng trong tỷ lệ kèo bóng đá tối nay dấu ngoặc đơn, nó được coi là một phần của giá trị trường và có thể hoặc không đáng kể tùy thuộc vào quy tắc chuyển đổi đầu vào cho loại dữ liệu trường.
'(42)'
khoảng trắng sẽ bị bỏ qua nếu loại trường là số nguyên, nhưng không phải nếu đó là văn bản.
Như được hiển thị trước đây, khi viết một giá trị tổng tỷ lệ kèo bóng đá tối nay, bạn có thể viết trích dẫn kép xung quanh bất kỳ giá trị trường riêng lẻ nào. BạnphảiLàm như vậy nếu giá trị trường sẽ gây nhầm lẫn cho trình phân tích cú pháp giá trị tổng tỷ lệ kèo bóng đá tối nay. Cụ thể, các trường chứa dấu ngoặc đơn, dấu phẩy, dấu ngoặc kép hoặc dấu gạch chéo ngược phải được trích dẫn kép.
Một giá trị trường hoàn toàn trống (không có ký tự nào giữa dấu phẩy hoặc dấu ngoặc đơn) đại diện cho một null. Để viết một giá trị là một chuỗi trống chứ không phải null, hãy viết""
.
Thói quen đầu ra tổng tỷ lệ kèo bóng đá tối nay sẽ đặt dấu ngoặc kép xung quanh các giá trị trường nếu chúng là các chuỗi trống hoặc chứa dấu ngoặc đơn, dấu phẩy, dấu ngoặc kép, dấu gạch chéo ngược hoặc không gian trắng. .
Hãy nhớ rằng những gì bạn viết trong lệnh SQL trước tiên sẽ được hiểu là một chuỗi theo nghĩa đen, và sau đó là một tổng tỷ lệ kèo bóng đá tối nay. Điều này nhân đôi số lượng dấu trùng sinh bạn cần (giả sử cú pháp chuỗi thoát được sử dụng).Text
Trường chứa báo giá kép và dấu gạch chéo ngược với giá trị tổng tỷ lệ kèo bóng đá tối nay, bạn cần phải viết:
Chèn ... Giá trị ('("\" \ ")');
33035_33162("\" \ ")
. Lần lượt, chuỗi được đưa vàoText
Thói quen đầu vào của loại dữ liệu trở thành"\
. .bytea
Ví dụ: chúng ta có thể cần có tới tám dấu gạch chéo ngược trong lệnh để đưa một dấu gạch chéo ngược vào trường tổng tỷ lệ kèo bóng đá tối nay được lưu trữ.)Phần 4.1.2.4) có thể được sử dụng để tránh sự cần thiết phải tăng gấp đôi dấu gạch chéo ngược.
Thehàng
Cú pháp Constructor thường dễ hoạt động hơn so với cú pháp theo nghĩa tổng tỷ lệ kèo bóng đá tối nay khi viết các giá trị tổng tỷ lệ kèo bóng đá tối nay trong các lệnh SQL. TRONGhàng
, Các giá trị trường 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 tổng tỷ lệ kèo bóng đá tối nay.