Bird
Raised Fist0
PostgreSQLquery~20 mins

JSONB containment (@>) operator in PostgreSQL - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
JSONB Containment Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ query_result
intermediate
2:00remaining
Check JSONB containment with simple key-value
Given the table products with a details column of type JSONB, what rows will be returned by this query?

SELECT id FROM products WHERE details @> '{"color": "red"}';
PostgreSQL
CREATE TABLE products (id SERIAL PRIMARY KEY, details JSONB);
INSERT INTO products (details) VALUES
('{"color": "red", "size": "M"}'),
('{"color": "blue", "size": "L"}'),
('{"color": "red", "size": "S"}');
ARows with id 1 and 3
BRows with id 2 only
CRows with id 1, 2, and 3
DNo rows returned
Attempts:
2 left
💡 Hint
The @> operator checks if the left JSONB contains the right JSONB as a subset.
❓ query_result
intermediate
2:00remaining
Containment with nested JSONB objects
Consider a table users with a JSONB column profile. Which rows will match this query?

SELECT user_id FROM users WHERE profile @> '{"address": {"city": "Boston"}}';
PostgreSQL
CREATE TABLE users (user_id SERIAL PRIMARY KEY, profile JSONB);
INSERT INTO users (profile) VALUES
('{"name": "Alice", "address": {"city": "Boston", "zip": "02101"}}'),
('{"name": "Bob", "address": {"city": "Seattle", "zip": "98101"}}'),
('{"name": "Carol", "address": {"city": "Boston"}}');
AUsers with user_id 1 and 3
BUser with user_id 2 only
CUsers with user_id 1, 2, and 3
DNo users returned
Attempts:
2 left
💡 Hint
The @> operator works recursively on nested JSON objects.
📝 Syntax
advanced
2:00remaining
Identify the syntax error in JSONB containment query
Which option contains a syntax error in the use of the JSONB containment operator @> in PostgreSQL?
ASELECT * FROM orders WHERE data @> '{"status": "shipped"}';
BSELECT * FROM orders WHERE data @> '{status: "shipped"}';
C;'}"deppihs" :"sutats"{' >@ atad EREHW sredro MORF * TCELES
DSELECT * FROM orders WHERE data @> '{"status":"shipped"}';
Attempts:
2 left
💡 Hint
JSON keys and string values must be enclosed in double quotes.
❓ optimization
advanced
2:00remaining
Optimize JSONB containment query for performance
Which option will improve performance of this query?

SELECT * FROM events WHERE metadata @> '{"type": "click"}';
AUse a sequential scan with ANALYZE
BAdd a B-tree index on the metadata column
CCreate a GIN index on the metadata column
DRewrite the query using LIKE operator
Attempts:
2 left
💡 Hint
PostgreSQL supports special indexes for JSONB containment queries.
🧠 Conceptual
expert
2:00remaining
Understanding JSONB containment operator behavior
What is the result of this query?

SELECT '{"a": 1, "b": 2}'::jsonb @> '{"a": 1}';
ANULL
Bfalse
CSyntax error
Dtrue
Attempts:
2 left
💡 Hint
The @> operator returns true if the left JSONB contains the right JSONB as a subset.

Practice

(1/5)
1.

What does the PostgreSQL @> operator do when used with JSONB data?

easy
A. Checks if the right JSONB contains the left JSONB
B. Deletes the right JSONB from the left JSONB
C. Merges two JSONB objects into one
D. Checks if the left JSONB contains the right JSONB

Solution

  1. Step 1: Understand the operator's purpose

    The @> operator in PostgreSQL is used to check containment between JSONB values.
  2. Step 2: Identify the direction of containment

    It checks if the JSONB on the left side contains the JSONB on the right side.
  3. Final Answer:

    Checks if the left JSONB contains the right JSONB -> Option D
  4. Quick Check:

    JSONB containment = left contains right [OK]
Hint: Remember: left @> right means left contains right [OK]
Common Mistakes:
  • Confusing which side contains which
  • Thinking it merges JSONB objects
  • Assuming it deletes data
2.

