- •Белорусский национальный технический университет
- •Моделирование баз данных средствами Erwin
- •Методические указания по изучению языка sql
- •Запуск MySql
- •Ввод запросов
- •Запросы на создание и использование базы данных
- •I. Простые запросы на языке sql
- •II. Использование функций
- •III. Запросы, использующие соединения
- •IV. Группирование
- •V. Построение внешнего соединения
- •VI. Операторы манипулирования данными. Удаление данных
- •VII. Операторы манипулирования данными. Вставка данных
- •Учебная литература
- •Дополнительная литература
- •Задание 1
- •Варианты контрольных заданий
- •Задание 2
- •Задание 3( не нужно)
- •Утилита субд mysql Mysqldump
- •Синтаксис оператора create table
- •Синтаксис оператора alter table
- •Синтаксис оператора drop table, database
- •Синтаксис оператора update
- •Синтаксис оператора delete
- •Синтаксис оператора select
IV. Группирование
1. Оператор group by.
Оператор group by группирует таблицу, представленную фразой from, в группы таким образом, чтобы в каждой группе все строки имели одно и то же значение поля, указанного во фразе group by. Далее, к каждой группе перекомпанованной таблицы (а не к каждой строке исходной таблицы) применяется фраза select, в результате чего каждое выражение во фразе select принимает единственное значение для группы.
Пример
Выдать для каждой поставляемой детали ее номер и общий объем поставок, за исключением поставок поставщика S1:
Select номер_детали, sum( количество)
from SPJ
where номер_поставщика
group by номер_детали
Результат: |
Hомеp_поставщика |
(Sum) |
|
P1 |
300 |
|
P2 |
800 |
|
P4 |
300 |
|
P5 |
400 |
2. Оператор having.
Оператор having играет ту же роль для групп, что и фраза where для строк, и используется для того, чтобы исключать группы, точно так же, как where используется для исключения строк. Выражение во фразе having должно принимать единственное значение для группы.
Пример
Выдать номера деталей, поставляемых более чем одним поставщиком:
Select номер_детали
from SPJ
group by номер_детали
having count(*) > 1
Результат: |
Номер_детали |
|
P1 |
|
P2 |
|
P4 |
|
P5 |
V. Построение внешнего соединения
В простом соединении результат содержит только комбинации строк из тех таблиц, которые удовлетворяют условиям соединения. Строки, которые не удовлетворяют условиям соединения, отбрасываются. Во внешнем соединении результат содержит комбинации строк из тех таблиц, которые удовлетворяют условиям соединения, а также строки, которые были бы отброшены при простом соединении этих таблиц, даже если в подчиненной таблице не найдена ни одна соответствующая строка. Строки главной таблицы, для которых не найдено в подчиненной таблице ни одной соответствующей строки, получают значения, состоящие из одних Null-значений для каждого столбца.
Существует четыре основных типа внешних соединений:
простое внешнее соединение;
простое внешнее соединение с третьей таблицей;
внешнее соединение простого соединения с третьей таблицей;
внешнее соединение внешнего соединения с третьей таблицей.
1. Простое соединение.
Пример
Select S.номер_поставщика, S.фамилия, SPJ.количество
from S, SPJ
where S.номер_поставщика=SPJ.номер_поставщика
Результат: |
Hомеp_поставщика |
Фамилия |
Количество |
|
S1 |
Смит |
300 |
|
S1 |
Смит |
200 |
|
S1 |
Смит |
400 |
|
S1 |
Смит |
200 |
|
S1 |
Смит |
100 |
|
S1 |
Смит |
100 |
|
S2 |
Джонс |
300 |
|
S2 |
Джонс |
400 |
|
S3 |
Блейк |
200 |
|
S4 |
Кларк |
200 |
|
S4 |
Кларк |
300 |
|
S4 |
Кларк |
400 |
2. Простое внешнее соединение двух таблиц.
Пример
Select S.номер_поставщика, S.фамилия, SPJ.количество
from S, outer SPJ
where S.номер_поставщика=SPJ.номер_поставщика
Добавление ключевого слова outer перед именем таблицы SP превращает ее в подчиненную таблицу. Результатом этого внешнего соединения будет получение сведений обо всех поставщиках, независимо от того, делали ли они поставки.
Результат: |
Hомеp_поставщика |
Фамилия |
Количество |
|
S1 |
Смит |
300 |
|
S1 |
Смит |
200 |
|
S1 |
Смит |
400 |
|
S1 |
Смит |
200 |
|
S1 |
Смит |
100 |
|
S1 |
Смит |
100 |
|
S2 |
Джонс |
300 |
|
S2 |
Джонс |
400 |
|
S3 |
Блейк |
200 |
|
S4 |
Кларк |
200 |
|
S4 |
Кларк |
300 |
|
S4 |
Кларк |
400 |
|
S5 |
Адамс |
|
3. Внешнее соединение простого соединения с третьей таблицей.
Пример
select S.номер_поставщика, S.фамилия, SPJ.номер_детали,
P.название, P.цвет, P.вес
from S, outer(SPJ, P)
where S.номер_поставщика = P.номер_поставщика
and
SP.номер_детали =SPJ.номер_детали
and
цвет in ("Красный", "Зеленый")
Оператор select выполняет сначала простое соединение таблиц SP и P, а затем этот оператор выполняет внешнее соединение как комбинирование этой информации с данными из главной таблицы S.
Результат:
Hомеp_пост |
Фамилия |
Номер_дет |
Название |
Цвет |
Вес |
S1 |
Смит |
P1 |
Гайка |
Красный |
12 |
S1 |
Смит |
P2 |
Болт |
Зеленый |
17 |
S1 |
Смит |
P4 |
Винт |
Красный |
14 |
S1 |
Смит |
P6 |
Блюм |
Красный |
19 |
S2 |
Джонс |
P1 |
Гайка |
Красный |
12 |
S2 |
Джонс |
P2 |
Болт |
Зеленый |
17 |
S3 |
Блейк |
P2 |
Болт |
Зеленый |
17 |
S4 |
Кларк |
P2 |
Болт |
Зеленый |
17 |
S4 |
Кларк |
P4 |
Винт |
Красный |
14 |
S5 |
Адамс |
|
|
|
|
4. Внешнее соединение внешнего соединения с третьей таблицей.
Пример
select S.номер_поставщика, S.фамилия, SP.номер_детали,
P.название, P.цвет, P.вес
from S, outer(SP, outer P)
where S.номер_поставщика = SP.номер_поставщика
and
SP.номер_детали = P.номер_детали
and
цвет in ("Красный", "Зеленый")
Оператор select сначала выполняет внешнее соединение таблиц SP и P, затем - внешнее соединение как комбинирование этой информации с данными из главной таблицы S.
Результат:
Hомеp_пост |
Фамилия |
Номер_дет |
Название |
Цвет |
Вес |
S1 |
Смит |
P1 |
Гайка |
Красный |
12 |
S1 |
Смит |
P2 |
Болт |
Зеленый |
17 |
S1 |
Смит |
P3 |
NULL |
NULL |
NULL |
S1 |
Смит |
P4 |
Винт |
Красный |
14 |
S1 |
Смит |
P5 |
NULL |
NULL |
NULL |
S1 |
Смит |
P6 |
Блюм |
Красный |
19 |
S2 |
Джонс |
P1 |
Гайка |
Красный |
12 |
S2 |
Джонс |
P2 |
Болт |
Зеленый |
17 |
S3 |
Блейк |
P2 |
Болт |
Зеленый |
17 |
S4 |
Кларк |
P2 |
Болт |
Зеленый |
17 |
S4 |
Кларк |
P4 |
Винт |
Красный |
14 |
S4 |
Кларк |
P5 |
NULL |
NULL |
NULL |
S5 |
Адамс |
NULL |
NULL |
NULL |
NULL |
5. Внешнее соединение двух таблиц с третьей.
Пример
Select S.номер_поставщика, S.фамилия, s.город,
SP.количество, P.название, P.город
from S, outer SP, outer P
where S.номер_поставщика = SP.номер_поставщика
and
S.город = S.город
При выполнении четвертого типа внешнего соединения связи по соединению допускаются только между главной таблицей и подчиненной.
Результат:
Hомеp_пост |
Фамилия |
Город_пост |
Кол-во |
Название |
Город_дет |
S1 |
Смит |
Лондон |
300 |
Гайка |
Лондон |
S1 |
Смит |
Лондон |
300 |
Винт |
Лондон |
S1 |
Смит |
Лондон |
300 |
Блюм |
Лондон |
. . . |
. . . |
. . . |
. . . |
. . . |
. . . |
S2 |
Джонс |
Париж |
300 |
Болт |
Париж |
S2 |
Джонс |
Париж |
300 |
Кулачок |
Париж |
S2 |
Джонс |
Париж |
400 |
Болт |
Париж |
. . . |
. . . |
. . . |
. . . |
. . . |
. . . |
S4 |
Кларк |
Лондон |
400 |
Гайка |
Лондон |
S4 |
Кларк |
Лондон |
400 |
Винт |
Лондон |
S4 |
Кларк |
Лондон |
400 |
Блюм |
Лондон |
S5 |
Адамс |
|
|
|
|
Всего выборка содержит 34 строки.
Подготовьте запрос и проверьте полученный результат.