
- •Занятие 3 Инструкция select Простая выборка
- •Выборка с условием (фильтрация)
- •Фильтрация по одному полю
- •Расширенные условия отбора
- •Сортировка
- •Вычисляемые поля
- •Математические операции между столбцами.
- •Функция round
- •Текстовые операции. Сцепление столбцов. Функции len, left
- •Функции Даты
- •Условный оператор iif
- •Занятие 7 Статистические функции в sql
- •Группировка данных
- •Группировка по одному столбцу
- •Группировка по нескольким столбцам
- •Фильтрация групп
- •Сортировка групп
- •Примеры:
- •Фамилия бажанова коваленко лапина
- •Занятие 8 Подзапросы
- •Использование подзапросов возвращающих одно значение
- •Использование подзапросов возвращающих несколько значений
- •Примеры с подзапросами
- •Соединение таблиц
- •Инструкции на изменение данных Инструкция: delete
- •Инструкция update
- •Инструкция: insert into
- •Insert into ИмяТаблицы
- •Комбинированные запросы
Соединение таблиц
Соединение таблиц имеет смысл только для реляционных баз данных, когда таблицы, связаны между собой отношением подчиненности. Для соединения таблиц применяется оператор 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. Соединить таблицы "Товары", "Заказы", "Клиенты"
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
Вывод:
Соединение нескольких таблиц в одну, прием, значительно облегчающий написание запросов. Но следует иметь ввиду, что использование приема соединения таблиц, подразумевает от пользователя знания реляционной структуры базы данных.