Skip to main content
Documents
Clauses StatementsKeywordsExpressionsFunctionsIndexesPerformance Optimization

MySQL ANY Keyword

The `ANY` keyword in MySQL is used to compare a value to any value in a set of values returned by a subquery. It allows for comparisons to be true if they hold for at least one of the values in the subquery.

Usage

The `ANY` keyword is used in conjunction with comparison operators to filter records based on a condition that matches any value in a subquery. It is particularly useful in `WHERE` or `HAVING` clauses when you need to compare a column against a set derived from another table.


SELECT column1, column2, ...
FROM table_name
WHERE column_name comparison_operator ANY (subquery);

In this syntax, `ANY (subquery)` allows the comparison to be true if it matches at least one result from the subquery.

Examples

1. Basic Use of ANY


SELECT product_id, product_name
FROM products
WHERE price > ANY (SELECT price FROM discounts);

This query selects products whose price is higher than any single price found in the `discounts` table.

2. ANY with a Different Operator


SELECT employee_id, salary
FROM employees
WHERE salary < ANY (SELECT salary FROM managers);

Here, the query retrieves employees whose salary is less than any of the salaries in the `managers` table, ensuring at least one manager has a higher salary.

3. ANY in a Complex Query


SELECT order_id, amount
FROM orders
WHERE amount = ANY (
  SELECT MAX(amount)
  FROM orders
  GROUP BY customer_id
);

This query selects orders whose amount matches the highest order amount for any customer, using `ANY` to compare against the maximum amount per customer group.

4. ANY with No Subquery Rows


SELECT order_id
FROM orders
WHERE amount > ANY (SELECT amount FROM non_existing_table);

If the subquery returns no rows, `ANY` behaves as if the comparison returns false for all rows.

Tips and Best Practices

  • Understand subquery results. Ensure your subquery returns a single column to avoid errors when using `ANY`.
  • Use with appropriate operators. `ANY` is most effective with comparison operators like `=`, `<`, `>`, etc.
  • Consider NULL values. Be aware that `ANY` comparisons with NULL values can return unexpected results, as comparisons with NULL are generally unknown.
  • Optimize subqueries. Subqueries should be efficient to prevent performance bottlenecks, especially when used with large datasets. Consider indexing strategy to enhance performance.
  • ANY vs ALL. Unlike `ANY`, which returns true if at least one comparison is true, `ALL` requires all comparisons to be true for a match.
  • Test with known values. Before deploying, test queries with known data to verify that `ANY` is comparing as expected.

SQL Upskilling for Beginners

Gain the SQL skills to interact with and query your data.
Start Learning for Free