Соединение таблиц в SQL

Содержание

Слайд 2

Содержание Соединение таблиц INNER JOIN LEFT JOIN Задание Примеры Декартово произведение

Содержание

Соединение таблиц

INNER JOIN

LEFT JOIN

Задание

Примеры

Декартово произведение

RIGHT JOIN

Сложное соединение таблиц

Контрольные вопросы

Список литературы

Исключение повторяющихся

строк из выборки
Слайд 3

Соединение таблиц INNER JOIN – внутреннее соединение, при котором результирующая таблица

Соединение таблиц

INNER JOIN – внутреннее соединение, при котором результирующая таблица включает

те строки, которые имеют соответствующие друг другу значения связанных полей в двух таблицах.
LEFT JOIN – левое внешнее соединение, при котором в результирующую таблицу попадут все строки из левой таблицы и только те строки из правой таблицы, для которой в левой таблице есть соответствующие значения связанных полей.
RIGHT JOIN – правое внешнее соединение, при котором в результирующую таблицу попадут все строки из правой таблицы и только те строки из левой таблицы, для которой в правой таблице есть соответствующие значения связанных полей.
Слайд 4

INNER JOIN Изменим таблицу «Животное» таким образом, чтобы поле КодКласса, принадлежащее

INNER JOIN

Изменим таблицу «Животное» таким образом, чтобы поле КодКласса, принадлежащее медведю,

было пустым. После этого составим запрос.

SELECT НазваниеЖивотного, НазваниеКласса
FROM Животное INNER JOIN Класс ON Животное.КодКласса=Класс.КодКласса

Обратите внимание на отсутствие в результирующей таблице строки, соответствующей медведю.

Слайд 5

LEFT JOIN SELECT НазваниеЖивотного, НазваниеКласса FROM Животное LEFT JOIN Класс ON

LEFT JOIN

SELECT НазваниеЖивотного, НазваниеКласса
FROM Животное LEFT JOIN Класс ON Животное.КодКласса=Класс.КодКласса

Обратите внимание

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

RIGHT JOIN SELECT НазваниеЖивотного, НазваниеКласса FROM Животное RIGHT JOIN Класс ON

RIGHT JOIN

SELECT НазваниеЖивотного, НазваниеКласса
FROM Животное RIGHT JOIN Класс ON Животное.КодКласса=Класс.КодКласса

Обратите внимание

на отсутствие
в результирующей таблице строки,
соответствующей медведю. А также на
наличие строк, соответствующих
пресмыкающимся, птицам и млекопитающим, с которыми отсутствуют связанные поля таблицы «Животное».
Слайд 7

Декартово произведение Операция декартова произведения осуществляется путем сцепления каждой записи одной

Декартово произведение

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

с каждой записью другой таблицы.

SELECT НазваниеЖивотного, НазваниеКласса
FROM Животное, Класс

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

Слайд 8

Декартово произведение SELECT НазваниеЖивотного, НазваниеКласса FROM Животное, Класс WHERE Животное.КодКласса=Класс.КодКласса Данную

Декартово произведение

SELECT НазваниеЖивотного, НазваниеКласса
FROM Животное, Класс
WHERE Животное.КодКласса=Класс.КодКласса

Данную операцию используют вместе с

выборкой по условию (селекцией), причем условие – это равенство соответствующих значений столбцов.

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

Слайд 9

Сложное соединение таблиц Рассмотрим соединение большого количества таблиц. Допустим, необходимо получить

Сложное соединение таблиц

Рассмотрим соединение большого количества таблиц. Допустим, необходимо получить список

животных в Новосибирском зоопарке и продуктов питания, которые они едят. Таким образом, в запросе будут соединены таблицы «Зоопарк», «Наличие», «Животное», «Питание» и «Еда»:

