ALTER TABLE Студент ADD COLUMN ФИО VARCHAR(50) NOT NULL Такой альтер тейбл мы не сможем применить, т.к. значения ФИО будут пустыми в таблице, что запрещено в определении колонки.


Чтобы посмотреть этот PDF файл с форматированием и разметкой, скачайте его и откройте на своем компьютере.
Лекция 8

Язык

SQL
.

Язык

SQL

(
Structured Query Language
)
состоит

из

3
-
х

частей.

На самом деле в
SQL

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

1.

DDL (
Data

Definition

Language
)


язык

описания

данных

операторы:

CREATE

TABLE

(
создание таблицы
)

DROP

TABLE

(удаление таблицы)

ALTER

TABLE

(изменение структуры таблицы)

CREATE

VIEW

(создание представления данных)

DROP

VIEW

(
удале
ние представления данных)

CREATE

INDEX

(
создание индекса
)

DROP

INDEX

(
удале
ние

индекса
)

CREATE

TRIGGER (
создать триггер
)

DROP

TRIGGER

(
удалить триггер
)


2.

DML

(
Data

Manipulation

Language
)


язык манипулирования (управления) данными

операторы:

INSERT

(
добавление строк
)


(удаление строк)

UPDATE (
изменение содержимого строк
)


3.

DQL (
Data Query Language
)


язык запроса данных

оператор:

SELECT
(
запрос на выборку
)

Создание таблиц
.

Если у нас есть база данных и мы хотим сохранить в ней данные͕ то без создания таблицы у нас
ничего не получится͕ потому что все данные в
реляционных

базах хранятся в таблицах.

Синтаксис оператора
CREATE

TABLE

следующий:

CREATE

TABLE

T1 (A, B, C)

в общем с
лучае это будет выглядеть:

CREATE

TABLE

Имя таблицы

(

Колонка 1͕

Колонка 2͕

͙͙͙͙͙

Ограничение 1͕

Ограничение 2͕

͙͙͙͙͙

)

SQL

не чувствителен к регистру
:


можно маленькими буквами͕ можно большими͕ но
,

как правило͕
чтобы отличать ключевые слова языка
SQL

от вами придуманных͕ выделяют заглавными буквами
операторы и ключевые слова.

Давайте посмотрим
,

как описывать колонки. Для каждой колонки через пробел необходимо
задать тип данных. Давайте рассмотрим типы данных͕ которые описаны в стандарте
SQL
. Опять
же͕

как и с большинством аспектов связанных с
SQL
͕ различные вендоры͕ т.е. производители
СУБД
,

довольно сильно отходят от стандартов в плане типов.
И если Вы создаете систему одной
СУБД͕ не факт͕ ч
то она подойдёт для другой СУБД.

Мы попытаемся рассмотреть ст
андартные типы͕ которые описаны стандартной
SQL
92.

CHAR

(
n
)


текстовые данные фиксированной длины
n
.

Опять же длина их это предмет для исследования в каждой конкретной СУБД͕ максимальная
длина.

VARCHAR

(
n
)


текстовые данные переменной длины
n
͕ где
n



ма
ксимальная длинна.

В чём принципиальная разница между
CHAR

и
VARCHAR
?
Если
у нас есть колонка типа
CHAR

(
10
)
,
т.е. текстовая строка
фиксированной длины͕ длиной

10 символов

и мы записываем в неё строку
«ПРИВЕТ»͕ в строке «ПРИВЕТ» 6 символов͕ что получается в результате?


Кстати
,

строковые
константы в
SQL

заключаются либо в двойные͕ либо в одинарные кавычки.

‘ПРИВЕТ


͕ потому что текстовые типы данных
CHAR

всегда будут име
ть фиксированную длину͕
соответственно при печати пробелы не отображаются и вам кажется͕ что всё в порядке͕ трудности
возникают͕ если вам придётся сравнить значения типа
CHAR

и типа

VARCHAR
,
потому что

VARCHAR

будет хранить

«ПРИВЕТ» как просто
‘ПРИВЕТ’
.
Ка
к Вы сами понимаете

строка
‘ПРИВЕТ



и

строка

‘ПРИВЕТ’

это две разных строки

и их сравнение даст
FALS
E
,

они не равны.

Числовые типы данных:

INTEGER



целочисленный тип данных

INT



целочисленный тип данных
,
то же͕ что и предыдущее
. 4 байта͕ как правило.

SMALLINT



меньшей разрядности. 2 байта͕ как правило.

DECIM
AL

(
m
,
n
)


с фиксированной точкой.
M



количество десятичных разрядов͕

n



после
запятой.

NUMERIC
(
m
,
n
)


тоже самое͕ что и предыдущее.

MONEY

-

денежный тип.

