
- •Лабораторная работа 2 Ограничения целостности в sql Oracle Содержание
- •1.Цели лабораторной работы
- •2.Теоретические основы
- •2.1.Синтаксис
- •2.2.Назначение
- •2.3.Предварительные требования
- •2.4.Ключевые фразы и параметры
- •3.Задание
- •4.Контрольные вопросы
- •5.Приложения
- •5.1.Приложение а. Условия в sql Oracle
5.Приложения
5.1.Приложение а. Условия в sql Oracle
Условие представляет собой комбинацию одного или более выражений и логических операторов, которые принимают значения TRUE, FALSE или UNKNOWN. Можнол использовать во всех тех местах предложений SQL, где имеется синтаксическая конструкция condition.
Условие используется во фразе WHERE следующих предложений:
DELETE
SELECT
UPDATE
Условие используется в следующих фразах предложения SELECT:
WHERE
START WITH
CONNECT BY
HAVING
Условие также используется во фразе CHECK предложения CREATE TABLE.
Говорят, что условие имеет «логический» тип данных, хотя Oracle явно не поддерживает такой тип данных.
Условие может иметь несколько синтаксических форм, которые приведены далее. Более полное описание синтаксических форм использования условия будет приведено в последующих лабораторных работах. Далее представляются общие синтаксические формы условия и их общая семантика.
condition::=
5.1.1.Простые условия сравнения
Простые условия сравнения позволяют сравнивать два выражения или выражение с результатом вычисления подзапроса.
simple_comparison_condition::=
Обратите внимание, что SQL Oracle позволяет сравнивать не только два выражения, но и два списка выражений. В этом случае правый список выражений получается в результате вычисления подзапроса.
5.1.2.Групповые условия сравнения
Групповые условия сравнения позволяют сравнивать выражение со ВСЕМИ или НЕКОТОРЫМИ значениями, представленными в списке или полученными в результате вычисления подзапроса.
group_comparison_condition::=
5.1.3.Условия проверки вхождения элемента во множество
Эти условия позволяют проверить входит ли то или иное значение, представленное выражением, во множество, представленное списком значений или полученное в результате вычисления подзапроса.
membership_condition::=
5.1.4.Условие проверки вхождения в интервал
Оно позволяет прверить, входит ли значение в интервал значений, представленный двумя крайними значениями интервала.
range_condition::=
5.1.5.Условие проверки на NULL
Позволяет проверить равно ли значение NULL.
NULL_condition::=
5.1.6.Условие проверки, является ли множество значений пустым (EXISTS)
Условие EXISTS позволяет проверить, содержит ли результат вычисления подзапроса строки.
EXISTS_condition::=
5.1.7.Условие LIKE
Условие LIKE позволяет сравнить два строковых выражения, когда второе из них задается в формате шаблона.
LIKE_condition::=
5.1.8.Составные условие
Они формируются в виде комбинации других условий с использованием логических операторов и скобок.
compound_condition::=
5.2.Приложение Б. Пример создания таблиц
CREATE TABLE FACULTY
(FacNo INTEGER CONSTRAINT fac_prk PRIMARY KEY,
Name VARCHAR2(50) CONSTRAINT fac_nnl_nam NOT NULL
CONSTRAINT fac_unq_nam UNIQUE,
Building CHAR(5),
Fund NUMBER(7,2) CONSTRAINT fac_chk_fnd CHECK (fund > 10000));
CREATE TABLE DEPARTMENT
(DepNo INTEGER CONSTRAINT dep_prk PRIMARY KEY,
Fund NUMBER(7,2) CONSTRAINT dep_chk_fnd CHECK (fund > 20000),
CONSTRAINT dep_unq_nmh UNIQUE (name, head));
CREATE TABLE TEACHER
(TchNo INTEGER CONSTRAINT tch_prk PRIMARY KEY,
Hiredate date CONSTRAINT tch_nnl_hdt NOT NULL
CONSTRAINT tch_chk_hdt CHECK (hiredate >= TO_DATE('01.01.1900', 'DD.MM.YYYY')),
CONSTRAINT tch_chk_sal_ink2 CHECK (salary + commission < 2000));
CREATE TABLE SGROUP
(GrpNo INTEGER CONSTRAINT grp_prk PRIMARY KEY,
DepNo INTEGER CONSTRAINT grp_frk REFERENCES DEPARTMENT(DepNo),
Rating NUMBER(3) DEFAULT 0 CONSTRAINT grp_chk_rat CHECK (rating BETWEEN 0 AND 100);
CREATE TABLE SUBJECT
(SbjNo INTEGER CONSTRAINT sbj_prk PRIMARY KEY,
Name VARCHAR2(50) CONSTRAINT sbj_nnl_nam NOT NULL);
CREATE TABLE LECTURE
(TchNo INTEGER CONSTRAINT lec_tch_frk REFERENCES TEACHER(TchNo),
CONSTRAINT lec_nnl_typ NOT NULL,
Week NUMBER(1) CONSTRAINT lec_chk_wek CHECK (week = 1 or week = 2)
CONSTRAINT lec_nnl_wek NOT NULL,
Lesson NUMBER(1) CONSTRAINT lec_chk_les CHECK (lesson BETWEEN 1 AND 8);