База данных. ЭУМК Базы данных. Пояснительная записка Теоретический раздел Практический раздел Раздел контроля знаний Вспомогательный раздел Пинск
Скачать 2.33 Mb.
|
3.2 Обновление (изменение) данных 1. Прежде всего, проанализируем и выполним нижеследующую инструкцию, в которой сначала выполняется инструкция SELECT, записанная в скобках после знака присвоения. Она выбирает из таблицы Suppliers значения столбца Title, у которых совпадают значения кодов в таблице Suppliers и в таблице Goods. Затем полученный результат заносится в столбец Supplier таблицы Goods. UPDATE Goods SET Supplier = (SELECT Title FROM Suppliers WHERE Goods.CodeSuppliers=Suppliers.CodeSuppliers); 2. Откроем таблицу Goods и просмотрим результат. Столбец Supplier, содержавший ранее значения NULL, теперь заполнен соответствующими данными из таблицы Suppliers. 3. По аналогии с заполнением данными посредством выполнения сценария в п. 3.1 выполним следующие действия: • скопируем и сохраним в файле Updates.sql текст, приведённый в Приложении_2 настоящего руководства; • откроем сохранённый файл Updates.sql в редакторе запросов Management Studio и выполним его. 4. Проверим результаты, открыв соответствующие таблицы для просмотра. 5. Если предыдущие действия были выполнены успешно, то можно сделать очередную резервную копию базы данных backup2.bak (Лабораторная работа №1.). 3.3 Удаление данных Пример 1. Удаление строк из таблицы Ordered. В этом упражнении вначале просмотрим заказы дешевле 1$. Затем соответствующие заказы будут удалены из таблицы Ordered, и мы убедимся, что это сделано. 1. Введём следующий оператор, чтобы просмотреть продажи по заказам: SELECT * FROM Ordered WHERE Price < 1 Должно существовать три таких заказа. 2. Перед выполнения следующих действий сделайте копию базы данных. Введем следующий оператор DELETE: DELETE FROM Ordered WHERE Price < 1 Замечание. Обратите внимание, что оператор DELETE не требует определения столбцов, поскольку он удаляет всю строку. 3. Повторим первоначальный оператор SELECT. Он должен вернуть теперь пустой результат. 4. Для восстановления данных воспользуйтесь предыдущей копией, созданной перед выполнением оператора DELETE. 5. Выполним оператор SELECT снова, чтобы увидеть удалённые три строки. 6. После удачного выполнения действий по удалению и восстановлению записей уместно сделать очередную резервную копию базы данных backup4.bak 7. Пример 2. Удаление записей на основе более точных условий. Можно определить условие удаления более точно путём комбинирования ряда простых условий в одном. Например, введите следующий оператор, чтобы удалить записи, относящиеся к продаже товаров фирме "Соло", выполненным после 2 января 1994 г.: DELETE FROM Orders WHERE DatePurpose>'02.01.1994' AND Qient-Соло' Если попытаться выполнить этот оператор, то MS SQL Server вернёт ошибку, поскольку существует внешний ключ в таблице Ordered, который ссылается на таблицу Orders. Если эти строки будут удалены, то некоторые строки таблицы Ordered не будут больше иметь соответствующих строк в таблице Orders, что приведёт к нарушению ограничения внешнего ключа (нарушению ссылочной целостности). Примечание. В операторах удаления можно использовать подзапросы, также как они использовались при обновлении данных. 4 Контрольные вопросы 1) Укажите последовательность действий для визуального ввода данных в конкретную таблицу базы данных. 2) Как удалить строку данных из таблицы базы данных визуальными средствами? 3) Прокомментируйте смысл предложений в составе инструкции INSERT INTO. 4) Укажите последовательность подготовительных действий для ввода и выполнения инструкции языка Transact-SQL. 5) Дайте определение терминов ПАКЕТ и СЦЕНАРИЙ при выполнении инструкций языка Transact-SQL. 6) Расскажите о порядке выполнения сценария языка Transact-SQL на примере заполнения данными таблиц базы данных Borei. 7) Расскажите о порядке обновления (изменения) данных. 8) Расскажите о порядке удаления данных. ЛАБОРАТОРНАЯ РАБОТА № 4 ОБЗОР ЯЗЫКА TRANSACT SQL 1 Цель работы 1) Научиться созданию запросов посредством конструктора запросов Management Studio. 2) Научиться правильному применению условий поиска данных в базе данных. 2 Задание 1) Изучить порядок открытия конструктора запросов в среде Management Studio. 2) Изучить интерфейс конструктора запросов. 3) Изучить правила визуального создания запросов посредством конструктора запросов и представлений. 4) Изучить и выполнить предложенные варианты условий поиска в составе инструкции SELECT. 3 Порядок выполнения работы 3.1 Создание и выполнение запроса к базе данных посредством конструктора запросов и представлений 3.2 Практическое изучение приемов применения условий поиска 3.2.1 Оператор SELECT 3.2.2. Условия поиска 3.1 Создание и выполнение запроса к базе данных посредством конструктора запросов и представлений Для создания нового запроса обычно выполняют нижеперечисленную последовательность шагов. 1. В обозревателе объектов сделайте щелчок на узле той базы данных, к которой Вы намерены создать запрос. 2. Сделайте щелчок на кнопке Создать запрос панели инструментов. 3. В позиции главного меню Запрос или во всплывающем меню окна открывшегося редактора выберите пункт Создать запрос в редакторе. Откроется окно конструктора и окно переднего плана Добавление таблицы, содержащее перечень доступных таблиц. 4. В диалоговом окне Добавление таблицы выберите таблицы, к которым будет обращаться запрос, и для каждой из них нажмите кнопку Добавить. 5. Выбрав нужные таблицы, нажмите кнопку Закрыть. Изображения отобранных таблиц появятся в области диаграммы конструктора запросов. 6. Если позднее в запрос нужно будет добавить еще какиенибудь таблицы, в меню конструктора запросов выберите пункт Добавить таблицу, или щелкните открытое место на панели Диаграмма правой кнопкой мыши и из контекстного меню выберите Добавить таблицу. Примечание. Если панели Диаграмма, SQL, Критерий или Результаты отсутствуют, в меню конструктора запросов выберите Область и щелкните панель, которую нужно открыть. 7. На панели Диаграмма на изображениях таблиц поставьте флажки для каждого столбца, который должен войти в результат запроса. В результате этих действий в области Критериев автоматически будут заполнены указанные столбцы, а соответствующая инструкция SELECT также будет сгенерирована и появится в области SQL-кода. 8. Чтобы выполнить запрос, в меню конструктора запросов выберите Выполнить SQL. При дальнейшем улучшении запроса можно изменить код SQL на панели SQL или выбрать такие параметры, как порядок сортировки или псевдонимы столбцов на панели Критерии. Для открытия конструктора запросов и представлений для существующего запроса: 1. В обозревателе объектов разверните папку Queries. 2. Дважды щелкните мышью открываемый запрос. Области конструктора запросов и представлений открываются с учетом параметров, заданных в диалоговом окне в качестве примера создадим запрос к таблицам Orders, Ordered для определения состава товаров, которые заказывала определённая фирма, например, E-Life. Таблица Orders содержит необходимую нам информацию о заказах, за исключением наименования товара, скидки, стоимости и количества, которая хранится в таблице Ordered. Из построенной ранее диаграммы видно, что таблица Ordered имеет ограничение внешнего ключа по отношению к таблице Orders. Для построения такого запроса с помощью конструктора запросов выполним следующую последовательность действий. В обозревателе объектов делаем щелчок на узле Таблицы в составе дерева Borei. 2. На верхней панели инструментов делаем щелчок на кнопке Создать запрос. 3. На нижней панели инструментов открывшегося редактора запросов в выпадающем списке проверяем установку текущей базы - Вorei. 4. В главном меню Запрос или во всплывающем меню окна редактора запросов выбираем Создать запрос в редакторе. 5. Выбираем таблицы Ordered и Orders в окне переднего плана, щёлкаем на кнопке Добавить и затем Закрыть. Выбранные таблицы появятся в области Диаграммы с отображением отношения между ними. 6. На панели критериев отбираем столбцы: Orders.Employee, Orders. DateExecution. Ordered.Goods. Ordered. Discount. Ordered.Price. 7. Ставим галочки против них в столбце Вывод. 8. Добавляем поле Orders.Client и в столбец Фильтр заносим значение 'E-Life'. В столбец вывода для этого поля галочку можно не ставить, если мы не хотим отображать этот столбец. 9. Изучаем созданную инструкцию SELECT в области SQL. 10. Выполняем инструкцию щёлкнув на кнопке Выполнить. Если все действия были правильными, то в области SQL-кода появится следующая инструкция: SELECT ordered.Goods, ordered.Discount, ordered.Price, orders.Employee, orders.dateExecution FROM ordered INNER JOIN orders ON ordered.Codeorder = orders.Codeorder WHERE Orders.Client='E-Life', а в области результатов будет выведен следующий результат: Крылова Анна 1992-01-05 00:00:00.000 ТЕАС 52х CD-522E 0.000042 12 3.2 Практическое изучение приемов применения условий поиска Перед выполнением последующих примеров следует ознакомиться с материалом, ипоженным в и. 4.2 Конспекта лекций. Однако и здесь будет полезно кратко напомнить основные понятия, которые там рассматривались. 3.2.1 Оператор SELECT Оператор SELECT является сердцем SQL, поскольку именно посредством него мы получаем обратно информацию, которую сохраняли в базе данных. Нет смысла создавать и заполнять структуры данных, если мы не сможем получить их обратно в приемлемой форме. Мы уже встречались с некоторыми простыми формами оператора SELECT в предыдущей лаб. работе. В данной части руководства Вы расширите практику в его использовании. Рассмотрим укрупненный синтаксис оператора SELECT: SELECT [DISTINCT] columns FROM tables WHERE < search_conditions> [GROUP BY column [HAVING < search_condition>]] [ORDER BY < order_list> [ ASC | DESC ]] Оператор SELECT содержит семь главных ключевых слов. Ключевое слово и связанную с ним информацию называют предложением. Эти предложения представлены в нижеследующей таблице 4.1. Таблица 4.1 - Структура оператора SELECT Предложение Описание SELECT columns Список возвращаемых столбцов DISTINCT Опциональное ключевое слово, исключающее повторяющиеся строки FROM tables Указывает таблицы, из которых должны выбираться значения WHERE Определяет условия отбора подмножества строк из множества всех доступных строк GROUP BY column Группирует возвращаемые строки на основе значений указанного столбца HAVING Используется совместно с предложением GROUP BY и определяет условия отбора групп ORDER BY Упорядочивает результирующий набор строк, возвращаемых оператором SELECT, на основе указанных столбцов 3.2.2. Условия поиска Текст следующий за ключевым словом WHERE, называется условиями поиска, поскольку оператор SELECT ищет строки, удовлетворяющие этому условию поиска. Условие поиска состоит из имени столбца (например "Surname"), оператора (например "=") и значения (например "Белова"). Таким образом, предложение WHERE имеет следующую общую форму: HERE column_name operator value В общем случае column_name есть имя столбца запрашиваемой таблицы, operator — это оператор сравнения и value — это значение или диапазон значений, с которым сравнивается значение столбца. Условия поиска, в общем случае, используют операторы, приведённые в таблице 4.2. Таблица 4.2 - Классификация операторов в SQL Server Операторы Описание Операторы сравнения Используются для сравнения значения столбца со значением условия поиска. Примерами являются: <, >, <=, >=, =, != или < >, !< (не меньше), !> (не больше). Арифметические операторы Используются для вычисления и оценки значений в условии поиска. Примерами служат: -1-, -, *, /, % (остаток от деления). Логические операторы Проверяют истину некоторого условия. Это операторы: NOT, AND, OR, а также ALL, ANY или SOME, BETWEEN, IN, LIKE и EXISTS. Значения в условии поиска могут быть литеральными (константы) или вычисляемыми, а также значениями, возвращаемыми подзапросами. Описание типов значений приведено в таблице 4.3. Таблица 4.3 — Типы значений в условии поиска Типы значений Описание Литерные значения Числа и символьные строки, являющиеся образцами для сравнения, например число 1138 или строка 'Новиков'. Вычисляемые значения Функции или арифметические выражения, например Price * 2 или Surname 1 Name. Подзапросы (подзапрос - это вложенный в запрос оператор SELECT) Вложенный оператор SELECT возвращает одно или более значений, которые используются для сравнения со значениями определённого столбца Рекомендуется символьные значения заключать в одинарные кавычки, поскольку в некоторых случаях двойные кавычки являются недопустимыми. Числовые константы записываются без кавычек. Замечание. Строковые значения являются чувствительными к регистру. Когда строка предварительного результата запроса подвергается проверке на соответствие условию, то результатом может быть одно из трёх значений: • True - строка соответствует условию предложения WHERE; • False — строка не соответствует условию предложения WHERE; • Unknown - некоторое поле в предложении WHERE содержит неопределённое значение NULL, которое не может быть оценено. 3.2.3 Примеры выполнения поиска Пример 1. Выбрать строки со значением "Белова" в столбце Surname таблицы Employees. В результате ваших действий конструктор запросов должен сгенерировать следующую инструкцию: SELECT Surname, Name, Post, HomeTelephone FROM Employees WHERE Surname='Белова' В результате выполнения запрос должен вернуть одну строку: Белова Марш Представитель (017) 555-9857 Пример 2. Выбрать строки, у которых фамилия (Surname) следует в алфавитном порядке за фамилией Белова. В результате ваших действий конструктор запросов должен сгенерировать следующую инструкцию: SELECT Surname, Name, Post, HomeTelephone FROM Employees WHERE Surname > 'Белова' В результате выполнения запрос должен вернуть одну строку: Крылова Анна Внутренний координатор (017) 555-1189 Пример 3. Поиск с отрицанием NOT. Любое логическое выражение можно превратить в его отрицание, поставив перед ним оператор NOT. Например, выберите категории (типы) товаров за исключением CD-ROM-MOB. В данном случае запрос будет выглядеть следующим образом: SELECT CATEGORY FROM TYPES WHERE NOT CATEGORY = 'CD-ROM' В результате должен получиться список из 14 категорий. Однако есть и другие способы получить тот же самый результат, поставив вместо NOT следующие операторы: SELECT Category FROM Types WHERE CATEGORY != 'Cd-Rom' SELECT Category FROM Types WHERE CATEGORY <> 'Cd-Rom' Применение сравнения LIKE Кроме сравнения непосредственно со значениями, условия поиска могут содержать специальный шаблон. Если проверяемые данные удовлетворяют данному шаблону, то строка включается в результат. Сравнение LIKE является чувствительным к регистру и использует символы- заменители. Символ (%) соответствует в шаблоне любому набору символов. Символ (_) соответствует одному произвольному символу. Таблица 4.4 содержит примеры некоторых общих шаблонов. Таблица 4.4 - Примеры шаблонов Предложение Соответствует WHERE SURNAME LIKE '%a%' Значение поля SURNAME содержит по крайней мере один символ "а". SURNAME 'Kp%' Значение поля SURNAME начинается символами "Кр". CONTAINS (SURNAME',, 'i') Значение поля SURNAME содержит по крайней мере одну букву "i" или "Г. SURNAME BETWEEN 'A' AND 'H' Значение поля SURNAME начинается с любой буквы между "А" и "Н" включительно. Пример 4. Создать запрос для поиска служащих, чьи фамилии оканчиваются на "ова". Вы должны; будете получить следующую инструкцию: SELECT SURNAME, NAME FROM EMPLOYEES WHERE SURNAME LIKE '%ова' В результате должен быть получен следующий результат: SURNAME NAME Белова Марш Крылова Анна Пример 5. Создать запрос для поиска служащих, чьи фамилии начинаются с "К", после которого следуют точно два символа и затем символ "л". Остальные символы безразличны. Вы должны будете получить следующую инструкцию: SELECT SURNAME, NAME FROM EMPLOYEES WHERE SURNAME LIKE 'Кр%' Результатом должно быть: Крылова Анна. Применение оператора CONTAINS Оператор CONTAINS проверяет наличие заданной сроки символов в любом месте искомой строки. Этот оператор не является чувствительным к регистру и не поддерживает неопределённых символов, если записи в таблице написаны на латинском языке. Примечание. Для того, чтобы этот оператор отработал, необходимо, чтобы на сервере была включена служба полнотекстового поиска (full-text search service) и таблица была проиндексирована для него. Пример 6. Создать запрос на поиск клиентов, чьи названия содержат буквы "i" и "I" в любом месте. Созданная инструкция должна принять следующий вид: SELECT TITLE FROM Clients WHERE CONTAINS (TITLE,'I') Должен быть получен следующий результат: TITLE E-Life IMC Computers Comtris Net Line Oki Теперь выполним тот же самый оператор, заменив букву "Г' на "i". Мы должны будем получить тот же самый результат. SELECT TITLE FROM Clients WHERE CONTAINS (TITLE, 'i') Этот оператор является чувствительным к регистру, если записи написаны "кириллицей". SELECT SURNAME, NAME FROM EMPLOYEES WHERE CONTAINS (NAME,'a') Результатом будет: SURNAME NAME Белова Мария Теперь выполним тот же самый оператор, заменив букву "а" на "А": SELECT SURNAME, NAME FROM EMPLOYEES WHERE CONTAINS (NAME,'A') Получим: SURNAME NAME Крылова Анна Проверка на неопределённое значение (оператор IS NULL) Другой тип сравнения проверяет на наличие, или отсутствие какого-либо значения. Для этой цели используется оператор IS NULL. Для проверки присутствия некоторого значения используют оператор IS NOT NULL. |