Студопедия — Синтаксис. SELECT { * | table.* | [table.]field1 [AS alias1] [, [table.]field2 [AS alias2] [, ]]}
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Синтаксис. SELECT { * | table.* | [table.]field1 [AS alias1] [, [table.]field2 [AS alias2] [, ]]}






SELECT { * | table. * | [ table. ] field1 [AS alias1 ] [, [ table. ] field2 [AS alias2 ] [,...]]}

FROM table1 [ table1Alias ] [, table2 [ table2Alias ] [,...]

WHERE fieldI operator

(SELECT { * | table. * | [ table. ] field1 [AS alias1 ] [, [ table. ] field2 [AS alias2 ] [,...]]}

FROM table1 [ table1Alias ] [, table2 [ table2Alias ] [,...]

WHERE [ criteria ])

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

SELECT TOP 1 КодСклада

FROM Инвентарная_ведомость

GROUP BY КодСклада

ORDER BY SUM(Количество) DESC

Предложение TOP 1 указывает на то, что в результирующий набор попадает только одна запись, а поскольку набор сортируется (по убыванию) по суммарным количествам товаров, то в результате мы получаем код склада с наибольшим количеством товаров. Остается использовать ранее рассмотренный запрос, который возвращает список товаров для указанного кода склада, но если ранее мы указывали этот код, то теперь определяем его в подзапросе (результат — на рис. 15.27):

SELECT a.НаимТовара AS [Наименование товара], b.Количество AS Количество

FROM Товары AS a, Запасы AS b

WHERE a.КодТовара=b.КодТовара AND b.КодПодразделения =

(SELECT TOP 1 КодПодразделения

FROM Запасы

GROUP BY КодПодразделения

ORDER BY SUM(Количество) DESC)

Рис. 15.27

Результат выполнения сложного запроса

Кстати, это — тот случай, когда запрос может доставить эстетическое наслаждение (конечно, в большей мере — автору запроса).

Целью следующего запроса является получение ведомости товаров склада, где имеется больше наименований (кодов) товаров (результат — на рис. 15.28).

SELECT a.НаимТовара AS [Наименование товара], b.Количество AS Количество

FROM Товары AS a, Запасы AS b

WHERE a.КодТовара=b.КодТовара AND b.КодПодразделения =

(SELECT TOP 1 КодПодразделения

FROM Запасы

GROUP BY КодПодразделения

ORDER BY COUNT(КодТовара) DESC)

Здесь в подзапросе вместо функции SUM используется COUNT — счетчик количества записей.

Рис. 15.28

Результат выполнения сложного запроса

Для следующих далее примеров нам необходимо добавить к рассматриваемой базе данных таблицы, позволяющие учитывать перемещение товаров между подразделениями. Это можно сделать при помощи таблиц КонтрАгенты (информация о подразделениях, в которые и из которых передаются товары), НаклЗаголовки (дата и номер накладной, код подразделения, где сформирована накладная, код подразделения, куда «ушел» или откуда «пришел» товар, и тип накладной: приходная, расходная и т.д.), ТипыНакладных (коды и наименования типов накладных, например, отпуска, приема товара и т.д.) и НаклСпецификации (сведения о товарах, которые связаны с накладной) (рис. 15.29). Обратите внимание на то, что для таблицы НаклЗаголовки значение совокупности полей Номер, Дата и КодПодразделения является уникальным. В таблице же НаклСпецификации для каждой такой совокупности будет ровно столько записей, сколько наименований товаров имеется в накладной.

Рис. 15.29

Дополненная схема базы фирма.mdb

В соответствии с приведенной на рис. 15.29 схемой необходимо изменить файл фирма.mdb, то есть добавить четыре таблицы. Одна из них — КонтрАгенты — очень похожа на таблицу Подразделения, а ее содержимое можно просто скопировать из этой таблицы (рис. 15.30), поскольку одни и те же подразделения фирмы могут выступать и в качестве принимающих товары, и в качестве отпускающих их. На самом деле, в данном случае две таблицы для одной и той же информации используются только для простоты. В реальной ситуации для подобных целей таблицы создаются (или клонируются) во время выполнения кода.

Рис. 15.30

Содержимое таблицы КонтрАгенты можно просто скопировать из таблицы Подразделения

Остается заполнить таблицы, в которых предполагается хранить информацию о накладных. На рис. 15.31 приведена заполненная таблица с заголовками накладных. Даты и номера накладных здесь могут быть произвольными, коды полей КодПодразделения и КодКАгента взяты из таблиц Подразделения и КонтрАгенты. Совокупность данных первых трех полей должна быть уникальной: одной дате может соответствовать несколько номеров накладных с одним кодом подразделения, но номер накладной не может повторяться для одной и той же даты и кода подразделения.

В качестве примера первую строку таблицы можно интерпретировать так: 11 января 2003 года на складе с кодом “0429” была сформирована накладная с номером 1, кодом типа 5 (расход на склад) и контрагентом с кодом “1958:.

Рис. 15.31

Заполненная таблица с заголовками накладных

Таблица с типами накладных — самая «приятная», заполнить ее очень просто (рис. 15.32), хотя, на самом деле, типов накладных можно «придумать» и больше.

Рис. 15.32

Заполненная таблица с типами накладных

На рис. 15.33 приведена самая большая и сложная для «ручного» заполнения таблица НаклСпецификации, хотя здесь, на самом деле, все должно быть понятно. Во-первых, надо помнить, что эта таблица содержит коды, количества и цены (или производные от цен) товаров, которые перемещаются в соответствии с накладными, заголовки для которых уже заполнены. Это означает, что первые три поля заполняются информацией, которая берется из первых трех полей таблицы НаклЗаголовки (рис. 15.29), а в остальные помещаем любой код товара из таблицы Товары, произвольное количество и цену, примерно равную любой цене из той же таблицы. Так, например, на рис. 15.33 первые две записи означают, что спецификация накладной, заголовок которой хранится в первой записи таблицы НаклЗаголовки, содержит сведения о двух товарах: с кодом “010415090937”(VCD) Шоссе в никуда — в количестве 100 шт. и ценой 120 р.; с кодом “010414114438”(VCD) Патриот — в количестве 50 шт. и ценой 135 р.

Рис. 15.33

Заполненная таблица со спецификациями накладных

Чтобы понять, какие запросы можно построить с использованием дополненной базы данных, пофантазируем над тем, какая информация может потребоваться менеджеру для оценки движения товаров на фирме. Например, для проверки некоторой документации, необходимо просто просмотреть накладные какого-либо подразделения. Понятно, что менеджер не будет просматривать накладные в том же режиме, в котором эти таблицы создавались. Менеджеру мы предоставим некоторую форму в одной из VB-систем программирования.

Если бы нам нужно было создать форму для просмотра накладных, то она, вероятно, была бы похожа на ту, которая показана на рис. 15.34. Изображенная на этом рисунке форма получена в редакторе VB только с одной целью — понять, какие SQL-запросы были бы необходимы для заполнения такого диалогового окна. Вопросам реализации такой и других форм посвящены следующие главы.

Рис. 15.34

Так могло бы выглядеть диалоговое окно для просмотра накладных

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

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

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

Итак, рассмотрим первый запрос — формирование списка подразделений, накладные которых имеются в таблице НаклЗаголовки. Целесообразно получить таблицу наименований и кодов подразделений. Наименованиями следует заполнить окно комбинированного списка для отображения в диалоговом окне. Коды необходимо записать в список, не отображаемый в окне, но синхронизированный с видимым комбинированным списком. После выбора пользователем необходимого подразделения из окна комбинированного списка можно узнать код этого подразделения из неотображаемого списка.

И так, запрос, о котором идет речь, должен быть следующим:

SELECT DISTINCT b.КодПодразделения, a.НаимПодразделения

FROM Подразделения a, НаклЗаголовки b

WHERE a.КодПодразделения =b.КодПодразделения

Если выполнить этот запрос для данных, отображенных на рис. 32 и 33 (и таблицы Склады), то получится набор, приведенный на рис. 15.35.

Рис. 15. 35

Склады, накладные которых имеются в таблице НаклЗаголовки

Таким образом, если пользователь выберет необходимый склад, то мы (или программа, поддерживающая диалоговое окно) будем знать код этого склада. Считая известным код склада, создадим очень простой запрос для формирования данных списка дат, например, для склада с кодом “0429” (результатом этого запроса может быть таблица, приведенная на рис. 15.36.):

SELECT DISTINCT Дата

FROM НаклЗаголовки

WHERE КодПодразделения ="0429"

Рис. 15. 36

Даты накладных (в таблице НаклЗаголовки) для склада с кодом ‘0429’

После выбора пользователем склада и даты необходимо сформировать запрос для списка Накладная с целью получения таблицы номеров, типов, контрагентов накладных для определенного подразделения и указанной даты (например, 11/02/2002). Правильным будет упорядочить результат запроса по номерам накладных (результатом этого запроса может быть таблица, приведенная на рис. 15.37):

SELECT a.Номер, b.НаимКАгента, a.ТипНакладной

FROM НаклЗаголовки AS a, КонтрАгенты AS b

WHERE a.КодКАгента = b.КодКАгента AND a.КодПодразделения ="0429" AND a.Дата = CDate("11/02/2002")

ORDER BY a.Номер

Рис. 15.37

Такая таблица может послужить источником данных для списка Накладная

Если менеджер имеет хорошую память для того, чтобы помнить все (около десяти) коды типов накладных, то можно не дополнять этот запрос наименованиями типов накладных. Хотя, с другой стороны, зря тогда вообще создавалась таблица ТипыНакладных. В следующем запросе раскрываются наименования типов накладных (результат на рис. 15.38):

SELECT a.Номер, b.НаимКАгента, c.НаимТипа

FROM НаклЗаголовки AS a, КонтрАгенты AS b, ТипыНакладных c

WHERE a.КодКАгента = b.КодКАгента AND a.КодПодразделения ="0429" AND a.Дата = CDate("11/02/2002")

AND a.ТипНакладной =c.ТипНакладной

ORDER BY a.Номер

Рис. 15.38

Такая таблица может послужить источником данных для списка Накладная

Осталось сформировать запрос для заполнения таблицы со спецификацией выбранной накладной, например, с номером 2 (результатом запроса может быть таблица, приведенная на рис. 15.39):

SELECT b.НаимТовара, a.Количество, a.ЦенаОперации

FROM НаклСпецификации a, Товары b

WHERE a.КодТовара=b.КодТовара AND a.КодПодразделения="0429" AND a.Дата=CDate("11/02/2002")

AND Номер =2

ORDER BY b.НаимТовара

Рис. 15.39

Таблица со спецификацией накладной

Используя таблицы НаклЗаголовки и НаклСпецификации, можно получать не только накладные. Можно также создавать различные отчеты о поступлениях товаров на склады или расходов со складов. Из рис. 15.38 следует, что 11 февраля 2002 года со склада с кодом “0429” были отправлены товары на два склада с созданием трех накладных. Следующий запрос суммирует эти накладные в один отчет, в котором содержится информация о всех товарах, отправленных с этого склада указанного числа (результат запроса имеет вид, представленный на рис. 15.40).

SELECT b.НаимТовара AS Наименование, SUM(a.Количество) AS Количество, Format(SUM(a.Количество*a.ЦенаОперации), "### ##0.00р") AS Сумма

FROM НаклСпецификации AS a, Товары AS b

WHERE a.КодТовара=b.КодТовара AND a.КодПодразделения ="0429" AND STR(a.Дата) & STR(a.Номер)

IN

(SELECT STR(Дата) & STR(Номер)

FROM НаклЗаголовки

WHERE Дата = CDate("11/02/2002") AND ТипНакладной=5)

GROUP BY b.НаимТовара;

Здесь для определения используемых записей таблицы НаклСпецификации применяется подзапрос, формирующий список строк вида STR(Дата) & STR(Номер) при условии, что дата равна выражению CDate("11/02/2002"), а тип накладной — 5:

(SELECT STR(Дата) & STR(Номер) FROM НаклЗаголовки WHERE Дата = CDate("11/02/2002") AND ТипНакладной=5)

Рис. 15.40

Отчет о расходе товаров со склада 11 февраля 2002 года







Дата добавления: 2015-09-04; просмотров: 663. Нарушение авторских прав; Мы поможем в написании вашей работы!



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

Практические расчеты на срез и смятие При изучении темы обратите внимание на основные расчетные предпосылки и условности расчета...

Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...

Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

Психолого-педагогическая характеристика студенческой группы   Характеристика группы составляется по 407 группе очного отделения зооинженерного факультета, бакалавриата по направлению «Биология» РГАУ-МСХА имени К...

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

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

СПИД: морально-этические проблемы Среди тысяч заболеваний совершенно особое, даже исключительное, место занимает ВИЧ-инфекция...

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

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

Studopedia.info - Студопедия - 2014-2024 год . (0.013 сек.) русская версия | украинская версия