В 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 |