Which of the following is the correct syntax to check if a JSONB column data contains the JSON {"key": "value"}?

SELECT * FROM table WHERE data ___ '{"key": "value"}'::jsonb;
easy
A. @>
B. <@
C. ->
D. ->>

Solution

  1. Step 1: Identify the containment operator

    The @> operator checks if the left JSONB contains the right JSONB.
  2. Step 2: Apply correct syntax

    To check if data contains the JSON, use data @> '{"key": "value"}'::jsonb.
  3. Final Answer:

    @> -> Option A
  4. Quick Check:

    Containment operator = @> [OK]
Hint: Use @> with right side cast to jsonb [OK]
Common Mistakes:
  • Using <@ which reverses containment
  • Using -> or ->> which access keys, not contain
  • Forgetting to cast string to jsonb
3.

Given the table items with a JSONB column attributes, what will this query return?

SELECT id FROM items WHERE attributes @> '{"color": "red"}'::jsonb;

Assuming items contains:

id | attributes
---+-------------------------
1  | {"color": "red", "size": "M"}
2  | {"color": "blue", "size": "L"}
3  | {"color": "red"}
4  | {"size": "S"}
medium
A. [4]
B. [2, 4]
C. [1, 3]
D. [1, 2, 3]

Solution

  1. Step 1: Understand the query condition

    The query selects rows where attributes contain the JSON {"color": "red"}.
  2. Step 2: Check each row's attributes

    Rows 1 and 3 have "color": "red"; rows 2 and 4 do not.
  3. Final Answer:

    [1, 3] -> Option C
  4. Quick Check:

    Only rows with color red = [1, 3] [OK]
Hint: Look for rows where JSON contains the key-value pair exactly [OK]
Common Mistakes:
  • Including rows without the key-value pair
  • Confusing @> with key existence operator
  • Ignoring the JSONB cast requirement
4.

Identify the error in this query that tries to find rows where info JSONB column contains {"active": true}:

SELECT * FROM users WHERE info @> '{active: true}';
medium
A. Wrong operator used, should be <@
B. JSON keys must be in double quotes
C. Missing cast to jsonb for the right side
D. Boolean true must be in quotes

Solution

  1. Step 1: Check JSON syntax correctness

    JSON keys must be enclosed in double quotes, so active should be "active".
  2. Step 2: Verify casting and operator

    The query is missing ::jsonb cast, but the main syntax error is the missing quotes around the key.
  3. Final Answer:

    JSON keys must be in double quotes -> Option B
  4. Quick Check:

    JSON keys need double quotes [OK]
Hint: Always quote JSON keys and cast string to jsonb [OK]
Common Mistakes:
  • Forgetting double quotes around keys
  • Not casting string to jsonb
  • Using wrong containment operator
5.

You want to find all rows in products where the details JSONB column contains {"features": {"waterproof": true}} and also the price is less than 100. Which query is correct?

hard
A. SELECT * FROM products WHERE details @> '{"features": {"waterproof": true}}'::jsonb AND price < 100;
B. SELECT * FROM products WHERE details <@ '{"features": {"waterproof": true}}'::jsonb AND price < 100;
C. SELECT * FROM products WHERE details @> '{features: {waterproof: true}}' AND price < 100;
D. SELECT * FROM products WHERE details -> 'features' @> '{"waterproof": true}' AND price < 100;

Solution

  1. Step 1: Use correct containment operator and JSON syntax

    The @> operator checks if details contains the given JSON. The JSON must have keys in double quotes and be cast to jsonb.
  2. Step 2: Combine with price condition

    Use AND price < 100 to filter by price.
  3. Final Answer:

    SELECT * FROM products WHERE details @> '{"features": {"waterproof": true}}'::jsonb AND price < 100; -> Option A
  4. Quick Check:

    Correct operator, JSON syntax, and price filter [OK]
Hint: Use @> with correct JSON and add AND for price filter [OK]
Common Mistakes:
  • Using <@ instead of @>
  • Missing quotes in JSON keys
  • Incorrect JSONB casting
  • Trying to use -> operator for containment
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