В SQL вы можете использовать подзапросы для выполнения вложенного запроса внутри другого запроса.

Таблица movies
| id | title | release_year | genre | rating |
|---|---|---|---|---|
| 1 | The Shawshank Redemption | 1994 | Drama | 9 |
| 2 | The Godfather | 1972 | Crime | 9 |
| 3 | The Godfather: Part II | 1974 | Crime | 9 |
| 4 | The Dark Knight | 2008 | Action | 9 |
| 5 | 12 Angry Men | 1957 | Drama | 8 |
| 6 | Schindlers List | 1993 | Biography | 8 |
| 7 | Pulp Fiction | 1994 | Crime | 8 |
| 8 | The Lord of the Rings: The Return of the King | 2003 | Adventure | 8 |
| 9 | Fight Club | 1999 | Drama | 8 |
| 10 | The Good, the Bad and the Ugly | 1966 | Western | 8 |
Например вы можете использовать подзапрос в операторе SELECT, чтобы выбрать только те фильмы, которые имеют рейтинг выше среднего рейтинга всех фильмов в таблице:
SELECT *
FROM movies
WHERE rating > (SELECT AVG(rating)
FROM movies);
Результат
| id | title | release_year | genre | rating |
|---|---|---|---|---|
| 1 | The Shawshank Redemption | 1994 | Drama | 9 |
| 2 | The Godfather | 1972 | Crime | 9 |
| 3 | The Godfather: Part II | 1974 | Crime | 9 |
| 4 | The Dark Knight | 2008 | Action | 9 |
Для того что бы получить все фильмы из таблицы movies, где год выпуска совпадает с минимальным годом выпуска в таблице movies вы можете использовать следующий SQL запрос:
SELECT *
FROM movies
WHERE release_year = (SELECT MIN(release_year)
FROM movies);
Результат
| id | title | release_year | genre | rating |
|---|---|---|---|---|
| 5 | 12 Angry Men | 1957 | Drama | 8 |
Для того что бы получить все фильмы из таблицы movies, где год выпуска совпадает с максимальным годом выпуска в таблице movies вы можете использовать следующий SQL запрос:
SELECT *
FROM movies
WHERE release_year = (SELECT MAX(release_year)
FROM movies);
Результат
| id | title | release_year | genre | rating |
|---|---|---|---|---|
| 4 | The Dark Knight | 2008 | Action | 9 |
Подзапросы являются очень мощным инструментом в обработке данных, но их следует использовать с осторожностью, поскольку они могут значительно ухудшить производительность запроса, если объем данных или структура запроса не оптимальны.
Тестирование и оптимизация запросов с подзапросами очень важно для обеспечения максимальной производительности и корректности результатов.
Оператор ANY используется в SQL для сравнения значения какого-либо столбца в одной таблице с набором значений, возвращаемым подзапросом другой таблицы. Он возвращает true, если хотя бы одно значение из набора возвращаемого подзапросом совпадает с значением столбца в основной таблице.
Таблица movies
| id | title | release_year | genre | rating |
|---|---|---|---|---|
| 1 | The Shawshank Redemption | 1994 | Drama | 9 |
| 2 | The Godfather | 1972 | Crime | 9 |
| 3 | The Godfather: Part II | 1974 | Crime | 9 |
| 4 | The Dark Knight | 2008 | Action | 9 |
| 5 | 12 Angry Men | 1957 | Drama | 8 |
| 6 | Schindlers List | 1993 | Biography | 8 |
| 7 | Pulp Fiction | 1994 | Crime | 8 |
| 8 | The Lord of the Rings: The Return of the King | 2003 | Adventure | 8 |
| 9 | Fight Club | 1999 | Drama | 8 |
| 10 | The Good, the Bad and the Ugly | 1966 | Western | 8 |
Таблица top_rated_movies
| id | title | release_year | genre | rating |
|---|---|---|---|---|
| 1 | The Shawshank Redemption | 1994 | Drama | 9 |
| 2 | The Godfather | 1972 | Crime | 9 |
| 3 | The Godfather: Part II | 1974 | Crime | 9 |
| 4 | The Dark Knight | 2008 | Action | 9 |
Например, если вы хотите найти все фильмы из таблицы movies, которые также присутствуют во второй таблице top_rated_movies, вы можете использовать следующий запрос:
SELECT *
FROM movies
WHERE title = ANY (SELECT title
FROM top_rated_movies);
Результат
| id | title | release_year | genre | rating |
|---|---|---|---|---|
| 1 | The Shawshank Redemption | 1994 | Drama | 9 |
| 2 | The Godfather | 1972 | Crime | 9 |
| 3 | The Godfather: Part II | 1974 | Crime | 9 |
| 4 | The Dark Knight | 2008 | Action | 9 |
Оператор ALL используется в условии подзапроса в SQL, когда вы хотите сравнить значение из основного запроса со всеми значениями из подзапроса. Оператор ALL сравнивает каждое значение со всеми значениями из подзапроса.
Таблица movies
| id | title | release_year | genre | rating |
|---|---|---|---|---|
| 1 | The Shawshank Redemption | 1994 | Drama | 9 |
| 2 | The Godfather | 1972 | Crime | 9 |
| 3 | The Godfather: Part II | 1974 | Crime | 9 |
| 4 | The Dark Knight | 2008 | Action | 9 |
| 5 | 12 Angry Men | 1957 | Drama | 8 |
| 6 | Schindlers List | 1993 | Biography | 8 |
| 7 | Pulp Fiction | 1994 | Crime | 8 |
| 8 | The Lord of the Rings: The Return of the King | 2003 | Adventure | 8 |
| 9 | Fight Club | 1999 | Drama | 8 |
| 10 | The Good, the Bad and the Ugly | 1966 | Western | 8 |
Таблица top_rated_movies
| id | title | release_year | genre | rating |
|---|---|---|---|---|
| 1 | The Shawshank Redemption | 1994 | Drama | 9 |
| 2 | The Godfather | 1972 | Crime | 9 |
| 3 | The Godfather: Part II | 1974 | Crime | 9 |
| 4 | The Dark Knight | 2008 | Action | 9 |
Например, чтобы найти все фильмы, рейтинг которых больше или равен всем рейтингам во второй таблице top_rated_movies, вы можете использовать следующий запрос:
SELECT *
FROM movies
WHERE rating >= ALL (SELECT rating
FROM top_rated_movies);
Результат
| id | title | release_year | genre | rating |
|---|---|---|---|---|
| 1 | The Shawshank Redemption | 1994 | Drama | 9 |
| 2 | The Godfather | 1972 | Crime | 9 |
| 3 | The Godfather: Part II | 1974 | Crime | 9 |
| 4 | The Dark Knight | 2008 | Action | 9 |