FLOAT



с плавающей точкой.

REAL



как

float
͕ но меньшей разрядности.


BIT
(
n
)



битовая строка. 1 бит


логическое значение.

DATE



дата.

TIME



время.




дата и время.

BINARY



двоичные данные.

Вот одни из нескольких типов͕ на самом деле их намного больше.

Виды ограничений:

PRIMARY

KEY



первичный ключ.

NOT

NULL

-

не может не содержать значений (обязательная колонка).

UNIQUE



альтернативный ключ.

REFERENCES

имя_таблицы(имя колонки)


внешний ключ.

CHECK
(
условие
)



проверка условия.

DEFAULT



выражение по умолчанию.

Ограничение может быть указано как после каждой колонки͕ так и после всех колонок
,

в списке
ограничений.

CREATE TABLE T1 (


A INT PRIMARY KEY,


B INT UNIQUE,


C INT REFERENCES T2(x),


D INT CHECK (D�0)

);


CREATE TABLE T1 (


A INT,


B INT,


C INT,


D INT,


PRIMARY KEY (A),


UNIQUE (B),


FOREIGN KEY (C) REFERENCES T2(X),


CHECK (D�0)

);


CREATE TABLE
Группа

(


НомерГр

VARCHAR(6)

PRIMARY KEY,


Кафедра

SMALLINT NOT NULL CHECK
(
Кафедра

BETWEEN 1 AND 99)

);


На поле
PRIMARY

KEY

автоматически накладывается ограничение
NOT

NULL
.

CREATE TABLE
Студент

(


НомерЗач

INTEGER PRIMARY KEY,


НомерПасп

INTEGER UNIQUE

NOT NULL,


Группа

VARCHAR(6) REFERENCES
Группа
(
НомерГр
),


Стипендия

MONEY NOT NULL DEFAULT 0);

Вы не сможете выполнить второй

раз создание таблицы͕ если она существует. Если таблицу
необходимо пересоздать͕ то сначала её необходимо «дропнуть».

DROP

TABLE

Группа
;

DROP

TABLE

Студент
;


Данный оператор выдаст ошибку͕ если таблицы не существует. Допустим͕ мы создаём две
предыдущие таб
лицы автоматически скриптом. Одна таблица создалась͕ но в синтаксисе второй
была ошибка и она не создалась. В таком случае предыдущая группа операторов дроп не
выполнится͕ т.к. одна из таблиц не существует. В таком случае можно использовать конструкцию


D
ROP

TABLE

IF

EXISTS

Группа
;

DROP TABLE
IF EXISTS
Студент
;


Заполнение таблицы данными.

INSERT
.

PRAGMA

FOREIGN
_
KEYS
=1;
Только

для

SQLITE
.
Включает внешние ключи͕ т.к. они выключены по
умолчанию.


На данный момент мы не можем добавить в таблицу студент
строку͕ т.к. присутствует внешний
ключ со ссылкой на таблицу группа͕ где нет записей.


INSERT INTO
Группа

VALUES(
кортеж
�);

INSERT

INTO

Группа

VALUES
(‘4942’͕44)͖
Одно из значений в кавычках͕ т.к. тип
VARCHAR
.


INSERT

INTO

Студент

(
НомерЗач͕НомерПас͕Группа)
VALUES

(123,456,

4942

)
;


Таблицу можно заполнить и таким образом:

INSERT INTO
Имя
_
Таблицы

SELECT ͙.

Если данных одинаковое количество и типы совпадают͕ то данные из выборки попадут в
INSERT
.


DELETE
.


FROM

Судент
;
Удалит
все строки͕ но оставит таблицу.


FEOM

Студент

WHERE

Группа=’4942’
AND

Стипендия = 0
;


UPDATE.

UPDATE
Имя
_
таблицы

SET Column1=value1͕Column1=value2͙

[
WHERE

условие
];


Увеличить стипендию всем студентам 4942 на 100 рублей.

UPDATE

Студент

SET

Стипендия

=
Стипендия + 100

WHERE

Группа=

4942
’͖


ALTER TABLE.

ALTER TABLE (
Изменение

Таблицы
).


ALTER

TABLE

Студент

ADD

COLUMN

ФИО

VARCHAR
(50)
NOT

NULL
;

Такой альтер тейбл мы не сможем применить͕ т.к. значения ФИО будут пустыми в таблице͕ что
запрещено в
определении колонки.


ALTER TABLE

Студент

ALTER COLUMN
НомерЗач

VARCHAR(10) PRIMARY KEY;

ALTER TABLE

Студент

DROP COLUMN

НомерПасп
;



Приложенные файлы

  • pdf 7066474
    Размер файла: 487 kB Загрузок: 0

Добавить комментарий