Комбинация данных из нескольких таблиц

Содержание

Слайд 2

Схема данных БД «MOVIE»

Схема данных БД «MOVIE»

Слайд 3

Соединение

операция реляционной базы данных, комбинирующая поля из одной и более таблиц в

Соединение операция реляционной базы данных, комбинирующая поля из одной и более таблиц
едином результате запроса.
Соединение происходит, когда после FROM в запросе SELECT перечисляется более чем одно имя таблицы.

Слайд 4

SELECT MOVIE_ID, MOVIE_GENRE_DESCRIPTION AS GENRE, MOVIE_TITLE
FROM MOVIE, MOVIE_GENRE
ORDER BY MOVIE_ID;
Ответ: 16жанров*20фильмов=320 строк

SELECT MOVIE_ID, MOVIE_GENRE_DESCRIPTION AS GENRE, MOVIE_TITLE FROM MOVIE, MOVIE_GENRE ORDER BY MOVIE_ID; Ответ: 16жанров*20фильмов=320 строк

Слайд 5

Эквисоединение

(внутреннее соединение) – соединение, в котором одно или более полей одной таблицы

Эквисоединение (внутреннее соединение) – соединение, в котором одно или более полей одной
(внешний ключ) совмещаются с аналогичными полями другой таблицы (первичный ключ), при условии равенства (т.е. совпадают, если данные в них одинаковы)

Слайд 6

Задание 1

Выведите номер MOVIE_ID, название фильма MOVIE_TITLE из таблицы MOVIE и соответствующее

Задание 1 Выведите номер MOVIE_ID, название фильма MOVIE_TITLE из таблицы MOVIE и
описание жанра из MOVIE_GENRE следующими способами:
А) Для соединения таблиц использовать ключевое слово WHERE;
Б) Для соединения таблиц использовать псевдонимы таблиц.

Слайд 7

Соединения с использованием WHERE

А)
SELECT MOVIE_ID, MOVIE_GENRE_DESCRIPTION AS GENRE, MOVIE_TITLE
FROM MOVIE, MOVIE_GENRE
WHERE

Соединения с использованием WHERE А) SELECT MOVIE_ID, MOVIE_GENRE_DESCRIPTION AS GENRE, MOVIE_TITLE FROM
MOVIE_GENRE.MOVIE_GENRE_CODE = MOVIE.MOVIE_GENRE_CODE;

Слайд 8

С добавленными псевдонимами таблиц

Б)
SELECT A.MOVIE_ID, B.MOVIE_GENRE_DESCRIPTION AS GENRE, A.MOVIE_TITLE
FROM MOVIE A,

С добавленными псевдонимами таблиц Б) SELECT A.MOVIE_ID, B.MOVIE_GENRE_DESCRIPTION AS GENRE, A.MOVIE_TITLE FROM
MOVIE_GENRE B
WHERE A.MOVIE_GENRE_CODE = B.MOVIE_GENRE_CODE;

Слайд 9

Соединения с использованием JOIN

Оператор JOIN объединяет список таблиц после FROM и условия

Соединения с использованием JOIN Оператор JOIN объединяет список таблиц после FROM и
соединения в единую конструкцию.
имя_таблицы [INNER] JOIN имя_таблицы
{ ON условие | USING(имя_поля [,имя_поля]) }
ON позволяет указать условие, подобное указанному после WHERE;
USING перечисляет имена полей, ктр должны использоваться для совпадающих строк. Работает только тогда, когда столбцы в обеих таблицах имеют одинаковые имена (Oracle, MySQL).

Слайд 10

Соединение с условием ON

SELECT MOVIE_ID, MOVIE_GENRE_DESCRIPTION AS GENRE, MOVIE_TITLE
FROM MOVIE INNER JOIN

Соединение с условием ON SELECT MOVIE_ID, MOVIE_GENRE_DESCRIPTION AS GENRE, MOVIE_TITLE FROM MOVIE
MOVIE_GENRE ON
MOVIE.MOVIE_GENRE_CODE = MOVIE_GENRE.MOVIE_GENRE_CODE;

Слайд 11

Соединение с псевдонимами вместо имен таблиц

SELECT A.MOVIE_ID, B.MOVIE_GENRE_DESCRIPTION AS GENRE, A.MOVIE_TITLE
FROM MOVIE

Соединение с псевдонимами вместо имен таблиц SELECT A.MOVIE_ID, B.MOVIE_GENRE_DESCRIPTION AS GENRE, A.MOVIE_TITLE
AS A INNER JOIN MOVIE_GENRE AS B ON A.MOVIE_GENRE_CODE = B.MOVIE_GENRE_CODE;

Слайд 12

Соединение с ключевым словом USING (вместо условия ОN)

SELECT MOVIE_ID, MOVIE_GENRE_DESCRIPTION AS GENRE,

