
- •Работа с базами данных в субд ms sql Server 2008r
- •1 Описание работы и задания 7
- •1 Описание работы и задания 25
- •1 Описание работы и задания 39
- •1 Описание работы и задания 62
- •1 Описание работы и задания 73
- •Введение в Microsoft Visual FoxPro Лабораторная работа 1.1 Создание баз данных в субд ms Visual FoxPro
- •1 Описание работы и задания
- •Определить условия на значения и сообщения об ошибках некоторых полей.
- •2 Выполнение работы
- •2.1 Обращение к среде sql Server Management Studio
- •2.2 Знакомство с языком Transact-sql
- •2.2.1 Возможности t-sql и особенности его использования
- •2.2.2 Создание базы данных
- •2.2.3 Создание таблиц
- •2.2.4 Манипулирование данными с помощью команд t-sql
- •2.3 Работа с обозревателем объектов
- •2.3.1 Создание базы данных
- •2.3.2 Создание таблиц
- •2.3.3 Занесение данных в созданную таблицу
- •2.3.4 Создание объектов с помощью диаграмм данных и поддержка целостности данных
- •Лабораторная работа 2.2 Создание запросов в субд ms sql Server 2008r
- •1 Описание работы и задания
- •2 Выполнение работы
- •2.1 Оператор select
- •2.1.1 Простая выборка данных
- •2.1.2 Аналитическая выборка данных
- •2.1.3 Условие отбора where
- •2.1.4 Группировка записей group by
- •2.1.5 Условие на группируемые поля having
- •2.1.6 Использование функций преобразования различных типов данных
- •2.2 Подзапросы
- •2.3 Выборка данных из нескольких таблиц
- •2.3.1 Внутреннее соединение
- •2.3.2 Внешнее соединение
- •2.3.3 Перекрестные соединения
- •2.2.4 Объединение нескольких наборов результатов
- •Лабораторная работа 2.3 Хранимые процедуры и триггеры
- •1 Описание работы и задания
- •2 Выполнение работы
- •2.1 Хранимые процедуры
- •2.1.1 Переменные. Задание значений переменных
- •2.1.2 Использование переменных в запросах sql
- •2.1.3 Создание хранимых процедур
- •2.1.3.1 Создание хранимой процедуры без параметров
- •2.1.3.2 Создание и изменение хранимой процедуры с входными и выходными параметрами
- •2.1.3 Удаление хранимых процедур
- •2.2 Триггеры
- •2.3 Списки встроенных функции для работы с данными типа дата и строковыми данными
- •Лабораторная работа 2.4 Курсоры
- •1 Описание работы и задания
- •2 Выполнение работы
- •2.1 Понятие курсора
- •2.2 Реализация курсоров в среде ms sql Server
- •2.3 Управление курсором в среде ms sql Server
- •2.3.1 Объявление курсора
- •2.3.2 Открытие курсора
- •2.3.3 Выборка данных из курсора
- •2.3.4 Изменение и удаление данных
- •2.3.5 Закрытие курсора
- •2.3.6 Освобождение курсора
- •2.2. Безопасность баз данных и привилегии
- •2.3. Основные методы защиты данных в ms sql Server 2008 r2
- •Список использованных источников
- •Список предметных областей
- •Типы данных sql 2008r
2.1.2 Аналитическая выборка данных
Аналитическая выборка данных из базы данных опирается на возможности Transact-SQL создавать запросы, неразрывно связанных с агрегатными функциями:
Avg ([all | distinct] выражение) – среднее арифметическое всех значений.
Count ([all | distinct] выражение | *) – количество значений в списке, отличных от NULL. При использовании символа * подсчитывается количество значений, включая значения NULL или повторяющиеся значения.
Sum ([all | distinct] выражение) – сумма всех значений списка.
Max ([all | distinct] выражение) –максимальное значение.
Min ([all | distinct] выражение) – минимальное значение.
Ключевое слово all предписывает выполнять агрегирование всех записей в результирующем наборе данных, distinct – агрегирование только уникальных записей. По умолчанию используется all.
Например, вычисление среднего возраста студента осуществляется с помощью следующего запроса:
SELECT AVG(Возраст) FROM Студент
При выполнении агрегатной функции осуществляется объединение значений отдельного поля таблицы или части записей, после чего выполняется указанное агрегирование.
Агрегатная функция возвращает одно единственное значение, поэтому использование других имен полей в списке выборки запрещено.
2.1.3 Условие отбора where
Условие отбора определяет критерий отбора записей, включаемых в итоговый набор. В результат будут включены только те строки, которые соответствуют наложенным условиям.
Условие может включать выражения, образованные с помощью операторов сравнения или логических операторов. Условия могут также объединяться и с помощью логических операндов AND, OR и NOT.
Наиболее распространенным условием поиска в языке SQL является сравнение, которое реализуется следующей конструкцией:
<значение> <операция_сравнения> <значение1>.
В качестве операторов сравнения используются такие арифметические действия, как «=», «<», «>», «<=», «>=». При этом выбираются те экземпляры, для которых истинно значение выражения (условия).
Например:
SELECT *
FROM TimeTable
WHERE Группа = 1121
Код занятий |
Предмет |
Преподаватель |
Группа |
Время |
SC001 |
Теоретическая механика |
Ландау Лев |
1121 |
25.01.2013 08:30 |
SC003 |
Электростатика |
Кулон Шарль-Огюстен |
1121 |
01.12.2011 17:00 |
SC007 |
Электростатика |
Рентген Вильгельм-Конрад |
1121 |
01.09.2011 17:00 |
Для выполнения запросов, условие которых будет содержать текстовые данные, существует правило написания предикатов. Так, чтобы выполнить запрос на текстовое поле, необходимо искомое значение заключить в апострофы или кавычки:
SELECT *
FROM TimeTable
WHERE Преподаватель = ' Ландау Лев '
Код занятий |
Предмет |
Преподаватель |
Группа |
Время |
SC001 |
Теоретическая механика |
Ландау Лев |
1121 |
25.01.2013 08:30 |
SC006 |
Теоретическая механика |
Ландау Лев |
1322 |
01.12.2011 10:20 |
Также для поиска по нескольким условиям используются булевы операторы, такие как AND, OR.
SELECT *
FROM TimeTable
WHERE Группа = 1121 AND Преподаватель = 'Рентген Вильгельм-Конрад'
Код занятий |
Предмет |
Преподаватель |
Группа |
Время |
SC007 |
Электростатика |
Рентген Вильгельм-Конрад |
1121 |
01.12.2011 17:00 |
SELECT *
FROM TimeTable
WHERE Группа = 1121 AND Преподаватель = ' Рентген Вильгельм-Конрад'
Код занятий |
Предмет |
Преподаватель |
Группа |
Время |
SC001 |
Теоретическая механика |
Ландау Лев |
1121 |
25.01.2013 08:30 |
SC005 |
Электростатика |
Рентген Вильгельм-Конрад |
1122 |
13.12.2013 15:00 |
SC007 |
Электростатика |
Рентген Вильгельм-Конрад |
1121 |
01.12.2011 17:00 |
Для поиска по шаблону символьных строк используется логический оператор LIKE, который чаще всего используется в ситуациях, когда неизвестно точное совпадение.
Например, запрос
SELECT *
FROM TimeTable
WHERE Предмет like 'Теоретическая механика
Код занятий |
Предмет |
Преподаватель |
Группа |
Время |
SC001 |
Теоретическая механика |
Ландау Лев |
1121 |
25.01.2013 08:30 |
SC006 |
Теоретическая механика |
Ландау Лев |
1322 |
01.12.2011 10:20 |
В шаблоне могут использоваться следующие универсальные символы:
% – подразумевает любую строку, состоящую из 0 и более символов;
_ – ровно один символ;
[ ] – любой символ из заданного множества (например, [adfh]) или диапазона (например, [0-9]),
В случае, если неизвестно слово целиком, при выполнении запроса можно воспользоваться следующей конструкцией:
SELECT *
FROM TimeTable
WHERE Предмет like '%тро%'
Код занятий |
Предмет |
Преподаватель |
Группа |
Время |
SC002 |
Астрономия |
Хокинг Стив |
1123 |
16.12.2001 10:00 |
SC003 |
Электростатика |
Кулон Шарль-Огюстен |
1121 |
01.12.2011 17:00 |
SC005 |
Электростатика |
Рентген Вильгельм-Конрад |
1122 |
13.12.2013 15:00 |
SC007 |
Электростатика |
Рентген Вильгельм-Конрад |
1121 |
01.12.2011 17:00 |
Для поиска текста, находящегося в определенных рамках, можно воспользоваться квадратными скобками:
Например:
SELECT *
FROM TimeTable
WHERE Предмет like '[Н-Т]%'
Код занятий |
Предмет |
Преподаватель |
Группа |
Время |
SC001 |
Теоретическая механика |
Ландау Лев |
1121 |
25.01.2013 08:30 |
SC004 |
Небесная механика |
Хокинг Стив |
1322 |
08.10.2013 12:00 |
SC006 |
Теоретическая механика |
Ландау Лев |
1322 |
01.12.2011 10:20 |
В случае, если не обходимо исключить определенный интрвал, можно воспользоваться следующим выражением:
SELECT *
FROM TimeTable
WHERE Предмет like '[^Н-Т]%'
Код занятий |
Предмет |
Преподаватель |
Группа |
Время |
SC002 |
Астрономия |
Хокинг Стив |
1123 |
16.12.2001 10:00 |
SC003 |
Электростатика |
Кулон Шарль-Огюстен |
1121 |
01.12.2011 17:00 |
SC005 |
Электростатика |
Рентген Вильгельм-Конрад |
1122 |
13.12.2013 15:00 |
SC007 |
Электростатика |
Рентген Вильгельм-Конрад |
1121 |
01.12.2011 17:00 |
Для нахождения значений, находящихся в некотором заданном интервале можно воспользоваться следующим предикатом:
SELECT *
FROM TimeTable
WHERE Группа BETWEEN 1121 AND 1322
Код занятий |
Предмет |
Преподаватель |
Группа |
Время |
|
SC001 |
Теоретическая механика |
Ландау Лев |
1121 |
25.01.2013 08:30 |
|
SC002 |
Астрономия |
Хокинг Стив |
1123 |
16.12.2001 10:00 |
|
SC003 |
Электростатика |
Кулон Шарль-Огюстен |
1121 |
01.12.2011 17:00 |
|
SC004 |
Небесная механика |
Хокинг Стив |
1322 |
08.10.2013 12:00 |
|
SC005 |
Электростатика |
Рентген Вильгельм-Конрад |
1122 |
13.12.2013 15:00 |
|
SC006 |
Теоретическая механика |
Ландау Лев |
1322 |
01.12.2011 10:20 |
|
SC007 |
Электростатика |
Рентген Вильгельм-Конрад |
1121 |
01.12.2011 17:00 |
|
Выборка экземпляров объекта по набору дискретных значений атрибута выполняется с помощью предиката IN.
SELECT *
FROM TimeTable
WHERE Группа IN (1121,1322)
Код занятий |
Предмет |
Преподаватель |
Группа |
Время |
SC001 |
Теоретическая механика |
Ландау Лев |
1121 |
25.01.2013 08:30 |
SC003 |
Электростатика |
Кулон Шарль-Огюстен |
1121 |
01.12.2011 17:00 |
SC004 |
Небесная механика |
Хокинг Стив |
1322 |
08.10.2013 12:00 |
SC007 |
Электростатика |
Рентген Вильгельм-Конрад |
1121 |
01.12.2011 17:00 |
Однако в список значений нельзя включать неопределенное значение NULL, для работы с такими значениями используется функция выборки IS NULL.
Отметим, что в примере с использованием предиката BETWEEN соединяется служебным словом AND. Если необходимо наоборот, исключить некоторый интервал, можно воспользоваться булевым NOT.