Bird
Raised Fist0
PostgreSQLquery~10 mins

Returning modified rows with RETURNING in PostgreSQL - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Returning modified rows with RETURNING
Start UPDATE/DELETE/INSERT
↓
Modify rows in table
↓
RETURNING clause activated?
No→No rows returned
Yes↓
Collect modified rows
↓
Return rows to client
When you run an UPDATE, DELETE, or INSERT with RETURNING, the database modifies rows and then sends back the changed rows to you.
Execution Sample
PostgreSQL
UPDATE employees
SET salary = salary * 1.1
WHERE department = 'Sales'
RETURNING id, salary;
This query increases salary by 10% for Sales department employees and returns their id and new salary.
Execution Table
StepRow IDOriginal SalaryCondition (department='Sales')ActionReturned Row
110150000TrueSalary updated to 55000id=101, salary=55000
210248000FalseNo changeNo
310352000TrueSalary updated to 57200id=103, salary=57200
410447000FalseNo changeNo
510551000TrueSalary updated to 56100id=105, salary=56100
6----Execution ends: all rows checked
💡 All rows processed; only rows matching condition updated and returned.
Variable Tracker
VariableStartAfter 1After 2After 3Final
salary for id=1015000055000550005500055000
salary for id=1024800048000480004800048000
salary for id=1035200052000572005720057200
salary for id=1044700047000470004700047000
salary for id=1055100051000510005610056100
Key Moments - 2 Insights
Why do some rows not appear in the RETURNING output even though they exist in the table?
Only rows that meet the WHERE condition and are modified by the UPDATE appear in RETURNING, as shown in execution_table rows 2 and 4 where condition is False and no rows are returned.
Does RETURNING show the old values or the new updated values?
RETURNING shows the new updated values after the modification, as seen in execution_table rows 1, 3, and 5 where salaries are increased.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the salary of employee with id=103 after the update?
A5200
B52000
C57200
DNone
💡 Hint
Check the 'Returned Row' and 'Action' columns for row 3 in execution_table.
At which step does the condition department='Sales' become false?
AStep 2
BStep 3
CStep 1
DStep 5
💡 Hint
Look at the 'Condition' column in execution_table rows to find where it is False.
If the RETURNING clause was removed, what would change in the execution?
AModified rows would still be returned
BNo rows would be returned after update
CThe update would not happen
DOnly the first row would be returned
💡 Hint
RETURNING controls what rows are sent back; without it, no rows are returned.
Concept Snapshot
UPDATE/DELETE/INSERT with RETURNING
modifies rows then returns those rows
RETURNING shows new values after change
Only modified rows matching condition return
Useful to get updated data immediately
Full Transcript
This visual execution shows how PostgreSQL processes an UPDATE with RETURNING. First, it checks each row in the table. If the row matches the condition (department='Sales'), it updates the salary by 10%. Then, because of RETURNING, it sends back the id and new salary of those updated rows. Rows not matching the condition are not changed and not returned. The variable tracker shows salary changes step by step. Key moments clarify why only some rows return and that RETURNING shows new values. The quiz tests understanding of these steps.

Practice

(1/5)
1. What does the RETURNING clause do in a PostgreSQL UPDATE statement?
easy
A. It delays the update until a commit is issued.
B. It prevents the update from modifying any rows.
C. It returns the rows that were updated immediately after the update.
D. It returns the number of rows in the table before the update.

Solution

  1. Step 1: Understand the purpose of RETURNING

    The RETURNING clause is used to get the data of rows affected by an INSERT, UPDATE, or DELETE immediately.
  2. Step 2: Apply to UPDATE statement

    When used with UPDATE, RETURNING shows the updated rows without needing a separate SELECT query.
  3. Final Answer:

    It returns the rows that were updated immediately after the update. -> Option C
  4. Quick Check:

    RETURNING shows changed rows = B [OK]
Hint: RETURNING shows changed rows right after modification [OK]
Common Mistakes:
  • Thinking RETURNING delays changes
  • Assuming RETURNING prevents updates
  • Confusing RETURNING with row count only
2. Which of the following is the correct syntax to return all columns of updated rows in PostgreSQL?
easy
A. UPDATE table_name SET col = val RETURNING ALL COLUMNS;
B. UPDATE table_name SET col = val RETURNING *;
C. UPDATE table_name SET col = val RETURNING ALL;
D. UPDATE table_name SET col = val RETURN *;

