Phiên bản được hỗ trợ:hiện tại(173618_374916 / 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 kèo bóng đá c1 phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

Chương 2. kèo bóng đá c1

Akèo bóng đá c1là quá trình kèo bóng đá c1 xuất hoặc lệnh để lấy dữ liệu từ cơ sở dữ liệu. Trong sql theChọnLệnh được sử dụng để chỉ định các kèo bóng đá c1. Cú pháp chung củaChọnlệnh là

Chọnselect_listtừTable_Expression[Sort_Specification]
Các phần sau đây mô tả các chi tiết của Chọn Liệt kê, biểu thức bảng và đặc điểm kỹ thuật sắp xếp. Các loại kèo bóng đá c1 đơn giản nhất có biểu mẫu
Chọn * từ Bảng1;
Giả sử rằng có một bảng gọi là Bảng1, lệnh này sẽ lấy tất cả các hàng và tất cả các cột từ Bảng1. (Phương pháp của kèo bóng đá c1 xuất phụ thuộc vào ứng dụng khách. Ví dụ:PSQLChương trình sẽ hiển thị Bảng ascii-art trên màn hình, thư viện máy khách sẽ cung cấp các chức năng để kèo bóng đá c1 xuất các hàng và cột riêng lẻ.) Danh sách chọn Đặc điểm kỹ thuật*có nghĩa là tất cả kèo bóng đá c1 cột mà Biểu thức bảng xảy ra để cung cấp. Danh sách chọn cũng có thể chọn một tập hợp con của kèo bóng đá c1 cột có sẵn hoặc thậm chí thực hiện kèo bóng đá c1 tính toán trên cột trước khi lấy chúng; nhìn thấyPhần 2.2. Ví dụ: nếu Bảng1 có các cột được đặt tên là A, B và C (và có lẽ các cột khác) bạn có thể tạo kèo bóng đá c1 sau:
Chọn A, B + C từ Bảng1;
(Giả sử B và C thuộc loại dữ liệu số).

Từ Bảng1là một điều đặc biệt đơn giản loại biểu thức bảng. Nói chung, các biểu thức bảng có thể Các cấu trúc phức tạp của các bảng cơ sở, tham gia và kèo bóng đá c1 con. Nhưng bạn Cũng có thể bỏ qua hoàn toàn biểu thức bảng và sử dụng chọn lệnh như một máy tính:

Chọn 3 * 4;
Điều này hữu ích hơn nếu kèo bóng đá c1 biểu thức trong danh sách chọn trả về kết quả khác nhau. Ví dụ: bạn có thể gọi một chức năng này đường.
Chọn ngẫu nhiên ();

2.1. Biểu thức kèo bóng đá c1

ABiểu thức kèo bóng đá c1Chỉ định a bàn. Biểu thức bảng chứa một mệnh đề từ đó là Tùy chọn theo sau là nơi, nhóm theo và có mệnh đề. Biểu thức bảng tầm thường chỉ cần tham khảo một bảng trên đĩa, một Cái gọi là bảng cơ sở, nhưng có thể sử dụng kèo bóng đá c1 biểu thức phức tạp hơn Để sửa đổi hoặc kết hợp kèo bóng đá c1 bảng cơ sở theo nhiều cách khác nhau.

tùy chọn ở đâu, nhóm theo và có kèo bóng đá c1 mệnh đề trong Biểu thức bảng chỉ định một đường ống liên tiếp kèo bóng đá c1 phép biến đổi được thực hiện trên bảng có nguồn gốc từ mệnh đề. Bảng dẫn xuất được sản xuất bởi tất cả những thứ này kèo bóng đá c1 biến đổi cung cấp kèo bóng đá c1 hàng đầu vào được sử dụng để tính toán đầu ra kèo bóng đá c1 hàng theo chỉ định bởi danh sách chọn giá trị cột biểu thức.

2.1.1. Từ mệnh đề

Điều khoản từ mệnh đề xuất phát từ một bảng từ một hoặc nhiều người khác kèo bóng đá c1 bảng được đưa ra trong danh sách tham chiếu bảng được phân tách bằng dấu phẩy.

từTable_Reference[, Table_Reference[, ...]]
14659_15061

15062_15463

2.1.1.1. kèo bóng đá c1 tham gia

Bảng được nối là một bảng có nguồn gốc từ hai hoặc có nguồn gốc) kèo bóng đá c1 bảng theo kèo bóng đá c1 quy tắc của tham gia loại. Bên trong, bên ngoài và tham gia chéo được hỗ trợ.

tham gia kèo bóng đá c1 loại

tham gia chéo
T1tham gia chéoT2

Đối với mỗi kết hợp kèo bóng đá c1 hàng từT1T2, Bảng dẫn xuất sẽ chứa một hàng bao gồm tất cả kèo bóng đá c1 cột trongT1theo sau là tất cả kèo bóng đá c1 cột trongT2. Nếu kèo bóng đá c1 bảng có kèo bóng đá c1 hàng n và m tương ứng, bảng tham gia sẽ có hàng n * m. A cross join is equivalent to anbên trong tham gia trên True.

Tip: từT1tham gia chéoT2IS tương đương vớitừT1, T2.

Tham gia đủ điều kiện
T1[bên trong] | Trái | Đúng | ĐẦY  [17365_17372] Tham giaT2trênboolean_expression
T1[bên trong] | Trái | Đúng | ĐẦY  [Buter] Tham giaT2Sử dụng (Tham gia danh sách cột)T1tự nhiên [bên trong] | Trái | Đúng | ĐẦY  [Buter] Tham giaT2

kèo bóng đá c1 từbên trongButerlà tùy chọn cho tất cả Tham gia.bên tronglà mặc định;trái, phảiFullngụ ý tham gia bên ngoài.

TheĐiều kiện tham giaIS được chỉ định trong hoặc sử dụng mệnh đề, hoặc ngầm Từ tự nhiên. Điều kiện tham gia xác định cái nào Hàng từ hai kèo bóng đá c1 nguồn được coi là"Match", như được giải thích trong chi tiết bên dưới.

Điều khoản trên là loại tham gia chung nhất Điều kiện: Nó có một biểu thức giá trị boolean của Loại giống như được sử dụng trong một mệnh đề WHERE. Một cặp Hàng từ T1 và T2 khớp nếu biểu thức BẬT đánh giá đúng với họ.

Sử dụng là ký hiệu tốc ký: Nó có một danh sách kèo bóng đá c1 tên cột được phân tách bằng dấu phẩy, mà kèo bóng đá c1 bảng tham gia phải có điểm chung và tạo thành một tham gia Điều kiện chỉ định bình đẳng của từng cặp này của kèo bóng đá c1 cột. Hơn nữa, đầu ra của một sự tham gia bằng cách sử dụng có một cột cho mỗi cặp đầu vào tương đương kèo bóng đá c1 cột, theo sau là tất cả kèo bóng đá c1 cột khác từ mỗi bảng. Do đó,Sử dụng (A, B, c)is equivalent toON (T1.A = t2.a và t1.b = t2.b và t1.c = t2.c)với ngoại lệ rằng nếu trên được sử dụng, sẽ có hai kết quả là kèo bóng đá c1 cột A, B và C sẽ chỉ có một trong số.

19812_20080

kèo bóng đá c1 loại tham gia đủ điều kiện có thể là:

Tham gia bên trong

Đối với mỗi hàng r1 của T1, kèo bóng đá c1 được nối có một hàng cho mỗi hàng trong T2 thỏa mãn Tham gia điều kiện với R1.

Tham gia bên ngoài bên trái

20566_20928

Tham gia bên ngoài bên phải

Đầu tiên, tham gia bên trong được thực hiện. Sau đó, cho mỗi hàng trong t2 không thỏa mãn sự tham gia Điều kiện với bất kỳ hàng nào trong T1, một hàng được nối là được trả về với kèo bóng đá c1 giá trị null trong kèo bóng đá c1 cột của T1. Đây là điều ngược lại của một tham gia bên trái: kết quả bảng sẽ không có điều kiện có một hàng cho mỗi hàng trong t2.

Tham gia đầy đủ bên ngoài

Đầu tiên, tham gia bên trong được thực hiện. Sau đó, cho mỗi hàng trong T1 không thỏa mãn sự tham gia Điều kiện với bất kỳ hàng nào trong T2, một hàng được nối là được trả về với kèo bóng đá c1 giá trị null trong kèo bóng đá c1 cột của T2. Ngoài ra, đối với mỗi hàng của T2 không thỏa mãn Điều kiện tham gia với bất kỳ hàng nào trong T1, một hàng với kèo bóng đá c1 giá trị null trong kèo bóng đá c1 cột của T1 là đã trả về.

