;
Столбец будет добавлен со значением NULL для всех строк таблицы. Новый столбец станет последним по порядку столбцом таблицы. Вообще то, можно добавить сразу несколько новых столбцов, отделив их запятыми, в одной команде. Имеется возможность удалять или изменять столбцы. Наиболее часто, изменением столбца может быть просто увеличение его размера, или добавление (удаление) ограничения.
Удаление таблица:
Нужно быть создателем таблицы, чтобы иметь возможность удалить ее. Поэтому не волнуйтесь о случайном разрушении ваших данных, SQL сначала потребует чтобы вы очистили таблицу прежде, чем удалит ее из базы данных. Таблица с находящимися в ней строками, не может быть удалена. Синтаксис для удаления вашей таблицы, если конечно она является пустой, следующая:
DROP TABLE < table name >;
2.3 Выборка данных из таблицы
SELECT - оператор DML языка SQL, возвращающий набор данных (выборку) из базы данных, удовлетворяющих заданному условию. В большинстве случаев, выборка осуществляется из одной или нескольких таблиц. При формировании запроса SELECT пользователь описывает ожидаемый набор данных: его вид (набор столбцов) и его содержимое (критерий попадания записи в набор, группировка значений, порядок вывода записей и т. п.).
Запрос выполняется следующим образом:
сначала извлекаются все записи из таблицы, а затем для каждой записи набора проверяется её соответствие заданному критерию. Если осуществляется слияние из нескольких таблиц, то сначала составляется произведение таблиц, а уже затем из полученного набора отбираются требуемые записи.
Формат запроса с использованием данного оператора:
SELECT список полей FROM список таблиц WHERE условия…
{*[список полей]} FROM <список таблиц>
WHERE - используется для определения, какие строки должны быть выбраны или включены в GROUP BY.
GROUP BY - используется для объединения строк с общими значениями в элементы меньшего набора строк.
HAVING - используется для определения, какие строки после GROUP BY должны быть выбраны.
ORDER BY - используется для определения, какие столбцы используются для сортировки результирующего набора данных.
Один и тот же набор данных может быть получен при выполнении различных запросов. Поиск оптимального плана выполнения данного запроса является задачей оптимизатора.
2.4 Создание SQL-запросов.
Запрос– это средство выбора необходимой информации из базы данных. Вопрос, сформированный по отношению к базе данных, и есть запрос. SQL – запросы – это запросы, которые составляются (программистами) из последовательности SQL – инструкций. Эти инструкции задают, что надо сделать с входным набором данных для генерации выходного набора. Все запросы Access строит на основе SQL – запросов, чтобы посмотреть их, необходимо в активном окне проектирования запроса выполнить команду Вид/SQL.
Существует несколько типов запросов: на выборку(приведён выше), на обновление, на добавление, на удаление, перекрестный запрос, создание таблиц. Наиболее распространенным является запрос на выборку. Запросы на выборку используются для отбора нужной пользователю информации, содержащейся в таблицах. Они создаются только для связанных таблиц.
Для того чтобы создать запрос на языке SQL, для начала создаём пустой запрос в режиме конструктора. Для этого на вкладке Создание нужно выбрать пункт Конструктор запросов. Далее на вкладке Конструктор выберем пункт Режим и изменим режим построения запросов на Режим SQL.
Создание запроса в режиме SQL похоже на программирование, пользователю предстоит вручную набрать нужные команды. Запрос на выбор информации начинается словом SELECT. Далее нужно перечислить нужные поля таблицы, напечатаем наименование таблицы, поставим точку, а в квадратных скобках наберем имя поля из этой таблицы и т.д. Поля отделяются запятыми.
Запрос заканчивается служебным словом FROM, после которого указывается таблица, из которой была взята информация. В конце строки запроса должна стоять точка с запятой.
Для проверки правильности написания запроса выполним его. Для этого нажмем на кнопку Выполнить на панели Конструктор. Итог запроса будет отображен в таблице. Если запрос был записан неправильно, то будет получено сообщение об ошибке. В этом случае нужно в первую очередь проверить правильность написания наименований таблиц и полей.
2.5 Обработка данных в SQL:
Запросы могут производить обобщенную групповую обработку значений полей, что реализуется с помощью агрегатных функций. В SQL допускаются следующие агрегатные функции:
COUNT - производит подсчет количества строк или не-NULL значений полей, которые выбрал запрос;
SUM - рассчитывает арифметическую сумму всех выбранных значений данного поля;
AVG - производит усреднение всех выбранных значении данного поля;
МАХ - находит и возвращает наибольшее из всех выбранных значений
MIN - находит и возвращает наименьшее из всех выбранных значений данного поля.
Для упорядочения вывода полей таблиц SQL использует команду ORDER BY, позволяя сортировать вывод запроса согласно значениям в том количестве выбранных столбцов.
Для размещения нескольких запросов вместе и объединения вывода используют предложение UNION. Предложение UNION объединяет вывод двух или более SQL запросов в единый набор строк и столбцов. Команда UNION автоматически исключает дубликаты строк из вывода.
Компьютерные сети
Разновидность
языка, применяемая в конкретной СУБД,
называется диалектом
SQL
.
Например, диалект СУБДOracleназываетсяPL
/
SQL
;
вMSSQLServerиDB2 применяется диалектTransact
-
SQL
;
вInterbaseиFirebird–isql
. Каждый диалектSQLсовместим до определенной
степени со стандартомSQL,
но может иметь отличия и специфические
расширения языка, поэтому для выяснения
синтаксиса того или иногоSQL-оператора
следует в первую очередь смотретьHelp
конкретной СУБД.
Для операций над базами данных и таблицами в стандарте sql предусмотрены операторы:
Ниже
приводится синтаксис этих операторов
по стандарту SQL92. Поскольку
их синтаксис в СУБД может отличаться
от стандарта, при выполнении лабораторной
работы рекомендуется обращаться к
справочной системе СУБД.
Имена
объектов базы данных (таблиц, столбцов
и др.) могут состоять из буквенно-цифровых
символов и символа подчеркивания.
Специальные символы (@$# и т.п.) обычно
указывают на особый тип таблицы
(системная, временная и др.). Не рекомендуется
использовать в именах национальные
(русские) символы, пробелы и зарезервированные
слова, но если они всё же используются,
то такие имена следует писать в кавычках
".." или в квадратных скобках [..].
Далее
при описании конструкций операторов
SQLбудут использоваться
следующие обозначения: в квадратных
скобках записываются необязательные
части конструкции; альтернативные
конструкции разделяются вертикальной
чертой | ; фигурные скобки {} выделяют
логические блоки конструкции; многоточие…
указывает на то, что предшествующая
часть конструкции может многократно
повторяться. «Раскрываемые» конструкции
записываются в угловых скобках < >.
Создание базы
данных
CREATE
DATABASE
Имя_базы_данных
Удаление
одной и более баз данных
DROP
DATABASE
Имя_базы_данных
[,Имя_базы_данных
…]
Объявление текущей базы данных
USE
Имя_базы_данных
–-
в SQL
Server
и MySQL
SET
DATABASE Имя
_
базы
_
данных
–
в
Firebird
Создание
таблицы
CREATE
TABLE
Имя_таблицы
(
<описание_столбца>
[,
<описание_столбца>
|
<ограничение_целостности_таблицы>
…]
<
описание_столбца
>
Имя_столбца
ТИП
{NO
ACTION|CASCADE|SET DEFAULT|SET NULL}]
ТИП
столбца может быть либо стандартным
типом данных (см. таблицу 1), либо именем
домена (см. п.6.2).
Некоторые
СУБД позволяют создавать вычислимые
столбцы
(computed
columns
).
Это виртуальные столбцы, значение
которых не хранится в физической памяти,
а вычисляется сервером СУБД при всяком
обращении к этому столбцу по формуле,
заданной при объявлении этого столбца.
В формулу могут входить значения других
столбцов этой строки, константы,
встроенные функции и глобальные
переменные.
Описание
вычислимого столбца в SQL
Server
имеет вид:
<описание_столбца>
Имя_столбца
AS
выражение
Описание
вычислимого столбца в Firebird
имеет вид:
<описание_столбца>
Имя_столбца
COMPUTED
BY
<выражение>
СУБД MySQL
3.23 вычислимые столбцы не поддерживает.
<
>
CONSTRAINT
Имя_ограничения_целостности
{UNIQUE|PRIMARY
KEY}(список_столбцов_образующих_ключ
)
|FOREIGN
KEY (список
_
столбцов
_FK
)
REFERENCES
Имя_таблицы
(список_столбцов_
PK
)
{NO
ACTION|CASCADE|SET DEFAULT|SET NULL}]
{NO
ACTION|CASCADE|SET DEFAULT|SET NULL}]
|CHECK
(условие_проверки
)
Некоторые
СУБД допускают объявление врéменных
таблиц (существующих только во время
сеанса). В SQL
Server
имена временных таблиц должны начинаться
с символа # (локальные временные таблицы,
видимые только создавшему их пользователю)
или ## (глобальные таблицы, видимые всем
пользователям); в MySQL
для создания временных таблиц используется
ключевое слово TEMPORARY,
например:
CREATE
TEMPORARY
TABLE
…
(далее синтаксис см. CREATE
TABLE).
Изменение
структуры таблицы
Используется
для изменения типа столбцов существующих
таблиц, добавления и удаления столбцов
и ограничений целостности.
ALTER
TABLE
Имя_таблицы
Изменение типа столбца (в SQLServerиFirebird)
ALTER
COLUMN
Имя_столбца
новый_ТИП
Изменение типа, имени и ограничений
столбца (в MySQL)
CHANGE
COLUMN
Имя_столбца
<описание_столбца>
Добавление обычного или вычислимого
столбца
|ADD
<описание_столбца
>
Добавление ограничения целостности
|
ADD
<ограничение_целостности_таблицы
>
Удаление столбца
|DROP
COLUMN
Имя_столбца
Удаление ограничения целостности
|DROP
CONSTRAINT
Имя_ограничения_целостности
Включение или отключение проверки
ограничений целостности
ВMSSQLServer
|{CHECK|NO
CHECK}
CONSTRAINT
{Список_имен_ограничений_целостности
|ALL}
Удаление
таблицы
DROP
TABLE
Имя_таблицы
Далее рассмотрим,
как при создании новых таблиц командой
CREATETABLEили
изменении структуры существующих таблиц
командойALTERTABLEобъявить декларативные ограничения
целостности (подробнее они описаны в
п.4.2) .
1. Обязательное
наличие данных
(NULL–значения)
Объявляется
словом NULL(столбец может иметь пустые ячейки) илиNOT
NULL(столбец обязательный). По умолчанию
принимаетсяNULL.
Пример
создания таблицы 7:
CREATE
TABLE
Clients(
ClientName
NVARCHAR
(60)
NOT
NULL
,
DateOfBirth
DATE
NULL
,
Phone
CHAR
(12));
-- по умолчанию тоже NULL
2. Значение
по умолчанию
(DEFAULT)
Значение
по умолчанию можно задать для каждого
столбца таблицы. Если при модификации
ячейки ее новое значение не указано,
сервер вставляет значение по умолчанию.
Значение по умолчанию может быть NULL,
константой, вычислимым выражением или
системной функцией.
Рассмотрим
пример создания таблицы Orders
(Заказы). Столбец OrderDate
принимает по умолчанию значение текущей
даты, а столбец Quantity
(количество) по умолчанию равен 0.
CREATE
TABLE
Orders(
OrderNum INT
NOT
NULL
, --
номер
заказа
OrderDate DATETIME
NOT
NULL
-- дата
заказа
DEFAULT
GetDate(),
Функция
GetDate() возвращает
текущую
дату 8
Quantity SMALLINT
NOT
NULL
--
кол-во
товара, DEFAULT
0);
3. Объявление
первичных ключей
(PRIMARYKEY)
Простой
первичный ключ объявляется словами
PRIMARYKEYпри
создании таблицы. Например,
CREATE
TABLE
Staff(--
таблица "Работники"
TabNum INT
PRIMARY
KEY
, --
первичный ключ
WName NVARCHAR
(40)
NOT
NULL
,
-- ФИО
... --
описание прочих
столбцов
);
Составной
первичный ключ объявляется иначе:
--
способ 1
(объявление
PK
при создании таблицы)
CREATE
TABLE
Clients(
PasSeria
NUMERIC
(4,0)NOT
NULL
,--
серия
паспорта
PasNumber NUMERIC
(6,0)NOT
NULL
,--
номер
паспорта
Name NVARCHAR
(40)NOT
NULL
,
Phone CHAR
(12),
--
объявление
составного первичного ключа
CONSTRAINT
Clients_PK
PRIMARY
KEY
(PasSeria,PasNumber));
--
способ 2(PK
объявляется после создания таблицы)
--
сначала создаем таблицу без
PK
CREATE
TABLE
Clients(
PasSeria
NUMERIC
(4,0)NOT
NULL
,--серия
паспорта
PasNumber NUMERIC
(6,0)NOT
NULL
,--номер
паспорта
ClientName NVARCHAR
(40)NOT
NULL
,
Phone CHAR
(12));
--
модификация
таблицы
–
добавляем
РК
ALTER
TABLE
Clients
ADD
CONSTRAINT
Clients_PK
PRIMARY
KEY
(PasSeria,PasNumber);
4. Уникальность
столбцов
(UNIQUE)
Подобно
Primary
Key
указывает, что столбец или группа
столбцов не могут содержать повторяющихся
значений, но не являютсяPK
.
Все столбцы, объявленныеUNIQUE,
должны бытьNOTNULL.
Пример объявления простого уникального
столбца:
CREATE
TABLE
Students(
SCode INT
PRIMARY
KEY
,
-- суррогатный
РК
FIO NVARCHAR
(40)
NOT
NULL
,
-- ФИО
RecordBook
CHAR
(6)
NOT
NULL
UNIQUE
);
-- № зачетки
Пример объявления
составного уникального поля:
CREATE
TABLE
Staff(--
таблица
"
Работники
"
TabNum INT
PRIMARY KEY
, --
табельный
номер
WName NVARCHAR
(40)
NOT
NULL
, --
ФИО
PasSeria
NUMERIC
(4,0)
NOT
NULL
, --
серия
паспорта
PasNumber NUMERIC
(6,0)
NOT
NULL
, --
номер
паспорта
--
объявление
составного
уникального
поля
CONSTRAINT
Staff_UNQ UNIQUE
(PasSeria,PasNumber));
5.
Ограничения
на
значения
столбца
(CHECK)
Это
ограничение позволяет указать диапазон,
список или «маску» логически допустимых
значений столбца.
Пример
создания таблицы Workers
(Работники)
:
CREATE
TABLE
Workers(
--
табельные номера 4-значные
TabNum INT
PRIMARY KEY
CHECK
(TabNum
BETWEEN
1000 AND
9999),
Name VARCHAR
(60)
NOT
NULL
,
--
ФИО
сотрудника
--
пол
–
буква
"
м
"
или
"
ж
"
Gentry CHAR
(1)
NOT
NULL
CHECK
(Gentry IN
("м","ж")),
Возраст
не
менее
14 лет
Age SMALLINT
NOT
NULL
CHECK
(Age>=14),
--№
свидет-ва пенсионного страхования (по
маске)
PensionCert
CHAR
(14)
CHECK
(PensionSert LIKE
""));
В
этом примере показаны разные типы
проверок. Диапазон допустимых значений
указывается конструкцией BETWEEN…AND; обычные условия (как
для столбцаAge
)
используют знаки сравнений =, <>, >,
>=, <, <=, связанные при необходимости
логическими операциямиAND,OR,NOT(например,Age
>=14ANDAge
<=70); для указания
списка допустимых значений используется
предикатINи его отрицаниеNOTIN;
конструкция
LIKEмаска_допустимых_значений
EXCEPTсписок_исключений
используется для
задания маски допустимых значений
строковых столбцов. В маске применяются
два спецсимвола: «%» – произвольная
подстрока, и «_» – любой единичный
символ. Конструкция EXCEPTявляется необязательной.
В
условии отбора CHECKмогут
сравниваться значения двух столбцов
одной таблицы и столбцы разных таблиц.
Лекция
Создание БД с
помощью
SQL
.
Манипулирование
данными в
SQL
В
состав языка
SQL
входят
язык описания данных, позволяющий управлять таблицами, и язык манипулирования
данными, служащий для управления данными (слайд 2
).
17.1. Построение
баз данных с помощью
SQL
17.1.1.
Команда создания таблицы –
CREATE
TABLE
Создание таблицы выполняется при
помощи команды CREATE TABLE. Обобщенный синтаксис команды следующий (слайд 3
).
Т.е. после задания имени таблицы
через запятую в круглых скобках должны быть перечислены все предложения,
определяющие отдельные элементы таблицы – столбцы или ограничения целостности:
имя_таблицы – идентификатор создаваемой таблицы, который
в общем случае строится из имени базы данных, имени владельца таблицы и имени
самой таблицы.При этом комбинация имени
таблицы и ее владельца должна быть уникальной в пределах базы данных. Если
таблица создается не в текущей базе данных, в ее идентификатор необходимо
включить имя базы данных.
определение_столбца – задание имени, типа данных и
параметров отдельного столбца таблицы. Названия столбцов должны соответствовать
правилам для идентификаторов и быть уникальными в пределах таблицы.
определение_ограничения_таблицы – задание некоторого
ограничения целостности на уровне таблицы.
Описание
столбцов
Как
видно из синтаксиса команды CREATE TABLE, для каждого столбца указывается
предложение <определение_столбца>, с помощью которого и задаются свойства
столбца. Предложение имеет следующий синтаксис
(
слайд 3
)
:
Рассмотрим
назначение и использование параметров.
Имя_столбца – идентификатор, задающий имя столбца
таблицы.
тип_данных – задает тип данных столбца. Если при
определении столбца явно не указано ограничение на хранения значений NULL, то
будут использованы свойства типа данных, т.е. если выбранный тип данных
позволяет хранить значения NULL, то и в столбце можно будет хранить значения
NULL. Если же при определении столбца в команде CREATE ТАBLE явно будет
разрешено или запрещено хранение значений NULL, то свойства типа данных будут
перекрыты установленным на уровне столбца ограничением. Например, если тип
данных позволяет хранить значения NULL, а на уровне столбца будет установлен
запрет, то попытка вставки значения NULL в столбец закончится ошибкой.
ограничение_столбца – с помощью этого предложения указываются
ограничения, которые будут определены для столбца. Синтаксис предложения
следующий (слайд 4
):
Рассмотрим назначение параметров.
CONSTRAINT – необязательное ключевое слово, после
которого указывается название ограничения на значения столбца (имя_ограничения).
Имена ограничений должны быть уникальны в пределах базы данных.
DEFAULT – задает значение по умолчанию для столбца. Это
значение будет использовано при вставке строки, если для столбца явно не
указано никакое значение.
NULL|NOT NULL – ключевые слова, разрешающие (NULL) или
запрещающие (NOT NULL) хранение в столбце значений NULL. Если для столбца не
задано значение по умолчанию, то при вставке строки с неизвестным значением для
столбца будет предприниматься попытка вставки в столбец значения NULL. Если при
этом для столбца указано ограничение NOT NULL, то попытка вставки строки будет
отклонена, и пользователь получит соответствующее сообщение об ошибке.
PRIMARY KEY – определение первичного ключа на уровне
одного столбца (т.е. первичный ключ будет состоять только из значений одного
столбца). Если необходимо сформировать первичный ключ на базе двух и более
столбцов, то такое ограничение целостности должно быть задано на уровне
таблицы. При этом следует помнить, что для каждой таблицы может быть создан
только один первичный ключ.
UNIQUE – указание на создание для столбца ограничения
целостности UNIQUE, что позволит гарантировать уникальность каждого отдельного
значения в столбце в пределах этого столбца. В таблице может быть создано
несколько ограничений целостности UNIQUE.
FOREIGN KEY ... REFERENCES – указание на то, что столбец
будет служить внешним ключом для таблицы, имя которой задается с помощью
параметра <имя_главной_таблицы>.
(имя_столбца [,...,n]) – столбец или список
перечисленных через запятую столбцов главной таблицы, входящих в ограничение
FOREIGN KEY. При этом столбцы, входящие во внешний ключ, могут ссылаться только
на столбцы первичного ключа или столбцы с ограничением UNIQUE таблицы.
ON DELETE {CASCADE | NO ACTION} – эти ключевые слова определяют
действия, предпринимаемые при удалении строки из главной таблицы. Если указано
ключевое слово CASCADE, то при удалении строки из главной (родительской) таблицы
строка в зависимой таблице также будет удалена. При указании ключевого слова NO
ACTION в подобном случае будет выдана ошибка. Значением по умолчанию является
вариант NO ACTION.
ON UPDATE {CASCADE | NO ACTION} – эти ключевые слова
определяют действия, предпринимаемые при модификации строки главной таблицы.
Если указано ключевое слово CASCADE, то при модификации строки из главной
(родительской) таблицы строка в зависимой таблице также будет модифицирована.
При использовании ключевого слова NO ACTION в подобном случае будет выдана
ошибка. Значением по умолчанию является вариант NO ACTION.
CHECK – ограничение целостности, инициирующее контроль
вводимых в столбец (или столбцы) значений.
логическое_выражение – логическое выражение,
используемое для ограничения CHECK.
Ограничения
на уровне таблицы
Синтаксис
команды CREATE TABLE предусматривает использование предложения
<ограничение_таблицы>, с помощью которого определяются ограничения целостности
на уровне таблицы. Синтаксис предложения следующий (слайд 5
)
.
Назначение
параметров совпадает с назначением аналогичных параметров предложения
<ограничение_столбца
>
. Тем не менее, в предложении <ограничение_таблицы>
имеются некоторые новые параметры:
имя_колонки – столбец (или список столбцов), на которые
необходимо наложить какие-либо ограничения целостности.
– метод упорядочивания данных в индексе.
Индекс создается при указании ключевых слов PRIMARY KEY, UNIQUE. При указании
значения ASC данные в индексе будут упорядочены по возрастанию, при указании
значения DESC – по убыванию. По умолчанию используется значение ASC.
Примеры
создания таблиц
В качестве примера
рассмотрим инструкции создания таблиц базы данных «Сессия»:
Таблица «Студенты»
состоит из следующих столбцов:
ID_Студент – тип данных INTEGER, уникальный ключ;
Номер_группы - тип данных CHAR, длина 6;
слайд 6
).
Адрес
и Телефон,
наложены ограничения
NOT
NULL
Для создания
таблицы «Дисциплины» была использована команда (слайд 7
).
Таблица содержит 2 столбца (ID
_Дисциплина
, Наименование
).
На столбцы
ID
_Дисциплина
, Наименование
наложены ограничения
NOT
NULL
, запрещающие ввод строки при
неопределенном значении столбца.
Столбец
ID
_Дисциплина
объявлен первичным ключом, а на значения, вводимые в столбец
Наименование,
наложено условие уникальности.
Таблица «Учебный_план»
включает в себя следующие столбцы:
ID_Дисциплина – тип данных INTEGER;
Семестр - тип данных INTEGER;
Количество_часов - тип данных INTEGER;
Создание таблицы
выполнялось с помощью следующей команды (слайд 8
).
Для значений столбца Семестр
сформулировано логическое выражение,
разрешающее вводить только значения от 1 до 10.
Таблица
«Сводная_ведомость» состоит из следующих столбцов:
ID_Студент – тип данных INTEGER, столбец уникального
ключа;
ID_План – тип данных INTEGER, столбец уникального ключа;
Оценка - тип данных INTEGER;
Дата_сдачи - тип данных DATETIME;
ID_Преподаватель - тип данных INTEGER.
Создание таблицы
выполнялось с помощью следующей команды (слайд 9
).
На все столбцы таблицы наложены ограничения
NOT
NULL
, запрещающие ввод строки при
неопределенном значении столбца.
Для значений столбца Оценка
сформулировано логическое выражение,
разрешающее вводить только значения от 0 до 5: 0 – незачет, 1 – зачет, 2 –
неудовлетворительно, 3 – удовлетворительно, 4 – хорошо, 5 – отлично.
И, наконец, перечислим столбцы «Кадровый_состав»:
ID_Преподаватель – тип данных INTEGER, уникальный ключ;
Фамилия – тип данных CHAR, длина 30;
Имя - тип данных CHAR, длина 15;
Отчество - тип данных CHAR, длина 20;
Должность - тип данных CHAR, длина 20;
Кафедра - тип данных CHAR, длина 3;
Адрес - тип данных CHAR, длина 30;
Телефон - тип данных CHAR, длина 8.
Создание таблицы
выполнялось с помощью следующей команды (слайд 10
).
На все столбцы таблицы, кроме столбцов Адрес
и Телефон,
наложены ограничения
NOT
NULL
, запрещающие ввод строки при
неопределенном значении столбца.
Для таблиц «Учебный_план» и «Сводная_ведомость» должны быть построены внешние
ключи, связывающие таблицы базы данных «Сессия»:
FK_Дисциплина – внешний ключ, связывающий таблицы
«Учебный_план» и «Дисциплины» по столбцу ID_Дисциплина;
FK_Кадровый_состав – внешний ключ, связывающий таблицы
«Учебный_план» и «Кадровый_состав» по столбцу ID_Преподаватель;
FK_Студент – внешний ключ, связывающий таблицы
«Сводная_ведомость» и «Студенты» по столбцу ID_Студент;
FK_План – внешний ключ, связывающий таблицы
«Сводная_ведомость» и «Учебный_план» по столбцу ID
_План.
Добавление внешних ключей в таблицы рассмотрим далее при обсуждении возможностей
команды
ALTER
TABLE
.
17.1.2.
Изменение структуры таблицы – команда
ALTER
TABLE
Как бы тщательно ни
планировалась структура таблицы, иногда возникает необходимость внести в нее
некоторые изменения. Предположим, что в уже сформированную таблицу «Преподаватели»
необходимо добавить номер домашнего телефона и домашний адрес. Эту операцию
можно выполнять различными путями. Например, можно удалить таблицу со старой
структурой и создать вместо нее новую таблицу с нужной структурой. Недостатком
этого метода является то, что необходимо будет куда-то скопировать имеющиеся в
таблице данные и переписать их в новую таблицу после ее создания.
Специальная команда
ALTER
TABLE
предназначена для
модификации структуры таблицы. С ее помощью можно изменять свойства существующих
столбцов, удалять или добавлять в таблицу столбцы, а также управлять
ограничениями целостности как на уровне столбца, так и на уровне таблицы, т.е.
выполнять следующие функции:
Добавить в таблицу определение нового столбца;
Удалить столбец из таблицы;
Изменить значение по умолчанию для какого-либо столбца;
Добавить или удалить первичный ключ таблицы;
Добавить или удалить внешний ключ таблицы;
Добавить или удалить условие уникальности;
Добавить или удалить условие на значение.
Обобщенный
синтаксис команды
ALTER
TABLE
представлен на слайде (слайд 11
).
Команда
ALTER
TABLE
берет на себя все действия по копированию данных во временную
таблицу, удалению старой таблицы, созданию вместо нее новой таблицы с нужной
структурой и последующим переписыванием в нее данных.
Назначение многих
параметров и ключевых слов команды
ALTER
TABLE
аналогично назначению соответствующих параметров и ключевых
слов команды
CREATE
TABLE
(например, синтаксис конструкции
<определение_столбца> совпадает с синтаксисом аналогичной конструкции
команды
CREATE
TABLE
).
Основные режимы использования команды
ALTER
TABLE
следующие:
Добавление столбца;
Удаление столбца;
Модификация столбца;
Изменение, добавление и удаление ограничений (первичных
и внешних ключей, значений по умолчанию).
Добавление столбца
Для добавления
нового столбца следует использовать ключевое слово
ADD
, после которого должно стоять определение столбца.
Добавим, например,
в таблицу «Студенты» столбец «Год_поступления» (слайд 12
). После выполнения
этой команды в структуру таблицы «Студент» будет добавлен еще один столбец со
значением по умолчанию, равным текущему году (значение по умолчанию вычисляется
с помощью двух встроенных функций -
YEAR
() и
GETDATE
()).
Модификация столбца
Для модификации
существующего столбца таблицы служит ключевое слово
ALTER
COLUMN
. Изменение свойств
столбца невозможно, если:
столбец участвует в ограничениях PRIMARY KEY или FOREIGN
KEY;
на столбец наложены ограничения целостности CHECK или
UNIQUE (исключение составляют столбцы, имеющие тип данных переменной длины,
т.е. типы данных, начинающиеся на var);
если со столбцом связано значение по умолчанию (в этом
случае допускается изменение длины, общего количества цифр или количества цифр
после десятичной точки при неизменном типе данных).
Определяя для столбца новый тип
данных, следует помнить о том, что старый тип данных должен конвертироваться в
новый.
Пример модификации
столбца «Номер_группы» таблицы «Студенты» (тип данных
INTEGER
заменяется на
CHAR
) (слайд 12
).
Удаление столбца
Для удаления
столбца из таблицы используется предложение
DROP
COLUMN
<имя_столбца>. При удалении столбцов следует учитывать, что нельзя
удалять столбцы сограничениями
целостности
CHECK
,
FOREIGN
KEY
,
UNIQUE
или
PRIMARY
KEY
, а также столбцы, для которых определены значения по умолчанию
(в виде ограничения целостности на уровне столбца или на уровне таблицы).
Рассмотрим,
например, команду удаления из таблицы «Студент» столбца «Год_поступления» (слайд 12
).
Эта команда
выполнена не будет, т.т. при добавлении столбца было определено значение по
умолчанию.
Добавление
ограничений на уровне таблицы
Для добавления
ограничений на уровне таблицы используется предложение
ADD
CONSTRAINT
<имя_ограничения>.
В качестве примера
рассмотрим команды добавления внешних ключей в таблицы базы данных «Сессия» (слайд 13
):
·
добавление внешних ключей в таблицу «Учебный_план» (создание
связи с именем
FK
_Дисциплина и связи
с именем
FK
_
Кадровый_состав);
·
добавление внешних ключей в таблицу «Сводная_ведомость»
(создание связи с именем
FK
_Студент и связи с
именем
FK
_План).
С помощью
конструкции
ADD
CONSTRAINT
создается поименованное ограничение. Необходимо
отметить, что удаление любого ограничения на уровне таблицы происходит только
по его имени, поэтому ограничение должно быть поименовано (чтобы его можно было
удалить).
Удаление
ограничений
Для удаления из
таблицы ограничения целостности используется предложение
DROP
CONSTRAINT
<имя_ограничения>.
Удаление
ограничения целостности возможно только в том случае, когда оно поименовано
(т.е. предложение <определение_ограничения> содержит именование ограничения
CONSTRAINT
).
Команда удаления
построенного внешнего ключа
FK
_Дисциплина из
таблицы «Учебный_план» выглядит следующим образом (слайд 14
).
На слайде (слайд 14
) показано удаление
построенного ранее ограничения на значение по умолчанию
DEF
_Номер_группы.
17.1.3.
Удаление таблиц – команда
DROP
TABLE
Удаление
таблицы выполняется при помощи команды
DROP
TABLE
(слайд 14
).
Единственный
аргумент команды задает имя таблицы, которую необходимо удалить.
Операция
удаления таблицы в некоторых случаях требует определенного внимания. Невозможно
удалить таблицу, если на нее с помощью ограничения целостности
FOREIGN
KEY
ссылается другая
таблица: попытка удаления таблицы «Дисциплины» вызовет сообщение об ошибке,
т.к. на таблицу дисциплины ссылается таблица «Учебный_план».
17.2. Управление
данными
Целью любой системы управления базами
данных в конечном счете является ввод, изменение, удаление и выборка данных.
Рассмотрим методы управления данными с помощью языка SQL.
17.2.1. Извлечение данных – команда
SELECT
Основным инструментом выборки
данных в языке SQLявляется команда
SELECT
. С помощью этой команды можно
получить доступ к данным, представленным как совокупность таблиц практически
любой сложности.
Чаще всего
используется упрощенный вариант команды
SELECT
, имеющий следующий синтаксис (слайд 15
).
Инструкция
SELECT
разбивается на отдельные разделы, каждый из которых имеет
свое назначение. Из приведенного синтаксического описания видно, что
обязательными являются только разделы
SELECT
и
FROM
, а остальные разделы могут быть опущены. Полный список разделов
приведен на слайде (слайд
15
).
Раздел
SELECT
Основное назначение
раздела
SELECT
(одного из двух обязательных
разделов, которые должны указываться в любом запросе) - задание набора
столбцов, возвращаемых послевыполнения
запроса, т.е. внешнего вида результата. В простейшем случае возвращается
столбец одной из таблиц, участвующих в запросе. В более сложных ситуациях набор
значений в столбце формируется как результат вычисления выражения. Такие
столбцы называются вычисляемыми и по умолчанию им не присваивается никакого
имени.
При необходимости
пользователь может указать для столбца, возвращаемого после выполнения запроса,
произвольное имя. Такое имя называется псевдонимом (alias
). В обычной ситуации назначение псевдонима не обязательно, но в
некоторых случаях требуется явное его указание. Наиболее часто это требуется
при работе с разделом
INTO
, в котором каждый
из возвращаемых столбцов должен иметь имя, и это имя должно быть уникально.
Помимо сказанного,
с помощью раздела
SELECT
можно ограничить
количество строк, которое будет включено в результат выборки. Синтаксис раздела
SELECT
следующий (слайд 16
).
Рассмотрим назначение
параметров.
Ключевые слова
ALL
|
DISTINCT
.
При указании ключевого слова
ALL
в результат запроса выводятся все
строки, удовлетворяющие сформулированным условиям, тем самым разрешается
включение в результатодинаковых строк
(одинаковость строк определяется на уровне результата отбора, а не на уровне
исходных данных). Параметр
ALL
используется по умолчанию.
Если в запросе
SELECT
указывается ключевое слово
DISTINCT
, то в результат выборки не будет
включаться более одной повторяющейся строки. Таким образом, каждая возвращенная
строка будет уникальной. Уникальность строки при этом определяется на уровне
строк результата выборки, а не на уровне исходных данных. Если в результат
выборки включаются два столбца, уникальность будет определяться по значениям
обоих этих столбцов. В отдельности значения в первом и втором столбцах могут
повторяться, но комбинация значений в обоих столбцах должна быть уникальна.
Аналогичные правила действуют и в отношении большего количества столбцов.
Рассмотрим результат использования ключевых слов
ALL
и
DISTINCT
на примере выборки столбцов Семестр
и Отчетность из таблицы «Учебный_план» базы данных «Сессия» (слайд 17
).
Сначала выполним запрос с указанием ключевого слова
ALL
. Фрагмент результата представлен на
слайде. Теперь заменим ключевое слово
ALL
на
DISTINCT
. В этом случае результат запроса,
представленный на слайде - это строки, содержащие одинаковые значения в
столбцах, включенные только один раз. Этот результат должен свидетельствовать
только о наличии различных форм отчетности в семестрах.
Ключевое
слово
TOP n
.
Использование ключевого слова ТОР n, где n – числовое
значение, позволяет отобрать в результат не все строки, а только n первых. При
этом выбираются первые строки результата выборки, а не исходных данных. Поэтому
набор строк в результате выборки при указании ключевого слова ТОР может меняться
в зависимости от порядка сортировки. Если в запросе используется раздел
WHERE
, то ключевое слово ТОР работает с набором строк,
возвращенных после применения логического условия, определенного в разделе
WHERE
.
Продемонстрируем
использование ключевого слова ТОР (слайд
18
)
В этом примере из таблицы
Студенты
базы данных «Сессия» было выбрано 5 первых строк.
Можно также
выбирать не фиксированное количество строк, а определенный процент от всех
строк, удовлетворяющих условию. Для этого необходимо добавить ключевое слово
PERCENT
.
Всего в таблице
было 115 строк, следовательно, 10% будет составлять 11,5 строк. В результате
будут выданы 12 строк.
Если указанное количество процентов строк представляет собой нецелое
число, то сервер всегда выполняется округление в большую сторону.
Приведем также
пример, демонстрирующий влияние порядка сортировки на возвращаемый набор строк
(слайд
19
).
При указании вместе
с предложением
ORDER
BY
ключевого слова
WITH
TIES
в результат будут включены еще и строки, совпадающие по
значению колонки сортировки с последними выведенными строками запроса
SELECT
TOP
n
[
PERCENT
].
Использование
ключевого слова
WITH
TIES
в предыдущем примере позволит обеспечить выдачу в ответ на
запрос информации обо всех студентах первой по порядку группы (слайд
20
).
Предложение
<Список_выбора>.
Синтаксис предложения <Список_выбора>следующий
(слайд 21
).
Символ «*» означает
включение в результат всех столбцов, имеющихся в списке таблиц раздела
FROM
.
Если в результат не нужно включать
все столбцы всех
таблиц, то можно явно указать имя объекта, из которого
необходимо выбрать все столбцы (<Имя_таблицы>.* или <Псевдоним_таблицы>.*).
Отдельный столбец таблицы
в результат выборки включается явным указанием имени столбца (параметр
<Имя_столбца>). Столбец должен принадлежать одной из таблиц, указанных в
разделе FROM. Если столбец с указанным именем имеется более чем в одном источнике
данных, перечисленных в разделе FROM, то необходимо явно указать имя источника
данных, к которому принадлежит столбец в формате
<Имя_таблицы>.<Имя_столбца>.В противном случае будет выдано сообщение об ошибке.
Например, попробуем
выбрать данные из столбца ID_Дисциплина, который имеется в таблицах
«Дисциплина» и «Учебный_план»:
В ответ будет выдано
сообщение об ошибке, указывающее на некорректное использование имени‘ID_Дисциплина".
Т. е., в этом случае
необходимо явно указать имя источника данных, которому принадлежит столбец,
например:
Столбцам, возвращаемым
как результат выполнения запроса, могут быть присвоены псевдонимы. Псевдонимы
позволяют изменить имя исходного столбца или поименовать столбец, содержимое
которого получено как результат вычисления выражения. Имя псевдонима
указывается с помощью параметра <Псевдоним_столбца>. Ключевое слова AS
необязательно при задании псевдонима. В общем случае сервер не требует
уникальности имен столбцов результата выборки, поэтому разные столбцы могут
иметь одинаковые имена или псевдонимы.
Столбцы в результате
выборки могут быть не только копией столбца одной из исходных таблиц, но и
формироваться на основе вычисления выражения. Такой столбец в списке выбора
задается с помощью конструкции <Выражение> [
<Псевдоним_столбца>]. Выражение при этом может содержать константы, имена
столбцов, функции, а также их комбинации. Дополнительно столбцу, формируемому
на основе вычисления выражения, можно присвоить псевдоним, указав его с помощью
параметра <Псевдоним_столбца>. По умолчанию вычисляемый столбец не
имеет имени.
Другой способ
формирования вычисляемого столбца состоит в использовании конструкции со знаком
равенства: <Псевдоним_столбца> = <Выражение>. Единственным отличием
этого способа от предыдущего является необходимость обязательного задания
псевдонима. В простейшем случае выражение является именем столбца, константой,
переменной или функцией. Если в качестве выражения выступает имя столбца, то
получаем еще один способ задания псевдонима для столбца.
Рассмотрим следующий
пример. Пусть для таблицы «Студенты» необходимо построить запрос, представляющий
фамилию, имя и отчество в одной колонке. Используя операцию конкатенации
(сложения) символьных строк и значение ФИО в качестве псевдонима столбца,
построим запрос (слайд
22
).
Раздел
FROM
С помощью раздела
FROM
определяются источники данных, с которыми будет работать
запрос.
Синтаксис раздела
FROM
следующий (слайд
23
)
На первый взгляд
конструкция раздела выглядит простой. Однако при ближайшем рассмотрении он
оказывается довольно сложным. В основном работа с разделом
FROM
это перечисление через запятую источников данных, с
которыми должен работать запрос. Собственно источник данных указывается с
помощью предложения <Источник_данных>, синтаксис которого представлен на
слайде.
С помощью параметра
<имя_таблицы> указывается имя обычной таблицы. Параметр
<псевдоним_таблицы> используется для присвоения таблице псевдонима, под
которым на нее нужно будет ссылаться в запросе. Часто псевдонимы таблиц применяют,
чтобы ссылку на нужную таблицу сделать более удобной и короткой. Например, если
в запросе часто упоминается имя таблицы «Учебный_план», то можно воспользоваться
псевдонимом, например,
tpl
. Указание
ключевого слова
AS
не является при
этом обязательным.
Раздел
WHERE
Раздел
WHERE
предназначен для наложения вертикальных фильтров на данные,
обрабатываемые запросом. Другими словами, с помощью раздела
WHERE
можно сузить набор строк, включаемых в результат выборки.
Для этого указывается логическое условие, от которого зависит, будет ли строка
включена в выборку по запросу или нет. Строка включается в результат выборки,
только если логическое выражение возвращает значение
TRUE
.
В общем случае
логическое выражение содержит имена столбцов таблиц, с которыми работает
запрос. Для каждой строки, возвращенной запросом, вычисляется логическое выражение
путем подстановки вместо имен столбцов конкретных значений из соответствующей
строки. Если при вычислении выражения возвращается значение
TRUE
, то есть выражение истинно, то строка будет включена в
конечный результат. В противном случае строка в результат не включается. При
необходимости можно указать более одного логического выражения, объединив их с
помощью логических операторов
OR
и
AND
.
Рассмотрим
синтаксис раздела
WHERE
(слайд 24
).
В конструкции <условие_отбора>
можно определить любое логическое условие, при выполнении которого строка будет
включена в результат.
Приведенный на
слайде пример демонстрирует логику работы раздела
WHERE
. В результате будет возвращен список всех студентов, поступивших на
факультет ранее 2000 года.
Помимо операций сравнения (=, >, <, >=, <=) и логических
операторов
OR
,
AND
,
NOT
при формировании условия отбора могут быть использованы дополнительные
логические операторы, расширяющие возможности по управлению данными. Рассмотрим
некоторые из этих операторов.
Оператор
BETWEEN
.
С помощью этого оператора можно определить, лежит ли
значение указанной величины в заданном диапазоне. Синтаксис использования
оператора следующий (слайд 25
).
<Выражение>
задает проверяемую величину, а аргументы <начало_диапазона> и
<конец_диапазона> определяют возможные границы ее изменения.
Использование оператора
NOT
совместно с
оператором
BETWEEN
позволяет задать
диапазон, вне которого может изменяться проверяемая величина.
При выполнении
оператор
BETWEEN
преобразуется в
конструкцию из двух операций сравнения.
Рассмотрим пример
использования оператора
BETWEEN
(слайд 25
). В результате
выполнения инструкции получим список дисциплин учебного плана с количеством
часов от 50 до 100.
Оператор
IN
.
Оператор позволяет задать в условии отбора множество
возможных значений для проверяемой величины. Синтаксис использования оператора
следующий (слайд 26
).
<Выражение>
указывает проверяемую величину, а аргументы <выражение1>,…, <выражение
N
> задают перечислением через запятую набор значений,
которые может принимать проверяемая величина. Ключевое слово
NOT
выполняет логическое отрицание.
Рассмотрим пример
применения оператора
IN
(слайд 26
). В результате
выполнения инструкции получим строки учебного плана для дисциплин «Английский
язык» и «Физическая культура».
Оператор
LIKE
.
С помощью оператора
LIKE
можно выполнять сравнение выражения символьного типа с заданным
шаблоном. Синтаксис оператора следующий (слайд 27
).
<Образец>
задает символьный шаблон для сравнения и заключается в кавычки. Шаблон может
содержать символы-разделители. Допускается использование следующих символов-разделителей
(слайд 27
):
% -
может быть заменен в символьном выражении
любым количеством произвольных символов;
_ -
может быть заменен в символьном выражении любым, но
только одним символом;
[
ABC
0-9] -
может быть заменен в
символьном выражении только одним символом из указанного в квадратных скобках
набора (дефис используется для указания диапазона);
[^
ABC
0-9] -
может быть заменен
в символьном выражении только одним символом, кроме тех, что указаны в
квадратных скобках (дефис используется для указания диапазона).
Рассмотрим пример
использования оператора (слайд 27
).
Применение образца
для значения столбца Должность в данном случае позволило отобрать строки со
значениями «Ст.преп.» и «Проф»
Раздел
ORDER
BY
Раздел
ORDER
BY
предназначен для
упорядочения набора данных, возвращаемого после выполнения запроса. Полный
синтаксис раздела
ORDER
BY
следующий (слайд 28
).
Параметр
<условие_сортировки> требует задания выражения, в соответствии с которым
будет осуществляться сортировка строк. В простейшем случае это выражение
представляет собой имя столбца одного из источников данных запроса.
Следует отметить,
что в выражении, в соответствии с которым осуществляется сортировка строк,
могут использоваться и столбцы, не указанные в разделе SELECT, то есть не
входящие в результат выборки.
Раздел
ORDER
BY
разрешает
использование ключевых слов ASC и DESC, с помощью которых можно явно указать,
каким образом следует упорядочить строки. При указании ключевого слова ASC
данные будут отсортированы по возрастанию. Если необходимо отсортировать данные
по убыванию, указывается ключевое слово DESC. По умолчанию используется
сортировка по возрастанию.
Данные можно
отсортировать по нескольким столбцам. Для этого необходимо ввести имена
столбцов через запятую по порядку сортировки. Сначала данные сортируются по
столбцу, имя которого было указано первым в разделе
ORDER
BY
. Затем, если
имеется множество строк с одинаковыми значениями в первом столбце, выполняется
дополнительная сортировка этих строк по второму столбцу (внутри группы с
одинаковым значением в первом столбце) и т.д.
Приведем пример
сортировки по двум столбцам (слайд 28
).
Раздел
UNION
Раздел
UNION
служит для объединения результатов выборки, возвращаемых
двумя и более запросами.
Рассмотрим синтаксис
раздела
UNION
(слайд 29
).
Чтобы к результатам
запросов можно было применить операцию объединения, они должна соответствовать
следующим требованиям:
запросы должны возвращать одинаковый набор столбцов
(причем необходимо гарантировать одинаковый порядок следования столбцов в
каждом из запросов);
типы данных соответствующих столбцов второго и
последующих запросов должны поддерживать неявное преобразование или совпадать с
типом данных столбцов первого запроса;
ни один из результатов не может быть отсортирован с
помощью раздела ORDER BY (однако общий результат может быть отсортирован, как
будет показано ниже)
Указание
ключевого слова
ALL
предписывает
включать в результат повторяющиеся строки. По умолчанию повторяющиеся строки в
результат не включаются.
Продемонстрируем
применение раздела
UNION
. Рассмотрим
таблицы «Кадровый_Состав» и «Студенты» и попробуем построить, например, общий
список и учащихся, и преподавателей, номер телефона которых начинается на 120. Упорядочим
полученный список по алфавиту, добавив предложение
ORDER
BY
(слайд 29
).
При объединении таблиц столбцам итогового набора данных
всегда присваиваются те же имена, что были указаны в первом из объединяемых
запросов.