PostgreSQL เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฐเซ‹เชซเชพเช‡เชฒเชฐ: เชชเซเชฒเชพเชจ เช…เชจเซ‡ เช•เซเชตเซ‡เชฐเซ€เชจเซ‹ เชฎเซ‡เชณ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฎเซ‡เชณเชตเชตเซ‹

เช˜เชฃเชพ เชœเซ‡เช“ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ‡ explain.tensor.ru - เช…เชฎเชพเชฐเซ€ PostgreSQL เชชเซเชฒเชพเชจ เชตเชฟเชเซเชฏเซเชฒเชพเช‡เชเซ‡เชถเชจ เชธเซ‡เชตเชพ เช•เชฆเชพเชš เชคเซ‡เชจเซ€ เชเช• เชฎเชนเชพเชธเชคเซเชคเชพเชฅเซ€ เชตเชพเช•เซ‡เชซ เชจ เชนเซ‹เชฏ - เชธเชฐเซเชตเชฐ เชฒเซ‹เช—เชจเชพ เชตเชพเช‚เชšเชตเชพ เชฎเชพเชŸเซ‡ เชฎเซเชถเซเช•เซ‡เชฒ เชญเชพเช—เชจเซ‡ เชซเซ‡เชฐเชตเซ€เชจเซ‡...

PostgreSQL เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฐเซ‹เชซเชพเช‡เชฒเชฐ: เชชเซเชฒเชพเชจ เช…เชจเซ‡ เช•เซเชตเซ‡เชฐเซ€เชจเซ‹ เชฎเซ‡เชณ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฎเซ‡เชณเชตเชตเซ‹
... เช…เชจเซเชฐเซ‚เชช เชชเซเชฒเชพเชจ เชจเซ‹เชกเซเชธ เชฎเชพเชŸเซ‡ เชธเช‚เชฆเชฐเซเชญเชฟเชค เชธเช‚เช•เซ‡เชคเซ‹ เชธเชพเชฅเซ‡ เชธเซเช‚เชฆเชฐ เชฐเซ€เชคเซ‡ เชกเชฟเชเชพเช‡เชจ เช•เชฐเซ‡เชฒเซ€ เช•เซเชตเซ‡เชฐเซ€:

PostgreSQL เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฐเซ‹เชซเชพเช‡เชฒเชฐ: เชชเซเชฒเชพเชจ เช…เชจเซ‡ เช•เซเชตเซ‡เชฐเซ€เชจเซ‹ เชฎเซ‡เชณ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฎเซ‡เชณเชตเชตเซ‹
เชคเซ‡เชฎเชจเชพ เชฌเซ€เชœเชพ เชญเชพเช—เชจเซ€ เช† เชชเซเชฐเชคเชฟเชฒเชฟเชชเชฟเชฎเชพเช‚ PGConf.Russia 2020 เชชเชฐ เช…เชนเซ‡เชตเชพเชฒ เชนเซเช‚ เชคเชฎเชจเซ‡ เช•เชนเซ€เชถ เช•เซ‡ เช…เชฎเซ‡ เช† เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชฐเซเชฏเซเช‚.

เชธเชพเชฎเชพเชจเซเชฏ เช•เซเชตเซ‡เชฐเซ€ เช•เชพเชฎเช—เซ€เชฐเซ€ เชธเชฎเชธเซเชฏเชพเช“ เช…เชจเซ‡ เชคเซ‡เชฎเชจเชพ เช‰เช•เซ‡เชฒเซ‹เชจเซ‡ เชธเชฎเชฐเซเชชเชฟเชค เชชเซเชฐเชฅเชฎ เชญเชพเช—เชจเซ€ เชŸเซเชฐเชพเชจเซเชธเช•เซเชฐเชฟเชชเซเชŸ, เชฒเซ‡เช–เชฎเชพเช‚ เชฎเชณเซ€ เชถเช•เซ‡ เช›เซ‡. "เชฌเซ€เชฎเชพเชฐ SQL เชชเซเชฐเชถเซเชจเซ‹ เชฎเชพเชŸเซ‡เชจเซ€ เชตเชพเชจเช—เซ€เช“".



เชชเซเชฐเชฅเชฎ, เชšเชพเชฒเซ‹ เชฐเช‚เช— เช•เชฐเชตเชพเชจเซเช‚ เชถเชฐเซ‚ เช•เชฐเซ€เช - เช…เชจเซ‡ เช…เชฎเซ‡ เชนเชตเซ‡ เชฏเซ‹เชœเชจเชพเชจเซ‡ เชฐเช‚เช— เช†เชชเซ€เชถเซเช‚ เชจเชนเซ€เช‚, เช…เชฎเซ‡ เชคเซ‡เชจเซ‡ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เชฐเช‚เช—เซ€เชจ เช•เชฐเซ€ เชฆเซ€เชงเซเช‚ เช›เซ‡, เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เชธเซเช‚เชฆเชฐ เช…เชจเซ‡ เชธเชฎเชœเซ€ เชถเช•เชพเชฏ เชคเซ‡เชตเซเช‚ เช›เซ‡, เชชเชฐเช‚เชคเซ เชเช• เชตเชฟเชจเช‚เชคเซ€.

เช…เชฎเชจเซ‡ เชเชตเซเช‚ เชฒเชพเช—เชคเซเช‚ เชนเชคเซเช‚ เช•เซ‡ เช†เชตเซ€ เช…เชจเชซเซ‹เชฐเซเชฎเซ‡เชŸเซ‡เชก โ€œเชถเซ€เชŸโ€ เชธเชพเชฅเซ‡ เชฒเซ‹เช—เชฎเชพเช‚เชฅเซ€ เช–เซ‡เช‚เชšเชพเชฏเซ‡เชฒเซ€ เชตเชฟเชจเช‚เชคเซ€ เช–เซ‚เชฌ เชœ เชจเซ€เชš เช…เชจเซ‡ เชคเซ‡เชฅเซ€ เช…เชธเซเชตเชฟเชงเชพเชœเชจเช• เชฒเชพเช—เซ‡ เช›เซ‡.
PostgreSQL เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฐเซ‹เชซเชพเช‡เชฒเชฐ: เชชเซเชฒเชพเชจ เช…เชจเซ‡ เช•เซเชตเซ‡เชฐเซ€เชจเซ‹ เชฎเซ‡เชณ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฎเซ‡เชณเชตเชตเซ‹

เช–เชพเชธ เช•เชฐเซ€เชจเซ‡ เชœเซเชฏเชพเชฐเซ‡ เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเช“ เช•เซ‹เชกเชฎเชพเช‚ เชตเชฟเชจเช‚เชคเซ€เชจเชพ เชฎเซเช–เซเชฏ เชญเชพเช—เชจเซ‡ "เช—เซเช‚เชฆเชฐ" เช•เชฐเซ‡ เช›เซ‡ (เช†, เช…เชฒเชฌเชคเซเชค, เชเชจเซเชŸเชฟเชชเซ‡เชŸเชฐเซเชจ เช›เซ‡, เชชเชฐเช‚เชคเซ เชคเซ‡ เชฅเชพเชฏ เช›เซ‡). เชญเชฏเชพเชจเช•!

เชšเชพเชฒเซ‹ เช†เชจเซ‡ เชตเชงเซ เชธเซเช‚เชฆเชฐ เชฐเซ€เชคเซ‡ เชฆเซ‹เชฐเซ€เช.
PostgreSQL เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฐเซ‹เชซเชพเช‡เชฒเชฐ: เชชเซเชฒเชพเชจ เช…เชจเซ‡ เช•เซเชตเซ‡เชฐเซ€เชจเซ‹ เชฎเซ‡เชณ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฎเซ‡เชณเชตเชตเซ‹

