PostgreSQL ANY Operator

Learn Code Zone welcomes you back! Today, we’re going to explore the ANY operator, a crucial PostgreSQL feature. By enabling comparisons against a list or a set of values, this potent operator can greatly simplify your SQL queries. We’ll go over how to use it with a thorough example that includes creating tables, inserting data, and creating useful queries.

What is the ANY Operator?

To compare a value against any value in a list or subquery result, use the ANY operator in PostgreSQL. It makes your queries more versatile and succinct when you want to see if a value meets or exceeds any one of several possible values.

Syntax Overview

The basic syntax for the ANY operator is:

value operator ANY (array | subquery)

value: The value you want to compare.

operator: A comparison operator such as =, !=, <, >, <=, or >=.

array: A list of values within curly braces {}.

subquery: A subquery that returns a list of values.

Step-by-Step Example Using the ANY Operator

To better understand the ANY operator, let’s walk through a practical example. We’ll create tables, insert data, and perform queries that utilize ANY.

Creating Tables

First, we’ll create two tables: departments and employees.

-- Drop tables if they exist

-- Create departments table
CREATE TABLE departments (
    department_id SERIAL PRIMARY KEY,
    department_name VARCHAR(50),
    location VARCHAR(50)

-- Create employees table
CREATE TABLE employees (
    employee_id SERIAL PRIMARY KEY,
    employee_name VARCHAR(50),
    age INT,
    salary NUMERIC,
    department_id INT,
    FOREIGN KEY (department_id) REFERENCES departments(department_id)

In this configuration, the employees table has employee details with a foreign key connecting to departments, and the departments table has departmental information.

Inserting Data

Next, we insert sample data into both tables.

-- Insert data into departments table
INSERT INTO departments (department_name, location) VALUES
('HR', 'New York'),
('Finance', 'Chicago'),
('IT', 'San Francisco'),
('Marketing', 'New York'),
('Sales', 'Chicago');

-- Insert data into employees table
INSERT INTO employees (employee_name, age, salary, department_id) VALUES
('Alice', 30, 60000, 1),
('Bob', 45, 80000, 2),
('Charlie', 25, 55000, 3),
('Diana', 35, 70000, 4),
('Edward', 40, 75000, 5),
('Fiona', 28, 62000, 1),
('George', 50, 90000, 2),
('Helen', 32, 67000, 3);

We currently have a group of workers from different departments that range in age and salary.

Practical Queries with ANY

To show off the capabilities of the ANY operator, let’s investigate a few queries employing it.

Example 1: Find Employees in Specific Locations

We want to find employees working in departments located in ‘New York’ or ‘Chicago’.

SELECT employee_name, department_id
FROM employees
WHERE department_id = ANY (SELECT department_id FROM departments WHERE location = 'New York' OR location = 'Chicago');

This query demonstrates how ANY can streamline queries with many conditions by returning workers whose departments are located in either “New York” or “Chicago.”

Example 2: Locate Workers Who Earn More Than Any in HR

Let’s say we wish to locate workers who make more money than any worker in the ‘HR’ division.

SELECT employee_name, salary
FROM employees
WHERE salary > ANY (SELECT salary FROM employees WHERE department_id = (SELECT department_id FROM departments WHERE department_name = 'HR'));

This query demonstrates how ANY can compare across subsets of data by identifying employees whose income exceeds the top wage in the ‘HR’ department.

Example 3: Find Employees Younger than Any in Finance

To find employees who are younger than any employee in the ‘Finance’ department, use:

SELECT employee_name, age
FROM employees
WHERE age < ANY (SELECT age FROM employees WHERE department_id = (SELECT department_id FROM departments WHERE department_name = 'Finance'));

This query demonstrates the flexibility of ANY with several data types by returning employees who are younger than at least one employee in ‘Finance’.

Example 4: Locate Workers Who Are Not in Particular Departments
To locate staff members who are not in the “IT” or “Marketing” departments, we can further use ANY with the!= operator.

SELECT employee_name, department_id
FROM employees
WHERE department_id != ANY (ARRAY[3, 4]);

This query demonstrates how ANY uses arrays for fast filtering by retrieving employees who are not in the “IT” or “Marketing” divisions.


In PostgreSQL, the ANY operator is an effective tool for crafting more adaptable and succinct SQL queries. ANY can streamline and improve your SQL processes, whether you’re filtering records using several criteria, comparing values between subsets, or avoiding particular groupings.

See what a difference the ANY operator makes by trying it out in your PostgreSQL queries. Have fun with coding!

Please feel free to ask questions or share your experiences in the section below. Watch this space for additional SQL hints and lessons on Learn Code Zone!

Hey folks, I'm Vivek Kumar Pandey, a software engineer with a passion for crafting elegant solutions to complex problems. From the bustling streets of Mumbai to the heart of Bangalore's tech scene, I've journeyed through the world of programming, leaving my mark one line of code at a time. Join me as I continue to explore, innovate, and push the boundaries of what's possible in the digital realm.

Related Posts

ALL Operator in PostgreSQL: A Step-by-Step Guide

The ALL operator in PostgreSQL offers a potent method for comparing values inside a set or subquery results. Your querying skills can be greatly improved by knowing…

Unveiling the Power of Grouping Sets in PostgreSQL

In PostgreSQL SQL, grouping sets offer a versatile approach to aggregate data based on multiple grouping criteria within a single query. This article delves deeper into the…

Mastering PostgreSQL UNION: Combining Data for Powerful Insights

In the realm of relational databases, PostgreSQL stands tall as a robust and feature-rich system. Among its many capabilities, PostgreSQL offers the UNION operator, a powerful tool…

Leave a Reply

Your email address will not be published. Required fields are marked *