Скачиваний:
9
Добавлен:
27.11.2024
Размер:
589.19 Кб
Скачать

Министерство образования и науки Российской Федерации Федеральное агентство по образованию

Саратовский государственный технический университет

имени Гагарина Ю.А.

Балаковский институт техники, технологии и управления

РАБОТА С ДАННЫМИ В MS SQL SERVER

Методические указания к выполнению практической работы по курсу «Современные технологии управления базами данных»

для студентов направления 230400.62 очной, заочной и заочно-сокращенной форм обучения

ОСНОВНЫЕ ПОНЯТИЯ

Изначально целью любой системы управления базами данных является предоставление пользователям удобных и эффективных механизмов управления данными. Любая СУБД предоставляет пользователям инструменты для ввода, изменения, удаления и выборки данных.

Остальные возможности, такие, как репликация, резервное копирование,

автоматическое администрирование, перенос данных и другие, являются

лишь

дополнительными

компонентами,

обеспечивающими более

эффективное решение все тех же задач ввода,

изменения,

удаления и

выборки

данных. SQL Server 2005 предлагает

несколько

различных

механизмов управления данными.

 

 

Для добавления данных в языке Transact-SQL используются команды

INSERT и SELECT INTO, для изменения данных – команда UPDATE и для

удаления строк из таблиц – команда DELETE.

 

Команда INSERT

позволяет вставить в

таблицу

одну или несколько

строк. Упрощенный синтаксис этой команды таков:

 

INSERT INTO

имя модифицируемой

таблицы

[(список колонок

модифицируемой таблицы)] VALUES (список значений новой строки).

Как видно из представленного синтаксиса, список столбцов не является обязательным (об этом говорят квадратные скобки в описании синтаксиса). В

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

CREATE TABLE для таблицы, в которую вставляются строки. Кроме того,

эти значения должны относиться к тому же типу данных, что и столбцы, в

которые они вносятся. В списке столбцов можно не указывать столбцы со свойством IDENTITY, столбцы, допускающие значение NULL .

В качестве примера рассмотрим вставку строки в таблицу Product, созданную следующим оператором CREATE TABLE:

Пример 1

CREATE TABLE product

(

maker char (1) NOT NULL, model varchar (4) NOT NULL, type varchar (7) NOT NULL

);

Пусть требуется добавить в эту таблицу модель ПК 1157 производителя B.

Это можно сделать следующим оператором:

INSERT INTO Product

VALUES ('B', 1157, 'PC');

Пример 2.

Если задать список столбцов, то можно изменить «естественный» порядок их следования:

INSERT INTO Product (type, model, maker)

VALUES ('PC', 1157, 'B');

Такую конструкцию удобно применять, если столбцы имеют значения по умолчанию.

Пример 3.

Рассмотрим следующую структуру таблицы:

CREATE TABLE product_D

(

maker char (1) NULL, model varchar (4) NULL,

type varchar (7) NOT NULL DEFAULT 'PC'

);

Отметим, что здесь значения всех столбцов имеют значения по умолчанию

(первые два — NULL, а последний столбец — type — PC). Теперь мы могли бы написать:

INSERT INTO Product_D (model, maker)

VALUES (1157, 'B');

В этом случае отсутствующее значение при вставке строки будет заменено значением по умолчанию — PC.

Для того, чтобы не указывать список столбцов и, тем не менее,

воспользоваться значениями по умолчанию, нужно вместо явного указания значения использовать зарезервированное слово DEFAULT:

Пример 4.

INSERT INTO Product_D

VALUES ('B', 1158, DEFAULT);

Поскольку все столбцы имеют значения по умолчанию, для вставки строки со значениями по умолчанию можно использовать специальную конструкцию DEFAULT VALUES

INSERT INTO Product_D DEFAULT VALUES;

Заметим, что при вставке строки в таблицу проверяются все ограничения,

наложенные на данную таблицу. Это могут быть ограничения первичного ключа или уникального индекса, проверочные ограничения типа CHECK,

ограничения ссылочной целостности. В случае нарушения какого-либо ограничения вставка строки будет отклонена.

Рассмотрим теперь случай использования подзапроса. Пусть нам требуется вставить в таблицу Product_D все строки из таблицы Product, относящиеся к

моделям персональных компьютеров (type = ‘PC’). Поскольку необходимые нам значения уже имеются в некоторой таблице, то формирование вставляемых строк вручную, во-первых, является неэффективным, а, во-

вторых, может допускать ошибки ввода. Использование подзапроса решает эти проблемы:

Пример 6.

INSERT INTO Product_D

SELECT *

FROM Product

WHERE type = 'PC';

Использование в подзапросе символа «*» является в данном случае оправданным, так как порядок следования столбцов является одинаковым для обеих таблиц. Если бы это было не так, следовало бы применить список столбцов либо в операторе INSERT, либо в подзапросе, либо в обоих местах,

который приводил бы в соответствие порядок следования столбцов:

INSERT INTO Product_D(maker, model, type)

SELECT *

FROM Product

WHERE type = 'PC';

или

INSERT INTO Product_D

SELECT maker, model, type

FROM Product

WHERE type = 'PC';

или

INSERT INTO Product_D(maker, model, type)

SELECT maker, model, type

FROM Product

WHERE type = 'PC';

Здесь, также как и ранее, можно указывать не все столбцы, если требуется использовать имеющиеся значения по умолчанию, например:

INSERT INTO Product_D (maker, model)

SELECT maker, model

FROM Product

WHERE type = 'PC';

В данном случае в столбец type таблицы Product_D будет подставлено значение по умолчанию PC для всех вставляемых строк.

Если необходимо явно вставлять значения в колонки – счетчики,

