MySQL Operators
Overview
MySQL operators are used to perform operations on data in SQL statements. They include arithmetic, comparison, logical, and bitwise operators.
Operator Categories
- Arithmetic Operators: Math operations
- Comparison Operators: Compare values
- Logical Operators: Boolean logic
- Bitwise Operators: Binary operations
- Assignment Operators: Set values
Arithmetic Operators
Basic Arithmetic
| Operator |-----------------|------------------|-----------------|--------------| | + | Addition | - | Subtraction | * | Multiplication | % | Modulus
Examples
-- Calculate totals
SELECT
price,
quantity,
price * quantity AS total
FROM orders;
-- Calculate discounts
SELECT
original_price,
discount_percent,
original_price * (1 - discount_percent / 100) AS discounted_price
FROM products;
-- Average calculation
SELECT (price1 + price2 + price3) / 3 AS avg_price
FROM price_comparison;Comparison Operators
Comparison Table
| Operator |-----------------|------------------| | = | Equal to | <=> | Null-safe equal | <> or != | Not equal to | > | Greater than | >= | Greater than or equal | < | Less than | <= | Less than or equal
Examples
-- Equality
SELECT * FROM users WHERE id = 1;
-- Inequality
SELECT * FROM products WHERE price <> 0;
-- Greater than
SELECT * FROM orders WHERE total > 100;
-- Range queries
SELECT * FROM products
WHERE price >= 50 AND price <= 100;String Comparison
-- Case-sensitive comparison (binary)
SELECT * FROM users WHERE BINARY name = 'John';
-- Case-insensitive comparison
SELECT * FROM users WHERE name = 'john';
-- Pattern matching
SELECT * FROM products WHERE name LIKE 'Phone%';Logical Operators
Logical Table
| Operator |-----------------|------------------|-------------------| | NOT or ! | Logical NOT | AND | Logical AND | OR | Logical OR
Examples
-- AND operator
SELECT * FROM users
WHERE age >= 18 AND age <= 65;
-- OR operator
SELECT * FROM products
WHERE category = 'electronics' OR category = 'computers';
-- NOT operator
SELECT * FROM users
WHERE NOT (status = 'inactive');
-- Combined logic
SELECT * FROM orders
WHERE (status = 'pending' OR status = 'processing')
AND created_at > '2024-01-01';NULL Handling
-- AND with NULL
SELECT NULL AND 1; -- NULL (not 0)
SELECT NULL OR 1; -- 1
-- Use IS NULL
SELECT * FROM users WHERE email IS NULL;
SELECT * FROM users WHERE email IS NOT NULL;
-- NULL-safe comparison
SELECT * FROM users WHERE email <=> NULL; -- NULL-safe equalityBitwise Operators
Bitwise Table
| Operator |-----------------|------------------| | & | Bitwise AND | | | Bitwise OR | ^ | Bitwise XOR | ~ | Bitwise NOT | << | Left shift | >> | Right shift
Examples
-- Bitwise AND
SELECT 5 & 3; -- 1 (0101 & 0011 = 0001)
-- Bitwise OR
SELECT 5 | 3; -- 7 (0101 | 0011 = 0111)
-- Bitwise XOR
SELECT 5 ^ 3; -- 6 (0101 ^ 0011 = 0110)
-- Left shift
SELECT 1 << 3; -- 8 (0001 shifted left 3 = 1000)String Operators
Comparison
-- Case-sensitive comparison
SELECT 'a' = 'A'; -- 0 (false)
SELECT BINARY 'a' = 'A'; -- 1 (true)
-- LIKE pattern matching
SELECT 'MySQL' LIKE 'My%'; -- 1 (true)
SELECT 'MySQL' NOT LIKE 'My%'; -- 0 (false)Concatenation
-- Concatenation operator (deprecated)
SELECT 'Hello' || 'World'; -- Hello World (if PIPES_AS_CONCAT enabled)
-- CONCAT function (recommended)
SELECT CONCAT('Hello', ' ', 'World'); -- Hello WorldPattern Matching Operators
LIKE / LIKE
-- Match pattern
SELECT * FROM users WHERE name LIKE 'J%';
SELECT * FROM users WHERE email LIKE '%@example.com';
-- Match specific position
SELECT * FROM products WHERE code LIKE 'PROD-%';REGEXP / REGEXP
-- Regular expression match
SELECT * FROM users WHERE name REGEXP '^J';
SELECT * FROM products WHERE code REGEXP '^[A-Z]{4}-[0-9]{3}$';
-- Not match
SELECT * FROM users WHERE name NOT REGEXP '^[0-9]';Range Operators
BETWEEN / BETWEEN
-- Inclusive range
SELECT * FROM products
WHERE price BETWEEN 50 AND 100;
-- Date range
SELECT * FROM orders
WHERE order_date BETWEEN '2024-01-01' AND '2024-01-31';
-- Equivalent to AND
SELECT * FROM products
WHERE price >= 50 AND price <= 100;IN / IN
-- Multiple values
SELECT * FROM users
WHERE country IN ('USA', 'Canada', 'UK');
-- Subquery
SELECT * FROM products
WHERE category_id IN (SELECT id FROM categories WHERE active = 1);
-- NOT IN
SELECT * FROM products
WHERE category_id NOT IN (1, 2, 3);NULL Operators
IS NULL / IS NULL
-- Test for NULL
SELECT * FROM users WHERE phone IS NULL;
-- Test for not NULL
SELECT * FROM users WHERE email IS NOT NULL;
-- Combined with other conditions
SELECT * FROM users
WHERE email IS NOT NULL AND status = 'active';NULL-Safe Comparison
-- NULL-safe equality
SELECT * FROM users
WHERE email <=> NULL;
-- NULL-safe inequality
SELECT * FROM users
WHERE email <=> old_email; -- Returns 1 if both NULLOperator Precedence
Precedence Table
| Priority |----------------|------------------| | 1 | !, ~, - (unary minus) | 2 | ^ | | 3 | *, /, DIV, %, MOD | | 4 | +, - | | 5 | <<, >> | | 6 | & | | 7 | | | | 8 | =, <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN | | 9 | BETWEEN, CASE, WHEN, THEN, ELSE | | 10 | NOT | | 11 | &&, AND | | 12 | ||, OR | | 13 | := (assignment)
Examples
-- Precedence matters
-- Without parentheses
1 + 2 * 3 -- 7 (2*3 first, then +1)
-- With parentheses
(1 + 2) * 3 -- 9 (1+2 first, then *3)
-- Complex expression
SELECT
price * quantity * discount
FROM products;
-- Evaluates as: price * (quantity * discount)
-- Should be: (price * quantity) * discount
SELECT
(price * quantity) * discount
FROM products;Assignment Operators
:= Operator
-- Set variable
SELECT @total := price * quantity
FROM products
WHERE id = 1;
-- Multiple assignments
SELECT @a := 1, @b := 2, @c := 3;
-- Conditional assignment
SELECT @status := CASE
WHEN score >= 90 THEN 'A'
WHEN score >= 80 THEN 'B'
ELSE 'C'
END
FROM students;Practical Examples
Conditional Logic
-- Age categorization
SELECT
name,
age,
CASE
WHEN age < 18 THEN 'Minor'
WHEN age < 65 THEN 'Adult'
ELSE 'Senior'
END AS age_group
FROM users;
-- Price range classification
SELECT
product_name,
price,
CASE
WHEN price < 50 THEN 'Budget'
WHEN price < 100 THEN 'Standard'
WHEN price < 200 THEN 'Premium'
ELSE 'Luxury'
END AS price_class
FROM products;String Operations
-- Pattern matching
SELECT * FROM users
WHERE name LIKE '%Smith%'
AND email LIKE '%@company.com';
-- Combined conditions
SELECT * FROM products
WHERE (category = 'electronics' OR category = 'computers')
AND price BETWEEN 50 AND 500
AND active = 1;Calculations
-- Complex expressions
SELECT
product_name,
price,
quantity,
price * quantity AS subtotal,
price * quantity * (1 - discount) AS total,
price * quantity * (1 - discount) + shipping AS final_total
FROM orders
JOIN products ON orders.product_id = products.id;Summary
MySQL operators provide:
- Arithmetic: Math calculations
- Comparison: Value comparison
- Logical: Boolean operations
- Bitwise: Binary operations
- Pattern Matching: LIKE, REGEXP
- Range: BETWEEN, IN
- NULL Handling: IS NULL, <=>
- Precedence: Order of evaluation
- Assignment: Variable assignment
Understanding operator precedence and using parentheses ensures correct query results.
Previous: MySQL Functions
Next: Commands Reference