Solution

  1. Step 1: Recall correct RETURNING syntax

    PostgreSQL uses RETURNING followed by column names or * to return all columns.
  2. Step 2: Identify correct option

    Only UPDATE table_name SET col = val RETURNING *; uses RETURNING * which is valid syntax to return all columns.
  3. Final Answer:

    UPDATE table_name SET col = val RETURNING *; -> Option B
  4. Quick Check:

    RETURNING * returns all columns [OK]
Hint: Use RETURNING * to get all columns after update [OK]
Common Mistakes:
  • Using RETURN instead of RETURNING
  • Writing RETURNING ALL instead of RETURNING *
  • Adding extra keywords like ALL COLUMNS
3. Given the table users(id INT, name TEXT, age INT) with rows:
(1, 'Alice', 30), (2, 'Bob', 25)
What will this query return?
UPDATE users SET age = age + 1 WHERE id = 2 RETURNING id, age;
medium
A. (2, 26)
B. (2, 25)
C. (1, 31)
D. (1, 30)

Solution

  1. Step 1: Identify updated row

    The WHERE clause updates only the row with id = 2 (Bob).
  2. Step 2: Calculate new age and returned columns

    Bob's age increases from 25 to 26. RETURNING id, age returns (2, 26).
  3. Final Answer:

    (2, 26) -> Option A
  4. Quick Check:

    Updated row with id=2 returns new age 26 [OK]
Hint: RETURNING shows updated values immediately [OK]
Common Mistakes:
  • Returning old values instead of updated
  • Confusing which row is updated
  • Ignoring WHERE clause effect
4. What is wrong with this query?
UPDATE products SET price = price * 1.1 RETURNING;
medium
A. RETURNING cannot be used with UPDATE statements.
B. The multiplication operator * is invalid in UPDATE.
C. Missing WHERE clause causes syntax error.
D. RETURNING clause requires columns or * to specify what to return.

Solution

  1. Step 1: Check RETURNING syntax

    RETURNING must be followed by column names or *; empty RETURNING is invalid syntax.
  2. Step 2: Validate other parts

    Multiplication and UPDATE without WHERE are valid; RETURNING with no columns is the error.
  3. Final Answer:

    RETURNING clause requires columns or * to specify what to return. -> Option D
  4. Quick Check:

    RETURNING needs columns or * [OK]
Hint: Always specify columns or * after RETURNING [OK]
Common Mistakes:
  • Leaving RETURNING empty
  • Thinking WHERE is mandatory for syntax
  • Believing RETURNING disallowed in UPDATE
5. You want to increase the salary by 10% for employees in department 5 and get their id and new salary. Which query correctly does this and returns the updated rows?
hard
A. UPDATE employees SET salary = salary * 1.1 WHERE department_id = 5 RETURNING id, salary;
B. UPDATE employees SET salary = salary + 10 WHERE department_id = 5 RETURNING *;
C. UPDATE employees SET salary = salary * 1.1 RETURNING id, salary WHERE department_id = 5;
D. UPDATE employees SET salary = salary * 1.1 WHERE department_id = 5 RETURN id, salary;

Solution

  1. Step 1: Identify correct UPDATE with WHERE and RETURNING

    The query must update only department 5 employees and return id and salary.
  2. Step 2: Check syntax correctness

    UPDATE employees SET salary = salary * 1.1 WHERE department_id = 5 RETURNING id, salary; uses correct syntax: UPDATE ... SET ... WHERE ... RETURNING id, salary;
  3. Step 3: Eliminate incorrect options

    Adding a fixed 10 instead of multiplying by 1.1 doesn't implement a 10% increase. Placing RETURNING before WHERE is invalid syntax. Using RETURN instead of RETURNING is wrong.
  4. Final Answer:

    UPDATE employees SET salary = salary * 1.1 WHERE department_id = 5 RETURNING id, salary; -> Option A
  5. Quick Check:

    Correct syntax with WHERE and RETURNING columns [OK]
Hint: RETURNING follows WHERE clause with columns listed [OK]
Common Mistakes:
  • Placing RETURNING before WHERE
  • Using RETURN instead of RETURNING
  • Adding fixed amount instead of percentage
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard