Слайд 2Формы Бэкуса-Наура (BNF)
Язык, в терминах которого дается описание языка SQL,
называется метаязыком. При построении синтаксической диаграммы (дерева) главным образом используются
условные обозначения, известные как стандартные формы Бэкуса-Наура (BNF), но, кроме того, введены некие дополнения, способствующие более глубокому пониманию смысла операций. Ниже приведен полный список обозначений.
Слайд 3Формы Бэкуса-Наура (BNF)
Символ ::= означает равенство по определению. Используется для
пояснения элементов синтаксической диаграммы оператора.
Ключевые слова записываются прописными буквами. Они
зарезервированы для обозначения и составляют часть оператора.
Слайд 4Формы Бэкуса-Наура (BNF)
Необязательные элементы оператора заключены в квадратные скобки "[
]".
[А]
– повторение символа А 0 или 1 раз
Вертикальная черта "|" указывает на то, что все предшествующие ей элементы являются необязательными и любой из них может быть заменен на другой, принадлежащий списку после этой черты.
Слайд 5Формы Бэкуса-Наура (BNF)
Фигурные скобки "{ }" указывают, что все находящееся
внутри них является единым целым при использовании других специальных символов
(например, вертикальной черты или круглых скобок).
{А} – повторение символа А произвольное число раз (включая 0 раз)
Многоточие "..." (точнее три точки) означает, что предшествующая часть оператора может быть повторена любое число раз.
Слайд 6Формы Бэкуса-Наура (BNF)
Многоточие, внутри которого есть запятая ".,.." (точнее, точка,
запятая, две точки) указывает, что предшествующая часть оператора, состоящая из
нескольких элементов, разделенных запятыми, может иметь произвольное число повторений. Запятую нельзя ставить после последнего элемента.
Слайд 8Этапы создания БД
1. создание БД (файл с расширением *.mdf ).
В файле БД записываются сведения об основных объектах (таблицах, индексах,
просмотрах и т.д.),
2. создание журнала транзакций, принадлежащего БД (файл с расширением *.ldf). Здесь записываются сведения о процессе работы с транзакциями (контроль целостности данных, состояния БД до и после выполнения транзакций).
Слайд 9В стандарте ANSI нет команды CREATE DATABASE. Но почти все
платформы СУБД поддерживают какой-либо вариант этой команды.
При создании новой
базы данных как образец используется база данных MODEL.
Процедура создания базы данных обычно закрепляется только за администратором базы данных.
Слайд 10Определение базы данных
::=
CREATE DATABASE имя_БД
[ON [PRIMARY]
[ [,...n] ]
[,<определение_группы> [,...n] ] ]
[ LOG ON {<определение_файла>[,...n] } ]
Слайд 11Имя БД
Имя БД – стандартный идентификатор, допустимый в SQL.
Если имя БД содержит пробелы или любые другие недопустимые символы,
оно заключается в ограничители (квадратные скобки). Имя БД должно быть уникальным в пределах сервера и не может превышать 128 символов.
Слайд 12ON
ON – определяет список файлов на диске для размещения
информации, хранящейся в БД.
Если в процессе использования БД планируется ее
размещение на нескольких дисках, то можно создать так называемые вторичные файлы БД с расширением *.ndf. В этом случае основная информация о БД располагается в первичном (PRIMARY) файле, а при нехватке для него свободного места добавляемая информация будет размещаться во вторичном файле. Если первичный файл опущен, то основным является первый файл в списке. Основной файл содержит логическое начало базы данных. Подход, используемый в SQL-сервере, позволяет распределять содержимое БД по нескольким дисковым томам.
Слайд 13LOG ON
LOG ON – определяет список файлов на диске
для размещения журнала транзакций (ЖТ). Имя файла для ЖТ генерируется
на основе имени БД, а в конце к нему добавляются символы log.
Model.mdf –> Modellog.mdf
Слайд 14Определение файла
При создании БД можно определить набор файлов, из которых
она будет состоять.
::=
([ NAME=логическое_имя_файла,] FILENAME='физическое_имя_файла' [,SIZE=размер_файла ] [,MAXSIZE={max_размер_файла
|UNLIMITED } ] [, FILEGROWTH=величина_прироста ] )[,...n]
Слайд 15NAME=логическое_имя_файла
NAME=логическое_имя_файла – это имя файла, под которым он будет
распознаваться при выполнении различных SQL-команд.
FILENAME='физическое_имя_файла' – это имя файла,
который будет создан на жестком диске. Это имя останется за файлом на уровне операционной системы.
Слайд 16SIZE=размер_файла
SIZE=размер_файла определяет первоначальный размер файла; минимальный размер параметра – 512
Кб; если он не указан, то по умолчанию принимается 1
Мб.
MAXSIZE={max_размер_файла} определяет максимальный размер файла базы данных. При задании параметра UNLIMITED максимальный размер базы данных ограничивается свободным местом на диске.
Слайд 17FILEGROWTH=величина_прироста
FILEGROWTH=величина_прироста – величина автоматического прироста размера базы данных. Приращение –
это либо абсолютная величина в мегабайтах либо процентное соотношение.
Если
FILEGROWTH не задан, то файл за одно увеличение будет увеличиваться на 10 % (но не менее, чем на 64 Кб.)
Слайд 18::=
Дополнительные файлы могут быть включены в группу:
::=
FILEGROUP имя_группы_файлов [,...]
Слайд 19Пример 1. Создать БД, при этом для данных определить 3
файла на дисках D, E, F, для журнала транзакций –
2 файла на дисках H и M.
CREATE DATABASE Archiv
ON PRIMARY
( NAME=Arch1, FILENAME=’d:\user\data\archdat1.mdf’, SIZE=100MB, MAXSIZE=200, FILEGROWTH=20),
(NAME=Arch2, FILENAME=’е:\user\data\archdat2.mdf’, SIZE=100MB, MAXSIZE=200, FILEGROWTH=20),
(NAME=Arch3, FILENAME=’f:\user\data\archdat3.mdf’, SIZE=100MB, MAXSIZE=200, FILEGROWTH=20),
LOG ON (NAME=Archlog1, FILENAME=’h:\user\data\archlog1.ldf’, SIZE=100MB, MAXSIZE=200, FILEGROWTH=20),
(NAME=Archlog2, FILENAME=’m:\user\data\archlog2.ldf’, SIZE=100MB, MAXSIZE=200, FILEGROWTH=20);
Слайд 20Краткая форма оператора создания базы данных
CREATE DATABASE имя_базы_данных;
В этом
случае все значения параметров задаются по умолчанию.
Пример 2. Создать
базу данных Magasin с параметрами по умолчанию:
CREATE DATABASE Magasin;
Слайд 21Изменение БД
::=
ALTER DATABASE имя_базы_данных
{
ADD FILE [,...n]
[TO FILEGROUP имя_группы_файлов ]
| ADD LOG FILE <определение_файла>[,...n]
| REMOVE FILE логическое_имя_файла
| ADD FILEGROUP имя_группы_файлов
| REMOVE FILEGROUP имя_группы_файлов
| MODIFY NAME = new_database_name
| MODIFY FILEGROUP имя_группы_файлов
<свойства_группы_файлов>};
Слайд 22Удаление БД
Удаление БД осуществляется командой:
DROP DATABASE имя_базы_данных [,...n]
Удаляются
все содержащиеся в БД объекты, освобождает распределенное под нее место
на диске и уничтожает все ссылки на нее из БД master. Для исполнения операции удаления БД пользователь должен обладать соответствующими правами.
Слайд 24Приступая к созданию таблицы, необходимо ответить на ряд вопросов:
Как будет
называться таблица?
Как будут называться столбцы (поля) таблицы?
Какие типы
данных будут закреплены за каждым столбцом?
Какой размер памяти должен быть выделен для хранения каждого столбца?
Какие столбцы таблицы требуют обязательного ввода?
Из каких столбцов будет состоять РК?
Слайд 25Упрощённый синтаксис этой команды
CREATE TABLE
( {
данных> [()]
[…]} .,..
[, .,..] );
Слайд 26Базовый синтаксис команды создания таблицы
::=
CREATE TABLE имя_таблицы
({имя_столбца тип_данных
[ NOT NULL ]
[ [PRIMARY KEY | UNIQUE] [IDENTITY
[n,m]]
[DEFAULT <значение>]
[IDENTITY [(стартовое_значение, инкремент)]] [FOREIGN KEY REFERENCES имя_род_таблицы
[ (имя_столбца_род_таблицы ) ]
[ CHECK (<условие_выбора> ) ] [,...n]
[ON UPDATE {CASCADE | NO ACTION } ]
[ON DELETE {CASCADE | NO ACTION } ]});
Слайд 27имя_столбца тип_данных
имя_столбца – идентификатор столбца
тип_данных - тип данных столбца.
Обязательно
должен быть указан размер для типов CHAR или VARCHAR .
Слайд 28NOT NULL
[NOT] NULL – NULL используется для указания того,
что в данном столбце могут содержаться значения NULL, т. е.
данные недоступны, опущены или недопустимы.
Если указано ключевое слово NOT NULL, то будут отклонены любые попытки поместить значение NULL в данный столбец.
Слайд 29UNIQUE
UNIQUE – уникальное значение поля в пределах столбца таблицы.
Слайд 30 PRIMARY KEY
Создает первичный ключ таблицы. Каждая таблица может
иметь только один первичный ключ.
Обеспечивает отсутствие повторяющихся столбцов.
Не допускает неопределенных
значений ни в одной компоненте первичного ключа.
Таким образом, PRIMARY KEY является комбинацией NOT NULL и UNIQUE
Слайд 31IDENTITY [n, m]
Для колонки с таким свойством сервером автоматически генерируется
возрастающая последовательность, начиная с n и приращением m. Если какой-либо
параметр опущен, то по умолчанию принимается единица.
Внимание: Сервер не гарантирует непрерывность значений - в реальных данных таблицы могут появляться разрывы.
Слайд 32DEFAULT
[DEFAULT ] - значение по умолчанию.
Так, при добавлении
новой записи столбец с таким ограничением автоматически получит указанное значение.
Слайд 33 FOREIGN KEY
[FOREIGN KEY REFERENCES имя_род_таблицы
[ (имя_столбца_род_таблицы )
]
1. Задает столбец или набор столбцов в качестве внешнего ключа
таблицы.
2. Внешний ключ (FK) используется для поддержания ссылочной целостности. Он устанавливает связь с первичным или уникальным ключом в той же самой таблице или между таблицами.
3. Данные в столбце, определенном как FK, могут принимать только такие же значения, какие находятся в связанных с ним столбцах первичного ключа родительской таблицы.
4. Значение внешнего ключа должно совпадать с существующим значением в родительской таблице или быть неопределенным (NULL).
Слайд 34FOREIGN KEY
Требование – соответствие столбцов РК и FК по типу
и размеру данных
если FK ссылается на РК другого отношения, имена
полей РК можно не указывать;
если FK составной, список полей, входящих в ключ, указывается после перечисления всех полей таблицы с ключевым словом FOREIGN KEY.
Слайд 35CHECK
[ CHECK ( ) ] [,...n]
используется для проверки допустимости
данных, вводимых в конкретный столбец таблицы. Это еще один уровень
защиты данных.
CHECK задает диапазон возможных значений для столбца или столбцов. Допускается применение нескольких ограничений CHECK к одному и тому же столбцу. Они будут применимы в той последовательности, в которой происходило их создание. Возможно применение одного и того же ограничения к разным столбцам и использование в логических выражениях значений других столбцов.
Слайд 36Основные типы условий выбора:
Сравнение
Диапазон
Принадлежность множеству
Соответствие шаблону
Отсутствие значений (Значение NULL)
Слайд 371. Сравнение
Сравниваются результаты вычисления одного выражения с результатами вычисления другого.
Условие поиска при сравнении имеет вид
выр1 θ выр2,
где θ одна из операций сравнения.
В
языке SQL можно использовать следующие операторы сравнения:
= – равенство;
< – меньше;
> – больше;
<= – меньше или равно;
>= – больше или равно;
<> (!=) – не равно.
Пример 3. Цена INT NOT NULL CHECK (Цена > 100 AND Цена < 200)
Слайд 382. Диапазон
Проверяется, попадает ли результат вычисления выражения в заданный диапазон
значений.
Диапазон значений задается с помощью конструкции
выражение BETWEEN нижняя граница AND верхняя граница
Диапазон определяется
своими минимальным и максимальным значениями. При этом указанные значения включаются в условие поиска. При использовании отрицания NOT BETWEEN требуется, чтобы проверяемое значение лежало вне границ заданного диапазона.
Пример 4. Цена INT NOT NULL CHECK (Цена BETWEEN 100 AND 200)
Слайд 393. Принадлежность множеству
проверяется, принадлежит ли результат вычислений выражения заданному множеству
значений.
Вхождение во множество задается с помощью конструкции
[NOT] IN (значение
[, значение…])
Оператор IN используется для сравнения некоторого значения со списком заданных значений, при этом проверяется, соответствует ли результат вычисления выражения одному из значений в предоставленном списке. При помощи оператора IN может быть достигнут тот же результат, что и в случае применения оператора OR, однако оператор IN выполняется быстрее.
Слайд 403. Принадлежность множеству
NOT IN используется для отбора любых значений, кроме
тех, которые указаны в представленном списке.
Пример 5.
Сорт VARCHAR(6)
NOT NULL
CHECK (Сорт IN (‘Первый',‘Второй',‘Третий'))
Слайд 414. Соответствие шаблону
проверяется, отвечает ли некоторое строковое значение заданному шаблону.
С
помощью оператора LIKE можно выполнять сравнение выражения с заданным шаблоном.
Символы-заменители,
используемые в шаблоне:
% – вместо этого символа может быть подставлено любое количество произвольных символов.
_ заменяет один символ строки.
[] – вместо символа строки будет подставлен один из возможных символов, указанный в этих ограничителях.
[^] – вместо соответствующего символа строки будут подставлены все символы, кроме указанных в ограничителях.
Слайд 424. Соответствие шаблону
Пример 6.
Телефон CHAR(10) NOT NULL
CHECK(Телефон LIKE '[1-9][0-9]-[0-9][0-9]-[0-9][0-9]')
Пример 7.
Город CHAR(15) NOT NULL
CHECK (Город LIKE 'M%‘)
первый символ "M", далее любое количество любых символов, например, Москва, Минск.
Слайд 435. Отсутствие значений (Значение NULL)
Допускается наличие неопределенных значений в
столбце.
Задается на уровне столбца.
Слайд 45Пример 7. Создание таблицы Сделка
CREATE TABLE Сделка
( КодСделки INT IDENTITY
(1,1) PRIMARY KEY,
КодТовара INT NOT NULL FOREIGN KEY
REFERENCES Товар,
КодКлиента INT NOT NULL FOREIGN KEY REFERENCES Клиент,
Количество INT NOT NULL DEFAULT 0 CHECK (Количество<200),
Дата DATETIME NOT NULL DEFAULT GETDATE(),
КодПроизводителя INT NOT NULL,
ОтметкаОбОплате CHAR (3) CHECK (ОтметкаОбОплате IN ('да', 'нет')),
CONSTRAINT fk_Производитель FOREIGN KEY (КодПроизводителя) REFERENCES Производитель)
Слайд 46Пример 8. Создание таблицы Клиент
CREATE TABLE Клиент
(КодКлиента INT IDENTITY(1,1)
PRIMARY KEY,
Фирма VARCHAR(50) NOT NULL,
Фамилия
VARCHAR(50) NOT NULL,
Адрес VARCHAR(50) NOT NULL,
Телефон CHAR(8) NOT NULL CHECK(Телефон LIKE '[1-9][0-9]-[0-9][0-9]-[0-9][0-9]'))
Слайд 48Изменение таблицы
Структура существующей таблицы может быть модифицирована с помощью
команды ALTER TABLE, упрощенный синтаксис которой представлен ниже:
ALTER TABLE имя_таблицы
{[ALTER
COLUMN имя_столбца {новый_тип_данных [ NULL | NOT NULL ]}]
| ADD { [имя_столбца тип_данных] | имя_столбца AS выражение } [,...n]|
DROP COLUMN {имя_столбца}[,...n] }
Слайд 49Изменение таблицы
Некоторые реализации могут ограничить разработчика в использовании некоторых
опций команды ALTER TABLE.
Например, может оказаться недопустимым удаление столбцов
из существующей таблицы. Чтобы добиться этого, сначала потребуется удалить саму таблицу и только потом заново ее построить с нужными столбцами. Причем уже внесенные в таблицу данные будут потеряны.
Слайд 50Изменение таблицы
Возможны трудности, связанные с удалением из таблицы столбца,
который зависит от некоторого столбца другой таблицы. В таком случае
сначала придется удалить ограничение столбца, а затем сам столбец.
Слайд 51Пример 9
Добавить в таблицу Клиент столбец ПаспДанные
ALTER TABLE Клиент
ADD ПаспДанные varchar (10)
2. Изменить тип столбца ПаспДанные
ALTER TABLE
Клиент ALTER COLUMN ПаспДанные int
3. Удалить из таблицы Клиент столбец ПаспДанные
ALTER TABLE Клиент DROP COLUMN ПаспДанные
Слайд 53DROP TABLE
С течением времени структура БД меняется: создаются новые
таблицы, а прежние становятся ненужными и удаляются из БД с
помощью оператора:
DROP TABLE имя_таблицы [RESTRICT | CASCADE]
Слайд 54RESTRICT
Если указано ключевое слово RESTRICT, то при наличии в БД
хотя бы одного объекта, существование которого зависит от удаляемой таблицы,
выполнение оператора DROP TABLE будет отменено.
Слайд 55CASCADE
Если указано ключевое слово CASCADE, автоматически удаляются и все прочие
объекты БД, чье существование зависит от удаляемой таблицы, а также
другие объекты, зависящие от удаляемых объектов.
Общий эффект от выполнения оператора DROP TABLE с ключевым словом CASCADE может оказаться весьма ощутимым, поэтому подобные операторы следует использовать с максимальной осторожностью.
Слайд 56DROP TABLE
Чаще всего оператор DROP TABLE используется для исправления
ошибок, допущенных при создании таблицы.
Если таблица была создана с
некорректной структурой, можно воспользоваться оператором DROP TABLE для ее удаления, после чего создать таблицу заново.
Слайд 57TRUNCATE TABLE
Команда DROP TABLE удалит не только указанную таблицу,
но и все входящие в нее строки данных.
Если требуется
удалить из таблицы лишь данные, сохранив структуру таблицы, следует воспользоваться командой
TRUNCATE TABLE имя_таблицы
Эта команда делает то же самое, что и DELETE FROM, но быстрее
Слайд 60Оператор добавления
INSERT INTO
Формат оператора:
INSERT INTO [ (имя_столбца
[,...n] ) ] VALUES (значение[,...n])
Эта форма оператора INSERT
с параметром VALUES предназначена для вставки единственной строки в указанную таблицу.
Слайд 61INSERT INTO
Список столбцов указывает столбцы, которым будут присвоены значения в
добавляемых записях.
Список может быть опущен. Тогда подразумеваются все столбцы
таблицы (кроме объявленных как счетчик), причем в порядке, установленном при создании таблицы.
Если в операторе INSERT указывается конкретный список имен полей, то любые пропущенные в нем столбцы должны быть объявлены при создании таблицы как допускающие значение NULL, за исключением тех случаев, когда при описании столбца использовался параметр DEFAULT.
Слайд 62Список значений должен соответствовать списку столбцов следующим образом:
количество элементов в
обоих списках должно быть одинаковым;
должно существовать прямое соответствие между
позицией одного и то же элемента в обоих списках. Поэтому I элемент списка значений должен относиться к I столбцу в списке столбцов, II – ко II столбцу и т.д.
типы данных элементов в списке значений должны быть совместимы с типами данных соответствующих столбцов таблицы.
Слайд 63Пример 10. Добавить в таблицу ТОВАР новую запись.
INSERT INTO Товар
(Название, Цена, Сорт, КодПроизводителя) VALUES(‘ Славянский’”, 12, высший,
1234)
Если столбцы таблицы ТОВАР указаны в полном составе и в том порядке, в котором они перечислены при создании таблицы ТОВАР, оператор можно упростить.
INSERT INTO Товар VALUES (‘Славянский ‘, 12, высший, 1234)
Слайд 65Оператор удаления
Формат оператора:
DELETE FROM [WHERE ]
Слайд 66Оператор удаления
Если предложение WHERE присутствует, удаляются записи из таблицы, удовлетворяющие
условию отбора.
Если опустить предложение WHERE, из таблицы будут удалены
все записи без предупреждения и без запроса на подтверждения, однако сама таблица сохранится.
Слайд 67Оператор удаления
При удалении строк с помощью DELETE эти строки сохраняются
в системных сегментах отката на случай восстановления. Это может потребовать
значительного времени. Поэтому лучше использовать TRUNCATE для удаления всех данных.
Слайд 68Пример 11. Удалить все прошлогодние сделки
DELETE FROM Сделка
WHERE Year(Сделка.Дата)=Year(GETDATE())-1
Слайд 70Оператор обновления
Формат оператора:
UPDATE имя_таблицы
SET имя_столбца = [,...n]
[WHERE ]
Слайд 71Оператор обновления
В предложении SET указываются имена одного и более столбцов,
данные в которых необходимо изменить.
Выражение представляет собой новое значение
соответствующего столбца и должно быть совместимо с ним по типу данных.
Слайд 72Пример 12. Увеличить цену товаров первого сорта на 25%.
UPDATE Товар
SET Цена= Цена*1.25
WHERE Сорт= ‘Первый’