เช…เชจเซ‡ เชœเซ‹ เช†เชชเชฃเซ‡ เช†เชจเซ‡ เชธเซเช‚เชฆเชฐ เชฐเซ€เชคเซ‡ เชฆเซ‹เชฐเซ€ เชถเช•เซ€เช, เชเชŸเชฒเซ‡ เช•เซ‡, เชตเชฟเชจเช‚เชคเชฟเชจเชพ เชฎเซเช–เซเชฏ เชญเชพเช—เชจเซ‡ เชกเชฟเชธเชเชธเซ‡เชฎเซเชฌเชฒ เช…เชจเซ‡ เชชเชพเช›เซเช‚ เชเช•เชธเชพเชฅเซ‡ เชฎเซ‚เช•เซ€ เชถเช•เซ€เช, เชคเซ‹ เชชเช›เซ€ เช…เชฎเซ‡ เช† เชตเชฟเชจเช‚เชคเซ€เชจเชพ เชฆเชฐเซ‡เช• เช‘เชฌเซเชœเซ‡เช•เซเชŸ เชฎเชพเชŸเซ‡ เชธเช‚เช•เซ‡เชค "เชœเซ‹เชกเซ€" เชถเช•เซ€เช เช›เซ€เช - เชฏเซ‹เชœเชจเชพเชจเชพ เช…เชจเซเชฐเซ‚เชช เชฌเชฟเช‚เชฆเซ เชชเชฐ เชถเซเช‚ เชฅเชฏเซเช‚.

เช•เซเชตเซ‡เชฐเซ€ เชธเชฟเชจเซเชŸเซ‡เช•เซเชธ เชŸเซเชฐเซ€

เช† เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชตเชฟเชจเช‚เชคเซ€เชจเซ‡ เชชเชนเซ‡เชฒเชพ เชตเชฟเชถเซเชฒเซ‡เชทเชฟเชค เช•เชฐเชตเซ€ เช†เชตเชถเซเชฏเช• เช›เซ‡.
PostgreSQL เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฐเซ‹เชซเชพเช‡เชฒเชฐ: เชชเซเชฒเชพเชจ เช…เชจเซ‡ เช•เซเชตเซ‡เชฐเซ€เชจเซ‹ เชฎเซ‡เชณ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฎเซ‡เชณเชตเชตเซ‹

เช•เชพเชฐเชฃ เช•เซ‡ เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เช›เซ‡ เชธเชฟเชธเซเชŸเชฎเชจเซ‹ เชฎเซเช–เซเชฏ เชญเชพเช— เชจเซ‹เชกเชœเซ‡เชเชธ เชชเชฐ เชšเชพเชฒเซ‡ เช›เซ‡, เชชเช›เซ€ เช…เชฎเซ‡ เชคเซ‡เชจเชพ เชฎเชพเชŸเซ‡ เชเช• เชฎเซ‹เชกเซเชฏเซเชฒ เชฌเชจเชพเชตเซเชฏเซเช‚ เช›เซ‡, เชคเชฎเซ‡ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ เชคเซ‡เชจเซ‡ GitHub เชชเชฐ เชถเซ‹เชงเซ‹. เชนเช•เซ€เช•เชคเชฎเชพเช‚, เช† เชชเซ‹เชธเซเชŸเช—เซเชฐเซ‡เชเชธเช•เซเชฏเซเชเชฒ เชชเชพเชฐเซเชธเชฐเชจเชพ เช†เช‚เชคเชฐเชฟเช• เชญเชพเช—เซ‹เชฎเชพเช‚ เชตเชฟเชธเซเชคเซƒเชค "เชฌเช‚เชงเชจ" เช›เซ‡. เชเชŸเชฒเซ‡ เช•เซ‡, เชตเซเชฏเชพเช•เชฐเชฃ เชซเช•เซเชค เชฆเซเชตเชฟเชธเช‚เช—เซ€ เชธเช‚เช•เชฒเชฟเชค เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชจเซ‹เชกเชœเซ‡เชเชธเชฅเซ€ เชฌเชพเชˆเชจเซเชกเชฟเช‚เช—เซเชธ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เช…เชฎเซ‡ เช…เชจเซเชฏ เชฒเซ‹เช•เซ‹เชจเชพ เชฎเซ‹เชกเซเชฏเซเชฒเซ‹เชจเซ‡ เช†เชงเชพเชฐ เชคเชฐเซ€เช•เซ‡ เชฒเซ€เชงเชพ - เช…เชนเซ€เช‚ เช•เซ‹เชˆ เชฎเซ‹เชŸเซเช‚ เชฐเชนเชธเซเชฏ เชจเชฅเซ€.

เช…เชฎเซ‡ เชตเชฟเชจเช‚เชคเซ€เชจเชพ เชฎเซเช–เซเชฏ เชญเชพเช—เชจเซ‡ เช…เชฎเชพเชฐเชพ เช•เชพเชฐเซเชฏเชฎเชพเช‚ เช‡เชจเชชเซเชŸ เชคเชฐเซ€เช•เซ‡ เชซเซ€เชก เช•เชฐเซ€เช เช›เซ€เช - เช†เช‰เชŸเชชเซเชŸ เชชเชฐ เช…เชฎเชจเซ‡ JSON เช‘เชฌเซเชœเซ‡เช•เซเชŸเชจเชพ เชฐเซ‚เชชเชฎเชพเช‚ เชตเชฟเชถเซเชฒเซ‡เชทเชฟเชค เชธเชฟเชจเซเชŸเซ‡เช•เซเชธ เชŸเซเชฐเซ€ เชฎเชณเซ‡ เช›เซ‡.
PostgreSQL เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฐเซ‹เชซเชพเช‡เชฒเชฐ: เชชเซเชฒเชพเชจ เช…เชจเซ‡ เช•เซเชตเซ‡เชฐเซ€เชจเซ‹ เชฎเซ‡เชณ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฎเซ‡เชณเชตเชตเซ‹

เชนเชตเซ‡ เช†เชชเชฃเซ‡ เช† เชเชพเชกเชฎเชพเช‚เชฅเซ€ เชตเชฟเชฐเซเชฆเซเชง เชฆเชฟเชถเชพเชฎเชพเช‚ เชฆเซ‹เชกเซ€ เชถเช•เซ€เช เช›เซ€เช เช…เชจเซ‡ เช…เชฎเชจเซ‡ เชœเซ‹เชˆเชคเชพ เช‡เชจเซเชกเซ‡เชจเซเชŸเซเชธ, เช•เชฒเชฐเชฟเช‚เช— เช…เชจเซ‡ เชซเซ‹เชฐเซเชฎเซ‡เชŸเชฟเช‚เช— เชธเชพเชฅเซ‡ เชตเชฟเชจเช‚เชคเซ€ เชเชธเซ‡เชฎเซเชฌเชฒ เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช. เชจเชพ, เช† เชตเซˆเชตเชฟเชงเซเชฏเชชเซ‚เชฐเซเชฃ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เช…เชฎเชจเซ‡ เชฒเชพเช—เซเชฏเซเช‚ เช•เซ‡ เช† เช…เชจเซเช•เซ‚เชณ เชฐเชนเซ‡เชถเซ‡.
PostgreSQL เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฐเซ‹เชซเชพเช‡เชฒเชฐ: เชชเซเชฒเชพเชจ เช…เชจเซ‡ เช•เซเชตเซ‡เชฐเซ€เชจเซ‹ เชฎเซ‡เชณ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฎเซ‡เชณเชตเชตเซ‹

เชฎเซ‡เชชเชฟเช‚เช— เช•เซเชตเซ‡เชฐเซ€ เช…เชจเซ‡ เชชเซเชฒเชพเชจ เชจเซ‹เชกเซเชธ

เชนเชตเซ‡ เชšเชพเชฒเซ‹ เชœเซ‹เชˆเช เช•เซ‡ เช†เชชเชฃเซ‡ เชชเซเชฐเชฅเชฎ เชšเชฐเชฃเชฎเชพเช‚ เชœเซ‡ เชฏเซ‹เชœเชจเชพเชจเซเช‚ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เช•เชฐเซเชฏเซเช‚ เช›เซ‡ เช…เชจเซ‡ เชฌเซ€เชœเชพเชฎเชพเช‚ เช†เชชเชฃเซ‡ เชœเซ‡เชจเซเช‚ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เช•เชฐเซเชฏเซเช‚ เช›เซ‡ เชคเซ‡ เช•เซเชตเซ‡เชฐเซ€ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชœเซ‹เชกเซ€ เชถเช•เซ€เช.

