SQL запросы в Access для выборки данных




Определяю атрибуты и их типы значений

Данное отношение находится в первой нормальной форме, поскольку все его атрибуты являются неделимыми, и имеет составной ключ: Код клиента, код зала, код тренера, код абонемента.

Некоторые атрибуты зависят только от части составного ключа. Устраним частичную зависимость и переведем это отношение во вторую нормальную форму путем декомпозиции основного отношения на следующие отношения:

1)код клиента, фамилия имя, телефон, код тренера;
2) код абонемента, описание, цена, код зала;
3) код зала, наименование;
4) код тренера, фамилия имя тренера, оклад;
5) код клиента, код абонемента, месяц, произведена оплата.

Отношения 1,2,3,4,5 находятся в третьей нормальной форме, поскольку они находятся во второй нормальной форме, и каждый неключевой атрибут нетранзитивно зависит от первичного ключа.

Определение ключей и создание связей схемы связей.

В 1-ой таблице первичный ключ – код клиента, атрибут код тренера является внешним ключом к таблице 4.
Во 2-ой таблице первичный ключ- код абонемента. Атрибут код зала является внешним ключом по отношению к таблице 3.
В 3-ей таблице первичный ключ- код зала.
В 4-ой таблице первичный ключ – код тренера.
В 5-ой таблице составной первичный ключ - код клиента, код абонемента, месяц.
Создам схему связей между атрибутами таблиц для обеспечения целостности БД.

Создание файла базы данных в Microsoft Access.

Создадим файл спроектированной БД в СУБД Microsoft Access. Для этого запускаю программу Microsoft Access, выбераю в окне команду Создать файл, затем в окне Создание файла выберем пункт Новая база данных и укажем диск, каталог и имя «Спорт клуб».
Создадим таблицы, для этого выберем объект Таблицы и кнопку Создать. В режиме Конструктор создадим таблицы.

С помощью запроса изменю структуру таблицы: В таблицу Тренеры добавлю атрибут Телефон:
ALTER TABLE Тренеры ADD COLUMN Телефон CHAR(10);

В окне базы данных выберу объект Таблицы, установлю курсор на нужную таблицу и нажму кнопку Открыть. В режиме Таблицы введу записи в таблицы. Получаю:

Изменение структуры таблиц с помощью SQL запроса

С помощью SQL-запроса изменю структуру таблицы Залы. Добавлю атрибут Площадь, тип данных – числовой.
ALTER TABLE Залы ADD COLUMN Площадь FLOAT;

Создание SQL запросов в MS Access для манипулирования данными

Запрос на создание таблицы Тренеры:

CREATE TABLE Тренеры (Код_тренера INT NOT NULL PRIMARY KEY, Фамилия_имя_тренера CHAR (40) NOT NULL, Оклад MONEY NOT NULL);

Запрос на добавление данных в таблицу Залы:

INSERT INTO Залы (Код_зала, Наименование)
VALUES (1001, 'Бассейн 25м');

Запрос на обновление данных в таблице Абонементы – ежемесячную цену поднимем на 10%

UPDATE Абонементы SET Абонементы.Цена = "Цена*1,1";

Запрос на удаление данных из таблицы Учет – удалим записи января месяца:

DELETE Учет.Месяц
FROM Учет
WHERE Учет.Месяц="январь";

SQL запросы в Access для выборки данных

Напишу запросы SQL для выборки данных.

Выберу клиентов, занимающихся в бассейне 25м:
SELECT Клиенты.Код_клиента, Клиенты.Фамилия, Клиенты.Имя, Залы.Код_зала
FROM Клиенты INNER JOIN (Залы INNER JOIN (Абонементы INNER JOIN Учет ON Абонементы.Код_абонемента=Учет.Код_абонемента) ON Залы.Код_зала=Абонементы.Код_зала) ON Клиенты.Код_клиента=Учет.Код_клиента
GROUP BY Клиенты.Код_клиента, Клиенты.Фамилия, Клиенты.Имя, Залы.Код_зала
HAVING (((Залы.Код_зала)=1001));

Получаю:

Подсчитаю количество человек, занимающихся у каждого тренера:
SELECT Тренеры.Код_тренера, Тренеры.Фамилия_имя_тренера, Count(Клиенты.Код_клиента) AS Количество
FROM Тренеры INNER JOIN Клиенты ON Тренеры.Код_тренера = Клиенты.Код_тренера
GROUP BY Тренеры.Код_тренера, Тренеры.Фамилия_имя_тренера;

Получим:

 

Вычислю премию для тренеров с больше чем одним клиентом в виде 40% от оклада:
SELECT Тренеры.Код_тренера, Тренеры.Фамилия_имя_тренера, Count(Клиенты.Код_клиента) AS Количество, [Оклад]*0.4 AS Премия
FROM Тренеры INNER JOIN Клиенты ON Тренеры.Код_тренера=Клиенты.Код_тренера
GROUP BY Тренеры.Код_тренера, Тренеры.Фамилия_имя_тренера, [Оклад]*0.4
HAVING (((Count(Клиенты.Код_клиента))>1));

Выберу клиентов-должников

SELECT Клиенты.Код_клиента, Учет.Произведена_оплата
FROM Клиенты INNER JOIN Учет ON Клиенты.Код_клиента = Учет.Код_клиента
WHERE (((Учет.Произведена_оплата)=No));

Создание однотабличного подзапроса:

SELECT Клиенты.Код_клиента, Клиенты.Фамилия, Клиенты.Имя
FROM Клиенты
WHERE (((Клиенты.Код_клиента) In (SELECT Учет.Код_клиента FROM Учет
WHERE (Учет.Месяц)="июнь")));

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-04-28 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: