Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SQL в примерах.doc
Скачиваний:
8
Добавлен:
19.08.2019
Размер:
138.75 Кб
Скачать

SQL

Создание таблиц: CREATE TABLE <имя таблицы> (<имя столбца> <тип данных> [(<размер>)]);

Типы данных:

  • CHAR [длина] (CHARACTER) – символьная строка фиксированной длины,

  • VARCHAR (длина) - символьная строка переменной длины,

  • INT (INTEGER) – целые в диапазоне -231 до +231,

  • SMALLINT – целые в диапазоне -215 до +215,

  • DEC (точность[, масштаб]) (DECIMAL) – десятичное число с фиксированной точкой, точность определяет количество значащих цифр в числе,

  • NUMERIC (точность[, масштаб]) – тоже самое

  • FLOAT [(точность)] – число с плавающей точкой и указанной минимальной точностью,

  • REAL – вещественное число с точностью по умолчанию,

  • DOUBLE PRECISION – число аналогично REAL, но точность в два раза выше точности REAL,

  • DATE – для представления даты и времени.

Замечание. Для типа CHAR обязательно указание длины.

Пример. Создать таблицу СТУДЕНТ:

CREATE TABLE STUDENT

( STUDENT_ID INTEGER,

SURNAME VARCHAR(60),

NAME VARCHAR(60),

STIPEND DOUBLE,

KURS INTEGER,

CITY VARCHAR(60),

BIRTHDAY DATE,

UNIV_ID INTEGER);

Создание индекса: CREATE INDEX <имя индекса> ON <имя таблицы>

(<имя столбца>[,< имя столбца >]);

Пример. Для таблицы EXAM_MARKS создать индекс по полю STUDENT_ID

CREATE INDEX STUDENT_ID ON EXAM_MARKS (STUDENT_ID);

Удаление индекса: DROP INDEX < имя индекса >;

Изменение существующей таблицы

Добавление: ALTER TABLE <имя таблицы> ADD (<имя столбца> <тип данных> <размер>);

Модификация: ALTER TABLE <имя таблицы>

MODIFY <имя столбца> <тип данных> <размер/точность>;

Замечание.

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

  • для незаполненного столбца можно изменять размер/точность, для заполненного столбца размер/точность можно увеличить, но нельзя понизить;

  • ограничение NOT NULL может быть установлено, если ни одно значение в столбце не содержит NULL (опцию NOT NULL всегда можно отменить);

  • разрешается изменять значения, установленные по умолчанию.

Удаление таблицы: DROP TABLE <имя таблицы>;

Замечание. Перед удалением таблица должна быть пуста.

Задание 1.

  1. Создать таблицы по образцу.

  2. Написать команду, которая позволит быстро выбрать данные о студентах по курсам, на которых они учатся.

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

Ограничение на множество допустимых значений

Ограничение NOT NULL

Пример. Создать таблицу СТУДЕНТ, запретив значение NULL-значений для столбцов STUDENT_ID, SURNAME, NAME:

CREATE TABLE STUDENT

( STUDENT_ID INTEGER NOT NULL,

SURNAME VARCHAR(60) NOT NULL,

NAME VARCHAR(60) NOT NULL,

STIPEND DOUBLE,

KURS INTEGER,

CITY VARCHAR(60),

BIRTHDAY DATE,

UNIV_ID INTEGER);

Уникальность как ограничение на столбец

Пример. Объявить поле STUDENT_ID уникальным:

CREATE TABLE STUDENT

( STUDENT_ID INTEGER NOT NULL UNIQUE,

SURNAME VARCHAR(60) NOT NULL,

NAME VARCHAR(60) NOT NULL,

STIPEND DOUBLE,

KURS INTEGER,

CITY VARCHAR(60),

BIRTHDAY DATE,

UNIV_ID INTEGER);

Уникальность как ограничение таблицы

Пример. Создать таблицу EXAM_MARKS с учетом того, что не допускается, чтобы студент сдавал в один день больше одного экзамена. Для этого объявляется уникальной комбинация значений полей STUDENT_ID и EXAM_DATE.

CREATE TABLE EXAM_MARKS

( EXAM_ID INTEGER NOT NULL,

STUDENT_ID INTEGER NOT NULL,

SUBJ_ID INTEGER NOT NULL,

MARK CHAR(1),

EXAM_DATE DATE NOT NULL,

UNIQUE (STUDENT_ID, EXAM_DATE));

Присвоение имен ограничениям

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

Пример. Присвоить имя STUD_ SUBJ_CONSTR ограничению в предыдущем примере:

CREATE TABLE EXAM_MARKS

( EXAM_ID INTEGER NOT NULL,

STUDENT_ID INTEGER NOT NULL,

SUBJ_ID INTEGER NOT NULL,

MARK CHAR(1),

EXAM_DATE DATE NOT NULL,

CONSTRAINT STUD_ SUBJ_CONSTR

UNIQUE (STUDENT_ID, EXAM_DATE));