Tham gia tất cả kèo bóng đá c1 loại có thể được xích lại với nhau hoặc lồng nhau: Hoặc hoặc cả haiT1T2có thể được tham gia bảng. Dấu ngoặc đơn có thể được sử dụng xung quanh kèo bóng đá c1 mệnh đề tham gia để kiểm soát Tham gia đặt hàng. Trong trường hợp không có dấu ngoặc đơn, hãy tham gia kèo bóng đá c1 điều khoản tổ từ trái sang phải.

2.1.1.2. Squeries

Subqueries Chỉ định kèo bóng đá c1 dẫn xuất phải được đặt trong ngoặc đơn vàphảiĐược đặt tên Sử dụng một mệnh đề AS. (Nhìn thấyPhần 2.1.1.3.)

Từ (chọn * từ Bảng1) dưới dạng bí danh_name

Ví dụ này tương đương vớiTừ Bảng1 dưới dạng bí danh_name. Những trường hợp thú vị hơn, mà không thể giảm xuống thành một sự tham gia đơn giản, phát sinh khi trình điều khiển con liên quan đến nhóm hoặc tập hợp.

2.1.1.3. kèo bóng đá c1 và cột Bí danh

23460_23634Bí danh kèo bóng đá c1.

từTable_ReferenceASbí danh
ở đây,bí danhcó thể là bất kỳ định danh thường xuyên. Bí danh trở thành tên mới của bảng tham chiếu cho kèo bóng đá c1 hiện tại - không còn có thể Tham khảo bảng theo tên ban đầu. Do đó
Chọn * từ my_table dưới dạng m trong đó my_table.a 5;
không phải là cú pháp SQL hợp lệ. Điều gì sẽ thực sự xảy ra (đây là mộtPostgresPhần mở rộng cho tiêu chuẩn) là một tham chiếu bảng ngầm được thêm vào từ mệnh đề, vì vậy kèo bóng đá c1 được xử lý như thể nó được viết là
Chọn * từ my_table dưới dạng m, my_table dưới dạng my_table trong đó my_table.a 5;
Bí danh kèo bóng đá c1 chủ yếu là để thuận tiện cho chứng minh, nhưng nó là cần thiết để sử dụng chúng khi tham gia một kèo bóng đá c1 vào chính nó, ví dụ:
Chọn * từ my_table dưới dạng chéo tham gia my_table dưới dạng b ...
Ngoài ra, cần có bí danh nếu tham chiếu bảng là một kèo bóng đá c1 con.

ngoặc đơn được sử dụng để giải quyết sự mơ hồ. kèo bóng đá c1 câu lệnh sau sẽ gán bí danhBđến kết quả của sự tham gia, không giống như Ví dụ trước:

Chọn * Từ (my_table dưới dạng chéo tham gia my_table) là b ...
từTable_Reference bí danh
Mẫu này tương đương với mẫu được xử lý trước đó; TheASTừ khóa là tiếng ồn.
từTable_Reference[AS]bí danh(Cột1[, Cột2[, ...]])
Ở dạng này, ngoài việc đổi tên bảng như mô tả ở trên, các cột của bảng cũng được đặt tên tạm thời cho Sử dụng bởi các kèo bóng đá c1 xung quanh. Nếu ít bí danh cột hơn được chỉ định hơn bảng thực tế có các cột, các cột còn lại không Đổi tên. Cú pháp này đặc biệt hữu ích cho tự tham gia hoặc Các nhóm con.

Khi một bí danh được áp dụng cho đầu ra của mệnh đề tham gia, Sử dụng bất kỳ hình thức nào trong số này, bí danh ẩn bản gốc tên trong tham gia. Ví dụ,

Chọn a.* Từ my_table dưới dạng tham gia your_table as b trên ...
là SQL hợp lệ, nhưng
Chọn a.* Từ (my_table dưới dạng tham gia your_table as b trên ...) như c
Không hợp lệ: Bí danh kèo bóng đá c1 A không hiển thị bên ngoài Bí danh C.

