The query checks if a value is inside or outside a list, then filters rows accordingly.
Execution Sample
MySQL
SELECT name FROM employees WHERE department IN ('Sales', 'HR');
This query returns names of employees who work in Sales or HR departments.
Execution Table
Step
Row Data (name, department)
Condition (department IN ('Sales','HR'))
Result
Action
1
('Alice', 'Sales')
Sales IN list
True
Include row
2
('Bob', 'IT')
IT IN list
False
Exclude row
3
('Carol', 'HR')
HR IN list
True
Include row
4
('Dave', 'Marketing')
Marketing IN list
False
Exclude row
5
('Eve', 'Sales')
Sales IN list
True
Include row
Exit
-
-
-
All rows checked, query ends
💡 All rows checked, filtering done based on IN condition
Variable Tracker
Variable
Start
After 1
After 2
After 3
After 4
After 5
Final
Current Row
None
('Alice', 'Sales')
('Bob', 'IT')
('Carol', 'HR')
('Dave', 'Marketing')
('Eve', 'Sales')
None
Condition Result
None
True
False
True
False
True
None
Included Rows
[]
['Alice']
['Alice']
['Alice', 'Carol']
['Alice', 'Carol']
['Alice', 'Carol', 'Eve']
['Alice', 'Carol', 'Eve']
Key Moments - 3 Insights
Why does the query exclude 'Bob' and 'Dave'?
Because their departments ('IT' and 'Marketing') are not in the list ('Sales', 'HR'), so the condition is False (see execution_table rows 2 and 4).
What happens if the list in IN is empty?
The condition will always be False, so no rows will be included. This is because no value can be found in an empty list.
How does NOT IN differ from IN?
NOT IN returns True when the value is NOT in the list, so it includes rows excluded by IN. For example, NOT IN ('Sales', 'HR') would include 'Bob' and 'Dave' instead.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the condition result for 'Carol' at step 3?
AFalse
BUnknown
CTrue
DError
💡 Hint
Check the 'Condition Result' column for step 3 in execution_table.
At which step does the condition become False for the first time?
AStep 2
BStep 1
CStep 3
DStep 4
💡 Hint
Look at the 'Condition Result' column in execution_table and find the first False.
If we change the list to IN ('IT', 'Marketing'), which rows would be included?
AAlice, Carol, Eve
BBob, Dave
CAll rows
DNo rows
💡 Hint
Refer to variable_tracker and execution_table to see which departments match the new list.
Concept Snapshot
IN and NOT IN operators check if a value is inside or outside a list.
Syntax: column IN (value1, value2, ...)
Returns rows where condition is True.
NOT IN returns rows where value is not in the list.
Used to filter rows easily by multiple values.
Full Transcript
This visual execution shows how the IN and NOT IN operators work in MySQL queries. The query checks each row's department against a list of values. If the department is in the list, the condition is True and the row is included in the result. If not, the row is excluded. The execution table traces each row's evaluation step-by-step. The variable tracker shows how the current row and condition result change over time, and which rows get included. Key moments clarify common confusions like why some rows are excluded and how NOT IN differs. The quiz tests understanding by asking about specific steps and changes. This helps beginners see exactly how IN and NOT IN filter data in a query.
Practice
(1/5)
1. What does the IN operator do in a MySQL query?
easy
A. Checks if a value is greater than all values in a list
B. Checks if a value is less than all values in a list
C. Checks if a value matches any value in a list
D. Checks if a value is equal to a single value only
Solution
Step 1: Understand the purpose of IN operator
The IN operator is used to test if a value exists within a set of values.
Step 2: Compare with other options
The options describing comparisons with all values (greater or less than all) are incorrect, as IN checks if a value matches any in the list. The option about equality to a single value is also wrong, since IN handles multiple values.
Final Answer:
Checks if a value matches any value in a list -> Option C
Quick Check:
IN operator = check value in list [OK]
Hint: IN means "is in this list"; NOT IN means "not in this list" [OK]
Common Mistakes:
Confusing IN with equality (=) operator
Thinking IN checks all values instead of any
Mixing IN with greater than or less than comparisons
2. Which of the following is the correct syntax to select rows where the column status is either 'active', 'pending', or 'closed'?
easy
A. SELECT * FROM table WHERE status IN ('active', 'pending', 'closed');
B. SELECT * FROM table WHERE status = IN ('active', 'pending', 'closed');
C. SELECT * FROM table WHERE status NOT IN ('active', 'pending', 'closed');
D. SELECT * FROM table WHERE status IN 'active', 'pending', 'closed';
Solution
Step 1: Check correct IN syntax
The correct syntax uses IN followed by parentheses containing a comma-separated list of values.
Step 2: Identify errors in other options
SELECT * FROM table WHERE status = IN ('active', 'pending', 'closed'); has an extra '=' which is invalid. SELECT * FROM table WHERE status NOT IN ('active', 'pending', 'closed'); uses NOT IN which selects rows not matching the list. SELECT * FROM table WHERE status IN 'active', 'pending', 'closed'; misses parentheses around the list.
Final Answer:
SELECT * FROM table WHERE status IN ('active', 'pending', 'closed'); -> Option A
Quick Check:
Correct IN syntax uses parentheses and no '=' [OK]
Hint: IN must be followed by parentheses with values inside [OK]
Common Mistakes:
Using '=' before IN
Omitting parentheses around the list
Confusing IN with NOT IN
3. Given the table employees with a column department, what will this query return?
SELECT name FROM employees WHERE department NOT IN ('HR', 'Finance');
medium
A. Names of employees in HR or Finance departments
B. Names of employees not in HR or Finance departments
C. Names of employees only in HR department
D. Syntax error due to NOT IN usage
Solution
Step 1: Understand NOT IN operator
NOT IN selects rows where the column value is not in the given list.
Step 2: Apply to the query context
The query returns employee names whose department is not 'HR' or 'Finance'.
Final Answer:
Names of employees not in HR or Finance departments -> Option B
Quick Check:
NOT IN excludes listed values [OK]
Hint: NOT IN excludes listed values from results [OK]
Common Mistakes:
Thinking NOT IN returns only listed values
Confusing NOT IN with IN
Assuming syntax error with NOT IN
4. Identify the error in this query:
SELECT * FROM orders WHERE order_status NOT IN 'shipped', 'delivered';
medium
A. Missing parentheses around the list after NOT IN
B. Incorrect use of NOT IN instead of IN
C. order_status should be in quotes
D. No error, query is correct
Solution
Step 1: Check syntax of NOT IN usage
NOT IN must be followed by parentheses containing the list of values.
Step 2: Identify missing parentheses
The query lists values without parentheses, causing syntax error.
Final Answer:
Missing parentheses around the list after NOT IN -> Option A
Quick Check:
NOT IN requires parentheses around values [OK]
Hint: Always use parentheses after IN or NOT IN [OK]
Common Mistakes:
Omitting parentheses around value list
Using quotes incorrectly around column names
Confusing IN and NOT IN usage
5. You want to find customers who have placed orders but exclude those from countries 'USA', 'Canada', and 'Mexico'. Which query correctly uses NOT IN to achieve this?
hard
A. SELECT customer_id FROM orders WHERE country != ('USA', 'Canada', 'Mexico');
B. SELECT customer_id FROM orders WHERE country IN ('USA', 'Canada', 'Mexico');
C. SELECT customer_id FROM orders WHERE country NOT IN 'USA', 'Canada', 'Mexico';
D. SELECT customer_id FROM orders WHERE country NOT IN ('USA', 'Canada', 'Mexico');
Solution
Step 1: Understand the goal
We want customers excluding those from USA, Canada, and Mexico.
Step 2: Choose correct NOT IN syntax
SELECT customer_id FROM orders WHERE country NOT IN ('USA', 'Canada', 'Mexico'); uses NOT IN with parentheses and a list, correctly excluding those countries.
Step 3: Identify errors in other options
SELECT customer_id FROM orders WHERE country IN ('USA', 'Canada', 'Mexico'); includes those countries (wrong). SELECT customer_id FROM orders WHERE country NOT IN 'USA', 'Canada', 'Mexico'; misses parentheses (syntax error). SELECT customer_id FROM orders WHERE country != ('USA', 'Canada', 'Mexico'); uses != with a list, which is invalid syntax.
Final Answer:
SELECT customer_id FROM orders WHERE country NOT IN ('USA', 'Canada', 'Mexico'); -> Option D
Quick Check:
NOT IN with parentheses excludes listed values [OK]
Hint: Use NOT IN with parentheses to exclude multiple values [OK]
Common Mistakes:
Using != with multiple values
Omitting parentheses after NOT IN
Confusing IN and NOT IN
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.