
- •Язык запросов sql
- •Введение в sql(0-0)
- •Аннотация к лекции
- •Краткая история развития sql
- •Возможности языка
- •Основы sql
- •Типы данных sql
- •Литералы
- •Операторы и выражения
- •Именование объектов
- •Комментарии
- •Итоги лекции
- •Простейшие запросы (0-0)
- •Аннотация к лекции
- •О предложении select
- •Основные фразы – select и from
- •Фраза select
- •Синтаксис фразы select
- •Указание выводимых столбцов
- •Исключение повторяющихся строк
- •Использование вычисляемых выражений
- •Переопределение имен результирующих столбцов
- •Включение литералов в результат запроса
- •Вывод результатов в файл
- •Фраза from
- •Синтаксис фразы from
- •Синонимы таблиц
- •Запрос в качестве имени таблицы
- •Итоги лекции
- •Отбор строк по условию (0-0)
- •Аннотация к лекции
- •Простейшие условия
- •Операторы сравнения
- •Логические операторы
- •Использование выражений над столбцами
- •Специальные операторы
- •Проверка на принадлежность множеству
- •Проверка на принадлежность диапазону значений
- •Проверка на соответствие шаблону
- •Проверка на неопределенное значение
- •Итоги лекции
- •Многотабличные запросы (0-0)
- •Аннотация к лекции
- •Декартово произведение таблиц
- •Условие соединения
- •Соединение таблиц по равенству
- •Соединение таблиц по неравенству
- •Самосоединение таблицы
- •Внешнее соединение таблиц
- •Соединение с использованием фразы from
- •Итоги лекции
- •Использование функций (0)
- •Аннотация к лекции
- •Агрегатные функции
- •Однострочныефункции
- •Строковые функции
- •Числовые функции
- •Временные функции
- •Функции преобразования
- •Итогилекции(урока)
- •Группировка и сортировка (0)
- •Аннотация к лекции
- •Запросы с группировкой строк
- •Понятие группировки строк
- •Группировка по одному столбцу
- •Группировка по нескольким столбцам
- •Использование выражений
- •Условиеотборагрупп
- •Сортировка строк
- •Сортировка по столбцу или выражению
- •Сортировка по нескольким столбцам или выражениям
- •Итоги лекции
- •Множественные операции над таблицами (0-0)
- •Аннотация к лекции
- •Множественные операции в стандарте sql
- •Объединение таблиц
- •Пересечение таблиц
- •Разность таблиц
- •Дополнительные аспекты использования множественных операций
- •Множественные операции и группировка
- •Множественные операции и сортировка
- •Итоги лекции
- •Определение таблиц и представлений (0-0)
- •Аннотация к лекции
- •Создание таблицы
- •Изменениетаблицы
- •Возможности изменения таблиц
- •Добавление столбца
- •Изменение определения столбца
- •Удаление столбца
- •Переименование таблицы
- •Удаление таблицы
- •Определение индексов
- •Представления
- •Итоги лекции
- •Манипулирование данными (0-0)
- •Аннотация к лекции
- •Добавление новых строк
- •Варианты добавления строк
- •Вставка отдельных строк
- •Использование запроса при вставке строк
- •Вставка значений по умолчанию
- •Обновление существующих данных
- •Удаление существующих строк
- •Импорт и экспорт данных
- •Итоги лекции
- •Определение ограничений целостности, ключей, задание прав доступа к данным (0-18)
- •Аннотация к лекции
- •Виды ограничений целостности
- •Ограничение на отсутствие значения
- •Ограничениеуникальности
- •Ограничение первичного ключа
- •Ограничение ссылочной целостности
- •Изменение ограничений целостности
- •Итоги лекции
- •Программирование бд (19)
Ограничение на отсутствие значения
Ограничение на отсутствие значения задается с помощью фразы NOT NULL и запрещает использовать в качестве значения столбца неопределенное значение, то есть специальное значение, которое использует СУБД для представления неизвестного или неприменимого значения.
Вспомним, что NULL — это специальное обозначение, которое отмечает значение столбца как отсутствующее. Если указать фразу NOT NULL сразу после типа данных столбца, любая попытка поместить значение NULL в этот столбец будет отклонена. Синтаксис ограничения такой:
имя_столбца тип_данных [CONSTRAINT имя_ограничения] NOT NULL
Если фразы NOT NULL в определении столбца нет, SQL предполагает, что значение NULL разрешено (вы можете указать это явно путем задания ограничения NULL).
Важно помнить, что для любого столбца с ограничением NOT NULL должно быть установлено значение в каждом предложении INSERT или UPDATE, применяемом к таблице.
При добавлении с помощью инструкции ALTER TABLE новых столбцов с ограничением NOT NULL к уже существующей таблице может возникнуть противоречие. Если к моменту добавления новых столбцов таблица не содержала строк, проблемы не будет. Но если строки уже существуют, какое значение должна поместить СУБД в создаваемые столбцы? Ведь они, в соответствии с ограничением NOT NULL, должны содержать значение в каждой строке. Одно из возможных решений – определить для таких столбцов значение по умолчанию.
СОВЕТ.Обратитесь к документации конкретной СУБД, чтобы выяснить предоставляемые возможности решения. Например, в Oracle запрещено добавлять к таблице столбцы с ограничением NOT NULL, если таблица уже имеет строки.
Еще одна проблема возникает при добавлении ограничения NOT NULL для уже существующего столбца (снова при помощи инструкции ALTER TABLE). Если в таблице уже имеются строки, этот столбец уже может содержать значения NULL и тогда устанавливаемое ограничение NOT NULL входит в противоречие с текущими данными
Приведем пример использования ограничения NOT NULL для столбцов таблицы DEPARTMENT:
CREATE TABLE DEPARTMENT
(DepPK INTEGER,
FacFK INTEGER NOT NULL.,
Name VARCHAR(30) CONSTRAINT dep_nnl_nam NOT NULL,
Head VARCHARC20));
В первом случае ограничение NOTNULLзадано без указания имени ограничения, во втором – с именем.
Ограничениеуникальности
Уникальность значения столбца – это ограничение, указывающее, что данный столбец (или группа столбцов) не может принимать одинаковых значений в пределах таблицы. В некоторых СУБД уникальность значений столбов поддерживается с помощью создания уникальных индексов, в других она задается независимо от объявления индекса (хотя для того чтобы поддерживать уникальность столбца, для него, как правило, автоматически создается индекс).
Столбец (совокупность столбцов), принимающий уникальные значения, часто называют уникальным ключом. Если уникальным является один столбец, он называется простым уникальным ключом, а если несколько –составным уникальным ключом.
Простой уникальный ключ может задаваться и как ограничение столбца, и как ограничение таблицы. Составной уникальный ключ задается только как ограничение таблицы. Для одной таблицы может быть определено несколько уникальных ключей.
Указание уникальности значений столбца имеет следующий синтаксис:
имя_столбца тип_данных [CONSTRAINT имя_ограничения] UNIQUE
В этом случае СУБД будет отклонять любую попытку ввода в этот столбец значения, которое уже существует в другой строке таблицы. Приведем пример определения уникальности как ограничения столбца:
CREATETABLEFACULTY
(FacPKINTEGER,
NameVARCHAROO)NOTNULL
CONSTRAINT fac_unq_nam UNIQUE,
Dean VARCHAR(20) CONSTRAINT fac_unq_den UNIQUE,
Building CHAR(5),
Fund NUMBER(7, 2));
Обратите внимание, что столбец Nameимеет два ограничения:NOTNULLиUNIQUE. При необходимости определения для столбца нескольких ограничений целостности они могут описываться в произвольном порядке.
Объявление группы столбцов как уникальной отличается от объявления уникальными одного или нескольких отдельных столбцов – для группы столбцов уникальной должна быть комбинация их значений, а не индивидуальные значения. Если определяется уникальность группы столбцов, каждый из столбцов этой группы уникальным может и не быть. Указание уникальности значений группы столбцов помещается после описания столбцов и имеет следующий синтаксис:
[CONSTRAINT имя_ограничения] UNIQUE (список_столбцов)
Рассмотрим следующий пример описания уникальности значения совокупности столбцов в таблице SGR0UP:
CREATE TABLE SGROUP
(GrpPK INTEGER,
DepFK INTEGER,
Num NUMBER(3) NOT NULL,
Year NUMBERC1) NOT NULL,
CONSTRAINT grp_unq_num_yar_dep UNIQUE (Num, Year, DepFK));
Заданное ограничение уникальности указывает, что на одной и той же кафедре (DepFK) не могут быть группы с одинаковыми номерами (Num) в пределах одного курса (Year), однако сами номера групп, курсов и факультетов в пределах таблицы могут повторяться. Более того, могут повторяться комбинации значений любых пар из этих трех столбцов.