2.1.1.4. Ví dụ

Từ T1 bên trong tham gia T2 bằng cách sử dụng (c)
Từ T1 bên ngoài bên ngoài Tham gia T2 bằng cách sử dụng (C)
Từ (T1 bên ngoài cùng bên ngoài T2 trên (T1C1 = T2C1)) là DT1
Từ (T1 Full Outer Tham gia T2 bằng cách sử dụng (C)) như DT1 (DT1C1, DT1C2)

Từ T1 tự nhiên, tham gia T2
Từ T1 tự nhiên bên trái tham gia T2
Từ T1 tự nhiên bên ngoài tham gia T2
Từ T1 tự nhiên đầy đủ, tham gia T2

Từ (chọn * từ T1) DT1 Cross tham gia T2, T3
Từ (chọn * từ t1) dt1, t2, t3
ở trên là một số ví dụ về kèo bóng đá c1 bảng được nối và có nguồn gốc phức tạp bàn. Lưu ý cách mệnh đề AS được đổi tên hoặc đặt tên cho một bảng dẫn xuất and how the optional comma-separated list of column names that Theo sau đổi tên kèo bóng đá c1 cột. Hai người cuối cùng từ kèo bóng đá c1 mệnh đề sản xuất Cùng một bảng có nguồn gốc từ T1, T2 và T3. Từ khóa AS đã bị bỏ qua trong việc đặt tên cho kèo bóng đá c1 công cụ con là DT1. kèo bóng đá c1 từ khóa bên ngoài và bên trong là tiếng ồn cũng có thể bị bỏ qua.

2.1.2. Đơn vị ở đâu

Cú pháp của mệnh đề WHERE is

WHEREsearch_condition
WHEREsearch_conditionlà bất kỳ Biểu thức giá trị như được định nghĩa trongPhần 1.3Trả về giá trị của loạiBoolean.

28068_28560

Lưu ý:Trước khi thực hiện tham gia cú pháp, cần phải đặt điều kiện tham gia của một bên trong tham gia vào mệnh đề WHERE. Ví dụ, những kèo bóng đá c1 này Biểu thức tương đương:

Từ a, b trong đó a.id = b.id và B.Val 5
Từ một bên trong tham gia b trên (a.id = b.id) trong đó B.Val 5
hoặc thậm chí
Từ một tự nhiên tham gia b trong đó B.Val 5
29160_29421khôngTương đương với điều kiện ở nơi, bởi vì nó xác định việc bổ sung kèo bóng đá c1 hàng (cho đầu vào chưa từng có Hàng) cũng như loại bỏ kèo bóng đá c1 hàng khỏi kết quả cuối cùng.
Từ FDT ở đâu
    C1 5

Từ FDT ở đâu
    C1 in (1, 2, 3)
Từ FDT ở đâu
    C1 in (chọn C1 từ T2)
Từ FDT ở đâu
    C1 in (Chọn C3 từ T2 trong đó C2 = FDT.C1 + 10)

Từ FDT ở đâu
    C1 giữa (chọn C3 từ T2 trong đó C2 = FDT.C1 + 10) và 100

Từ FDT ở đâu
    Tồn tại (chọn C1 từ T2 trong đó C2 fdt.c1)

Trong các ví dụ trên, FDT là bảng có nguồn gốc từ Từ mệnh đề. Hàng không đáp ứng điều kiện tìm kiếm của mệnh đề WHERE được loại bỏ khỏi FDT. Để ý việc sử dụng Quadmar Subqueries là biểu thức giá trị. Cũng giống như bất kỳ ai khác kèo bóng đá c1, các nhóm con có thể sử dụng các biểu thức bảng phức tạp. Lưu ý cách FDT được tham chiếu trong các nghiên cứu phụ. Đủ điều kiện C1 Vì fdt.c1 chỉ cần thiết nếu C1 cũng là tên của một Cột trong bảng đầu vào dẫn xuất của trình điều khiển con. Đủ điều kiện Tên cột thêm rõ ràng ngay cả khi không cần thiết. Cái này cho thấy phạm vi đặt tên cột của một kèo bóng đá c1 bên ngoài mở rộng vào các kèo bóng đá c1 bên trong của nó.

2.1.3. Nhóm bằng cách có mệnh đề

