awilum.ru
Статьи Курсы Об авторе

Подзапросы

Курсы / SQL Базовый уровень / Основы

В 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
Группировка Объединение запросов
Записаться на курс