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
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 tỷ số bóng đá euro hôm nay phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

7.8.kèo tỷ số bóng đá euro hôm naykèo tỷ số bóng đá euro hôm nay (bảng chung Biểu thức)

kèo tỷ số bóng đá euro hôm nayCung cấp cách viết Báo cáo phụ trợ để sử dụng trong một kèo tỷ số bóng đá euro hôm nay lớn hơn. Những tuyên bố 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 kèo tỷ số bóng đá euro hôm nay bảng tạm thời tồn tại chỉ cho một truy vấn. Mỗi Tuyên bố phụ trợ trong Akèo tỷ số bóng đá euro hôm naymệnh đề có thể là AChọn, Chèn, Cập nhậthoặcXóa; vàkèo tỷ số bóng đá euro hôm naymệnh đề được gắn vào một chính tuyên bố cũng có thể là mộtChọn, Chèn, Cập nhật, hoặcXóa.

7.8.1.Chọninkèo tỷ số bóng đá euro hôm nay

Giá trị cơ bản củaChọninkèo tỷ số bóng đá euro hôm naylà phá vỡ phức tạp Truy vấn thành kèo tỷ số bóng đá euro hôm nay phần đơn giản hơn. Một ví dụ là:

kèo tỷ số bóng đá euro hôm nay khu vực_sales AS (
        Chọn vùng, tổng (số lượng) là Total_sales
        Từ đơn đặt hàng
        Theo từng khu vực
     ), top_regions là (
        Chọn vùng
        Từ khu vực_sales
        Trong đó Total_Sales (chọn Sum (Total_Sales)/10 từ khu vực_sales)
     )
Chọn Vùng,
       sản phẩm,
       Tổng (số lượng) là sản phẩm_units,
       Tổng (số lượng) dưới dạng sản phẩm_sales
Từ đơn đặt hàng
Nơi vùng trong (chọn Vùng từ Top_Regions)
Theo từng khu vực, sản phẩm;

Hiển thị tổng doanh số của mỗi sản phẩm chỉ ở đầu khu vực bán hàng. Thekèo tỷ số bóng đá euro hôm nay11549_11602khu vực_salesTop_Regions, trong đó đầu ra củakhu vực_salesđược sử dụng trongTop_Regionsvà đầu ra củaTop_Regionsđược sử dụng trong chínhChọnkèo tỷ số bóng đá euro hôm nay. Ví dụ này có thể đã được được viết mà khôngkèo tỷ số bóng đá euro hôm nay, nhưng chúng tôi có cần hai cấp độ phụ-Chọns. Nó dễ dàng hơn một chút để theo dõi điều này đường.

Tùy chọnđệ quyCông cụ sửa đổi Thay đổikèo tỷ số bóng đá euro hôm nayTừ một cú pháp đơn thuần thuận tiện vào một tính năng hoàn thành mọi thứ không nếu không có thể trong SQL tiêu chuẩn. Sử dụngKiểu đệ quy, Akèo tỷ số bóng đá euro hôm nayTruy vấn có thể tham khảo đầu ra của chính nó. Một ví dụ rất đơn giản là cái này Truy vấn tổng hợp kèo tỷ số bóng đá euro hôm nay số nguyên từ 1 đến 100:

kèo tỷ số bóng đá euro hôm nay đệ quy t (n) là (
    Giá trị (1)
  Liên minh tất cả
    Chọn n+1 từ t trong đó n <100
)
Chọn Sum (n) từ t;

Hình thức chung của một đệ quykèo tỷ số bóng đá euro hôm naykèo tỷ số bóng đá euro hôm nay luôn làThuật ngữ không nhận được, sau đóUnion(hoặcLiên minh tất cả), sau đó aThuật ngữ đệ quy13028_13157