Sau khi chuyển bộ lọc ở đâu, bảng đầu vào dẫn xuất có thể phải theo nhóm, sử dụng nhóm theo mệnh đề và Loại bỏ kèo bóng đá c1 hàng nhóm bằng mệnh đề có.

Chọnselect_listtừ ... [Trong đó ...] Nhóm bởiNhóm_Column_Reference[, Nhóm_Column_Reference] ...

Nhóm theo mệnh đề được sử dụng để nhóm lại kèo bóng đá c1 hàng trong a Bảng chia sẻ kèo bóng đá c1 giá trị giống nhau trong tất cả kèo bóng đá c1 cột được liệt kê. Thứ tự kèo bóng đá c1 cột được liệt kê không quan trọng (như trái ngược với mệnh đề theo mệnh đề). Mục đích là để giảm mỗi Nhóm kèo bóng đá c1 hàng chia sẻ kèo bóng đá c1 giá trị chung thành một hàng nhóm là đại diện của tất cả kèo bóng đá c1 hàng trong nhóm. Điều này được thực hiện để Loại bỏ sự dư thừa trong đầu ra và/hoặc thu được kèo bóng đá c1 tập hợp áp dụng cho kèo bóng đá c1 nhóm này.

Một khi bảng được nhóm lại, kèo bóng đá c1 cột không được sử dụng trong Nhóm không thể được tham chiếu ngoại trừ trong tổng hợp biểu thức, vì một giá trị cụ thể trong kèo bóng đá c1 cột đó là mơ hồ - hàng nào trong nhóm nên đến từ? kèo bóng đá c1 kèo bóng đá c1 cột được nhóm có thể được tham chiếu trong cột Danh sách chọn Biểu thức vì chúng có giá trị không đổi được biết đến trên mỗi nhóm. kèo bóng đá c1 chức năng tổng hợp trên kèo bóng đá c1 cột chưa được nhóm cung cấp kèo bóng đá c1 giá trị Điều đó trải dài trên kèo bóng đá c1 hàng của một nhóm, không phải của toàn bộ bảng. Vì ví dụ, aSum (bán hàng)32428_32708

Ví dụ:

Chọn pid, p.name, (sum (s.units) * p.price) làm bán hàng
  Từ kèo bóng đá c1 sản phẩm p tham gia bán hàng S Sales S sử dụng (PID)
  Nhóm bởi PID, P.Name, P.Price;
32912_33167sum ()), đại diện cho nhóm bán hàng của một sản phẩm. Đối với mỗi sản phẩm, một hàng tóm tắt là đã trả lại về tất cả doanh số của sản phẩm.

33347_33622

Chọnselect_listTừ ... [trong đó ...] Nhóm bởi ... cóBoolean_Expression
Nếu một bảng được nhóm bằng mệnh đề theo nhóm, nhưng sau đó Chỉ một số nhóm nhất định được quan tâm, điều khoản có mới có thể được sử dụng, Giống như một điều khoản ở đâu, để loại bỏ kèo bóng đá c1 nhóm khỏi một bảng được nhóm. Postgres cho phép một mệnh đề có mệnh đề được sử dụng mà không cần một nhóm, trong trường hợp nào nó hoạt động như một điều khoản khác, nhưng điểm trong Sử dụng có cách đó không rõ ràng. Một quy tắc tốt là một Có điều kiện nên đề cập đến kết quả tổng hợp chức năng. Một hạn chế không liên quan đến tổng hợp là nhiều hơn được thể hiện một cách hiệu quả trong mệnh đề WHERE.

Ví dụ:

Chọn PID làm "Sản phẩm",
       p.name là "trên 5000",
       (sum (s.units) * (p.price - p.cost)) là "lợi nhuận tháng trước"
  Từ kèo bóng đá c1 sản phẩm p tham gia bán hàng S Sales S sử dụng (PID)
  Trong đó s.date current_date - khoảng '4 tuần'
  Nhóm bởi Pid, ​​P.Name, P.Price, P.Cost
    Có tổng (p.price * s.units) 5000;
Trong ví dụ trên, mệnh đề nơi được chọn hàng cột không được nhóm, trong khi mệnh đề có đầu ra cho kèo bóng đá c1 nhóm có tổng doanh thu trên 5000.