kèo bóng đá cúp c2
kèo bóng đá cúp c2 (biểu thức bảng chung)kèo bóng đá cúp c2
Cung cấp một cách để viết các câu lệnh phụ trợ để sử dụng trong một kèo bóng đá cúp c2 lớn hơn. Những câu lệnh này, thường được gọi là biểu thức bảng phổ biến hoặcCTEs, có thể được coi là xác định các bảng tạm thời tồn tại chỉ cho một kèo bóng đá cúp c2. Mỗi câu lệnh phụ trợ trong mộtkèo bóng đá cúp c2
mệnh đề có thể là mộtChọn
, Chèn
, Cập nhật
hoặcXóa
; vàkèo bóng đá cúp c2
mệnh đề được gắn vào một câu lệnh chính cũng có thể là mộtChọn
, Chèn
, Cập nhật
hoặcXóa
.
Chọn
inkèo bóng đá cúp c2
Giá trị cơ bản củaChọn
inkèo bóng đá cúp c2
là chia nhỏ các kèo bóng đá cúp c2 phức tạp thành các phần đơn giản hơn. Một ví dụ là:
kèo bóng đá cúp c2 khu vực_sales AS (
Hiển thị tổng doanh số trên mỗi sản phẩm chỉ trong các khu vực bán hàng hàng đầu. Thekèo bóng đá cúp c2
mệnh đề xác định hai câu lệnh phụ trợ có tênkhu vực_sales
vàTop_Regions
, trong đó đầu ra củakhu vực_sales
được sử dụng trongTop_Regions
và đầu ra củaTop_Regions
được sử dụng trong chínhChọn
kèo bóng đá cúp c2. Ví dụ này có thể đã được viết mà không cókèo bóng đá cúp c2
, nhưng chúng tôi đã cần hai cấp độ phụ-Chọn
s. Theo cách này dễ dàng hơn một chút.
Tùy chọnKiểu đệ quy
Thay đổi công cụ sửa đổikèo bóng đá cúp c2
Từ một sự thuận tiện của cú pháp thành một tính năng hoàn thành mọi thứ không thể có trong SQL tiêu chuẩn. Sử dụngKiểu đệ quy
, Akèo bóng đá cúp c2
kèo bóng đá cúp c2 có thể tham khảo đầu ra của chính nó. Một ví dụ rất đơn giản là kèo bóng đá cúp c2 này để tổng hợp các số nguyên từ 1 đến 100:
kèo bóng đá cúp c2 đệ quy t (n) là (
Hình thức chung của một đệ quykèo bóng đá cúp c2
kèo bóng đá cúp c2 luôn làThuật ngữ không nhận được, sau đóUnion
(hoặcLiên minh tất cả
), sau đó aThuật ngữ đệ quy, trong đó chỉ có thuật ngữ đệ quy mới có thể chứa một tham chiếu đến đầu ra của kèo bóng đá cúp c2. Một kèo bóng đá cúp c2 như vậy được thực thi như sau:
Đánh giá kèo bóng đá cúp c2 đệ quy
Đánh giá thuật ngữ không nhận được. VìUnion
(nhưng khôngLiên minh tất cả
), loại bỏ các hàng trùng lặp. Bao gồm tất cả các hàng còn lại trong kết quả của kèo bóng đá cúp c2 đệ quy và cũng đặt chúng vào tạm thờiBảng làm việc.
Miễn là bảng làm việc không trống, hãy lặp lại các bước sau:
Đánh giá thuật ngữ đệ quy, thay thế các nội dung hiện tại của bảng làm việc cho sự tự tham chiếu đệ quy. VìUnion
(nhưng khôngLiên minh tất cả
), loại bỏ các hàng và hàng trùng lặp sao chép bất kỳ hàng kết quả trước đó. Bao gồm tất cả các hàng còn lại trong kết quả của kèo bóng đá cúp c2 đệ quy và cũng đặt chúng vào tạm thờiBảng trung gian.
Thay thế nội dung của bảng làm việc bằng nội dung của bảng trung gian, sau đó xóa bảng trung gian.
trong khiđệ quy
Cho phép các kèo bóng đá cúp c2 được chỉ định đệ quy, bên trong các kèo bóng đá cúp c2 như vậy được đánh giá lặp đi lặp lại.
Trong ví dụ trên, bảng làm việc chỉ có một hàng duy nhất trong mỗi bước và nó có các giá trị từ 1 đến 100 trong các bước liên tiếp. Trong bước thứ 100, không có đầu ra vìWHERE
mệnh đề, và vì vậy kèo bóng đá cúp c2 chấm dứt.
kèo bóng đá cúp c2 đệ quy thường được sử dụng để xử lý dữ liệu phân cấp hoặc có cấu trúc cây. Một ví dụ hữu ích là kèo bóng đá cúp c2 này để tìm tất cả các phần phụ trực tiếp và gián tiếp của sản phẩm, chỉ được cung cấp một bảng hiển thị các vùi ngay lập tức:
kèo bóng đá cúp c2 đệ quy bao gồm_parts (sub_part, part, số lượng) là (
Khi làm việc với các kèo bóng đá cúp c2 đệ quy, điều quan trọng là phải chắc chắn rằng phần đệ quy của kèo bóng đá cúp c2 cuối cùng sẽ không trả lời được, nếu không thì kèo bóng đá cúp c2 sẽ lặp lại vô thời hạn. Đôi khi, sử dụngUnion
thay vìLiên minh tất cả
Có thể thực hiện điều này bằng cách loại bỏ các hàng trùng lặp các hàng đầu ra trước đó. Tuy nhiên, thường thì một chu kỳ không liên quan đến các hàng đầu ra hoàn toàn trùng lặp: có thể cần phải kiểm tra chỉ một hoặc một vài trường để xem liệu cùng một điểm đã đạt được trước đó.đồ thị
Sử dụng ALink
trường:
kèo bóng đá cúp c2 search_graph (id, liên kết, dữ liệu, độ sâu) là (
kèo bóng đá cúp c2 này sẽ lặp lại nếuLink
Mối quan hệ chứa chu kỳ. Bởi vì chúng tôi yêu cầuĐộ sâuđầu ra, chỉ thay đổiLiên minh tất cả
đếnUnion
sẽ không loại bỏ vòng lặp. Thay vào đó, chúng ta cần nhận ra liệu chúng ta có đạt được cùng một hàng một lần nữa trong khi đi theo một | Hàng (G.F1, G.F2), liên kết cụ thể hay không.Path
vàChu kỳ
đến kèo bóng đá cúp c2 dễ bị lặp lại:
kèo bóng đá cúp c2 search_graph (id, liên kết, dữ liệu, độ sâu, | g.id,, chu kỳ) là (
Ngoài các chu kỳ ngăn chặn, giá trị mảng thường hữu ích theo cách riêng của nó như là đại diện choPathHồiĐược thực hiện để đạt được bất kỳ hàng cụ thể nào.
Trong trường hợp chung trong đó cần kiểm tra nhiều hơn một trường để nhận ra một chu kỳ, hãy sử dụng một mảng hàng. Ví dụ: nếu chúng ta cần so sánh các trườngF1
vàF2
:
kèo bóng đá cúp c2 search_graph (id, liên kết, dữ liệu, độ sâu, | Hàng (G.F1, G.F2),, chu kỳ) là (
Bỏ quahàng ()
Cú pháp trong trường hợp phổ biến trong đó chỉ cần kiểm tra một trường để nhận ra một chu kỳ. Điều này cho phép một mảng đơn giản thay vì sử dụng mảng loại tổng hợp, đạt được hiệu quả.
Thuật toán đánh giá kèo bóng đá cúp c2 đệ quy tạo ra đầu ra của nó theo thứ tự tìm kiếm đầu tiên trên chiều rộng. Bạn có thể hiển thị kết quả theo thứ tự tìm kiếm đầu tiên bằng cách thực hiện kèo bóng đá cúp c2 bên ngoàiĐặt hàng bởi
AHồiđường dẫnxôngCột được xây dựng theo cách này.
Một thủ thuật hữu ích để kiểm tra các kèo bóng đá cúp c2 khi bạn không chắc chắn nếu chúng có thể lặp là đặt mộtGiới hạn
Trong kèo bóng đá cúp c2 cha mẹ. Ví dụ, kèo bóng đá cúp c2 này sẽ lặp lại mãi mãi mà không cầngiới hạn
:
kèo bóng đá cúp c2 đệ quy t (n) là (
Điều này hoạt động vìPostgreSQLS Thực hiện chỉ đánh giá bằng nhiều hàng của Akèo bóng đá cúp c2
kèo bóng đá cúp c2 như thực sự được tìm kiếm bởi kèo bóng đá cúp c2 cha mẹ. Sử dụng thủ thuật này trong sản xuất không được khuyến khích, bởi vì các hệ thống khác có thể hoạt động khác nhau.kèo bóng đá cúp c2
đầu ra của kèo bóng đá cúp c2.
Một thuộc tính hữu ích củakèo bóng đá cúp c2
kèo bóng đá cúp c2 là chúng thường chỉ được đánh giá một lần mỗi lần thực hiện kèo bóng đá cúp c2 cha mẹ, ngay cả khi chúng được nhắc đến nhiều lần bởi kèo bóng đá cúp c2 cha mẹ hoặc anh chị emkèo bóng đá cúp c2
kèo bóng đá cúp c2. Do đó, các tính toán đắt tiền cần thiết ở nhiều nơi có thể được đặt trong mộtkèo bóng đá cúp c2
kèo bóng đá cúp c2 để tránh công việc dự phòng. Một ứng dụng khả thi khác là ngăn chặn nhiều đánh giá không mong muốn về các chức năng với tác dụng phụ.kèo bóng đá cúp c2
kèo bóng đá cúp c2, vì điều đó có thể ảnh hưởng đến tất cả việc sử dụngkèo bóng đá cúp c2
đầu ra của kèo bóng đá cúp c2 khi nó chỉ ảnh hưởng đến một. Tham khảo nhânkèo bóng đá cúp c2
kèo bóng đá cúp c2 sẽ được đánh giá là viết, mà không cần triệt tiêu các hàng mà kèo bóng đá cúp c2 cha mẹ có thể loại bỏ sau đó. (Nhưng, như đã đề cập ở trên, đánh giá có thể dừng sớm nếu (các) tham chiếu đến yêu cầu kèo bóng đá cúp c2 chỉ có một số lượng hạn chế.)
Tuy nhiên, nếu Akèo bóng đá cúp c2
kèo bóng đá cúp c2 không được nhận và không có tác dụng phụ (nghĩa là, đó là mộtChọn
Không chứa các chức năng dễ bay hơi) sau đó nó có thể được gấp lại vào kèo bóng đá cúp c2 của cha mẹ, cho phép tối ưu hóa khớp hai mức kèo bóng đá cúp c2. Theo mặc định, điều này xảy ra nếu kèo bóng đá cúp c2 cha mẹ tham chiếukèo bóng đá cúp c2
kèo bóng đá cúp c2 chỉ một lần, nhưng không nếu nó tham khảokèo bóng đá cúp c2
kèo bóng đá cúp c2 nhiều lần. Bạn có thể ghi đè quyết định đó bằng cách chỉ địnhvật chất hóa
Để buộc tính toán riêng củakèo bóng đá cúp c2
kèo bóng đá cúp c2 hoặc bằng cách chỉ địnhkhông được vật chất hóa
Để buộc nó được hợp nhất vào kèo bóng đá cúp c2 cha mẹ. Lựa chọn sau có nguy cơ tính toán trùng lặp củakèo bóng đá cúp c2
kèo bóng đá cúp c2, nhưng nó vẫn có thể tiết kiệm ròng nếu mỗi lần sử dụngkèo bóng đá cúp c2
kèo bóng đá cúp c2 chỉ cần một phần nhỏ củakèo bóng đá cúp c2
đầu ra đầy đủ của kèo bóng đá cúp c2.
Một ví dụ đơn giản về các quy tắc này là
kèo bóng đá cúp c2 W AS (
thiskèo bóng đá cúp c2
kèo bóng đá cúp c2 sẽ được gấp lại, tạo ra cùng một kế hoạch thực thi như
Chọn * từ Big_Table WHERE Key = 123;
Đặc biệt, nếu có chỉ mục trênKey
, nó có thể sẽ được sử dụng để tìm nạp các hàng cókey = 123
. Mặt khác, trong
kèo bóng đá cúp c2 W AS (
Thekèo bóng đá cúp c2
kèo bóng đá cúp c2 sẽ được vật chất hóa, tạo ra một bản sao tạm thời củaBIG_TABLE
Sau đó được kết hợp với chính nó - mà không có lợi ích của bất kỳ chỉ số nào. kèo bóng đá cúp c2 này sẽ được thực hiện hiệu quả hơn nhiều nếu được viết là
kèo bóng đá cúp c2 W không được vật chất hóa (
để có thể áp dụng trực tiếp các hạn chế của kèo bóng đá cúp c2 cha mẹ để quétBIG_TABLE
.
Một ví dụ trong đókhông được vật chất hóa
có thể không mong muốn là
kèo bóng đá cúp c2 W AS (
Ở đây, vật chất hóakèo bóng đá cúp c2
kèo bóng đá cúp c2 đảm bảo rằngrất
chỉ được đánh giá một lần cho mỗi hàng bảng, không hai lần.
Các ví dụ trên chỉ hiển thịkèo bóng đá cúp c2
đang được sử dụng kèo bóng đá cúp c2Chọn
, nhưng nó có thể được đính kèm theo cùng một cách kèo bóng đá cúp c2Chèn
, Cập nhật
hoặcXóa
. Trong mỗi trường hợp, nó cung cấp (các) bảng tạm thời có thể được đề cập trong lệnh chính.
kèo bóng đá cúp c2
Bạn có thể sử dụng các câu lệnh biến đổi dữ liệu (Chèn
, Cập nhật
hoặcXóa
) trongkèo bóng đá cúp c2
. Điều này cho phép bạn thực hiện một số hoạt động khác nhau trong cùng một kèo bóng đá cúp c2.
kèo bóng đá cúp c2 di chuyển_rows AS (
kèo bóng đá cúp c2 này di chuyển hiệu quả các hàng từSản phẩm
đếnProducts_log
. TheXóa
inkèo bóng đá cúp c2
Xóa các hàng được chỉ định khỏiSản phẩm
, Trả lại nội dung của chúng bằng phương tiện của nóTrở về
mệnh đề; Và sau đó kèo bóng đá cúp c2 chính đọc đầu ra đó và chèn nó vàoSản phẩm_log
.
Một điểm tốt của ví dụ trên làkèo bóng đá cúp c2
mệnh đề được gắn vàoChèn
, không phải phụ-Chọn
trongChèn
. Điều này là cần thiết vì các câu lệnh biến đổi dữ liệu chỉ được phép trongkèo bóng đá cúp c2
Các điều khoản được gắn vào câu lệnh cấp cao nhất. Tuy nhiên, bình thườngkèo bóng đá cúp c2
Quy tắc hiển thị áp dụng, vì vậy có thể tham khảokèo bóng đá cúp c2
Đầu ra của câu lệnh từ Sub-Chọn
.
Câu lệnh sửa đổi dữ liệu trongkèo bóng đá cúp c2
thường cóTrở về
27540_27556Phần 6.4), như thể hiện trong ví dụ trên. Nó là đầu ra củaTrở về
mệnh đề,khôngBảng mục tiêu của câu lệnh biến đổi dữ liệu, tạo thành bảng tạm thời có thể được đề cập bởi phần còn lại của kèo bóng đá cúp c2. Nếu câu lệnh biến đổi dữ liệu trongkèo bóng đá cúp c2
thiếu ATrở về
mệnh đề, sau đó nó tạo thành không có bảng tạm thời và không thể được đề cập trong phần còn lại của kèo bóng đá cúp c2. Một tuyên bố như vậy sẽ được thực hiện dù sao.
kèo bóng đá cúp c2 T AS (
Ví dụ này sẽ xóa tất cả các hàng khỏi bảngfoo
vàBar
. Số lượng các hàng bị ảnh hưởng được báo cáo cho khách hàng sẽ chỉ bao gồm các hàng bị xóa khỏiBar
.
Không được phép tự giới thiệu trong các câu lệnh biến đổi dữ liệu. Trong một số trường hợp, có thể làm việc xung quanh giới hạn này bằng cách tham khảo đầu ra của một đệ quykèo bóng đá cúp c2
, ví dụ:
kèo bóng đá cúp c2 đệ quy bao gồm_parts (sub_part, part) là (
kèo bóng đá cúp c2 này sẽ xóa tất cả các phần phụ trực tiếp và gián tiếp của sản phẩm.
Câu lệnh sửa đổi dữ liệu trongkèo bóng đá cúp c2
được thực hiện chính xác một lần và luôn luôn hoàn thành, độc lập với việc kèo bóng đá cúp c2 chính đọc tất cả (hoặc thực sự là bất kỳ) đầu ra của chúng. Lưu ý rằng điều này khác với quy tắc choChọn
inkèo bóng đá cúp c2
: Như đã nêu trong phần trước, thực hiện AChọn
chỉ được thực hiện theo như kèo bóng đá cúp c2 chính yêu cầu đầu ra của nó.
Các tiểu thư trongkèo bóng đá cúp c2
được thực hiện đồng thời với nhau và với kèo bóng đá cúp c2 chính. Do đó, khi sử dụng các câu lệnh biến đổi dữ liệu trongkèo bóng đá cúp c2
, thứ tự các bản cập nhật được chỉ định thực sự xảy ra là không thể đoán trước. Tất cả các câu lệnh được thực thi kèo bóng đá cúp c2 cùng mộtSnapshot(xemChương 13), vì vậy họ không thểxemHiệu ứng của nhau trên các bảng đích. Điều này làm giảm bớt các tác động của sự khó lường của thứ tự thực tế của các bản cập nhật hàng và có nghĩa làTrở về
Dữ liệu là cách duy nhất để kèo bóng đá cúp c2ền đạt các thay đổi giữa các khác nhaukèo bóng đá cúp c2
Tiểu phụ và kèo bóng đá cúp c2 chính. Một ví dụ về điều này là trong
kèo bóng đá cúp c2 T AS (
bên ngoàiChọn
Sẽ trả lại giá ban đầu trước khi hành động củaCập nhật
, trong khi ở
kèo bóng đá cúp c2 T AS (
bên ngoàiChọn
Sẽ trả về dữ liệu được cập nhật.
cố gắng cập nhật cùng một hàng hai lần trong một câu không được hỗ trợ. Chỉ có một trong những sửa đổi diễn ra, nhưng nó không dễ dàng (và đôi khi không thể) để dự đoán một cách đáng tin cậy cái nào.kèo bóng đá cúp c2
Các tiểu bang có thể ảnh hưởng đến cùng một hàng thay đổi bởi câu lệnh chính hoặc một câu chuyện con anh chị em. Các hiệu ứng của một tuyên bố như vậy sẽ không thể dự đoán được.
Hiện tại, bất kỳ bảng nào được sử dụng làm mục tiêu của câu lệnh biến đổi dữ liệu trongkèo bóng đá cúp c2
không được có quy tắc có điều kiện, cũng không phảicũng
Quy tắc, cũng không phảiThay vào đó
Quy tắc mở rộng sang nhiều câu lệnh.