SELECT НазваниеЖивотного, НазваниеЕды
FROM Зоопарк, Наличие, Животное, Питание, Еда
WHERE Зоопарк.КодЗоопарка=Наличие.КодЗоопарка AND Животное.КодЖивотного=Наличие.КодЖивотного AND Животное.КодЖивотного=Питание.КодЖивотного AND Питание.КодЕды=Еда.КодЕды AND НазваниеЗоопарка=“Новосибирский”

SELECT НазваниеЖивотного, НазваниеЕды
FROM (((Зоопарк INNER JOIN Наличие ON Зоопарк.КодЗоопарка= Наличие.КодЗоопарка) INNER JOIN Животное ON Животное.КодЖивотного=Наличие.КодЖивотного) INNER JOIN Питание ON Животное.КодЖивотного=Питание.КодЖивотного) INNER JOIN Еда ON Питание.КодЕды=Еда.КодЕды
WHERE НазваниеЗоопарка=“Новосибирский”

Слайд 10

Синонимы SELECT НазваниеЖивотного, НазваниеЕды FROM (((Зоопарк З INNER JOIN Наличие Н

Синонимы

SELECT НазваниеЖивотного, НазваниеЕды
FROM (((Зоопарк З INNER JOIN Наличие Н ON З.КодЗоопарка=

Н.КодЗоопарка) INNER JOIN Животное Ж ON Ж.КодЖивотного=
Н.КодЖивотного) INNER JOIN Питание П ON Ж.КодЖивотного=
П.КодЖивотного) INNER JOIN Еда Е ON П.КодЕды=Е.КодЕды
WHERE НазваниеЗоопарка=“Новосибирский”

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

Слайд 11

Исключение повторяющихся строк из выборки Пример: Выяснить, представители каких классов обитают

Исключение повторяющихся строк из выборки

Пример: Выяснить, представители каких классов обитают в

Московском зоопарке.

SELECT НазваниеКласса
FROM (((Зоопарк З INNER JOIN Наличие Н ON З.КодЗоопарка= Н.КодЗоопарка) INNER JOIN Животное Ж ON Ж.КодЖивотного=
Н.КодЖивотного) INNER JOIN Класс К ON Ж.КодКласса=К.КодКласса)
WHERE НазваниеЗоопарка=“Московский”

Результирующая таблица содержит повторяющиеся строки, соответствующие разным животным, но принадлежащим одному и тому же классу.
Для того чтобы исключить повторяющиеся строки из выборки, применяют ключевое слово

НазваниеКласса

SELECT
FROM (((Зоопарк З INNER JOIN Наличие Н ON З.КодЗоопарка= Н.КодЗоопарка) INNER JOIN Животное Ж ON Ж.КодЖивотного=
Н.КодЖивотного) INNER JOIN Класс К ON Ж.КодКласса=К.КодКласса)
WHERE НазваниеЗоопарка=“Московский”

DISTINCT

Слайд 12

Задание Получить названия животных с указанием их классов. Получить названия зоопарков,

Задание

Получить названия животных с указанием их классов.
Получить названия зоопарков, в которых

живет больше 15 крокодилов.
Получить список животных, которые питаются овощами.
Получить список животных, обитающих в Московском зоопарке, с указанием количества экземпляров.
Получить список животных, питающихся фруктами или злаками.
Получить список продуктов, которыми кормят дельфинов.
Получить список зоопарков, где живут альбатросы.
Получить список животных, которые едят какие-либо продукты питания больше 300г.
Получить список классов, чьи представители едят мясо.
Получить список зоопарков, в которых обитают животные, питающиеся мелкими беспозвоночными.
Слайд 13

Контрольные вопросы Что получится в результате выполнения операции INNER JOIN? Приведите

Контрольные вопросы

Что получится в результате выполнения операции INNER JOIN? Приведите пример.


Что получится в результате выполнения операции LEFT JOIN? Приведите пример.
Что получится в результате выполнения операции RIGHT JOIN? Приведите пример.
Что получится в результате выполнения операции декартова произведения? Приведите пример.