เชšเชพเชฒเซ‹ เชเช• เชธเชฐเชณ เช‰เชฆเชพเชนเชฐเชฃ เชฒเชˆเช - เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชเช• เช•เซเชตเซ‡เชฐเซ€ เช›เซ‡ เชœเซ‡ CTE เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชฎเชพเช‚เชฅเซ€ เชฌเซ‡ เชตเชพเชฐ เชตเชพเช‚เชšเซ‡ เช›เซ‡. เชคเซ‡ เช†เชตเซ€ เชฏเซ‹เชœเชจเชพ เชฌเชจเชพเชตเซ‡ เช›เซ‡.
PostgreSQL เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฐเซ‹เชซเชพเช‡เชฒเชฐ: เชชเซเชฒเชพเชจ เช…เชจเซ‡ เช•เซเชตเซ‡เชฐเซ€เชจเซ‹ เชฎเซ‡เชณ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฎเซ‡เชณเชตเชตเซ‹

CTE

เชœเซ‹ เชคเชฎเซ‡ เชคเซ‡เชจเซ‡ เชงเซเชฏเชพเชจเชฅเซ€ เชœเซ‹เชถเซ‹, เชคเซ‹ เช†เชตเซƒเชคเซเชคเชฟ 12 เชธเซเชงเซ€ (เช…เชฅเชตเชพ เช•เซ€เชตเชฐเซเชกเชฅเซ€ เชคเซ‡เชจเซ€ เชถเชฐเซ‚เช†เชค เช•เชฐเซ€เชจเซ‡ MATERIALIZED) เชฐเชšเชจเชพ CTE เช เชชเซเชฒเชพเชจเชฐ เชฎเชพเชŸเซ‡ เชธเช‚เชชเซ‚เชฐเซเชฃ เช…เชตเชฐเซ‹เชง เช›เซ‡.
PostgreSQL เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฐเซ‹เชซเชพเช‡เชฒเชฐ: เชชเซเชฒเชพเชจ เช…เชจเซ‡ เช•เซเชตเซ‡เชฐเซ€เชจเซ‹ เชฎเซ‡เชณ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฎเซ‡เชณเชตเชตเซ‹

เช†เชจเซ‹ เช…เชฐเซเชฅ เช เช›เซ‡ เช•เซ‡ เชœเซ‹ เช†เชชเชฃเซ‡ เชตเชฟเชจเช‚เชคเซ€เชฎเชพเช‚ เช•เซเชฏเชพเช‚เช• CTE เชœเชจเชฐเซ‡เชถเชจ เช…เชจเซ‡ เชชเซเชฒเชพเชจเชฎเชพเช‚ เช•เซเชฏเชพเช‚เช• เชจเซ‹เชก เชœเซ‹เชˆเช เช›เซ€เช CTE, เชคเซ‹ เชชเช›เซ€ เช† เช—เชพเช‚เช เซ‹ เชšเซ‹เช•เซเช•เชธเชชเชฃเซ‡ เชเช•เชฌเซ€เชœเชพ เชธเชพเชฅเซ‡ "เชฒเชกเชพเชˆ" เช•เชฐเซ‡ เช›เซ‡, เช…เชฎเซ‡ เชคเชฐเชค เชœ เชคเซ‡เชฎเชจเซ‡ เชœเซ‹เชกเซ€ เชถเช•เซ€เช เช›เซ€เช.

เชซเซ‚เชฆเชกเซ€ เชธเชพเชฅเซ‡ เชธเชฎเชธเซเชฏเชพ: CTE เชจเซ‡เชธเซเชŸ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡.
PostgreSQL เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฐเซ‹เชซเชพเช‡เชฒเชฐ: เชชเซเชฒเชพเชจ เช…เชจเซ‡ เช•เซเชตเซ‡เชฐเซ€เชจเซ‹ เชฎเซ‡เชณ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฎเซ‡เชณเชตเชตเซ‹
เชคเซเชฏเชพเช‚ เช–เซ‚เชฌ เชœ เชจเชฌเชณเชพ เชจเซ‡เชธเซเชŸเซ‡เชก เช›เซ‡, เช…เชจเซ‡ เชคเซ‡ เชœ เชจเชพเชฎเชจเชพ เชชเชฃ เช›เซ‡. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชคเชฎเซ‡ เช…เช‚เชฆเชฐ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ CTE A เชฌเชจเชพเชตเชตเชพ CTE X, เช…เชจเซ‡ เช…เช‚เชฆเชฐ เชธเชฎเชพเชจ เชธเซเชคเชฐเซ‡ CTE B เช เชซเชฐเซ€ เช•เชฐเซ‹ CTE X:

WITH A AS (
  WITH X AS (...)
  SELECT ...
)
, B AS (
  WITH X AS (...)
  SELECT ...
)
...

เชธเชฐเช–เชพเชฎเชฃเซ€ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡, เชคเชฎเชพเชฐเซ‡ เช† เชธเชฎเชœเชตเซเช‚ เชœเซ‹เชˆเช. เช†เชจเซ‡ โ€œเชคเชฎเชพเชฐเซ€ เช†เช‚เช–เซ‹เชฅเซ€โ€ เชธเชฎเชœเชตเซเช‚ - เชฏเซ‹เชœเชจเชพ เชœเซ‹เชตเซ€, เชตเชฟเชจเช‚เชคเซ€เชจเซเช‚ เชถเชฐเซ€เชฐ เชชเชฃ เชœเซ‹เชตเซเช‚ - เช–เซ‚เชฌ เชฎเซเชถเซเช•เซ‡เชฒ เช›เซ‡. เชœเซ‹ เชคเชฎเชพเชฐเซ€ CTE เชœเชจเชฐเซ‡เชถเชจ เชœเชŸเชฟเชฒ เช›เซ‡, เชจเซ‡เชธเซเชŸเซ‡เชก เช›เซ‡ เช…เชจเซ‡ เชตเชฟเชจเช‚เชคเซ€เช“ เชฎเซ‹เชŸเซ€ เช›เซ‡, เชคเซ‹ เชคเซ‡ เชธเช‚เชชเซ‚เชฐเซเชฃเชชเชฃเซ‡ เชฌเซ‡เชญเชพเชจ เช›เซ‡.

UNION

เชœเซ‹ เช†เชชเชฃเซ€ เชชเชพเชธเซ‡ เช•เซเชตเซ‡เชฐเซ€ เชฎเชพเช‚ เช•เซ€เชตเชฐเซเชก เชนเซ‹เชฏ UNION [ALL] (เชฌเซ‡ เชจเชฎเซ‚เชจเชพเช“เชจเซ‡ เชœเซ‹เชกเชตเชพเชจเซเช‚ เช“เชชเชฐเซ‡เชŸเชฐ), เชชเช›เซ€ เชฏเซ‹เชœเชจเชพเชฎเชพเช‚ เชคเซ‡ เช•เซเชฏเชพเช‚ เชคเซ‹ เชจเซ‹เชกเชจเซ‡ เช…เชจเซเชฐเซ‚เชช เช›เซ‡ Append, เช…เชฅเชตเชพ เช•เซ‡เชŸเชฒเชพเช• Recursive Union.
PostgreSQL เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฐเซ‹เชซเชพเช‡เชฒเชฐ: เชชเซเชฒเชพเชจ เช…เชจเซ‡ เช•เซเชตเซ‡เชฐเซ€เชจเซ‹ เชฎเซ‡เชณ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฎเซ‡เชณเชตเชตเซ‹

