Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SQL Учебник.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
1.28 Mб
Скачать

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

Соединение таблиц имеет смысл только для реляционных баз данных, когда таблицы, связаны между собой отношением подчиненности. Для соединения таблиц применяется оператор INNER JOIN (внутреннее соединение).

Оператор INNER JOIN записывается в предложении FROM и объединяет записи из двух таблиц, если связующие поля этих таблиц содержат одинаковые значения.

SELECT имена полей таблиц

FROM таблица1 INNER JOIN таблица2 ON таблица1.поле оператор таблица2.поле

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

Обратимся к базе данных, структура которой была приведена в разделе "Подзапросы" и выполним соединение таблиц.

Заказы

Клиенты

Товары

ПКТ

Товар

1

Телевизор

2

Телефон

3

Монитор

4

Компьютер

ВКТ

Цена

ВКК

3

15000

3

2

7351

2

2

3769

3

3

14200

1

2

5987

2

1

30200

3

1

32400

1

4

16800

2

3

14000

1

4

15500

3

2

4800

2

ПКК

Фирма

1

Электрон

2

Аргус

3

Техно

ПКТ - Первичный Ключ Товара

ВКТ - Внешний Ключ Товар

ПКК - Первичный Ключ Клиента

ВКК - Внешний Ключ Клиента

З

SELECT *

FROM Товары INNER JOIN Заказы ON Товары.ПКТ = Заказы.ВКТ

ПКТ

Товар

ВКТ

Цена

ВКК

1

Телевизор

1

30200

3

1

Телевизор

1

32400

1

2

Телефон

2

7351

2

2

Телефон

2

3769

3

2

Телефон

2

5987

2

2

Телефон

2

4800

2

3

Монитор

3

15000

3

3

Монитор

3

14200

1

3

Монитор

3

14000

1

4

Компьютер

4

16800

2

4

Компьютер

4

15500

3

Каждая запись таблицы "Товары", соединяется с теми записями таблицы "Заказы, для которых ПКТ и ВКТ совпадают.

ПКТ

Товар

ВКТ

Цена

ВКК

1

Телевизор

1

30200

3

1

Телевизор

1

32400

1

2

Телефон

2

7351

2

2

Телефон

2

3769

3

2

Телефон

2

5987

2

2

Телефон

2

4800

2

3

Монитор

3

15000

3

3

Монитор

3

14200

1

3

Монитор

3

14000

1

4

Компьютер

4

16800

2

4

Компьютер

4

15500

3

апрос 1. Соединить таблицы "Товары" и "Заказы"

Запрос 1. Соединить таблицы "Товары", "Заказы", "Клиенты"

SELECT *

FROM (Товары INNER JOIN Заказы ON Товары.ПКТ = Заказы.ВКТ)

INNER JOIN Клиенты ON Заказы.ВКК = Клиенты.ПКК

Сначала, каждая запись таблицы "Товары", соединяется с теми записями таблицы "Заказы, у которых совпадают ПКТ и ВКТ. (инструкция в скобках) Далее, к соединенным таблицам "Товары"↔"Заказы", присоединяются записи таблицы "Клиенты", у которых совпадают ВКК и ПКК

ПКТ

Товар

ВКТ

Цена

ВКК

ПКК

Фирма

Телефон

3

Монитор

3

15000

3

3

Техно

165-54-09

2

Телефон

2

7351

2

2

Аргус

265-77-96

2

Телефон

2

3769

3

3

Техно

165-54-09

3

Монитор

3

14200

1

1

Электрон

567-37-21

2

Телефон

2

5987

2

2

Аргус

265-77-96

1

Телевизор

1

30200

3

3

Техно

165-54-09

1

Телевизор

1

32400

1

1

Электрон

567-37-21

4

Компьютер

4

16800

2

2

Аргус

265-77-96

3

Монитор

3

14000

1

1

Электрон

567-37-21

4

Компьютер

4

15500

3

3

Техно

165-54-09

2

Телефон

2

4800

2

2

Аргус

265-77-96

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

Запрос 1.

П

Цена

30200

32400

оказать цены, по которым были проданы телевизоры.

SELECT Цена

FROM Товары INNER JOIN Заказы ON Товары.ПКТ = Заказы.ВКТ

WHERE Товар = "Телевизор"

Сначала, в предложении FROM, в одну таблицу соединяются таблицы "Товары" и "Заказы".

Затем, к одной (соединенной) таблице осуществляется запрос.

ПКТ

Товар

ВКТ

Цена

ВКК

1

Телевизор

1

30200

3

1

Телевизор

1

32400

1

2

Телефон

2

7351

2

2

Телефон

2

3769

3

3

Монитор

3

14000

1

4

Компьютер

4

16800

2

4

Компьютер

4

15500

3

Запрос 2.

Определить Фирмы, купившие более трех товаров.

SELECT Фирма

FROM Заказы INNER JOIN Клиенты ON Заказы.ВКК = Клиенты.ПКК

GROUP BY Фирма

HAVING COUNT(Фирма)>3

Фирма

Аргус

Техно

ВКТ

Цена

ВКК

ПКК

Фирма

Телефон

3

15000

3

3

Техно

165-54-09

2

7351

2

2

Аргус

265-77-96

2

3769

3

3

Техно

165-54-09

3

14200

1

1

Электрон

567-37-21

2

5987

2

2

Аргус

265-77-96

1

30200

3

3

Техно

165-54-09

1

32400

1

1

Электрон

567-37-21

4

16800

2

2

Аргус

265-77-96

3

14000

1

1

Электрон

567-37-21

4

15500

3

3

Техно

165-54-09

2

4800

2

2

Аргус

265-77-96

Сначала, в предложении FROM, в одну таблицу соединяются таблицы "Заказы" и "Клиенты"

Затем, к одной (соединенной) таблице осуществляется запрос.

Запрос 3.

Определить фирмы купившие телевизоры.

SELECT Фирма

FROM (Товары INNER JOIN Заказы ON Товары.ПКТ = Заказы.ВКТ)

INNER JOIN Клиенты ON Заказы.ВКК = Клиенты.ПКК

WHERE Товар = "Телевизор"

Фирма

Электрон

Техно

Запрос 4.

Определить количество товара купленного каждой фирмой.

SELECT Фирма, COUNT(Фирма) AS Количество

FROM Заказы INNER JOIN Клиенты

ON Заказы.ВКК = Клиенты.ПКК

GROUP BY Фирма

Фирма

Количество

Электрон

3

Аргус

4

Техно

4

Вывод:

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]