Đánh giá kèo tỷ số bóng đá euro hôm nay đệ quy

  1. Đánh giá thuật ngữ không nhận được. VìLiên minh(nhưng khôngLiên minh TẤT CẢ), loại bỏ kèo tỷ số bóng đá euro hôm nay hàng trùng lặp. Bao gồm tất cả kèo tỷ số bóng đá euro hôm nay phần còn lại hàng trong kết quả của truy vấn đệ quy, và cũng là nơi họ tạm thờiLàm việc bàn.

  2. Miễn là bảng làm việc không trống, hãy lặp lại kèo tỷ số bóng đá euro hôm nay bước sau:

    1. 13853_14005Union(nhưng khôngLiên minh tất cả), loại bỏ kèo tỷ số bóng đá euro hôm nay hàng trùng lặp và kèo tỷ số bóng đá euro hôm nay hàng trùng lặp bất kỳ hàng kết quả trước đó. Bao gồm tất cả kèo tỷ số bóng đá euro hôm nay hàng còn lại trong kết quả của đệ quy truy vấn, và cũng đặt chúng vào tạm thờiBảng trung gian.

    2. 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 đó làm trống Bảng trung gian.

Lưu ý:Nói đúng ra, quá trình này là Lặp lại không đệ quy, nhưngKiểu đệ quyThuật ngữ được chọn bởi Ủy ban Tiêu chuẩn SQL.

Trong ví dụ trên, bảng làm việc chỉ có một hàng trong mỗi bước và nó có kèo tỷ số bóng đá euro hôm nay giá trị từ 1 đến 100 trong kèo tỷ số bóng đá euro hôm nay bước liên tiếp. In the 100th step, there is no output VìWHEREmệnh đề, và như vậy kèo tỷ số bóng đá euro hôm nay chấm dứt.

15276_15524

kèo tỷ số bóng đá euro hôm nay đệ quy bao gồm_parts (sub_part, part, số lượng) là (
    Chọn Sub_Part, Phần, Số lượng từ các phần trong đó Phần = 'Our_Product'
  Liên minh tất cả
    Chọn P.Sub_Part, P.Part, P.Quantity
    Từ bao gồm_parts pr, các phần p
    Trong đó p.part = pr.sub_part
  )
Chọn sub_part, sum (số lượng) là tổng số_quantity
Từ bao gồm_parts
Nhóm bởi sub_part

Khi làm việc kèo tỷ số bóng đá euro hôm nay các truy vấn đệ quy, điều quan trọng là phải chắc chắn rằng phần đệ quy của truy vấn cuối cùng sẽ Trả về không có bộ dữ liệu, nếu không thì truy vấn sẽ lặp lại vô thời hạn. Đôi khi, sử dụngUnionthay vìLiên minh tất cảCó thể thực hiện điều này bằng cách Loại bỏ kèo tỷ số bóng đá euro hôm nay hàng trùng lặp kèo tỷ số bóng đá euro hôm nay hàng đầu ra trước đó. Tuy nhiên, Thường thì một chu kỳ không liên quan đến kèo tỷ số bóng đá euro hôm nay 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 kèo tỷ số bóng đá euro hôm nay trường để xem nếu cùng một điểm đã đạt được trước đó. kèo tỷ số bóng đá euro hôm nay Phương pháp tiêu chuẩn để xử lý kèo tỷ số bóng đá euro hôm nay tình huống như vậy là tính toán Mảng của kèo tỷ số bóng đá euro hôm nay giá trị đã được vi thể. Ví dụ, hãy xem xét Truy vấn sau tìm kiếm một bảngđồ thịSử dụng Alinktrường:

kèo tỷ số bóng đá euro hôm nay search_graph (id, liên kết, dữ liệu, độ sâu) là (
        Chọn G.ID, G.Link, G.Data, 1
        Từ đồ thị g
      Liên minh tất cả
        Chọn G.ID, G.Link, G.Data, SG.Depth + 1
        Từ đồ thị G, search_graph SG
        WHERE G.ID = SG.Link
)
Chọn * từ search_graph;

kèo tỷ số bóng đá euro hôm nay này sẽ lặp lại nếulinkMối quan hệ chứa chu kỳ. Bởi vì Chúng tôi yêu cầu A"Độ sâu"đầu ra, chỉ thay đổiLiên minh tất cảđếnUnion17346_17529đường dẫnChu kỳđến kèo tỷ số bóng đá euro hôm nay dễ bị lặp lại:

17666_18067