Соединение с ключевым словом USING (вместо условия ОN) SELECT MOVIE_ID, MOVIE_GENRE_DESCRIPTION AS
MOVIE_TITLE
FROM MOVIE INNER JOIN MOVIE_GENRE USING (MOVIE_GENRE_CODE);

Слайд 13

Естественное соединение

основывается на всех полях двух таблиц и более таблиц, имена которых

Естественное соединение основывается на всех полях двух таблиц и более таблиц, имена которых совпадают.
совпадают.

Слайд 14

SELECT A.MOVIE_ID, B.MOVIE_GENRE_DESCRIPTION AS GENRE,
C.MPAA_RATING_CODE AS RATING,
C.MPAA_RATING_DESCRIPTION AS

SELECT A.MOVIE_ID, B.MOVIE_GENRE_DESCRIPTION AS GENRE, C.MPAA_RATING_CODE AS RATING, C.MPAA_RATING_DESCRIPTION AS RATING_DESC FROM
RATING_DESC
FROM MOVIE A INNER JOIN MOVIE_GENRE B ON
A.MOVIE_GENRE_CODE = B.MOVIE_GENRE_CODE
INNER JOIN MPAA_RATING_CODE ON
A.MPAA_RATING_CODE = C.MPAA_RATING_CODE
WHERE MOVIE.MOVIE_ID<6;

Слайд 15

Внешнее соединение

(включительное соединение) включает несовпавшие строки как минимум одной из таблиц в

Внешнее соединение (включительное соединение) включает несовпавшие строки как минимум одной из таблиц
результаты запроса.
Когда есть несовпавшие строки, все значения, выбранные из таблицы, где соответствующая строка не найдена, являются пустыми.
имя_таблицы {RIGHT|LEFT|FULL} [OUTER] JOIN имя_таблицы
{ ON условие|USING (имя_поля [,имя_поля]) }

Слайд 16

Задание 4

Вывести список всех описаний жанров вместе с фильмами, входящими в жанр.

Задание 4 Вывести список всех описаний жанров вместе с фильмами, входящими в
Отметьте строки в списке результатов, не имеющие значения для MOVIE_TITLE, - это жанры, для которых нет соответствующих фильмов.

Слайд 17

SELECT MOVIE_GENRE_DESCRIPTION AS GENRE, MOVIE_TITLE
FROM MOVIE RIGHT OUTER JOIN MOVIE_GENRE
ON MOVIE.MOVIE_GENRE_CODE=MOVIE_GENRE.MOVIE_GENRE_CODE;

SELECT MOVIE_GENRE_DESCRIPTION AS GENRE, MOVIE_TITLE FROM MOVIE RIGHT OUTER JOIN MOVIE_GENRE ON MOVIE.MOVIE_GENRE_CODE=MOVIE_GENRE.MOVIE_GENRE_CODE;

Слайд 18

Задание 5

Вывести список описаний жанров, для которых нет соответствующих фильмов.

Задание 5 Вывести список описаний жанров, для которых нет соответствующих фильмов.

Слайд 19

SELECT MOVIE_GENRE_DESCRIPTION AS GENRE
FROM MOVIE RIGHT OUTER JOIN MOVIE_GENRE
ON MOVIE.MOVIE_GENRE_CODE

SELECT MOVIE_GENRE_DESCRIPTION AS GENRE FROM MOVIE RIGHT OUTER JOIN MOVIE_GENRE ON MOVIE.MOVIE_GENRE_CODE
= MOVIE_GENRE.MOVIE_GENRE_CODE
WHERE MOVIE_TITLE IS NULL;

Слайд 20

Рефлексивное соединение

соединение таблицы с самой собой.
Есть отношения, первичный и внешний ключ которых

Рефлексивное соединение соединение таблицы с самой собой. Есть отношения, первичный и внешний
находятся в одной таблице.
Это называется рекурсивной ссылкой, такая в базе данных только одна.

Слайд 21

Вложенные запросы

представляют собой подчиненные запросы SELECT.
Они обычно помещаются после WHERE в качестве

Вложенные запросы представляют собой подчиненные запросы SELECT. Они обычно помещаются после WHERE
способа ограничения строк, возвращаемых в списке результатов внешнего запроса.

Слайд 22

Некоррелированный вложенный запрос

-вложенный запрос, в котором внутренний запрос не обращается к

Некоррелированный вложенный запрос -вложенный запрос, в котором внутренний запрос не обращается к
содержащему его внешнему.
Это означает, что сначала можно выполнить внутренний запрос, а затем использовать полученный список результатов во внешнем запросе.

Слайд 23

Задание 6

Вывести список всех языков, на которых в видеопрокате нет фильмов.
SELECT LANGUAGE_CODE,

Задание 6 Вывести список всех языков, на которых в видеопрокате нет фильмов.
LANGUAGE_NAME
FROM LANGUAGE
WHERE LANGUAGE_CODE NOT IN
(SELECT DISTINCT LANGUAGE_CODE
FROM MOVIE_LANGUAGE);