เชœเซ‡ เช‰เชชเชฐ "เช‰เชชเชฐ" เช›เซ‡ UNION - เช† เช†เชชเชฃเชพ เชจเซ‹เชกเชจเซ‹ เชชเซเชฐเชฅเชฎ เชตเช‚เชถเชœ เช›เซ‡, เชœเซ‡ "เชจเซ€เชšเซ‡" เช›เซ‡ - เชฌเซ€เชœเซ‹. เชœเซ‹ เชฎเชพเชฐเชซเชคเซ‡ UNION เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชเช• เชธเชพเชฅเซ‡ เช˜เชฃเชพ เชฌเซเชฒเซ‹เช•เซเชธ "เช—เซเช‚เชฆเชฐเชตเชพเชณเซเช‚" เช›เซ‡, เชชเช›เซ€ Append-เชคเซเชฏเชพเช‚ เชนเชœเซ เชชเชฃ เชฎเชพเชคเซเชฐ เชเช• เชจเซ‹เชก เชนเชถเซ‡, เชชเชฐเช‚เชคเซ เชคเซ‡เชฎเชพเช‚ เชฌเซ‡ เชจเชนเซ€เช‚, เชชเชฐเช‚เชคเซ เช˜เชฃเชพ เชฌเชพเชณเช•เซ‹ เชนเชถเซ‡ - เช…เชจเซเช•เซเชฐเชฎเซ‡ เชคเซ‡เช“ เชœเซ‡ เช•เซเชฐเชฎเชฎเชพเช‚ เชœเชพเชฏ เช›เซ‡ เชคเซ‡ เชชเซเชฐเชฎเชพเชฃเซ‡:

  (...) -- #1
UNION ALL
  (...) -- #2
UNION ALL
  (...) -- #3

Append
  -> ... #1
  -> ... #2
  -> ... #3

เชซเซ‚เชฆเชกเซ€ เชธเชพเชฅเซ‡ เชธเชฎเชธเซเชฏเชพ: เชชเซเชจเชฐเชพเชตเชฐเซเชคเชฟเชค เชจเชฎเซ‚เชจเชพ เชชเซ‡เชขเซ€เชจเซ€ เช…เช‚เชฆเชฐ (WITH RECURSIVE) เชชเชฃ เชเช• เช•เชฐเชคเชพเช‚ เชตเชงเซ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡ UNION. เชชเชฐเช‚เชคเซ เช›เซ‡เชฒเซเชฒเชพ เชเช• เชชเช›เซ€ เชฎเชพเชคเซเชฐ เช›เซ‡เชฒเซเชฒเซ‹ เชฌเซเชฒเซ‹เช• เชนเช‚เชฎเซ‡เชถเชพ เชชเซเชจเชฐเชพเชตเชฐเซเชคเชฟเชค เชนเซ‹เชฏ เช›เซ‡ UNION. เช‰เชชเชฐเชจเซ€ เชฆเชฐเซ‡เช• เชตเชธเซเชคเซ เชเช• เช›เซ‡, เชชเชฐเช‚เชคเซ เช…เชฒเช— เช›เซ‡ UNION:

WITH RECURSIVE T AS(
  (...) -- #1
UNION ALL
  (...) -- #2, ั‚ัƒั‚ ะบะพะฝั‡ะฐะตั‚ัั ะณะตะฝะตั€ะฐั†ะธั ัั‚ะฐั€ั‚ะพะฒะพะณะพ ัะพัั‚ะพัะฝะธั ั€ะตะบัƒั€ัะธะธ
UNION ALL
  (...) -- #3, ั‚ะพะปัŒะบะพ ัั‚ะพั‚ ะฑะปะพะบ ั€ะตะบัƒั€ัะธะฒะฝั‹ะน ะธ ะผะพะถะตั‚ ัะพะดะตั€ะถะฐั‚ัŒ ะพะฑั€ะฐั‰ะตะฝะธะต ะบ T
)
...

เชคเชฎเชพเชฐเซ‡ เช†เชตเชพ เช‰เชฆเชพเชนเชฐเชฃเซ‹เชจเซ‡ "เชšเซ‹เช•เซ€ เชฐเชนเซ‡เชตเชพ" เชฎเชพเชŸเซ‡ เชชเชฃ เชธเช•เซเชทเชฎ เชฌเชจเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เช† เช‰เชฆเชพเชนเชฐเชฃเชฎเชพเช‚ เช†เชชเชฃเซ‡ เชคเซ‡ เชœเซ‹เชˆเช เช›เซ€เช UNION-เช…เชฎเชพเชฐเซ€ เชตเชฟเชจเช‚เชคเซ€เชฎเชพเช‚ 3 เชตเชฟเชญเชพเช—เซ‹ เชนเชคเชพ. เชคเชฆเชจเซเชธเชพเชฐ, เชเช• UNION ัะพะพั‚ะฒะตั‚ัั‚ะฒัƒะตั‚ Append-เชจเซ‹เชก, เช…เชจเซ‡ เชฌเซ€เชœเชพเชจเซ‡ - Recursive Union.
PostgreSQL เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฐเซ‹เชซเชพเช‡เชฒเชฐ: เชชเซเชฒเชพเชจ เช…เชจเซ‡ เช•เซเชตเซ‡เชฐเซ€เชจเซ‹ เชฎเซ‡เชณ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฎเซ‡เชณเชตเชตเซ‹

เชกเซ‡เชŸเชพ เชตเชพเช‚เชšเซ‹-เชฒเช–เซ‹

เชฌเชงเซเช‚ เช—เซ‹เช เชตเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เช›เซ‡, เชนเชตเซ‡ เช†เชชเชฃเซ‡ เชœเชพเชฃเซ€เช เช›เซ€เช เช•เซ‡ เชตเชฟเชจเช‚เชคเซ€เชจเซ‹ เช•เชฏเซ‹ เชญเชพเช— เชฏเซ‹เชœเชจเชพเชจเชพ เช•เชฏเชพ เชญเชพเช—เชจเซ‡ เช…เชจเซเชฐเซ‚เชช เช›เซ‡. เช…เชจเซ‡ เช† เชŸเซเช•เชกเชพเช“เชฎเชพเช‚ เช†เชชเชฃเซ‡ เชธเชฐเชณเชคเชพเชฅเซ€ เช…เชจเซ‡ เช•เซเชฆเชฐเชคเซ€ เชฐเซ€เชคเซ‡ เชคเซ‡ เชตเชธเซเชคเซเช“ เชถเซ‹เชงเซ€ เชถเช•เซ€เช เช›เซ€เช เชœเซ‡ "เชตเชพเช‚เชšเซ€ เชถเช•เชพเชฏ เชคเซ‡เชตเชพ" เช›เซ‡.

เชชเซเชฐเชถเซเชจเชจเชพ เชฆเซƒเชทเซเชŸเชฟเช•เซ‹เชฃเชฅเซ€, เช…เชฎเชจเซ‡ เช–เชฌเชฐ เชจเชฅเซ€ เช•เซ‡ เชคเซ‡ เชŸเซ‡เชฌเชฒ เช›เซ‡ เช•เซ‡ CTE, เชชเชฐเช‚เชคเซ เชคเซ‡ เชธเชฎเชพเชจ เชจเซ‹เชก เชฆเซเชตเชพเชฐเชพ เชจเชฟเชฏเซเช•เซเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเชพ เช›เซ‡. RangeVar. เช…เชจเซ‡ "เชตเชพเช‚เชšเชจเช•เซเชทเชฎเชคเชพ" เชจเซ€ เชฆเซเชฐเชทเซเชŸเชฟเช, เช† เชจเซ‹เชกเซเชธเชจเซ‹ เชเช•เชฆเชฎ เชฎเชฐเซเชฏเชพเชฆเชฟเชค เชธเชฎเซ‚เชน เชชเชฃ เช›เซ‡:

  • Seq Scan on [tbl]
  • Bitmap Heap Scan on [tbl]
  • Index [Only] Scan [Backward] using [idx] on [tbl]
  • CTE Scan on [cte]
  • Insert/Update/Delete on [tbl]

เช…เชฎเซ‡ เชชเซเชฒเชพเชจ เช…เชจเซ‡ เช•เซเชตเซ‡เชฐเซ€เชจเซเช‚ เชฎเชพเชณเช–เซเช‚ เชœเชพเชฃเซ€เช เช›เซ€เช, เช…เชฎเซ‡ เชฌเซเชฒเซ‹เช•เซเชธเชจเชพ เชชเชคเซเชฐเชตเซเชฏเชตเชนเชพเชฐ เชœเชพเชฃเซ€เช เช›เซ€เช, เช…เชฎเซ‡ เช‘เชฌเซเชœเซ‡เช•เซเชŸเชจเชพ เชจเชพเชฎ เชœเชพเชฃเซ€เช เช›เซ€เช - เช…เชฎเซ‡ เชเช•-เชฅเซ€-เชเช• เชธเชฐเช–เชพเชฎเชฃเซ€ เช•เชฐเซ€เช เช›เซ€เช.
PostgreSQL เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฐเซ‹เชซเชพเช‡เชฒเชฐ: เชชเซเชฒเชพเชจ เช…เชจเซ‡ เช•เซเชตเซ‡เชฐเซ€เชจเซ‹ เชฎเซ‡เชณ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฎเซ‡เชณเชตเชตเซ‹

เชซเชฐเซ€ เช•เชพเชฐเซเชฏ "เชเช• เชซเซ‚เชฆเชกเซ€ เชธเชพเชฅเซ‡". เช…เชฎเซ‡ เชตเชฟเชจเช‚เชคเซ€ เชฒเชˆเช เช›เซ€เช, เชคเซ‡เชจเซ‡ เช…เชฎเชฒเชฎเชพเช‚ เชฎเซ‚เช•เซ€เช เช›เซ€เช, เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เช•เซ‹เชˆ เช‰เชชเชจเชพเชฎ เชจเชฅเซ€ - เช…เชฎเซ‡ เชคเซ‡เชจเซ‡ เชเช• เชœ CTE เชฅเซ€ เชฌเซ‡ เชตเชพเชฐ เชตเชพเช‚เชšเซ€เช เช›เซ€เช.
PostgreSQL เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฐเซ‹เชซเชพเช‡เชฒเชฐ: เชชเซเชฒเชพเชจ เช…เชจเซ‡ เช•เซเชตเซ‡เชฐเซ€เชจเซ‹ เชฎเซ‡เชณ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฎเซ‡เชณเชตเชตเซ‹

เช…เชฎเซ‡ เชฏเซ‹เชœเชจเชพ เชœเซ‹เชˆเช เช›เซ€เช - เชธเชฎเชธเซเชฏเชพ เชถเซเช‚ เช›เซ‡? เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เช‰เชชเชจเชพเชฎ เชถเชพ เชฎเชพเชŸเซ‡ เชนเชคเซเช‚? เช…เชฎเซ‡ เชคเซ‡เชจเซ‡ เช“เชฐเซเชกเชฐ เช•เชฐเซเชฏเซ‹ เชจเชฅเซ€. เชคเซ‡เชจเซ‡ เช†เชตเซ‹ โ€œเชจเช‚เชฌเชฐ เชจเช‚เชฌเชฐโ€ เช•เซเชฏเชพเช‚เชฅเซ€ เชฎเชณเซ‡?

PostgreSQL เชคเซ‡เชจเซ‡ เชชเซ‹เชคเซ‡ เช‰เชฎเซ‡เชฐเซ‡ เช›เซ‡. เชคเชฎเชพเชฐเซ‡ เชซเช•เซเชค เชคเซ‡ เชธเชฎเชœเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เชฎเชพเชคเซเชฐ เช†เชตเชพ เช‰เชชเชจเชพเชฎ เช…เชฎเชพเชฐเชพ เชฎเชพเชŸเซ‡, เชฏเซ‹เชœเชจเชพ เชธเชพเชฅเซ‡ เชธเชฐเช–เชพเชฎเชฃเซ€ เช•เชฐเชตเชพเชจเชพ เชนเซ‡เชคเซเชฅเซ€, เชคเซ‡เชจเซ‹ เช•เซ‹เชˆ เช…เชฐเซเชฅ เชจเชฅเซ€, เชคเซ‡ เช…เชนเซ€เช‚ เชธเชฐเชณ เชฐเซ€เชคเซ‡ เช‰เชฎเซ‡เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชšเชพเชฒเซ‹ เชคเซ‡เชจเชพ เชชเชฐ เชงเซเชฏเชพเชจ เชจ เช†เชชเซ€เช.

เชฌเซ€เชœเซ‹ เช•เชพเชฐเซเชฏ "เชเช• เชซเซ‚เชฆเชกเซ€ เชธเชพเชฅเซ‡": เชœเซ‹ เช†เชชเชฃเซ‡ เชชเชพเชฐเซเชŸเซ€เชถเชจ เช•เชฐเซ‡เชฒ เช•เซ‹เชทเซเชŸเช•เชฎเชพเช‚เชฅเซ€ เชตเชพเช‚เชšเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช, เชคเซ‹ เช†เชชเชฃเชจเซ‡ เชจเซ‹เชก เชฎเชณเชถเซ‡ Append เช…เชฅเชตเชพ Merge Append, เชœเซ‡เชฎเชพเช‚ เชฎเซ‹เชŸเซ€ เชธเช‚เช–เซเชฏเชพเชฎเชพเช‚ "เชฌเชพเชณเช•เซ‹" เชนเชถเซ‡, เช…เชจเซ‡ เชœเซ‡เชฎเชพเช‚เชฅเซ€ เชฆเชฐเซ‡เช• เช•เซ‹เชˆเช• เชฐเซ€เชคเซ‡ เชนเชถเซ‡ ScanเชŸเซ‡เชฌเชฒ-เชตเชฟเชญเชพเช—เชฎเชพเช‚เชฅเซ€ เช“เชฎ: Seq Scan, Bitmap Heap Scan เช…เชฅเชตเชพ Index Scan. เชชเชฐเช‚เชคเซ, เช•เซ‹เชˆ เชชเชฃ เชธเช‚เชœเซ‹เช—เซ‹เชฎเชพเช‚, เช† "เชฌเชพเชณเช•เซ‹" เชœเชŸเชฟเชฒ เชชเซเชฐเชถเซเชจเซ‹ เชนเชถเซ‡ เชจเชนเซ€เช‚ - เช† เชฐเซ€เชคเซ‡ เช† เช—เชพเช‚เช เซ‹เชจเซ‡ เช…เชฒเช— เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡ Append เช…เช‚เชคเซ‡ UNION.
PostgreSQL เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฐเซ‹เชซเชพเช‡เชฒเชฐ: เชชเซเชฒเชพเชจ เช…เชจเซ‡ เช•เซเชตเซ‡เชฐเซ€เชจเซ‹ เชฎเซ‡เชณ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฎเซ‡เชณเชตเชตเซ‹

เช…เชฎเซ‡ เช†เชตเซ€ เช—เชพเช‚เช เซ‹ เชชเชฃ เชธเชฎเชœเซ€เช เช›เซ€เช, เชคเซ‡เชฎเชจเซ‡ "เชเช• เช–เซ‚เช‚เชŸเซ‹เชฎเชพเช‚" เชเช•เชคเซเชฐเชฟเชค เช•เชฐเซ€เช เช›เซ€เช เช…เชจเซ‡ เช•เชนเซ€เช เช›เซ€เช: "เชคเชฎเซ‡ เชฎเซ‡เช—เซ‡เชŸเซ‡เชฌเชฒเชฎเชพเช‚เชฅเซ€ เชœเซ‡ เชตเชพเช‚เชšเซ‹ เช›เซ‹ เชคเซ‡ เชฌเชงเซเช‚ เช…เชนเซ€เช‚ เช…เชจเซ‡ เชเชพเชก เชจเซ€เชšเซ‡ เช›เซ‡".

"เชธเชฐเชณ" เชกเซ‡เชŸเชพ เชชเซเชฐเชพเชชเซเชค เช•เชฐเชคเซ€ เชจเซ‹เชกเซเชธ

PostgreSQL เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฐเซ‹เชซเชพเช‡เชฒเชฐ: เชชเซเชฒเชพเชจ เช…เชจเซ‡ เช•เซเชตเซ‡เชฐเซ€เชจเซ‹ เชฎเซ‡เชณ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฎเซ‡เชณเชตเชตเซ‹

Values Scan เชฏเซ‹เชœเชจเชพเชฎเชพเช‚ เช…เชจเซเชฐเซ‚เชช เช›เซ‡ VALUES เชตเชฟเชจเช‚เชคเซ€เชฎเชพเช‚.

Result เชตเช—เชฐ เชตเชฟเชจเช‚เชคเซ€ เช›เซ‡ FROM เช—เชฎเซ‡ เช›เซ‡ SELECT 1. เช…เชฅเชตเชพ เชœเซเชฏเชพเชฐเซ‡ เชคเชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เช‡เชฐเชพเชฆเชพเชชเซ‚เชฐเซเชตเช• เช–เซ‹เชŸเซ€ เช…เชญเชฟเชตเซเชฏเช•เซเชคเชฟ เชนเซ‹เชฏ WHERE-block (เชชเช›เซ€ เชเชŸเซเชฐเซ€เชฌเซเชฏเซเชŸ เชฆเซ‡เช–เชพเชฏ เช›เซ‡ One-Time Filter):

EXPLAIN ANALYZE
SELECT * FROM pg_class WHERE FALSE; -- ะธะปะธ 0 = 1

Result  (cost=0.00..0.00 rows=0 width=230) (actual time=0.000..0.000 rows=0 loops=1)
  One-Time Filter: false

Function Scan เชธเชฎเชพเชจ เชจเชพเชฎเชจเชพ SRF เชฎเชพเชŸเซ‡ โ€œเชจเช•เชถเซ‹โ€.

เชชเชฐเช‚เชคเซ เชจเซ‡เชธเซเชŸเซ‡เชก เช•เซเชตเซ‡เชฐเซ€เช เชธเชพเชฅเซ‡ เชฌเชงเซเช‚ เชตเชงเซ เชœเชŸเชฟเชฒ เช›เซ‡ - เช•เชฎเชจเชธเซ€เชฌเซ‡, เชคเซ‡ เชนเช‚เชฎเซ‡เชถเชพ เชฌเชฆเชฒเชพเชคเชพ เชจเชฅเซ€ InitPlan/SubPlan. เช•เซเชฏเชพเชฐเซ‡เช• เชคเซ‡เช“ เชฎเชพเช‚ เชซเซ‡เชฐเชตเซ‡ เช›เซ‡ ... Join เช…เชฅเชตเชพ ... Anti Join, เช–เชพเชธ เช•เชฐเซ€เชจเซ‡ เชœเซเชฏเชพเชฐเซ‡ เชคเชฎเซ‡ เช•เช‚เชˆเช• เชฒเช–เซ‹ เช›เซ‹ WHERE NOT EXISTS .... เช…เชจเซ‡ เช…เชนเซ€เช‚ เชคเซ‡เชฎเชจเซ‡ เชœเซ‹เชกเชตเชพเชจเซเช‚ เชนเช‚เชฎเซ‡เชถเชพ เชถเช•เซเชฏ เชจเชฅเซ€ - เชฏเซ‹เชœเชจเชพเชจเชพ เชŸเซ‡เช•เซเชธเซเชŸเชฎเชพเช‚ เชฏเซ‹เชœเชจเชพเชจเชพ เช—เชพเช‚เช เซ‹เชจเซ‡ เช…เชจเซเชฐเซ‚เชช เช•เซ‹เชˆ เช“เชชเชฐเซ‡เชŸเชฐเซเชธ เชจเชฅเซ€.

เชซเชฐเซ€ เช•เชพเชฐเซเชฏ "เชเช• เชซเซ‚เชฆเชกเซ€ เชธเชพเชฅเซ‡": เช•เซ‡เชŸเชฒเชพเช• VALUES เชตเชฟเชจเช‚เชคเซ€เชฎเชพเช‚. เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ เช…เชจเซ‡ เชฏเซ‹เชœเชจเชพเชฎเชพเช‚ เชคเชฎเชจเซ‡ เช˜เชฃเชพ เช—เชพเช‚เช เซ‹ เชฎเชณเชถเซ‡ Values Scan.
PostgreSQL เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฐเซ‹เชซเชพเช‡เชฒเชฐ: เชชเซเชฒเชพเชจ เช…เชจเซ‡ เช•เซเชตเซ‡เชฐเซ€เชจเซ‹ เชฎเซ‡เชณ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฎเซ‡เชณเชตเชตเซ‹

"เช•เซเชฐเชฎเชพเช‚เช•เชฟเชค" เชชเซเชฐเชคเซเชฏเชฏเซ‹ เชคเซ‡เชฎเชจเซ‡ เชเช• เชฌเซ€เชœเชพเชฅเซ€ เช…เชฒเช— เชชเชพเชกเชตเชพเชฎเชพเช‚ เชฎเชฆเชฆ เช•เชฐเชถเซ‡ - เชคเซ‡ เช•เซเชฐเชฎเชฎเชพเช‚ เชฌเชฐเชพเชฌเชฐ เช‰เชฎเซ‡เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เชœเซ‡เชฎเชพเช‚ เช…เชจเซเชฐเซ‚เชช เชชเซเชฐเชคเซเชฏเชฏเซ‹ เชœเซ‹เชตเชพ เชฎเชณเซ‡ เช›เซ‡. VALUES- เช‰เชชเชฐเชฅเซ€ เชจเซ€เชšเซ‡ เชธเซเชงเซ€ เชตเชฟเชจเช‚เชคเซ€ เชธเชพเชฅเซ‡ เช…เชตเชฐเซ‹เชงเชฟเชค เช•เชฐเซ‹.

เชกเซ‡เชŸเชพ เชชเซเชฐเซ‹เชธเซ‡เชธเชฟเช‚เช—

เชเชตเซเช‚ เชฒเชพเช—เซ‡ เช›เซ‡ เช•เซ‡ เช…เชฎเชพเชฐเซ€ เชตเชฟเชจเช‚เชคเซ€เชฎเชพเช‚ เชฌเชงเซเช‚ เชœ เช‰เช•เซ‡เชฒเชพเชˆ เช—เชฏเซเช‚ เช›เซ‡ - เชœเซ‡ เชฌเชพเช•เซ€ เช›เซ‡ เชคเซ‡ เช›เซ‡ Limit.
PostgreSQL เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฐเซ‹เชซเชพเช‡เชฒเชฐ: เชชเซเชฒเชพเชจ เช…เชจเซ‡ เช•เซเชตเซ‡เชฐเซ€เชจเซ‹ เชฎเซ‡เชณ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฎเซ‡เชณเชตเชตเซ‹

เชชเชฐเช‚เชคเซ เช…เชนเซ€เช‚ เชฌเชงเซเช‚ เชธเชฐเชณ เช›เซ‡ - เชœเซ‡เชฎ เช•เซ‡ เช—เชพเช‚เช เซ‹ Limit, Sort, Aggregate, WindowAgg, Unique เชตเชฟเชจเช‚เชคเซ€เชฎเชพเช‚ เชธเช‚เชฌเช‚เชงเชฟเชค เช“เชชเชฐเซ‡เชŸเชฐเซ‹เชจเซ‡ เชเช•-เชเช• เชธเชพเชฅเซ‡ โ€œเชจเช•เชถเซ‹โ€ เช†เชชเซ‹, เชœเซ‹ เชคเซ‡เช“ เชคเซเชฏเชพเช‚ เชนเซ‹เชฏ เชคเซ‹. เช…เชนเซ€เช‚ เช•เซ‹เชˆ "เชคเชพเชฐเชพ" เช…เชฅเชตเชพ เชฎเซเชถเซเช•เซ‡เชฒเซ€เช“ เชจเชฅเซ€.
PostgreSQL เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฐเซ‹เชซเชพเช‡เชฒเชฐ: เชชเซเชฒเชพเชจ เช…เชจเซ‡ เช•เซเชตเซ‡เชฐเซ€เชจเซ‹ เชฎเซ‡เชณ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฎเซ‡เชณเชตเชตเซ‹

