What does the JSONB containment operator @> do in PostgreSQL?
It checks if the left JSONB value contains the right JSONB value. In other words, it returns true if the right JSONB is a subset of the left JSONB.
Click to reveal answer
beginner
Example: What will this query return? SELECT '{"a":1, "b":2}'::jsonb @> '{"a":1}'::jsonb;
It will return true because the left JSONB contains the key-value pair {"a":1} from the right JSONB.
Click to reveal answer
intermediate
Can the @> operator be used to check if a JSONB array contains a specific element?
Yes, it can check if a JSONB array contains a specific element by using the element inside an array on the right side. For example, '[1,2,3]'::jsonb @> '[2]'::jsonb returns true.
Click to reveal answer
beginner
What will this query return? SELECT '{"a":1, "b":2}'::jsonb @> '{"b":3}'::jsonb;
It will return false because the value for key "b" in the left JSONB is 2, which does not match the value 3 in the right JSONB.
Click to reveal answer
beginner
Why is the JSONB containment operator useful in real life?
It helps quickly find rows where JSONB columns contain specific data without extracting or parsing the whole JSON. This is useful for filtering data stored in flexible JSON formats.
Click to reveal answer
What does jsonb_col @> '{"key":"value"}' check?
AIf jsonb_col contains the key-value pair {"key":"value"}
BIf jsonb_col equals {"key":"value"}
CIf jsonb_col is contained in {"key":"value"}
DIf jsonb_col is an array
✗ Incorrect
The @> operator checks if the left JSONB contains the right JSONB as a subset.
Which of these returns true? SELECT '[1,2,3]'::jsonb @> '[2]'::jsonb;
Anull
Bfalse
Cerror
Dtrue
✗ Incorrect
The array on the left contains the element 2, so the containment check returns true.
What will this return? SELECT '{"a":1}'::jsonb @> '{"a":1, "b":2}'::jsonb;
Atrue
Berror
Cfalse
Dnull
✗ Incorrect
The left JSONB does not contain the key "b", so it does not contain the right JSONB.
Can @> operator be used to check nested JSON objects?
AYes, it checks nested objects as well
BNo, only top-level keys
COnly arrays, not objects
DOnly strings
✗ Incorrect
The operator checks containment recursively, including nested objects.
What type of data does the @> operator work with?
AText data type
BJSONB data type
CInteger data type
DDate data type
✗ Incorrect
The @> operator is specific to the JSONB data type in PostgreSQL.
Explain how the JSONB containment operator @> works in PostgreSQL.
Think about subset and containment in JSON data.
You got /4 concepts.
Give an example query using @> to find rows where a JSONB column contains a specific key-value pair.
Use a simple JSON object on the right side.
You got /4 concepts.
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
Step 1: Understand the operator's purpose
The @> operator in PostgreSQL is used to check containment between JSONB values.
Step 2: Identify the direction of containment
It checks if the JSONB on the left side contains the JSONB on the right side.
Final Answer:
Checks if the left JSONB contains the right JSONB -> Option D
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
Step 1: Identify the containment operator
The @> operator checks if the left JSONB contains the right JSONB.
Step 2: Apply correct syntax
To check if data contains the JSON, use data @> '{"key": "value"}'::jsonb.
Final Answer:
@> -> Option A
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;
The query selects rows where attributes contain the JSON {"color": "red"}.
Step 2: Check each row's attributes
Rows 1 and 3 have "color": "red"; rows 2 and 4 do not.
Final Answer:
[1, 3] -> Option C
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
Step 1: Check JSON syntax correctness
JSON keys must be enclosed in double quotes, so active should be "active".
Step 2: Verify casting and operator
The query is missing ::jsonb cast, but the main syntax error is the missing quotes around the key.
Final Answer:
JSON keys must be in double quotes -> Option B
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
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.
Step 2: Combine with price condition
Use AND price < 100 to filter by price.
Final Answer:
SELECT * FROM products WHERE details @> '{"features": {"waterproof": true}}'::jsonb AND price < 100; -> Option A
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 unknownstrongwhile earning +1 Grip toward your certificate.