SQL EXISTS Operator

The SQL EXISTS operator is used to check if a subquery returns any records. It returns TRUE if the subquery contains any rows and FALSE if it does not.

The EXISTS operator is often used in WHERE clauses to filter results based on the presence of related records in another table.

In this tutorial, we will go through EXISTS Operator in SQL, its syntax, and how to use this operator in SQL statements, with well detailed examples.


Syntax of SQL EXISTS Operator

The basic syntax of the SQL EXISTS operator is as follows:

</>
Copy
SELECT column1, column2, ...
FROM table_name
WHERE EXISTS (subquery);

Each part of this syntax has a specific purpose:

  • SELECT: Specifies the columns to retrieve from the table.
  • FROM: Specifies the table from which to retrieve data.
  • WHERE EXISTS: Checks whether the specified subquery returns any rows.
  • subquery: A query within the main query that determines whether any rows are present.

If the subquery returns at least one row, EXISTS returns TRUE and the outer query proceeds. If no rows are returned, EXISTS returns FALSE, excluding the rows from the main query’s result set.


Step-by-Step Examples with MySQL

We’ll go through various examples demonstrating the EXISTS operator in MySQL. Using MySQL 8.0 with MySQL Workbench, we’ll use a sample students table with fields id, name, age, grade, and locality along with a grades table that records student grades.

Setup for Examples: Creating the Database and Tables

1. Open MySQL Workbench and create a new database:

</>
Copy
CREATE DATABASE school;

2. Select the school database:

</>
Copy
USE school;

3. Create a students table:

</>
Copy
CREATE TABLE students (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50),
    age INT,
    grade VARCHAR(10),
    locality VARCHAR(50)
);

4. Create a grades table:

</>
Copy
CREATE TABLE grades (
    student_id INT,
    subject VARCHAR(50),
    grade CHAR(2),
    FOREIGN KEY (student_id) REFERENCES students(id)
);

5. Insert sample data into the students and grades tables:

</>
Copy
INSERT INTO students (name, age, grade, locality)
VALUES
('Alice', 14, '8th', 'Northside'),
('Bob', 15, '9th', 'Westend'),
('Charlie', 14, '8th', 'Northside'),
('David', 16, '10th', 'Southend'),
('Eva', 15, '9th', 'Westend');

INSERT INTO grades (student_id, subject, grade)
VALUES
(1, 'Math', 'A'),
(2, 'Math', 'B'),
(3, 'Math', 'C'),
(3, 'Science', 'A'),
(4, 'Math', 'B');
SQL EXISTS Operator - Example Data Setup

Examples: Using EXISTS Operator in Queries

Now, let’s explore different scenarios of using the EXISTS operator with these tables.

SQL EXISTS Operator - Example Table Data - students
SQL EXISTS Operator - Example Table Data - grades

1. Checking for Existence of Related Records

To select students who have at least one grade recorded in the grades table:

</>
Copy
SELECT name FROM students
WHERE EXISTS (SELECT 1 FROM grades WHERE grades.student_id = students.id);

This query returns students with at least one related record in the grades table, displaying names like Alice, Bob, Charlie, and David.

SQL EXISTS Operator - Checking for Existence of Related Records

2. Using EXISTS with a Condition

To select students who have an “A” grade in any subject:

</>
Copy
SELECT name FROM students
WHERE EXISTS (SELECT 1 FROM grades WHERE grades.student_id = students.id AND grades.grade = 'A');

This query finds students with an “A” grade in at least one subject, returning records for Alice and Charlie.

SQL EXISTS Operator - Using EXISTS with a Condition

3. Using EXISTS with NOT for Exclusions

To select students who do not have any grades recorded in the grades table:

</>
Copy
SELECT name FROM students
WHERE NOT EXISTS (SELECT 1 FROM grades WHERE grades.student_id = students.id);

This query returns students who have no records in the grades table, displaying only the name Eva.

SQL EXISTS Operator - Using EXISTS with NOT for Exclusions

We have used SQL NOT Operator.


4. Using EXISTS to Verify Matching Conditions Across Tables

To select students in “Northside” locality who have received a grade in “Science”:

</>
Copy
SELECT name FROM students
WHERE locality = 'Northside' AND EXISTS (SELECT 1 FROM grades WHERE grades.student_id = students.id AND grades.subject = 'Science');

This query returns students from “Northside” who have a grade in “Science”, displaying the name Charlie.

SQL EXISTS Operator - Using EXISTS to Verify Matching Conditions Across Tables

FAQs for SQL EXISTS

1. What does the SQL EXISTS operator do?

The EXISTS operator checks if a subquery returns any rows. If it does, EXISTS returns TRUE, allowing you to filter results based on the presence of related records.

2. Can I use EXISTS with other operators in SQL?

Yes, you can use EXISTS with NOT to exclude records or combine it with AND and OR for complex filtering.

3. What is the difference between EXISTS and IN?

EXISTS checks if any rows exist in a subquery, while IN checks if specific values from one set match values in another. EXISTS is often more efficient with large datasets.

4. Can I use EXISTS with aggregate functions?

Yes, EXISTS can be used with aggregate functions inside a subquery to filter records based on aggregate conditions.

5. Does EXISTS return any data from the subquery?

No, EXISTS only checks for the presence of rows in a subquery. It does not return any data from the subquery.