The RETURNING clause lets you get back data from rows you just changed in the database. It saves time by showing results right after an insert, update, or delete.
RETURNING clause mental model in PostgreSQL
INSERT INTO table_name (columns) VALUES (values) RETURNING column_list; UPDATE table_name SET column = value WHERE condition RETURNING column_list; DELETE FROM table_name WHERE condition RETURNING column_list;
INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com') RETURNING id;
UPDATE products SET price = price * 1.1 WHERE category = 'Books' RETURNING id, price;
DELETE FROM sessions WHERE last_active < '2024-01-01' RETURNING session_id;
This example creates a temporary employees table, inserts two employees and returns their details, updates John's salary and returns the updated row, then deletes employees with salary less than 60000 and returns their info.
CREATE TEMP TABLE employees (id SERIAL PRIMARY KEY, name TEXT, salary INT); INSERT INTO employees (name, salary) VALUES ('John', 50000), ('Jane', 60000) RETURNING id, name, salary; UPDATE employees SET salary = salary + 5000 WHERE name = 'John' RETURNING id, name, salary; DELETE FROM employees WHERE salary < 60000 RETURNING id, name;
RETURNING helps avoid extra queries to fetch data after changes.
It works only in PostgreSQL and some other databases, not all SQL systems support it.
Use RETURNING * carefully if your table has many columns, to avoid large results.
RETURNING clause returns data from rows affected by INSERT, UPDATE, or DELETE.
It saves time by combining data change and retrieval in one step.
Use it to get new IDs, updated values, or deleted row info immediately.
Practice
RETURNING clause in PostgreSQL?Solution
Step 1: Understand the role of RETURNING clause
The RETURNING clause is used to get data from rows that are changed by INSERT, UPDATE, or DELETE commands.Step 2: Compare options with this role
Only To return data from rows affected by INSERT, UPDATE, or DELETE in the same query correctly describes this behavior. Other options describe unrelated features.Final Answer:
To return data from rows affected by INSERT, UPDATE, or DELETE in the same query -> Option BQuick Check:
RETURNING returns changed rows data [OK]
- Thinking RETURNING creates tables
- Confusing RETURNING with backup or scheduling
- Assuming RETURNING only works with SELECT
RETURNING clause after an INSERT statement?Solution
Step 1: Recall correct RETURNING syntax
In PostgreSQL, RETURNING comes after the VALUES clause in an INSERT statement.Step 2: Check each option
'INSERT INTO table_name VALUES (...) RETURNING *;' correctly places RETURNING after VALUES. Placing RETURNING between table_name and VALUES is incorrect order. Starting the statement with RETURNING is invalid. Using OUTPUT instead of RETURNING is SQL Server syntax, not PostgreSQL.Final Answer:
INSERT INTO table_name VALUES (...) RETURNING *; -> Option CQuick Check:
RETURNING follows VALUES in INSERT [OK]
- Placing RETURNING before VALUES
- Using OUTPUT instead of RETURNING
- Putting RETURNING before INSERT
users(id SERIAL PRIMARY KEY, name TEXT, age INT), what will this query return?UPDATE users SET age = age + 1 WHERE name = 'Alice' RETURNING id, age;
Solution
Step 1: Understand UPDATE with RETURNING
UPDATE changes rows matching the condition and RETURNING returns specified columns from those updated rows after the change.Step 2: Analyze the query
The query increments age by 1 for users named 'Alice' and returns their id and new age values.Final Answer:
The id and new age of all users named 'Alice' after increment -> Option AQuick Check:
RETURNING shows updated rows data [OK]
- Thinking RETURNING shows old values
- Assuming it returns all rows, not just updated
- Believing RETURNING is invalid with UPDATE
DELETE FROM orders WHERE order_date < '2023-01-01' RETURNING order_id;
Which of the following is a common mistake that would cause this query to fail?
Solution
Step 1: Check correct RETURNING placement
RETURNING must come after the WHERE clause in DELETE statements.Step 2: Identify the error in options
Writing RETURNING before WHERE clause describes placing RETURNING before WHERE, which is invalid syntax and causes failure.Final Answer:
Writing RETURNING before WHERE clause -> Option AQuick Check:
RETURNING comes after WHERE in DELETE [OK]
- Putting RETURNING before WHERE
- Omitting columns in RETURNING (allowed but returns all columns)
- Using RETURNING with SELECT (invalid)
- Deleting without WHERE (allowed but risky)
products table and immediately get the generated product_id and price of each inserted row. Which query correctly uses the RETURNING clause to achieve this?Solution
Step 1: Recall correct syntax for multi-row INSERT with RETURNING
RETURNING clause comes after all VALUES and specifies columns to return.Step 2: Evaluate each option
INSERT INTO products (name, price) VALUES ('Pen', 1.5), ('Book', 10) RETURNING product_id, price; correctly places RETURNING after VALUES with correct columns. INSERT INTO products (name, price) RETURNING product_id, price VALUES ('Pen', 1.5), ('Book', 10); has wrong order. INSERT INTO products (name, price) VALUES ('Pen', 1.5), ('Book', 10) OUTPUT product_id, price; uses OUTPUT which is not PostgreSQL syntax. INSERT INTO products (name, price) VALUES ('Pen', 1.5), ('Book', 10) RETURN product_id, price; uses RETURN which is invalid.Final Answer:
INSERT INTO products (name, price) VALUES ('Pen', 1.5), ('Book', 10) RETURNING product_id, price; -> Option DQuick Check:
RETURNING after VALUES returns inserted rows data [OK]
- Placing RETURNING before VALUES
- Using OUTPUT instead of RETURNING
- Using RETURN instead of RETURNING
Ready to prove it?
Pass the test and this pattern moves unknown