เชœเซ‹เชกเชพเช“

เชœเซเชฏเชพเชฐเซ‡ เช†เชชเชฃเซ‡ เชญเซ‡เช—เชพ เชฅเชตเชพ เชฎเชพเช‚เช—เซ€เช เช›เซ€เช เชคเซเชฏเชพเชฐเซ‡ เชฎเซเชถเซเช•เซ‡เชฒเซ€เช“ เชŠเชญเซ€ เชฅเชพเชฏ เช›เซ‡ JOIN เชชเซ‹เชคเชพเชจเซ€ เชตเชšเซเชšเซ‡. เช† เชนเช‚เชฎเซ‡เชถเชพ เชถเช•เซเชฏ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เชคเซ‡ เชถเช•เซเชฏ เช›เซ‡.
PostgreSQL เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฐเซ‹เชซเชพเช‡เชฒเชฐ: เชชเซเชฒเชพเชจ เช…เชจเซ‡ เช•เซเชตเซ‡เชฐเซ€เชจเซ‹ เชฎเซ‡เชณ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฎเซ‡เชณเชตเชตเซ‹

เช•เซเชตเซ‡เชฐเซ€ เชชเชพเชฐเซเชธเชฐเชจเชพ เชฆเซƒเชทเซเชŸเชฟเช•เซ‹เชฃเชฅเซ€, เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชจเซ‹เชก เช›เซ‡ JoinExpr, เชœเซ‡เชฎเชพเช‚ เชฌเชฐเชพเชฌเชฐ เชฌเซ‡ เชฌเชพเชณเช•เซ‹ เช›เซ‡ - เชกเชพเชฌเซ‡ เช…เชจเซ‡ เชœเชฎเชฃเซ‡. เช†, เชคเซ‡ เชฎเซเชœเชฌ, เชคเชฎเชพเชฐเซ€ เชœเซ‹เชกเชพเชตเชพ เชฎเชพเชŸเซ‡ "เช‰เชชเชฐ" เชถเซเช‚ เช›เซ‡ เช…เชจเซ‡ เชตเชฟเชจเช‚เชคเซ€เชฎเชพเช‚ "เชจเซ€เชšเซ‡" เชถเซเช‚ เชฒเช–เซ‡เชฒเซเช‚ เช›เซ‡.

