- •Введение
- •1. Основные понятия архитектуры клиент-сервер
- •1.1. Преимущества архитектуры клиент-сервер
- •1.2. Основные понятия и компоненты архитектуры
- •1.3. Звенья
- •1.4. Серверы баз данных
- •2. Основные понятия, объекты и язык т-sql субд ms sql Server 2005
- •2.1. Состав и назначение баз данных в ms sql Server
- •2.2. Основные этапы работы с sql Server
- •2.3. Используемые типы данных в sql Server
- •2.4. Введение в Transact-sql (t-sql)
- •2.4.1. Выражения
- •2.4.2. Переменные
- •2.4.3. Преобразование типов
- •2.4.4. Управляющие конструкции т-sql
- •2.4.5. Описание примера базы данных
- •2.4.6. Управление данными (язык sql)
- •2.4.6.1. Типы команд sql
- •2.4.6.2. Извлечение данных
- •2.5. Представления
- •2.5.1. Создание и удаление представлений
- •2.5.2. Обновление данных в представлениях
- •2.5.3. Преимущества и недостатки представлений.
- •Независимость от данных
- •2.6. Хранимые процедуры
- •2.6.1. Понятие хранимой процедуры
- •2.6.2. Типы хранимых процедур
- •2.6.3. Создание, изменение и удаление хранимых процедур
- •2.6.4. Выполнение хранимой процедуры
- •3. Использование ms sql Server Management Studio для работы с объектами базы данных
- •3.1. Описание учебной базы данных «Realizations of goods» (Реализация товаров)
- •3.2. Создание и сохранение базы данных
- •3.3. Создание и работа с представлениями (запросы)
- •3.4. Создание и работа с хранимыми процедурами
- •4. Создание клиент-серверного приложения в Visual Basic
- •4.1. Элемент управления ms ado data Control
- •4.2. Элемент управления ms dataGrid Control
- •4.3. Клиент-серверное приложение «Реализация товаров»
- •4.3.1. Постановка задачи
- •4.3.2. Состав пользовательского интерфейса и программная реализация
- •4.3.3. Графическое формирование значений свойств элементов Adodc и DataGrid
- •5. Практические задания для самостоятельной работы
- •Вариант 1. «Жильё»
- •Вариант 2. «Жители»
- •Вариант 3. «Население»
- •Вариант 4. «Вакансии»
- •Вариант 5. «Поставщики-детали»
- •Литература
2.4.6. Управление данными (язык sql)
Конечной целью любой СУБД являются способы управления (ввод, изменение, удаление и выборка) данными. Всеми этими вопросами занимается язык запросов к базе данных (SQL - Structured Query Language), который в СУБД MS SQL Server является подмножеством языка T-SQL.
2.4.6.1. Типы команд sql
В SQL имеется шесть основных типов команд [6,11]:
команды языка определения данных (data definition language — DDL), которые позволяют создавать новые таблицы в базе данных, добавлять индексы и т.д. Основными командами языка определения данных являются:
CREATE TABLE
Создать таблицу
ALTER TABLE
Модифицировать таблицу
DROP TABLE
Удалить таблицу
CREATE INDEX
Создать индекс
ALTER INDEX
Модифицировать индекс
DROP INDEX
Удалить индекс
команды языка обработки данных (data manipulation language — DML), которые используются для добавления, корректировки и удаления строк в таблицах и включают:
INSERT
Вставить данные в таблицу
UPDATE
Обновить данные
DELETE
Удалить данные
команда (единственная команда) языка запросов данных (data query language — DQL), которая используется для получения данных из таблиц и определения формы представления этих данных:
SELECT
Выполнить запрос из таблиц базы
команды языка управления данными (data control language — DCL) определяют доступ отдельных пользователей и групп к объектам базы данных посредством полномочий, предоставляемых и отменяемых командами:
GRANT
Предоставить привилегии
REVOKE
Отменить привилегии
команды языка обработки транзакций (transaction processing language — TPL), которые обеспечивают обновление всех строк, используемых в операторе DML, и включают следующие команды:
BEGIN TRANSACTION
Начать транзакцию
COMMIT TRANSACTION
Завершить транзакцию
ROLLBACK TRANSACTION
Прервать транзакцию
команды языка управления курсором (cursor control language — CCL), которые выполняют операции с отдельными строками одной или нескольких таблиц; включают: DECLARE CURSOR, FETCH INTO и UPDATE WHERE CURRENT.
Заметим, что в некоторых версиях СУБД реализованы не все вышеперечисленные команды SQL, в частности, не поддерживаются никакие зарезервированные слова DCL.
2.4.6.2. Извлечение данных
Рассмотрим более подробно команду языка запросов данных SELECT [4,6,11], которая используется для извлечения данных из таблиц и определения формы представления этих данных. Синтаксис (неполный) инструкции (команды) SELECT следующий:
SELECT [ALL | DISTINCT | DISTINCTROW | TOP] { * | table.* | [table.]field1 [AS alias1] [, [table.]field2 [AS alias2] [, ...]]}
FROM tableexpression [, ...] [IN externaldatabase]
[WHERE criteria]
[GROUP BY groupfieldlist]
[HAVING groupcriteria]
[ORDER BY field1 [ASC | DESC ][, field2 [ASC | DESC ]][, ...]]
Инструкция SELECT включает следующие основные элементы:
SELECT означает, что из некоторых таблиц базы данных необходимо выбрать набор (таблицу данных).
Необязательные слова ALL, DISTINCT, DISTINCTROW и TOP называются предикатами (predicates) и определяют способ выбора следующим образом:
ALL указывает, что в набор передаются все строки (даже с дублируемыми значениями);
DISTINCT указывает, что в набор передаются только недублированные строки;
DISTINCTROW указывает, что в результирующий набор будет включена каждая строка, в которой есть отличие в значении любого из полей в двух таблицах (а не только полей, указанных для отображения в операторе SELECT);
TOP используется для отображения некоторого количества (точного или в процентном отношении) начальных или конечных записей из большого результирующего набора.
Список { * | table.* | [table.]field1 [AS alias1] [, [table.]field2 [AS alias2] [, ...]]} (фигурные скобки здесь обозначают список) состоит из имен полей таблиц(ы) запроса. Звездочка (*) означает выбор всех полей таблицы. Если в запросе указывается несколько таблиц, то для определения поля используется имя таблицы, отделяемое от имени поля точкой (.). Поле может получать «алиасное» имя при помощи ключевого слова As. В данном списке могут указываться также вычислимые поля и агрегированные функции (count, sum, min, max, avg).
После слова FROM указываются таблицы, из которых выбираются ранее указанные поля. Здесь tableexpression — это имя таблицы (или таблиц), содержащей данные, externaldatabase — имя базы данных, если не используется текущая база.
Имена полей и таблиц нечувствительны к регистру клавиатуры.
Остальные элементы (разделы) инструкции SELECT мы будем рассматривать по мере усложнения запросов к таблицам. Далее все примеры будут приведены с использованием базы данных «Сделки», описанной в разделе 2.4.5.
Примеры 2.4.
SELECT * FROM Клиент - выбор всех полей из таблицы Клиент.
SELECT Фамилия, Имя, [Телефон] FROM Клиент - выбор полей фамилия, имя, телефон из таблицы Клиент. Имя поля можно заключать в квадратные скобки (особенно это относится к сложным именам, состоящим из нескольких, разделенных пробелами слов).
Для поиска и отбора информации, соответствующей некоторому условию, используется раздел WHERE, который имеет следующий синтаксис:
WHERE criteria
где criteria определяет критерий (условие) поиска информации.
В условии используются имена полей, операции сравнения (<, <=, =, >, >=, <>) и специальные операции сравнения IN, LIKE, BETWEЕN. Эти операции могут объединяться с помощью логических операций (AND, OR) и задавать сложные условия поиска информации.
Примеры 2.5.
SELECT Название, Цена FROM Tовар
WHERE Цена > 1900 - определяет выбор названий и цены товаров, цена которых больше 1900.
SELECT [Фамилия], [Имя] FROM Клиент
WHERE [фамилия] = 'Иванов' - определяет выбор клиентов, фамилии которых совпадают с фамилией Иванов.
Операция IN сравнивает содержимое поля со списком значений, определяющих критерий поиска информации.
Примеры 2.6.
SELECT Название, Цена FROM Tовар
WHERE Цена IN (1900, 2000) определяет выбор названий товаров, цена которых равна 1900 или 2000.
SELECT [Фамилия], [Имя], [ГородКлиента] FROM Клиент
WHERE [ГородКлиента] IN ('Interlaken', 'New York', 'Frankfurt') - определяет выбор клиентов, живущих в городах Interlaken, New York или Frankfurt.
Операция LIKE сравнивает содержимое поля со значением образца. Для записи образца используются строковые константы, символы шаблона и списки диапазона символов.
Символы шаблона следующие: %, _, []. % - соответствует цепочке любых символов, _ - соответствует одному символу, [] - соответствует одному символу из набора возможных символов, указанных в этих скобках (допускается указание диапазонов символов). первый и последний символы диапазона отделяются дефисом (-). Диапазон задается в возрастающем порядке.
Пример 2.7. Шаблоны:
R% - возможные результаты поиска: right, Roza.
AN_ - возможные результаты поиска: and, any.
12345[2-3] - возможные результаты поиска: 123452, 123453.
[слд]ом - возможные результаты поиска: сом, лом, дом.
Примеры 2.8.
SELECT [Фамилия], [Имя] FROM Клиент
WHERE [Фамилия] LIKE 'S%' - определяет выбор клиентов, фамилии которых начинаются с буквы S.
SELECT Название FROM Tовар
WHERE Название LIKE '%конфеты%’ AND Цена = 2000 - определяет выбор названий товаров, в которых присутствует слово «конфеты» и цена равна 2000.
Операция BETWEEN проверяет принадлежность значения поля диапазону значений и является включающим значением (выбираются записи, содержащие поле со значением, равным границе диапазона). Границы значений объединяются операцией AND.
Примеры 2.9.
SELECT Название, Цена FROM Tовар
WHERE Название LIKE '%конфеты%’ AND Цена Between 1000 And 2000 - определяет выбор названий товаров, в которых присутствует слово «конфеты» и цена лежит в диапазоне от 1000 до 2000.
SELECT Фамилия, Фирма FROM Клиент
WHERE Фамилия Between 'Lon' And 'Tol' определяет выбор фирм клиентов, начальные буквы фамилий которых, расположенные в алфавитном порядке, находятся в диапазоне 'Lon' и 'Tol'.
Для определения порядка, в котором представляются результаты поиска записей, используется раздел ORDER BY, синтаксис которого следующий:
ORDER BY field1 [ASC | DESC][, field2 [ASC | DESC]][, ...]]
где field1, field2- поля (из списка имен полей команды SELECT), по которым производится упорядочение. Порядок следования полей в списке определяет уровни их сортировки. Опция ASC - устанавливает порядок сортировки по возрастанию, DESC – по убыванию.
Пример 2.10.
SELECT Название, Цена FROM Tовар
WHERE Название LIKE '%конфеты%’ ORDER BY Название - определяет выбор названий товаров, в которых присутствует слово «конфеты», и упорядочивает названия в алфавитном порядке.
Раздел GROUP BY позволяет выполнить группировку строк таблицы по определенным критериям. Для каждой группы можно выполнить специальные функции агрегирования (смотри таблицу 5), которые будут применены ко всем строкам в группе. При использовании агрегированных функций этот раздел обязателен для указания. Синтаксис раздела следующий:
GROUP BY groupfieldlist
где groupfieldlist определяет условие группировки. Обычно это список полей (из списка имен полей команды SELECT), по которым производится группировка. Порядок следования полей в списке определяет уровни их группировки.
Таблица 5. Функции агрегирования.
Функция |
Назначение |
Avg() |
Вычисляет среднее значение для указанной колонки (поля) |
Sum() |
Вычисляет сумму значений для указанной колонки (поля) |
Min() |
Находит минимальное значение в указанной колонке (поля) |
Max() |
Находит максимальное значение в указанной колонке (поля) |
Count() |
Подсчитывает количество строк с непустым (не NULL) значением указанной колонки (поля) |
Count(*) |
Подсчитывает общее количество строк, включая пустые (NULL), указанной колонки (поля) |
Пример 2.11.
SELECT Сорт, Sum(Остаток), Count(*) FROM Tовар
GROUP BY Сорт ORDER BY Сорт - осуществляется сортировка и группировка по сорту товара, вычисляется количество и сумма остатков товаров каждого сорта.
Раздел HAVING, в основном, используется для указания условий поиска данных, в случае группирования данных с помощью раздела GROUP BY. Раздел HAVING имеет следующий синтаксис:
HAVING groupcriteria
где groupcriteria содержит логическое условие, определяющее диапазон строк, обрабатываемых запросом.
Правила работы с этой конструкцией подобны разделу WHERE и были рассмотрены выше.
При работе с несколькими таблицами, каждый из рассмотренных разделов условий выбора может быть применен для любой из таблиц. В общем случае при формировании запроса для нескольких таблиц указывается таблица, в которой ведется поиск полей и связь между таблицами. Синтаксис запроса для нескольких таблиц следующий:
SELECT список имен полей FROM список имен таблиц список связей
где список связей определяет, как таблицы в списке имен таблиц связаны между собой. В частности, для задания связи используется рассмотренный ранее раздел WHERE (WHERE имя_таблицы1.имя_поля1 = имя_таблицы2.имя_поля2).
Примеры 2.12.
SELECT Клиент.Фамилия, Сделка.Количество FROM Клиент, Сделка
WHERE Клиент.КодКлиента = Сделка.КодКлиента аnd Фамилия LIKE 'S%' - определяет выбор фамилий клиентов из таблицы клиентов и количества товаров из таблицы сделок. Дополнение WHERE определяет связь между таблицами по коду клиента и условие выбора клиентов, фамилии которых начинаются с буквы S.
SELECT Фирма, Название, Sum(Цена*Количество) as Сумма
FROM Клиент, Товар, Сделка
WHERE Клиент.КодКлиента = Сделка.КодКлиента аnd
Товар.КодТовара = Сделка.КодТовара
GROUP BY Фирма, Название
ORDER BY Фирма, Название DESC - осуществляется сортировка и группировка по названию товара и фирме, вычисляется на какую сумму произведено сделок для каждого товара и фирмы.