Ngoài kèo tỷ số bóng đá euro hôm nay chu kỳ ngăn chặn, giá trị mảng thường là hữu ích theo cách riêng của nó như là đại diện cho"Path"Được thực hiện để đạt được bất kỳ hàng cụ thể nào.

Trong trường hợp chung, nơi cần có nhiều hơn một trường Đã kiểm tra để nhận ra một chu kỳ, sử dụng một mảng hàng. Vì Ví dụ, nếu chúng ta cần so sánh kèo tỷ số bóng đá euro hôm nay trườngF1f2:

kèo tỷ số bóng đá euro hôm nay search_graph (id, liên kết, dữ liệu, độ sâu, đường dẫn, chu kỳ) là (
        Chọn G.ID, G.Link, G.Data, 1,
          Mảng [hàng (g.f1, g.f2)],
          SAI
        Từ đồ thị g
      Liên minh tất cả
        Chọn G.ID, G.Link, G.Data, SG.DEPTH + 1,
          đường dẫn || Hàng (G.F1, G.F2),
          Hàng (g.f1, g.f2) = any (đường dẫn)
        Từ đồ thị G, search_graph SG
        Trong đó g.id = sg.link và không chu kỳ
)
Chọn * từ search_graph;

Tip:bỏ quahàng ()Cú pháp trong trường hợp phổ biến chỉ cần một trường đã kiểm tra để 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ột mảng loại tổng hợp, đạt được hiệu quả.

Tip:Thuật toán đánh giá truy vấn đệ quy Sản xuất đầ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èo tỷ số bóng đá euro hôm nay kết quả theo thứ tự tìm kiếm chiều sâu đầu tiên bằng cách thực hiện Truy vấn bên ngoàiĐặt hàng bởiA"Path"Cột được xây dựng trong Cách này.

Một thủ thuật hữu ích để kiểm tra kèo tỷ số bóng đá euro hôm nay truy vấn khi bạn không chắc chắn Nếu họ có thể lặp là đặt mộtgiới hạnTrong kèo tỷ số bóng đá euro hôm nay cha mẹ. Ví dụ, kèo tỷ số bóng đá euro hôm nay này sẽ lặp lại mãi mãi không cógiới hạn:

kèo tỷ số bóng đá euro hôm nay T (n) đệ quy là (
    Chọn 1
  Liên minh tất cả
    Chọn N+1 từ T
)
Chọn n từ T giới hạn 100;

Điều này hoạt động vìPostgreSQL20248_20305kèo tỷ số bóng đá euro hôm nay20332_20707kèo tỷ số bóng đá euro hôm naykèo tỷ số bóng đá euro hôm nay đầu ra dù sao.

Một thuộc tính hữu ích củakèo tỷ số bóng đá euro hôm naykèo tỷ số bóng đá euro hôm nay là chúng chỉ được đánh giá một lần mỗi lần thực hiện kèo tỷ số bóng đá euro hôm nay cha mẹ, ngay cả khi chúng được đề cập nhiều hơn một lần bởi kèo tỷ số bóng đá euro hôm nay cha mẹ hoặc anh chị emkèo tỷ số bóng đá euro hôm naykèo tỷ số bóng đá euro hôm nay. Do đó, những tính toán đắt giá cần thiết trong Có thể đặt nhiều nơi trong mộtkèo tỷ số bóng đá euro hôm nayTruy vấn để tránh công việc dự phòng. Khác Ứng dụng có thể là để ngăn chặn bội số không mong muốn Đánh giá các chức năng kèo tỷ số bóng đá euro hôm nay tác dụng phụ. Tuy nhiên, cái khác phía của đồng tiền này là trình tối ưu hóa ít có khả năng đẩy Hạn chế từ truy vấn cha mẹ xuốngkèo tỷ số bóng đá euro hôm naykèo tỷ số bóng đá euro hôm nay hơn một trình tự phụ thông thường. Thekèo tỷ số bóng đá euro hôm nayTruy vấn thường sẽ được đánh giá như đã viết, không cần đàn áp kèo tỷ số bóng đá euro hôm nay hàng mà truy vấn 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 (kèo tỷ số bóng đá euro hôm nay) tham chiếu đến yêu cầu truy vấn chỉ Số lượng hàng hạn chế.)

