LIKE Operator in MySQL
Introduction
Exact matches miss flexible text searches like partial names or categories.
The LIKE operator in MySQL performs pattern matching using wildcards.
It is widely used for:
- Partial text searches
- Name/email pattern matching
- Category filtering
- Flexible user input search
What is the LIKE Operator
LIKE compares string values using pattern matching with wildcards % and _.
Returns TRUE when the pattern matches anywhere in the string.
Basic Syntax
sql
SELECT column_name
FROM table_name
WHERE column_name LIKE 'pattern';
Example
sql
SELECT * FROM Students
WHERE name LIKE 'A%';
Returns all students whose name starts with 'A'.
Wildcard % (Any Characters)
% matches zero or more characters anywhere.
sql
SELECT * FROM Students
WHERE name LIKE '%kumar';
Matches 'Ramesh Kumar', 'Amit Kumar', etc.
Wildcard _ (Single Character)
_ matches exactly one character.
sql
SELECT * FROM Students
WHERE name LIKE 'A_it';
Matches 'Amit', 'Anit', but not 'Amitt'.
LIKE Pattern Combinations
Multiple wildcards in one pattern.
sql
SELECT * FROM Students
WHERE name LIKE 'R__esh';
Matches 'Ramesh', 'Raresh' (6 letters total).
LIKE with Multiple Conditions
Combine with AND/OR.
sql
SELECT * FROM Students
WHERE name LIKE 'A%' AND city LIKE 'M%';
LIKE with NOT
Exclude pattern matches.
sql
SELECT * FROM Students
WHERE name NOT LIKE '%kumar';
LIKE Case Sensitivity
Depends on collation (utf8mb4_general_ci = case-insensitive).
sql
SELECT * FROM Students
WHERE name LIKE 'amit'; -- Matches 'Amit', 'AMIT.'
LIKE with ESCAPE Clause
Search for literal % or _.
sql
SELECT * FROM Students
WHERE address LIKE '%50\% rent' ESCAPE '\';
Matches addresses containing '50% rent'.
LIKE with ORDER BY
Pattern match, then sort.
sql
SELECT * FROM Students
WHERE name LIKE 'S.%.'
ORDER BY marks DESC;
LIKE with GROUP BY
Group pattern-matched results.
sql
SELECT city, COUNT(*)
FROM Students
WHERE name LIKE '%sin.gh.'
GROUP BY city;
LIKE Performance Issues
Leading % kills index usage.
sql
-- SLOW (no index)
WHERE name LIKE '%kumar';
-- FAST (uses index)
WHERE name LIKE 'Kumar%';
LIKE with Full-Text Search Alternative
For large datasets, consider MATCH AGAINST.
sql
-- Instead of complex LIKE for many words
SELECT * FROM articles
WHERE MATCH(title, content) AGAINST('mysql tutorial');
Execution Order with LIKE
Evaluated in the WHERE clause after FROM.
FROM → WHERE (LIKE patterns) → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT
Performance Considerations
- Avoid leading % (prevents index use)
- Index searchable columns
- Use FULLTEXT for complex searches
- LIMIT results early
- Consider REGEXP for complex patterns
Important Notes
- % = zero or more chars, _ = exactly one char
- Case sensitivity depends on collation
- NULL LIKE pattern = NULL
- ESCAPE needed for literal % _ characters
- MySQL LIKE is faster than REGEXP
Example Scenario
Find students with specific name patterns:
sql
SELECT name, city, marks
FROM Students
WHERE (name LIKE 'A%' OR name LIKE 'R%')
AND city LIKE 'Del.hi%.'
AND marks > 75
ORDER BY marks DESC, name
LIMIT 20;
Common Mistakes
- Leading % preventing index usage
- Forgetting ESCAPE for % _ literals
- Using LIKE for exact matches (= faster)
- Case sensitivity surprises
- Complex patterns are better with REGEXP
Key Points to Remember
- LIKE uses % (many chars) and _ (one char) wildcards
- Leading % prevents index optimisation
- NOT LIKE excludes pattern matches
- ESCAPE clause for literal wildcard chars
- Use FULLTEXT for complex text search
- Case sensitivity depends on table collation