เช…เชจเซ‡ เชฏเซ‹เชœเชจเชพเชจเชพ เชฆเซƒเชทเซเชŸเชฟเช•เซ‹เชฃเชฅเซ€, เช† เช•เซ‡เชŸเชฒเชพเช•เชจเชพ เชฌเซ‡ เชตเช‚เชถเชœเซ‹ เช›เซ‡ * Loop/* Join-เชจเซ‹เชก. Nested Loop, Hash Anti Join,... - เชคเซ‡เชจเชพ เชœเซ‡เชตเซเช‚ เช•เช‚เช‡เช•.

เชšเชพเชฒเซ‹ เชธเชฐเชณ เชคเชฐเซเช•เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เช: เชœเซ‹ เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เช•เซ‹เชทเซเชŸเช•เซ‹ A เช…เชจเซ‡ B เช›เซ‡ เชœเซ‡ เชฏเซ‹เชœเชจเชพเชฎเชพเช‚ เชเช•เชฌเซ€เชœเชพเชจเซ‡ "เชœเซ‹เชกเชพเชตเซ‡" เช›เซ‡, เชคเซ‹ เชตเชฟเชจเช‚เชคเซ€เชฎเชพเช‚ เชคเซ‡เช“ เช•เซเชฏเชพเช‚ เชคเซ‹ เชธเซเชฅเชฟเชค เชฅเชˆ เชถเช•เซ‡ เช›เซ‡ A-JOIN-B, เช…เชฅเชตเชพ B-JOIN-A. เชšเชพเชฒเซ‹ เช† เชฐเซ€เชคเซ‡ เชญเซ‡เช—เชพ เช•เชฐเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ€เช, เชšเชพเชฒเซ‹ เชฌเซ€เชœเซ€ เชฐเซ€เชคเซ‡ เชญเซ‡เช—เชพ เช•เชฐเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ€เช, เช…เชจเซ‡ เช† เชฐเซ€เชคเซ‡ เชœเซเชฏเชพเช‚ เชธเซเชงเซ€ เช†เชชเชฃเซ‡ เช†เชตเซ€ เชœเซ‹เชกเซ€เช“ เชธเชฎเชพเชชเซเชค เชจ เชฅเชˆเช เชคเซเชฏเชพเช‚ เชธเซเชงเซ€.

เชšเชพเชฒเซ‹ เช†เชชเชฃเซเช‚ เชธเชฟเชจเซเชŸเซ‡เช•เซเชธ เชŸเซเชฐเซ€ เชฒเชˆเช, เช†เชชเชฃเซ€ เชฏเซ‹เชœเชจเชพ เชฒเชˆเช, เชคเซ‡เชฎเชจเซ‡ เชœเซ‹เชˆเช... เชธเชฎเชพเชจ เชจเชฅเซ€!
PostgreSQL เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฐเซ‹เชซเชพเช‡เชฒเชฐ: เชชเซเชฒเชพเชจ เช…เชจเซ‡ เช•เซเชตเซ‡เชฐเซ€เชจเซ‹ เชฎเซ‡เชณ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฎเซ‡เชณเชตเชตเซ‹

เชšเชพเชฒเซ‹ เชคเซ‡เชจเซ‡ เช—เซเชฐเชพเชซเชจเชพ เชฐเซ‚เชชเชฎเชพเช‚ เชซเชฐเซ€เชฅเซ€ เชฆเซ‹เชฐเซ€เช - เช“เชน, เชคเซ‡ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เช•เช‚เชˆเช• เชœเซ‡เชตเซเช‚ เชฒเชพเช—เซ‡ เช›เซ‡!
PostgreSQL เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฐเซ‹เชซเชพเช‡เชฒเชฐ: เชชเซเชฒเชพเชจ เช…เชจเซ‡ เช•เซเชตเซ‡เชฐเซ€เชจเซ‹ เชฎเซ‡เชณ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฎเซ‡เชณเชตเชตเซ‹

เชšเชพเชฒเซ‹ เชจเซ‹เช‚เชง เชฒเชˆเช เช•เซ‡ เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เช—เชพเช‚เช เซ‹ เช›เซ‡ เชœเซ‡ เชเช• เชธเชพเชฅเซ‡ เชฌเชพเชณเช•เซ‹ B เช…เชจเซ‡ C เชงเชฐเชพเชตเซ‡ เช›เซ‡ - เช…เชฎเซ‡ เช•เชฏเชพ เช•เซเชฐเชฎเชฎเชพเช‚ เช•เชพเชณเชœเซ€ เชฒเซ‡เชคเชพ เชจเชฅเซ€. เชšเชพเชฒเซ‹ เชคเซ‡เชฎเชจเซ‡ เชญเซ‡เช—เชพ เช•เชฐเซ€เช เช…เชจเซ‡ เชจเซ‹เชกเชจเชพ เชšเชฟเชคเซเชฐเชจเซ‡ เชซเซ‡เชฐเชตเซ€เช.
PostgreSQL เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฐเซ‹เชซเชพเช‡เชฒเชฐ: เชชเซเชฒเชพเชจ เช…เชจเซ‡ เช•เซเชตเซ‡เชฐเซ€เชจเซ‹ เชฎเซ‡เชณ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฎเซ‡เชณเชตเชตเซ‹

เชšเชพเชฒเซ‹ เชซเชฐเซ€ เชœเซ‹เชˆเช. เชนเชตเซ‡ เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชฌเชพเชณเช•เซ‹ A เช…เชจเซ‡ เชœเซ‹เชกเซ€เช“ (B + C) เชธเชพเชฅเซ‡ เชจเซ‹เชกเซเชธ เช›เซ‡ - เชคเซ‡เชฎเชจเซ€ เชธเชพเชฅเซ‡ เชชเชฃ เชธเซเชธเช‚เช—เชค เช›เซ‡.
PostgreSQL เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฐเซ‹เชซเชพเช‡เชฒเชฐ: เชชเซเชฒเชพเชจ เช…เชจเซ‡ เช•เซเชตเซ‡เชฐเซ€เชจเซ‹ เชฎเซ‡เชณ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฎเซ‡เชณเชตเชตเซ‹

เชฎเชนเชพเชจ! เชคเซ‡ เชคเชพเชฐเชฃ เช†เชชเซ‡ เช›เซ‡ เช•เซ‡ เช…เชฎเซ‡ เช† เชฌเซ‡ เช›เซ€เช JOIN เชชเซเชฒเชพเชจ เชจเซ‹เชกเซเชธ เชธเชพเชฅเซ‡ เชตเชฟเชจเช‚เชคเซ€เชฅเซ€ เชธเชซเชณเชคเชพเชชเซ‚เชฐเซเชตเช• เชœเซ‹เชกเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเชพ เชนเชคเชพ.

เช…เชฐเซ‡, เช† เชธเชฎเชธเซเชฏเชพ เชนเช‚เชฎเซ‡เชถเชพ เชนเชฒ เชฅเชคเซ€ เชจเชฅเซ€.
PostgreSQL เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฐเซ‹เชซเชพเช‡เชฒเชฐ: เชชเซเชฒเชพเชจ เช…เชจเซ‡ เช•เซเชตเซ‡เชฐเซ€เชจเซ‹ เชฎเซ‡เชณ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฎเซ‡เชณเชตเชตเซ‹

เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชœเซ‹ เชตเชฟเชจเช‚เชคเซ€เชฎเชพเช‚ เชนเซ‹เชฏ A JOIN B JOIN C, เช…เชจเซ‡ เชฏเซ‹เชœเชจเชพเชฎเชพเช‚, เชธเซŒ เชชเซเชฐเชฅเชฎ, "เชฌเชพเชนเซเชฏ" เชจเซ‹เชกเซเชธ A เช…เชจเซ‡ C เชœเซ‹เชกเชพเชฏเซ‡เชฒเชพ เชนเชคเชพ. เชชเชฐเช‚เชคเซ เชตเชฟเชจเช‚เชคเซ€เชฎเชพเช‚ เช†เชตเชพ เช•เซ‹เชˆ เช“เชชเชฐเซ‡เชŸเชฐ เชจเชฅเซ€, เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชนเชพเช‡เชฒเชพเช‡เชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช•เช‚เชˆ เชจเชฅเซ€, เชธเช‚เช•เซ‡เชค เชœเซ‹เชกเชตเชพ เชฎเชพเชŸเซ‡ เช•เช‚เชˆ เชจเชฅเซ€. เชœเซเชฏเชพเชฐเซ‡ เชคเชฎเซ‡ เชฒเช–เซ‹ เช›เซ‹ เชคเซเชฏเชพเชฐเซ‡ เชคเซ‡ "เช…เชฒเซเชชเชตเชฟเชฐเชพเชฎ" เชธเชพเชฅเซ‡ เชธเชฎเชพเชจ เช›เซ‡ A, B.

เชชเชฐเช‚เชคเซ, เชฎเซ‹เชŸเชพเชญเชพเช—เชจเชพ เช•เชฟเชธเซเชธเชพเช“เชฎเชพเช‚, เชฒเช—เชญเช— เชคเชฎเชพเชฎ เช—เชพเช‚เช เซ‹ "เช–เซเชฒเซเชฒเซ€" เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡ เช…เชจเซ‡ เชคเชฎเซ‡ เชธเชฎเชฏเชธเชฐ เชกเชพเชฌเซ€ เชฌเชพเชœเซเช เช† เชชเซเชฐเช•เชพเชฐเชจเซ€ เชชเซเชฐเซ‹เชซเชพเช‡เชฒเชฟเช‚เช— เชฎเซ‡เชณเชตเซ€ เชถเช•เซ‹ เช›เซ‹ - เชถเชพเชฌเซเชฆเชฟเช• เชฐเซ€เชคเซ‡, เชœเซ‡เชฎ เช•เซ‡ Google Chrome เชฎเชพเช‚ เชœเซเชฏเชพเชฐเซ‡ เชคเชฎเซ‡ JavaScript เช•เซ‹เชกเชจเซเช‚ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เช•เชฐเซ‹ เช›เซ‹. เชคเชฎเซ‡ เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹ เช•เซ‡ เชฆเชฐเซ‡เช• เชฒเชพเช‡เชจ เช…เชจเซ‡ เชฆเชฐเซ‡เช• เชธเซเชŸเซ‡เชŸเชฎเซ‡เชจเซเชŸเชจเซ‡ "เชเช•เซเชเซ€เช•เซเชฏเซเชŸ" เช•เชฐเชตเชพเชฎเชพเช‚ เช•เซ‡เชŸเชฒเซ‹ เชธเชฎเชฏ เชฒเชพเช—เซเชฏเซ‹.
PostgreSQL เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฐเซ‹เชซเชพเช‡เชฒเชฐ: เชชเซเชฒเชพเชจ เช…เชจเซ‡ เช•เซเชตเซ‡เชฐเซ€เชจเซ‹ เชฎเซ‡เชณ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฎเซ‡เชณเชตเชตเซ‹

เช…เชจเซ‡ เช† เชฌเชงเชพเชจเซ‹ เช‰เชชเชฏเซ‹เช— เชคเชฎเชพเชฐเชพ เชฎเชพเชŸเซ‡ เชตเชงเซ เช…เชจเซเช•เซ‚เชณ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡, เช…เชฎเซ‡ เชธเซเชŸเซ‹เชฐเซ‡เชœ เชฌเชจเชพเชตเซเชฏเซเช‚ เช›เซ‡ เช†เชฐเซเช•เชพเช‡เชต, เชœเซเชฏเชพเช‚ เชคเชฎเซ‡ เชธเชพเชšเชตเซ€ เชถเช•เซ‹ เช›เซ‹ เช…เชจเซ‡ เชชเช›เซ€เชฅเซ€ เชธเช‚เชฌเช‚เชงเชฟเชค เชตเชฟเชจเช‚เชคเซ€เช“ เชธเชพเชฅเซ‡ เชคเชฎเชพเชฐเซ€ เชฏเซ‹เชœเชจเชพเช“ เชถเซ‹เชงเซ€ เชถเช•เซ‹ เช›เซ‹ เช…เชฅเชตเชพ เช•เซ‹เชˆเชจเซ€ เชธเชพเชฅเซ‡ เชฒเชฟเช‚เช• เชถเซ‡เชฐ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹.

เชœเซ‹ เชคเชฎเชพเชฐเซ‡ เชซเช•เซเชค เชตเชพเช‚เชšเซ€ เชจ เชถเช•เชพเชฏ เชคเซ‡เชตเซ€ เช•เซเชตเซ‡เชฐเซ€ เชชเชฐเซเชฏเชพเชชเซเชค เชธเซเชตเชฐเซ‚เชชเชฎเชพเช‚ เชฒเชพเชตเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชนเซ‹เชฏ, เชคเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹ เช…เชฎเชพเชฐเชพ "เชธเชพเชฎเชพเชจเซเชฏ".

PostgreSQL เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฐเซ‹เชซเชพเช‡เชฒเชฐ: เชชเซเชฒเชพเชจ เช…เชจเซ‡ เช•เซเชตเซ‡เชฐเซ€เชจเซ‹ เชฎเซ‡เชณ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฎเซ‡เชณเชตเชตเซ‹

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