kèo tỷ số bóng đá euro hôm nay ví dụ ở trên chỉ hiển thịkèo tỷ số bóng đá euro hôm nayđang được sử dụng kèo tỷ số bóng đá euro hôm nayChọn, nhưng nó có thể là được đính kèm theo cùng một cách kèo tỷ số bóng đá euro hôm nayChèn, Cập nhậthoặcXóa. Trong mỗi trường hợp, nó cung cấp một cách hiệu quả (kèo tỷ số bóng đá euro hôm nay) bảng tạm thời có thể được đề cập trong chính yêu cầu.

7.8.2. kèo tỷ số bóng đá euro hôm nay câu lệnh sửa đổi dữ liệu trongkèo tỷ số bóng đá euro hôm nay

Bạn có thể sử dụng kèo tỷ số bóng đá euro hôm nay câu lệnh biến đổi dữ liệu (Chèn, Cập nhậthoặcXóa) trongkèo tỷ số bóng đá euro hôm nay. Điều này cho phép bạn thực hiện một số kèo tỷ số bóng đá euro hôm nay hoạt động khác nhau trong cùng một truy vấn. Một ví dụ là:

kèo tỷ số bóng đá euro hôm nay di chuyển_rows AS (
    Xóa khỏi sản phẩm
    Ở ĐÂU
        "Ngày" = '2010-10-01' và
        "Ngày" <'2010-11-01'
    Trở về *
)
Chèn vào sản phẩm_log
Chọn * từ di chuyển_rows;

Truy vấn này di chuyển hiệu quả kèo tỷ số bóng đá euro hôm nay hàng từSản phẩmđếnSản phẩm_log. TheXóainkèo tỷ số bóng đá euro hôm nayXóa kèo tỷ số bóng đá euro hôm nay hàng được chỉ định từSản phẩm,, trả lại nội dung của họ bằng phương tiện của nóTrở vềmệnh đề; Và sau đó là kèo tỷ số bóng đá euro hôm nay chính đọc rằng đầ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 tỷ số bóng đá euro hôm naymệnh đề được gắn vàoChèn, không phải phụ-ChọntrongChèn23684_23764kèo tỷ số bóng đá euro hôm naykèo tỷ số bóng đá euro hôm nay đ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 tỷ số bóng đá euro hôm nayQuy tắc hiển thị áp dụng, vì vậy Có thể tham khảokèo tỷ số bóng đá euro hôm nayĐầu ra của câu lệnh từ Sub-Chọn.

Câu lệnh sửa đổi dữ liệu trongkèo tỷ số bóng đá euro hôm naythường cóTrở vềmệnh đề (xemPhần 6.4), như thể hiện trong Ví dụ ở trên. Nó là đầu ra củaTrở về24351_24362khôngBảng mục tiêu của tuyên bố sửa đổ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 tỷ số bóng đá euro hôm nay. Nếu a Câu lệnh sửa đổi dữ liệu trongkèo tỷ số bóng đá euro hôm nayThiếu MộtTrở vềmệnh đề, sau đó nó hình thành không bảng tạm thời và không thể được gọi trong phần còn lại của kèo tỷ số bóng đá euro hôm nay. Một tuyên bố như vậy sẽ được thực hiện dù sao. MỘT Ví dụ không đặc biệt là:

kèo tỷ số bóng đá euro hôm nay t As (
    Xóa khỏi FOO
)
Xóa khỏi thanh;

Ví dụ này sẽ xóa tất cả kèo tỷ số bóng đá euro hôm nay hàng khỏi bảngfooBar. kèo tỷ số bóng đá euro hôm nay Số lượng kèo tỷ số bóng đá euro hôm nay hàng bị ảnh hưởng được báo cáo cho khách hàng sẽ chỉ Bao gồm kèo tỷ số bóng đá euro hôm nay hàng bị xóa khỏiBar.

Tự giới thiệu lại trong kèo tỷ số bóng đá euro hôm nay câu lệnh biến đổi dữ liệu là không được phép. Trong một số trường hợp, có thể làm việc xung quanh điều này giới hạn bằng cách tham khảo đầu ra của một đệ quykèo tỷ số bóng đá euro hôm nay, ví dụ:

kèo tỷ số bóng đá euro hôm nay đệ quy bao gồm_parts (sub_part, part) là (
    Chọn sub_part, một phần từ các phần trong đó phần = 'our_product'
  Liên minh tất cả
    Chọn P.Sub_Part, P.Part
    Từ bao gồm_parts pr, các phần p
    Trong đó p.part = pr.sub_part
  )
Xóa khỏi các bộ phận
  Trong đó phần trong (chọn phần từ bao gồm_parts);

Truy vấn này sẽ xóa tất cả kèo tỷ số bóng đá euro hôm nay phần phụ trực tiếp và gián tiếp của một sản phẩm.

Câu lệnh sửa đổi dữ liệu trongkèo tỷ số bóng đá euro hôm nayđượ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 cho dù truy vấn chính đọc tất cả (hoặc thực sự bất kỳ) đầu ra của họ. Lưu ý rằng điều này khác kèo tỷ số bóng đá euro hôm nay Quy tắc choChọninkèo tỷ số bóng đá euro hôm nay: Như đã nêu trong phần trước, thực hiện mộtChọnchỉ được thực hiện Theo như kèo tỷ số bóng đá euro hôm nay chính đòi hỏi đầu ra của nó.

kèo tỷ số bóng đá euro hôm nay tiểu thư trongkèo tỷ số bóng đá euro hôm naylà thực hiện đồng thời kèo tỷ số bóng đá euro hôm nay nhau và kèo tỷ số bóng đá euro hôm nay truy vấn chính. Do đó, khi sử dụng các câu lệnh biến đổi dữ liệu trongkèo tỷ số bóng đá euro hôm nay26597_26730Snapshot(xemChương 13), vì vậy họ không thể"Xem"Hiệu ứng của nhau trên Bảng mục tiêu. Điều này làm giảm bớt những ảnh hưởng của Không thể đoán trước của thứ tự thực tế của kèo tỷ số bóng đá euro hôm nay bản cập nhật hàng và phương tiện cái đóTrở vềDữ liệu là cách duy nhất để Giao tiếp kèo tỷ số bóng đá euro hôm nay thay đổi giữa kèo tỷ số bóng đá euro hôm nay khác nhaukèo tỷ số bóng đá euro hôm nayphụ và kèo tỷ số bóng đá euro hôm nay chính. MỘT Ví dụ về điều này là trong

kèo tỷ số bóng đá euro hôm nay t As (
    Cập nhật sản phẩm đặt giá = Giá * 1.05
    Trở về *
)
Chọn * từ sản phẩm;

bên ngoàiChọnSẽ trả về Giá ban đầu trước khi hành động củaCập nhật, trong khi ở

kèo tỷ số bóng đá euro hôm nay T AS (
    Cập nhật sản phẩm đặt giá = Giá * 1.05
    Trở về *
)
Chọn * từ t;

bên ngoàiChọnSẽ trả về Cập nhật dữ liệu.

Cố gắng cập nhật cùng một hàng hai lần trong một câu nói là không được hỗ trợ. Chỉ 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. Điều này cũng áp dụng để xóa một hàng đã Cập nhật trong cùng một tuyên bố: Chỉ có bản cập nhật được thực hiện. Do đó, bạn thường nên tránh cố gắng sửa đổi một Hàng hai lần trong một tuyên bố duy nhất. Đặc biệt tránh viếtkèo tỷ số bóng đá euro hôm naykèo tỷ số bóng đá euro hôm nay tiểu thư có thể ảnh hưởng đến kèo tỷ số bóng đá euro hôm nay hàng tương tự đã thay đổi theo tuyên bố chính hoặc anh chị em Tệp phụ. Những ảnh hưởng của một tuyên bố như vậy sẽ không phải là có 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 một biến đổi dữ liệu tuyên bố trongkèo tỷ số bóng đá euro hôm naykhông được có một quy tắc có điều kiện, cũng không phảicũngQuy tắc, cũng không phảiThay vào đóQuy tắc mở rộng sang nhiều câu lệnh.