Это очень хороший вопрос, поэтому я решил написать очень подробную статью на эту тему в своем блоге.
Модель таблицы базы данных
Предположим, у нас есть следующие две таблицы в нашей базе данных, которые формируют отношение таблиц «один ко многим».

studentТаблица является родителем, и student_gradeявляется дочерней таблицей , так как он имеет student_id столбец внешнего ключа , ссылающийся Ид столбец первичного ключа в таблице студента.
student tableСодержит следующие две записи:
| id | first_name | last_name | admission_score |
|
| 1 | Alice | Smith | 8.95 |
| 2 | Bob | Johnson | 8.75 |
А в student_gradeтаблице хранятся оценки, полученные учениками:
| id | class_name | grade | student_id |
|
| 1 | Math | 10 | 1 |
| 2 | Math | 9.5 | 1 |
| 3 | Math | 9.75 | 1 |
| 4 | Science | 9.5 | 1 |
| 5 | Science | 9 | 1 |
| 6 | Science | 9.25 | 1 |
| 7 | Math | 8.5 | 2 |
| 8 | Math | 9.5 | 2 |
| 9 | Math | 9 | 2 |
| 10 | Science | 10 | 2 |
| 11 | Science | 9.4 | 2 |
SQL СУЩЕСТВУЕТ
Допустим, мы хотим получить всех учеников, получивших 10 баллов по математике.
Если нас интересует только идентификатор студента, мы можем выполнить такой запрос:
SELECT
student_grade.student_id
FROM
student_grade
WHERE
student_grade.grade = 10 AND
student_grade.class_name = 'Math'
ORDER BY
student_grade.student_id
Но приложение заинтересовано в отображении полного имени, а studentне только идентификатора, поэтому нам также нужна информация из studentтаблицы.
Чтобы отфильтровать studentзаписи с оценкой 10 по математике, мы можем использовать оператор EXISTS SQL, например:
SELECT
id, first_name, last_name
FROM
student
WHERE EXISTS (
SELECT 1
FROM
student_grade
WHERE
student_grade.student_id = student.id AND
student_grade.grade = 10 AND
student_grade.class_name = 'Math'
)
ORDER BY id
При выполнении запроса выше мы видим, что выбрана только строка Алисы:
| id | first_name | last_name |
|
| 1 | Alice | Smith |
Внешний запрос выбирает studentстолбцы строк, которые мы хотим вернуть клиенту. Однако предложение WHERE использует оператор EXISTS со связанным внутренним подзапросом.
Оператор EXISTS возвращает true, если подзапрос возвращает хотя бы одну запись, и false, если строка не выбрана. Механизм базы данных не должен полностью выполнять подзапрос. Если совпадает одна запись, оператор EXISTS возвращает true, и выбирается связанная другая строка запроса.
Внутренний подзапрос коррелирован, потому что столбец student_id student_gradeтаблицы сопоставляется со столбцом id внешней таблицы student.