일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Eclipse
- SVN
- List
- c++11
- awk
- conda
- if
- pi
- with
- SSH
- ngui
- ubuntu
- 쉘
- sqlite
- boost
- autovacuum
- C++
- expect
- null
- Unity
- mysql
- postgresql
- Shader
- DROP
- sql
- pandas
- 배열
- FIND
- python
- dataframe
- Today
- Total
その先にあるもの…
[SQL] postgresql WITH, RECURSIVE, RETURNING 본문
WITH에 있는 작은 쿼리가 CTE( common table expression )가 되어 질의할 수 있다.
CTE는 사전 정의가 필요가 없으며 쿼리가 끝나면 소멸되고 재귀 쿼리에 사용될 수 있으며 여러행이 반환 가능하다.
동일 문에서 여러번 참조가 가능하다.
WITH cte-name[ ( column-name, ... ) ] AS (
SELECT, INSERT, UPDATE, DELETE
)[ , cte-name2[ ( column-name, ... ) ] AS (
SELECT, INSERT, UPDATE, DELETE
) ]
SELET * FROM cte-name, cte-name2;
설명: cte_name과 cte-name2의 쿼리 질의 후, 두 테이블 정보를 마지막 쿼리에 사용할 수 있다.
WITH에 RECURSIVE를 붙여 재귀호출을 할 수 있다.
WITH RECURSIVE cte-name( n ) AS (
-- 처음 호출 쿼리
SELECT 1
UNION [ ALL ]
-- 재귀 호출 쿼리
SELECT n+1 FROM cte-name WHERE n <= 100
)
-- 부모 또는 외부 쿼리
SELECT * FROM cte-name;
결과는 column n에 1부터 101까지의 ROW를 볼 수 있다.
RETURNING
INSERT, UPDATE, DELETE를 실행 후 처리한 ROW들을 알려고 할 때 사용된다.
UPDATE table-name SET column = value RETURING *;
RETURING *을 하면 모든 컬럼들이 나오고 보고 싶은 컬럼이 있으면 컬럼명을 쓰면 된다.
ex )
WITH cte as (
SELECT *, RANK() over( order by point DESC ) as rnk
FROM tb_rank
WHERE id = _id
)
UPDATE tb_list
SET ranking = rnk
FROM cte
WHERE tb_list.id = cte.id;
WITH cte as (
SELECT *
FROM tb_war
WHERE id = _id
)
INSERT INTO tb_war_reward( id, ranking, grade, honor, datetime, reward)
SELECT id, ranking, grade, honorpoint, now() + interval '1 day', 0
from cte;
https://www.postgresql.org/docs/9.1/static/queries-with.html
https://blog.gaerae.com/2015/10/postgresql-insert-update-returning.html
https://spoqa.github.io/2013/08/21/cte.html
http://www.postgresdba.com/bbs/board.php?bo_table=B10&wr_id=49
http://i5on9i.blogspot.kr/2016/02/postgresql-with-recursive.html
http://www.postgresdba.com/bbs/board.php?bo_table=P01&wr_id=69
http://yeobi27.tistory.com/entry/PostgreSQL-WITH-%EB%AC%B8
'프로그래밍 > SQL' 카테고리의 다른 글
[SQL] pgsql 배열 변수 (0) | 2018.10.18 |
---|---|
[SQL] postgresql 암호 변경 (0) | 2018.08.02 |
[SQL] postgresql SELECT INTO (0) | 2018.05.03 |
postgresql DELETE (0) | 2018.05.03 |
[SQL] postgresql UPDATE (0) | 2018.05.03 |