имеющие свойство IDENTITY, то для модифицируемой таблицы надо выполнить команду: SET IDENTITY_INSERT имя модифицируемой таблицы ON.

Удаление данных из таблиц производится командой DELETE:

DELETE FROM имя таблицы

или

 

DELETE FROM имя таблицы

WHERE условие поиска

DELETE удаляет строки из временных или постоянных базовых таблиц,

представлений или курсоров,

причем в двух последних случаях действие

оператора распространяется на те базовые таблицы, из которых извлекались данные в эти представления или курсоры.

Если предложение WHERE отсутствует, удаляются все строки из таблицы или представления (представление должно быть обновляемым). Более быстро эту операцию (удаление всех строк из таблицы) можно в Transact-

SQL также выполнить с помощью команды

TRUNCATE TABLE <имя таблицы>

Однако есть ряд особенностей в реализации команды TRUNCATE TABLE,

которые следует иметь в виду:

не журнализируется удаление отдельных строк таблицы; в журнал записывается только освобождение страниц, которые были заняты данными таблицы;

не отрабатывают триггеры, как следствие, эта команда неприменима,

если на данную таблицу имеется ссылка по внешнему ключу;

значение счетчика (IDENTITY) сбрасывается в начальное значение.

Пример 7

Требуется удалить из таблицы Laptop все портативные компьютеры с размером экрана менее 12 дюймов.

DELETE FROM Laptop

WHERE screen < 12

Все блокноты можно удалить с помощью оператора

DELETE FROM Laptop

или

TRUNCATE TABLE Laptop

Изменение значения поля

Команда UPDATE позволяет изменять некоторые или все значения в существующей записи в таблице. Эта команда содержит предложение

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

указывающее на изменение, которое нужно сделать для определенного столбца.

Пример 9.

Чтобы изменить для всех записей модели на 1159, можно ввести команду:

UPDATE Product_D

SET model=1159

В операторе UPDATE можно использовать условия для выбора записей,

подлежащих изменению.

Пример 10.

UPDATE Product_D SET model=1159

WHERE type = ‘PC’

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

Запросы на выборку данных

Чтобы создать запрос необходимо сделать активной БД для которой создается запрос, затем в рабочей области редактора запросов создать запрос с помощью команды SELECT, имеющей следующий синтаксис:

SELECT [ALL|DISTINCT] [TOP|PERCENT n] <Список полей>

[INTO <Имя новой таблицы>] [FROM <Имя таблицы >]

[WHERE <Условие>] [GROUP BY <Поле>] [ORDER BY <Поле > [ASC|DESC]]

[COMPUTE AVG|COUNT|MAX|MIN|SUM(<Выражение>)]

Здесь параметры ALL|DISTINCT показывают, какие записи обрабатываются: ALL обрабатывает все записи, DISTINCT только

уникальные, удаляются повторения записей.

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

PERCENT, то n указывает процент от общего числа записей.

<Список полей> - здесь указываются отображаемые поля из таблиц через запятую.

Замечания: 1) Если имена отображаемых полей в разных таблицах не

повторяются, то мы можем указывать только имена столбцов или полей без указания самих полей ( ФИО, Должность). Если отображаются поля из разных таблиц с одинаковыми именами нужно указывать и имя таблицы

<Имя поля>.<Имя таблицы>; 2) Здесь же можно присваивать псевдонимы полям, следующим образом

<Имя поля> AS <Псевдоним>

3) Если необходимо вывести все поля из таблицы, то их можно заменить

значком «*»

Раздел INTO. Если присутствует этот раздел, то на основе результатов запроса создается новая таблица. Параметр INTO это имя новой таблицы.

Раздел FROM. Здесь указываются таблицы и запросы, через запятую,

которые участвуют в новом запросе.

Замечание: В разделе FROM так же можно задавать сложные связи,

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

этом случае раздел FROM будет иметь следующий вид:

FROM <Таблица1> INNER JOIN <Таблица2> ON <Таблица1>.<поле1> =

<Таблица2>.<поле2> …

Здесь устанавливается взаимосвязь Таблицы 1 и Таблицы2 по Полю1 и

Полю2. Таких разделов INNER JOIN может быть сколько угодно.

Раздел WHERE. Данный раздел используют для создания простых запросов,

в этом случае в качестве условия указываем связываемые поля, либо этот раздел используют для создания фильтров, здесь указывают условия отбора. В условиях отбора мы можем использовать стандартные логические операторы NOT, OR, AND.

Замечание: В своем стандартном виде запросы могут реализовывать только статичные фильтры, но не динамические. Для реализации динамических фильтров используются хранимые процедуры.

Раздел GROUP BY – определяет поле для группировки записей в запросе.

Раздел ORDER BY – определяет поле для сортировки записей в запросе.

Если указан параметр ASC, то будет производиться сортировка по возрастанию, если DESC – по убыванию. По умолчанию используется сортировка по возрастанию.

Раздел COMPUTE позволяет в конце результатов выполнения запроса вывести некоторые итоговые вычисления по запросу. Возможны следующие виды вычислений: AVG – средняя параметра; COUNT –

количество значений параметра не равных NULL; MAX и MIN –

максимальные и минимальные значения параметра; SUM – сумма всех значений параметра, где <Выражение> – сам параметр. В качестве параметра обычно выступают какие либо поля таблиц, участвующих в запросе.

ТЕХНОЛОГИЯ ВЫПОЛНЕНИЯ РАБОТЫ Создайте базу данных, позволяющую вести учет сотрудников, работающих

на предприятии, а также хранить все выданные заработные платы с их расшифровкой по доходным и расходным статьям (например, оклад,

подоходный налог и т.д.).