CodeGym /행동 /SQL SELF /RETURNING 사용해서 RETURNING으로 데이터...

RETURNING 사용해서 RETURNING으로 데이터 삽입/업데이트 후 값 받기

SQL SELF
레벨 22, 레슨 0
사용 가능

오늘은 우리 SQL 실력에 또 하나의 마법 같은 기능을 추가할 거야: 바로 RETURNING 명령어! 이건 진짜 강력한 도구인데, 삽입, 업데이트, 삭제 후에 바로 원하는 데이터를 다시 받아올 수 있어. 예를 들어, 테이블에 행을 추가하자마자 그 행의 고유 ID를 바로 받을 수 있다고 생각해봐. 완전 편하지? 그럼 바로 배워보자!

INSERT, UPDATE, DELETE 같은 작업을 하고 나면, 가끔 바로 영향을 받은 데이터를 받아와야 할 때가 있어. 예를 들어, 테이블에 새 행을 추가했을 때 자동으로 생성된 기본키(고유 식별자)가 필요할 수 있지. 이런 경우, 따로 데이터를 받으려고 또 쿼리를 날릴 필요 없이, RETURNING을 쓰면 한 번에 해결돼!

예를 들어, students 테이블에 새로운 학생을 추가한다고 해보자. 각 학생마다 자동으로 생성되는 고유 ID(student_id)가 있어. 새 레코드를 추가한 다음, 바로 그 ID를 받아서 학생의 수강 기록 같은 데에 써야 할 수도 있지. RETURNING 없이 하려면, 먼저 학생을 추가하고, 그 다음에 SELECT 쿼리로 ID를 찾아야 해. 근데 RETURNING을 쓰면 이걸 한 번에 끝낼 수 있어!

RETURNING 명령어 문법

RETURNING은 INSERT, UPDATE, DELETE 명령 뒤에 붙여서 써. 기본 문법은 이래:

-- INSERT 문법:
INSERT INTO 테이블 (column1, column2, ...)
VALUES (value1, value2, ...)
RETURNING 컬럼;

-- UPDATE 문법:
UPDATE 테이블
SET column1 = value1
WHERE 조건
RETURNING 컬럼;

-- DELETE 문법:
DELETE FROM 테이블
WHERE 조건
RETURNING 컬럼;

RETURNING을 쓰면, 변경된 행에서 어떤 컬럼을 받아올지 직접 지정할 수 있어. 예를 들어 기본키 하나만 받을 수도 있고, 여러 컬럼을 한 번에 받을 수도 있어.

INSERT에서 RETURNING 사용하기

예시로 students 테이블을 만들어보자:

CREATE TABLE students (
    student_id SERIAL PRIMARY KEY,
    first_name TEXT NOT NULL,
    last_name TEXT NOT NULL,
    email TEXT UNIQUE
);

새 학생을 추가하면서 바로 그 학생의 ID를 받아보자:

INSERT INTO students (first_name, last_name, email)
VALUES ('Otto', 'Lin', 'otto.lin@example.com')
RETURNING student_id;

이 쿼리를 실행하면 추가된 학생의 ID가 바로 반환돼:

student_id
1

방금 Otto Lin 학생을 추가했는데, PostgreSQL이 바로 student_id를 알려줬지? 완전 편하지!

이번엔 여러 컬럼을 한 번에 받아보자. 만약 student_id뿐만 아니라 학생의 이름, 성도 같이 받고 싶으면 RETURNING에 여러 컬럼을 지정하면 돼:

INSERT INTO students (first_name, last_name, email)
VALUES ('Alex', 'Ming', 'alex.ming@example.com')
RETURNING student_id, first_name, last_name;

결과:

student_id first_name last_name
2 Alex Ming

UPDATE에서 RETURNING 사용하기

가끔 데이터를 업데이트한 후에 어떤 행이 바뀌었는지 바로 알고 싶을 때가 있어. RETURNING이 이럴 때 딱이야.

예를 들어, Otto Lin 학생이 이메일을 바꾼다고 해보자. 데이터를 업데이트하면서 바뀐 행의 정보를 바로 받아보자:

UPDATE students
SET email = 'lin.new@example.com'
WHERE student_id = 1
RETURNING student_id, email;

결과:

student_id email
1 lin.new@example.com

이제 student_id = 1인 학생의 이메일이 제대로 바뀌었는지 바로 확인할 수 있어.

DELETE에서 RETURNING 사용하기

테이블에서 데이터를 삭제할 때, 어떤 행이 삭제됐는지 알고 싶을 때가 있지. RETURNING을 쓰면 삭제된 행의 데이터를 바로 받아올 수 있어.

예를 들어, Peter Ming 학생이 자퇴했다고 해보자. 그 학생을 테이블에서 삭제하면서 삭제된 정보를 받아보자:

DELETE FROM students
WHERE student_id = 2
RETURNING student_id, first_name, last_name;

결과:

student_id first_name last_name
2 Peter Ming

이제 진짜 Peter Ming 학생이 삭제됐다는 걸 확실히 알 수 있지.

실전 꿀팁

RETURNING을 꼭 써서, 영향을 받은 행의 데이터가 필요할 때 바로 받아와! 이걸로 DB 쿼리 횟수를 줄일 수 있어.

반환되는 데이터는 최소한으로! 만약 기본키만 필요하면, 그것만 받아와.

트랜잭션이랑 같이 쓰면 RETURNING은 진짜 강력해져. 예를 들어, 여러 연관된 테이블에 데이터를 추가할 때, RETURNING으로 받은 ID를 바로 넘겨줄 수 있어.

RETURNING 쓸 때 흔한 실수

초보자들이 자주 하는 실수 중 하나는 RETURNING이 변경된 행에만 적용된다는 걸 까먹는 거야. 예를 들어, UPDATE나 DELETE 쿼리가 아무 행도 못 찾으면, RETURNING은 빈 결과를 반환해. 놀라지 말고, 쿼리가 제대로 됐는지 확인하거나, 이런 경우를 코드에서 처리해줘.

또 하나 자주 나오는 실수는, 테이블에 없는 컬럼을 RETURNING에 넣는 거야. 꼭 요청하는 컬럼이 테이블에 있는지 확인해!

이제 RETURNING을 써서 데이터 작업을 훨씬 쉽게 할 수 있게 됐어. 이건 진짜 실전에서 엄청 유용한 도구니까, 꼭 써먹어봐! 앞으로 더 멋진 SQL 실력을 향해 고고!

2
과제
SQL SELF, 레벨 22, 레슨 0
잠금
데이터 삽입과 식별자 반환
데이터 삽입과 식별자 반환
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION