Допустим, что вы дошли до этого момента — КиберПедия 

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

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

Допустим, что вы дошли до этого момента

2020-05-08 223
Допустим, что вы дошли до этого момента 0.00 из 5.00 0 оценок
Заказать работу


Допустим, что вы бухгалтер Сидоров С.С., который решил научиться писать SELECT-запросы.
Допустим, что вы уже успели дочитать данный учебник до этого момента, и уже уверено пользуетесь всеми вышеперечисленными базовыми конструкциями, т.е. вы умеете:

·Выбирать детальные данные по условию WHERE из одной таблицы

·Умеете пользоваться агрегатными функциями и группировкой из одной таблицы


Так как на работе посчитали, что вы уже все умеете, то вам предоставили доступ к БД (и такое порой бывает), и теперь вы разработали и вытаскиваете тот самый еженедельный отчет для директора.

Да, но они не учли, что вы пока не умеете строить запросы из нескольких таблиц, а только из одной, т.е. вы не умеете делать что-то вроде такого:

SELECT

emp.*, -- вернуть все поля таблицы Employees

dep.Name DepartmentName, -- к этим полям добавить поле Name из таблицы Departments

pos.Name PositionName -- и еще добавить поле Name из таблицы Positions

FROM Employees emp

LEFT JOIN Departments dep ON emp.DepartmentID=dep.ID

LEFT JOIN Positions pos ON emp.PositionID=pos.ID

 

ID Name Birthday Salary BonusPercent DepartmentName PositionName
1000 Иванов И.И. 19.02.1955   5000 50 Администрация Директор
1001 Петров П.П. 03.12.1983   1500 15 ИТ Программист
1002 Сидоров С.С. 07.06.1976   2500 NULL Бухгалтерия Бухгалтер
1003 Андреев А.А. 17.04.1982   2000 30 ИТ Старший программист
1004 Николаев Н.Н. NULL   1500 NULL ИТ Программист
1005 Александров А.А. NULL   2000 NULL NULL NULL


Несмотря на то, что вы этого не умеете, поверьте, вы молодец, и уже, и так много достигли.

И так, как же можно воспользоваться вашими текущими знаниями и получить при этом еще более продуктивные результаты?! Воспользуемся силой коллективного разума – идем к программистам, которые работают у вас, т.е. к Андрееву А.А., Петрову П.П. или Николаеву Н.Н., и попросим кого-нибудь из них написать для вас представление (VIEW или просто «Вьюха», так они даже, думаю, быстрее поймут вас), которое помимо основных полей из таблицы Employees, будет еще возвращать поля с «Названием отдела» и «Названием должности», которых вам так недостает сейчас для еженедельного отчета, которым вас загрузил Иванов И.И.

Т.к. вы все грамотно объяснили, то ИТ-шники, сразу же поняли, что от них хотят и создали, специально для вас, представление с названием ViewEmployeesInfo.

Представляем, что вы следующей команды не видите, т.к. это делают ИТ-шники:

CREATE VIEW ViewEmployeesInfo

AS

SELECT

emp.*, -- вернуть все поля таблицы Employees

dep.Name DepartmentName, -- к этим полям добавить поле Name из таблицы Departments

pos.Name PositionName -- и еще добавить поле Name из таблицы Positions

FROM Employees emp

LEFT JOIN Departments dep ON emp.DepartmentID=dep.ID

LEFT JOIN Positions pos ON emp.PositionID=pos.ID

 

Т.е. для вас весь этот, пока страшный и непонятный, текст остается за кадром, а ИТ-шники дают вам только название представления «ViewEmployeesInfo», которое возвращает все вышеуказанные данные (т.е. то что вы у них просили).

Вы теперь можете работать с данным представлением, как с обычной таблицей:

SELECT *

FROM ViewEmployeesInfo

 

ID Name Birthday Salary BonusPercent DepartmentName PositionName
1000 Иванов И.И. 19.02.1955   5000 50 Администрация Директор
1001 Петров П.П. 03.12.1983   1500 15 ИТ Программист
1002 Сидоров С.С. 07.06.1976   2500 NULL Бухгалтерия Бухгалтер
1003 Андреев А.А. 17.04.1982   2000 30 ИТ Старший программист
1004 Николаев Н.Н. NULL   1500 NULL ИТ Программист
1005 Александров А.А. NULL   2000 NULL NULL NULL


Т.к. теперь все необходимые для отчета данные есть в одной «таблице» (а-ля вьюха), то вы с легкостью сможете переделать свой еженедельный отчет:

SELECT

DepartmentName,

COUNT(DISTINCT PositionID) PositionCount,

COUNT(*) EmplCount,

SUM(Salary) SalaryAmount,

AVG(Salary) SalaryAvg

FROM ViewEmployeesInfo emp

GROUP BY DepartmentID,DepartmentName

ORDER BY DepartmentName

 

DepartmentName PositionCount EmplCount SalaryAmount SalaryAvg
NULL 0 1 2000 2000
Администрация 1 1 5000 5000
Бухгалтерия 1 1 2500 2500
ИТ 2 3 5000 1666.66666666667


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

Т.е. для вас в данном случае, будто бы ничего и не поменялось, вы продолжаете так же работать с одной таблицей (только уже правильнее сказать с представлением ViewEmployeesInfo), которое возвращает все необходимые вам данные. Благодаря помощи ИТ-шников, детали по добыванию DepartmentName и PositionName остались для вас в черном ящике. Т.е. представление для вас выглядит так же, как и обычная таблица, считайте, что это расширенная версия таблицы Employees.

Давайте для примера еще сформируем ведомость, чтобы вы убедились, что все действительно так как я и говорил (что вся выборка идет из одного представления):

SELECT

ID,

Name,

Salary

FROM ViewEmployeesInfo

WHERE Salary IS NOT NULL

AND Salary>0

ORDER BY Name

 

ID Name Salary
1005 Александров А.А. 2000
1003 Андреев А.А. 2000
1000 Иванов И.И. 5000
1004 Николаев Н.Н. 1500
1001 Петров П.П. 1500
1002 Сидоров С.С. 2500


Надеюсь, что данный запрос вам понятен.

Использование представлений в некоторых случаях, дает возможность значительно расширить границы пользователей, владеющих написанием базовых SELECT-запросов. В данном случае представление, представляет собой плоскую таблицу со всеми необходимыми пользователю данными (для тех, кто разбирается в OLAP, это можно сравнить с приближенным подобием OLAP-куба с фактами и измерениями).

Вырезка с википедии. Хотя SQL и задумывался как средство работы конечного пользователя, в конце концов он стал настолько сложным, что превратился в инструмент программиста.

 

Как видите, уважаемые пользователи, язык SQL изначально задумывался, как инструмент для вас. Так что, все в ваших руках и желании, не отпускайте руки.


Поделиться с друзьями:

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.009 с.