1174-access-2003 (546951), страница 3
Текст из файла (страница 3)
Простые запросы на выборкуЗапрос на выборку является наиболее часто используемым типомзапроса. Запросы этого типа возвращают данные из одной или несколькихтаблиц и отображают их в виде таблицы, записи в которой можнообновлять (с некоторыми ограничениями). Запросы на выборку можнотакже использовать для группировки записей и вычисления сумм, среднихзначений, подсчета записей и нахождения других типов итоговыхзначений.Из двух таблиц Справочник и Ост_нач создадим первый запрос.Создать ⇒ простой запрос ⇒ выбрать таблицу Справочник, оттудаКод товара и Наименование, выбрать другую таблицу Ост_нач, оттудаполе Ост ⇒ подробный ⇒ имя неизменим, Готово. Картинки приведеныниже.25У Вас должен получиться примерно такой запрос. В данном запросевыдаются все записи из Справочника, но выводить записи с пустым8 значениемостатка нерезонно.
Поэтому построим другой запрос без пустых записей чутьпо-другому, в режиме Конструктора.Другой вариант того же запроса:8Не нулевым, а именно пустым, т.к. не все товары отражены в таблице Ост_нач. Нулевое ипустое в БД – две большие разницы, их можно свести только через функцию Nz. С ней мыеще встретимся…26Создание при помощи конструктора ⇒ Поочередно добавим таблицыСправочник и Ост_нач, закрыть, перетащим мышью Код товара сосправочника в поле первое (см.), а третье поле (Остаток нач) вставим дляразнообразия чуть по-другому: щелчок на пустое третье поле запроса,раскроется список доступных полей, из них и выберем нужный ⇒⇒Условие отбора >0, и закроем, сохранив запрос под именем по умолчанию.И у нас получится то, что надо.27Маленькие хитрости большой БД.Иногда при создании запросов могут выдаваться сообщения о«невозможности создать запрос из-за неоднозначно определенныхсвязей между таблицами».
Ничего страшного – откройте схему данных иудалите ненужные связи и копии таблиц. Они появились автоматическиво время наших упражнений. Мы ведь только учимся, а «учиться насобственных ошибках – наша задача, ибо только те знания являютсянаиболее прочными и фундаментальными, которые полученысобственным трудом и умом»9.Маленькие хитрости большой БД.Иногда вместо подобных условий отбора проще в окне запросапереустановить связь по первому типу, когда связанные поляобеих таблиц совпадают.
Результат тот же, но самое интересное –типы связей в схеме данных не изменились, а наша новая связькак бы локальная, только для данного запроса. Но об этом я ужегде-то говорил…Самостоятельно создайте аналогичный запрос на Остаток товаровконечный, тоже 2 разновидности. Теперь у вас 4 запроса и друг(помощник).9Смотри ПСНС, стр.12.11.0328Самостоятельная 4.1. Создать запросы на выборку из таблицыПрибыло (наименование из справочника) и озаглавьте Сам411-Сам415:• Всех товаров за сегодняшний день (внутреннее время компьютера)• Всех товаров за вчерашний день• Всех товаров за вчерашний день со сроком хранения 1 сутки• Всех товаров группы 2, поступивших за последний месяц• Всех товаров с усл.
отбора по № накл. <>0 (имя по умолч.) Запрос 3)5.2. Перекрестный запросПерекрестный запрос подсчитывает сумму, среднее, число значений иливыполняет другие статистические расчеты, после чего результатыгруппируются в виде таблицы по двум наборам данных, один из которыхопределяет заголовки столбцов, а другой — заголовки строк. Более нагляднопосмотрим на примере.
Но для начала создадим запрос попроще изСправочника и Прибыло:Создать ⇒ Простой запрос ⇒ выбрать Код и Наим из Справ, другие сПрибыло ⇒ Итоговый, Итоги, галочка в поле кол-во на Sum ⇒ выбратьинтервал по дате и времени ⇒ просмотр, готово.Получилась примерно такая петрушка. Т.к. в Прибыло много записей содинаковым кодом, то произошла автоматическая группировка записей поумолчанию – как раз то, что нам надо. В новых именах полей присоединенныйиндекс First означает, что из нескольких значений высветился лишь первый,зато сумма итоговая по количеству уже подсчитана.Следуйте инструкциям диалогового окна и никогда не ошибетесь!!!P.S.Не ошибается только тот, кто ничего не делает29А мы сейчас через Конструктор изменим условия отбора и еще развысветим эту же таблицу.В условие отбора по полю №накл.
поставили <>0, поэтому товары спустыми записями не видны (101, 401,502). Желающие могут открыть30таблицу Прибыло или Запрос 3, и убедиться в том, что итоги по каждомутовары подсчитаны.Но это была лишь прелюдия перед настоящим перекрестным запросом.Теперь построим запрос из предыдущего Запроса 3, с раскладкой товаров повсем поступлениям:Создать ⇒ перекрестный ⇒ выбираем Запрос 3 ⇒ Заголовкистрок (Код товара и Наим.).⇒ Заголовки столбцов – Дата пост.⇒Дата/время ⇒ по кол-во выбираем Сумма ⇒ Запрос3_перекрестный,готово.31А теперь в качестве самостоятельной создайте запрос4_перекрестный сколонками Поставщик.
(Предварительно создайте простой запрос, чтобы полеПоставщик тоже присутствовало).5.3. Варианты запросов5.3.1. Групповые операции.Попробуем создать другой вариант запроса для поступивших товаров, сприменением групповых операций:Создать через Конструктор⇒ Выбрать Прибыло и из него 2 поля ( Кодтовара и кол-во) ⇒ Нажать кнопку Группировка ∑ на панели или черезконтекстное меню ⇒ для поля Кол-во в строке Групповые операциивыбрать Sum⇒ Закрыть, сохр,имя Поступило.Немного лирики из математикиПринцип «чайника»Задача 1. Даны пустой чайник, газовая плита, спички, кран с водой.Как вскипятить чай?Решение:1. открыть кран2.
наполнить чайник водой3. зажечь плиту4. поставить чайник на огонь и ждатьЗадача 2. Даны чайник, наполненный водой; газовая плита, спички,кран с водой. Как вскипятить чай?Решение первое (неправильное):1. зажечь плиту2. поставить чайник на огонь и ждатьРешение второе (правильное):1. Вылить воду из чайника, далее как в задаче 1, решать которуюмы уже умеемP.S. Сведение задачи к уже известной и есть применение данного принципа.Широко используется математиками и программистами. С их же легкой руки«чайниками» начали называть тех пользователей ЭВМ, кто мыслит слишкомшаблонно, кому не ведомы взлеты творческой мысли, не обладает чувством юмора ишуток не понимает.32Когда откроем запрос Поступило для просмотра, то будет такаякартинка: Вот здесь можно попробовать немного затронуть построение запросовчерез конструкцию SQL – специализированный язык запросов для СУБД не для«чайников».
То, что мы сейчас строили через конструктор – это язык QBE (см.Дополнительные сведения).А мы для начала попробуем изменить название поля Sum-кол-во наИтого:Вызовем запрос Прибыло через конструктор ⇒ контекстное меню ⇒режим SQL⇒33⇒ в этом окне и меняем «шило на мыло»⇒⇒ закроем, сохранив изменения и посмотрим: название поля в запросеизменилось.P.S. Таким образом можно корректировать и создавать не один сложныйзапрос. Иногда изменения проще проводить именно через SQL.
Самымэффективным оказывается сочетание SQL и QBE.5.3.2.Пустые значения в арифметических операциях (Функция Nz)Для нашей БД рассмотрим реальную задачу. В некотором магазиневведен компьютерный учет всех поставок, раз в месяц производится что-товроде инвентаризации – известны остатки на начало и конец периода. Номагазин до ежедневного учета каждого проданного товара еще не дорос.Поэтому объем продаж за учетный период будем определять через запрос поформуле Продано = Ост_нач + Поступило (как раз сумма по кол с пред.запроса Поступило) – Ост_кон.Создать ⇒ Простой запрос ⇒ выбор полей из 3 таблиц и 1 запроса(см.)⇒Подробный⇒имя Продано.34.Запрос будет выведен, но мы еще не сформировали поле продано.
Поэтомузайдем через конструктор в Продано и сформируем поле через построитель.Вот такая картина. Обратите внимание на связи между таблицами, слегкарастащив их вверх и вниз. На самом деле все они связаны через Справочник, асвязь с запросом Поступило установлена автоматически, мы ее не создавали, ив схеме данных ее все равно нет!!! Посмотрите, не ленитесь, убедитесь! Этакиесвязи и есть внутренние в современных реляционных СУБД, они существуют,пока жив сам запрос.Поле Продано сформируем при помощи Построителя (см.), имена полейуказываем двойным щелчком, Ок. В имени поля стоит Выражение1: .
вместонего напишем свое имя Продано: и сохраним, откроем для просмотра.Когда у вас в окне построителя появляется лишнее выражение, тоего просто надо удалять!!!Не для всех товаров подсчитаны по формуле результаты продажи,имеются только для тех, когда во всех трех полях выражения непустыезначения.
Это проявляется одна из особенностей СУБД: в математическихоперациях даже при одной пустой (отсутствующей) переменной общийрезультат выражения не будет подсчитан.35Примечание. Если в выражении используются арифметическиеоператоры (+, -, *, /), а одно из полей имеет значение Null, результатом всеговыражения тоже будет значение Null.














