Проектирование информационных систем в Microsoft SQL Server 2008 и Visual Studio 2008

Создание запросов и фильтров

Разбить на страницы
Показывать лекцию целиком

Цель: научиться создавать запросы и фильтры

Перейдем к созданию статических запросов. В обозревателе объектов "Microsoft SQL Server 2008" все запросы БД находятся в папке ).

(рис 8.1)

Создадим запрос ).

(рис 8.2)

Добавим в новый запрос таблицы ).

(рис 8.3)

Замечание: Окно конструктора запросов состоит из следующих панелей:

  • Замечание: Если необходимо удалить таблицу или запрос из схемы данных, то для этого нужно щелкнуть ПКМ и в появившемся меню выбрать пункт "Remove" (Удалить).

    Теперь перейдем к связыванию таблиц ).

    Замечание: Если необходимо удалить связь, то для этого необходимо щелкнуть по ней ПКМ и в появившемся меню выбрать пункт "Remove".

    Замечание: После связывания таблиц (а также при любых изменениях в запросе) в области кода T-SQL будет отображаться T-SQL код редактируемого запроса.

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

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

    Замечание: Если необходимо отобразить все поля таблицы, то необходимо установить галочку слева от пункта "* (All Columns)" (Все поля), принадлежащего соответствующей таблице на схеме данных.

    Определите отображаемые поля нашего запроса, как это показано на рис 8.3 (Отображаются все поля кроме полей с кодами, то есть полей связи).

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

    Замечание: Если после выполнения запроса результат не появился, а появилось сообщение об ошибке, то в этом случае проверьте, правильно ли создана связь. Ломаная линия связи должна соединять поля "Код специальности" в обеих таблицах. Если линия связи соединяет другие поля, то ее необходимо удалить и создать заново, как это описано выше.

    Если запрос выполняется правильно, то необходимо сохранить. Для сохранения запроса закройте окно конструктора запросов, щелкнув мышью по кнопке закрытиярасположенной в верхнем правом углу окна конструктора (над схемой данных). Появится окно с вопросом о сохранении запроса (рис 8.4).

    (рис 8.4)

    В данном окне необходимо нажать кнопку ).

    (рис 8.5)

    В данном окне зададим имя нового запроса ).

    (рис 8.6)

    Проверим работоспособность созданного запроса вне конструктора запросов. Запустим вновь созданный запрос .

    Перейдем к созданию запроса ).

    В запросе "Запрос Студенты+Оценки" мы связываем таблицы "Студенты" и "Оценки" по полям связи "Код студента". Следовательно, в окне "Add Table" в новый запрос добавляем таблицы "Студенты" и "Оценки". Более того, в данном запросе таблица "Оценки" связывается с таблицей "Предметы" не по одному полю, а по трем полям. То есть поля "Код предмета 1", "Код предмета 2" и "Код предмета 3" таблицы "Оценки" связаны с полем "Код предмета" таблицы "Предметы". По этому добавим в запрос три экземпляра таблицы "Предметы" (по одному экземпляру для каждого поля связи таблицы оценки). В итоге в запросе должны участвовать таблицы "Студенты", "Оценки" и три экземпляра таблицы "Предметы" (в запросе они будут называться "Предметы", "Предметы_1" и "Предметы_2" ). После добавления таблиц закройте окно "Add Table", появится окно конструктора запросов.

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

    (рис 8.7)

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

    (рис 8.8)

    Задайте псевдонимы для каждого из полей, просто записав псевдонимы в столбце .

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

    (рис 8.9)

    Проверьте работоспособность нового запроса вне конструктора. Для этого запустите запрос. Результат выполнения запроса .

    (рис 8.10)

    На этом мы заканчиваем рассмотрение обычных запросов и переходим к созданию фильтров.

    На основе запроса ). Затем закройте окно "Add Table".

    (рис 8.11)

    В появившемся окне конструктора запросов определите в качестве отображаемых полей все поля запроса ).

    (рис 8.12)

    Замечание: Для отображения всех полей запроса, в данном случае, мы не можем использовать пункт "* (All Columns)" (Все поля). Так как в этом случае мы не можем устанавливать критерий отбора записей в фильтре, а также невозможно установить сортировку записей.

    Теперь установим критерий отбора записей в фильтре. Пусть наш фильтр отображает только студентов имеющих специальность "ММ". Для определения условия отбора записей в таблице отображаемых полей в строке, соответствующей полю, на которое накладывается условие, в столбце ).

    В заключение настроим сортировку записей в фильтре. Пусть при выполнении фильтра сначала происходит сортировка записей по возрастанию по полю ). То есть, при выполнении запроса записи сначала сортируются по полю "Очная форма обучения", а затем по полю "Курс".

    иобозначают сортировку по возрастанию и убыванию, а значокпоказывает наличие условия отбора.

    После установки сортировки записей в фильтре проверим его работоспособность, выполнив его. Результат выполнения фильтра должен выглядеть как на рис 8.12. Закройте окно конструктора запросов. В качестве имени нового фильтра в окне ) и нажмите кнопку "Ok".

    (рис 8.13)

    Фильтр .

    (рис 8.14)

    Самостоятельно создайте фильтры для отображения других специальностей. Данные фильтры создаются аналогично фильтру "Фильтр ММ" (смотри выше). Единственным отличием является условие отбора, накладываемое на поле "Наименование специальности", оно должно быть не "='ММ'", а "='ПИ'", "='СТ'", "='МО'" или "='БУ'". При сохранении фильтров задаем их имена соответственно их условиям отбора, то есть "Фильтр ПИ", "Фильтр СТ", "Фильтр МО" или "Фильтр БУ". Проверьте созданные фильтры на работоспособность.

    Теперь на основе запроса ). После закрытия окна ).

    (рис 8.15)

    В таблице отображаемых полей в строке для поля .

    Закройте окно конструктора запросов. В окне ).

    (рис 8.16)

    Выполните фильтр .

    (рис 8.17)

    Создайте фильтры для отображения студентов с другими вариантами родителей. Данные фильтры создаются аналогично фильтру "Фильтр Отец" (смотри выше). Единственным отличием является условие отбора, накладываемое на поле "Родители", оно должно быть не "='Отец'", а "='Мать'", "='Отец, Мать'" или "='Нет'". При сохранении фильтров задаем их имена соответственно их условиям отбора, то есть "Фильтр Мать", "Фильтр Отец и Мать" или "Фильтр Нет родителей". Проверьте созданные фильтры на работоспособность.

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

    (рис 8.18)

    В таблице отображаемых полей в столбце "Filter", в строке для поля "Очная форма обучения" установите условие отбора равное "=1"

    Замечание: Поле "Очная форма обучения" является логическим полем, оно может принимать значения либо "True" (Истина), либо "False" (Ложь). В качестве синонимов этих значений в "Microsoft SQL Server 2008" можно использовать 1 и 0 соответственно.

    Установите сортировку по возрастанию, по полю курс, задав в строке для этого поля, в столбце "Sort Type", значение "Ascending".

    Проверьте работу фильтра, выполнив его. После выполнения фильтра окно конструктора запросов должно выглядеть точно также как на рис 8.18.

    Закройте окно конструктора запросов. Сохраните фильтр под именем ).

    (рис 8.19)

    После появления фильтра .

    (рис 8.20)

    Самостоятельно создайте фильтр для отображения студентов заочной формы обучения. Данный фильтр создается точно также как и фильтр "Фильтр очная форма обучения". Единственным отличием является условие отбора, накладываемое на поле "Очная форма обучения", оно должно быть не "=1", а "=0". При сохранении фильтра задайте его имя как "Фильтр заочная форма обучения". Проверьте созданный фильтр на работоспособность.

    В итоге, после создания всех запросов и фильтров окно обозревателя объектов должно выглядеть следующим образом (рис 8.21):

    (рис 8.21)
    Страницы:

    Цель: научиться создавать запросы и фильтры

    Перейдем к созданию статических запросов. В обозревателе объектов "Microsoft SQL Server 2008" все запросы БД находятся в папке ).

    (рис 8.1)

    Создадим запрос ).

    (рис 8.2)

    Добавим в новый запрос таблицы ).

    (рис 8.3)

    Замечание: Окно конструктора запросов состоит из следующих панелей:

  • Замечание: Если необходимо удалить таблицу или запрос из схемы данных, то для этого нужно щелкнуть ПКМ и в появившемся меню выбрать пункт "Remove" (Удалить).

    Теперь перейдем к связыванию таблиц ).

    Замечание: Если необходимо удалить связь, то для этого необходимо щелкнуть по ней ПКМ и в появившемся меню выбрать пункт "Remove".

    Замечание: После связывания таблиц (а также при любых изменениях в запросе) в области кода T-SQL будет отображаться T-SQL код редактируемого запроса.

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

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

    Замечание: Если необходимо отобразить все поля таблицы, то необходимо установить галочку слева от пункта "* (All Columns)" (Все поля), принадлежащего соответствующей таблице на схеме данных.

    Определите отображаемые поля нашего запроса, как это показано на рис 8.3 (Отображаются все поля кроме полей с кодами, то есть полей связи).

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

    Замечание: Если после выполнения запроса результат не появился, а появилось сообщение об ошибке, то в этом случае проверьте, правильно ли создана связь. Ломаная линия связи должна соединять поля "Код специальности" в обеих таблицах. Если линия связи соединяет другие поля, то ее необходимо удалить и создать заново, как это описано выше.

    Если запрос выполняется правильно, то необходимо сохранить. Для сохранения запроса закройте окно конструктора запросов, щелкнув мышью по кнопке закрытиярасположенной в верхнем правом углу окна конструктора (над схемой данных). Появится окно с вопросом о сохранении запроса (рис 8.4).

    (рис 8.4)

    В данном окне необходимо нажать кнопку ).

    (рис 8.5)

    В данном окне зададим имя нового запроса ).

    (рис 8.6)

    Проверим работоспособность созданного запроса вне конструктора запросов. Запустим вновь созданный запрос .

    Перейдем к созданию запроса ).

    В запросе "Запрос Студенты+Оценки" мы связываем таблицы "Студенты" и "Оценки" по полям связи "Код студента". Следовательно, в окне "Add Table" в новый запрос добавляем таблицы "Студенты" и "Оценки". Более того, в данном запросе таблица "Оценки" связывается с таблицей "Предметы" не по одному полю, а по трем полям. То есть поля "Код предмета 1", "Код предмета 2" и "Код предмета 3" таблицы "Оценки" связаны с полем "Код предмета" таблицы "Предметы". По этому добавим в запрос три экземпляра таблицы "Предметы" (по одному экземпляру для каждого поля связи таблицы оценки). В итоге в запросе должны участвовать таблицы "Студенты", "Оценки" и три экземпляра таблицы "Предметы" (в запросе они будут называться "Предметы", "Предметы_1" и "Предметы_2" ). После добавления таблиц закройте окно "Add Table", появится окно конструктора запросов.

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

    (рис 8.7)

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

    (рис 8.8)

    Задайте псевдонимы для каждого из полей, просто записав псевдонимы в столбце .

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

    (рис 8.9)

    Проверьте работоспособность нового запроса вне конструктора. Для этого запустите запрос. Результат выполнения запроса .

    (рис 8.10)

    На этом мы заканчиваем рассмотрение обычных запросов и переходим к созданию фильтров.

    На основе запроса ). Затем закройте окно "Add Table".

    (рис 8.11)

    В появившемся окне конструктора запросов определите в качестве отображаемых полей все поля запроса ).

    (рис 8.12)

    Замечание: Для отображения всех полей запроса, в данном случае, мы не можем использовать пункт "* (All Columns)" (Все поля). Так как в этом случае мы не можем устанавливать критерий отбора записей в фильтре, а также невозможно установить сортировку записей.

    Теперь установим критерий отбора записей в фильтре. Пусть наш фильтр отображает только студентов имеющих специальность "ММ". Для определения условия отбора записей в таблице отображаемых полей в строке, соответствующей полю, на которое накладывается условие, в столбце ).

    В заключение настроим сортировку записей в фильтре. Пусть при выполнении фильтра сначала происходит сортировка записей по возрастанию по полю ). То есть, при выполнении запроса записи сначала сортируются по полю "Очная форма обучения", а затем по полю "Курс".

    иобозначают сортировку по возрастанию и убыванию, а значокпоказывает наличие условия отбора.

    После установки сортировки записей в фильтре проверим его работоспособность, выполнив его. Результат выполнения фильтра должен выглядеть как на рис 8.12. Закройте окно конструктора запросов. В качестве имени нового фильтра в окне ) и нажмите кнопку "Ok".

    (рис 8.13)

    Фильтр .

    (рис 8.14)

    Самостоятельно создайте фильтры для отображения других специальностей. Данные фильтры создаются аналогично фильтру "Фильтр ММ" (смотри выше). Единственным отличием является условие отбора, накладываемое на поле "Наименование специальности", оно должно быть не "='ММ'", а "='ПИ'", "='СТ'", "='МО'" или "='БУ'". При сохранении фильтров задаем их имена соответственно их условиям отбора, то есть "Фильтр ПИ", "Фильтр СТ", "Фильтр МО" или "Фильтр БУ". Проверьте созданные фильтры на работоспособность.

    Теперь на основе запроса ). После закрытия окна ).

    (рис 8.15)

    В таблице отображаемых полей в строке для поля .

    Закройте окно конструктора запросов. В окне ).

    (рис 8.16)

    Выполните фильтр .

    (рис 8.17)

    Создайте фильтры для отображения студентов с другими вариантами родителей. Данные фильтры создаются аналогично фильтру "Фильтр Отец" (смотри выше). Единственным отличием является условие отбора, накладываемое на поле "Родители", оно должно быть не "='Отец'", а "='Мать'", "='Отец, Мать'" или "='Нет'". При сохранении фильтров задаем их имена соответственно их условиям отбора, то есть "Фильтр Мать", "Фильтр Отец и Мать" или "Фильтр Нет родителей". Проверьте созданные фильтры на работоспособность.

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

    (рис 8.18)

    В таблице отображаемых полей в столбце "Filter", в строке для поля "Очная форма обучения" установите условие отбора равное "=1"

    Замечание: Поле "Очная форма обучения" является логическим полем, оно может принимать значения либо "True" (Истина), либо "False" (Ложь). В качестве синонимов этих значений в "Microsoft SQL Server 2008" можно использовать 1 и 0 соответственно.

    Установите сортировку по возрастанию, по полю курс, задав в строке для этого поля, в столбце "Sort Type", значение "Ascending".

    Проверьте работу фильтра, выполнив его. После выполнения фильтра окно конструктора запросов должно выглядеть точно также как на рис 8.18.

    Закройте окно конструктора запросов. Сохраните фильтр под именем ).

    (рис 8.19)

    После появления фильтра .

    (рис 8.20)

    Самостоятельно создайте фильтр для отображения студентов заочной формы обучения. Данный фильтр создается точно также как и фильтр "Фильтр очная форма обучения". Единственным отличием является условие отбора, накладываемое на поле "Очная форма обучения", оно должно быть не "=1", а "=0". При сохранении фильтра задайте его имя как "Фильтр заочная форма обучения". Проверьте созданный фильтр на работоспособность.

    В итоге, после создания всех запросов и фильтров окно обозревателя объектов должно выглядеть следующим образом (рис 8.21):

    (рис 8.21)
    Вернуться к учебному плану