Управление данными
Лекция 7
Язык SQL
2
 SQL - универсальный компьютерный язык,
применяемый для создания, модификации и
управления данными в реляционных базах данных.
 Получил статус стандарта ANSI и ISO, поэтому
мейнстримовые СУБД обеспечили поддержку SQL.
 Универсальность использования в различных СУБД
как правило ограничена использованием
операторов определения данных и операторов
манипуляции данными в остальном SQL диалекты
различных СУБД могут отличаться.
 В настоящее время существуют системы,
поддерживаемые несколько СУБД.
Язык SQL
3
 SQL является прежде всего информационно-логическим
языком, предназначенным для описания, изменения и
извлечения данных, хранимых в реляционных базах
данных, а не языком программирования.
 Однако в каждой СУБД применяется свое расширение
языка (процедурный язык):
 Microsoft SQL Server использует Transact-SQL
 Oracle Database — PL/SQL
 Firebird — PSQL
 DB2 — SQL PL
Язык SQL
4
 Предложение SQL — это либо запрос данных из базы,
либо обращение к базе данных, которое приводит к
изменению данных в базе.
 В соответствии с тем, какие изменения происходят в базе
данных, различают следующие типы запросов:
 запросы на создание или изменение в базе данных
новых или существующих объектов (при этом в
запросе описывается тип и структура создаваемого
или изменяемого объекта);
 запросы на получение данных;
 запросы на добавление новых данных (записей);
 запросы на удаление данных;
 обращения к СУБД.
Состав SQL
5
 Data Definition Language (DDL – язык описания данных)
состоит из команд, создающих объекты БД: таблицы, поля,
первичные и вторичные ключи, индексы и т.д.
 Data Manipulation Language (DML – язык манипулирования
данными) состоит из команд, позволяющих изменять
информацию в БД – добавлять, удалять, изменять.
 Data Control Language (DCL – язык управления данными) –
команды, определяющие права доступа на получение и
модификацию информации в БД, проведение транзакций.
 Transaction Control Language (TCL – язык управления
транзакциями).
 Data Retrieval Language (DRL, DQL – язык получения данных)
– вывод данных.
DDL
6
 Запросы DDL предназначены для определения
структуры данных и позволяют создавать домены,
таблицы, индексы, представления, а также позволяют
обеспечить целостность данных посредством задания
ограничителей целостности.
 СREATE TABLE
 DROP TABLE
 ALTER TABLE
 CREATE INDEX
 DROP INDEX
 CREATE VIEW
 DROP VIEW
 RENAME
Типы данных SQL
7
 Двоичные
 binary[(n)] двоичные данные фиксированной длины размером
в n байт, где n — значение от 1 до 8000.
 varbinary [(n|max)] двоичные данные с переменной длиной.
 Символьные
 char[(n)] строковые данные фиксированной длины не в
Юникоде.
 varchar [(n|max)] строковые данные переменной длины не в
Юникоде.
 nchar[(n)], nvarchar [(n|max)] поддерживают Юникод.
Типы данных SQL
8
 Дата и время
 date предназначен для хранения даты
 time предназначен для хранения времени суток.
 datetime диапазон от 1 января 1753 года до 31 декабря 9999
 timestamp 4 байта, предназначенных для хранения даты и
времени суток в виде количества секунд, прошедших с 1
января 1970 года
 Точное представление чисел
 decimal [(p[, s])], numeric [(p[, s])] p - количество отводимых
под число символов (максимальное значение – 38, по
умолчанию 18), s - количество знаков после запятой (от 0 до p)
decimal (4,2) - будет хранить числа от -99,99 до 99,99
Типы данных SQL
9
 Приблизительные числа
 float[(n)] максимальная точность 7 разрядов для n не более 24
и 15 разрядов для n не более 53
 real равносилен float(24)
 Целочисленные
 bigint 8 байт
 int 4 байта
 smallint 2 байта
 smallint unsigned 2 байта, только положительные
 tinyint 1 байт
 tinyint unsigned 1 байт, только положительные
 Денежные типы
 money, smallmoney
Типы данных SQL
10
 Специальные
 bool
 bit[(n)]
 text, blob, Позволяют хранить большие объемы текста. Тип
TEXT используется для хранения именно текста. BLOB - для
хранения изображений, звука, электронных документов и т.д.
 enum ('value1', 'value2', ...,'valueN') Строки этого типа могут
принимать только одно из значений указанного множества.
ENUM (‘М', ‘Ж') типы, определяемые пользователем
Создание таблицы SQL
11
CREATE TABLE [database.]table_name
(
{col_name column_properties [constraint [constraint [...constraint]]]
| [[,] constraint]}
[[,] {next_col_name | next_constraint}...]
)
 Кроме обычных таблиц можно также создавать и
временные таблицы, такими таблицами являются те, чье
имя начинается с #(локальные временные таблицы) или
##(глобальные временные таблицы).
 Временные таблицы существуют только на время
клиентской сессии и после ее окончания автоматически
уничтожаются.
Создание таблицы SQL
12
column_properties = datatype [NULL | NOT NULL |
IDENTITY[(seed, increment)]]
 datatype определяет тип создаваемой колонки - как
системный, так и определяемый пользователем.
 NULL | NOT NULL определяет, допустимы ли для столбца
значения NULL.
 IDENTITY[(seed, increment)] Для колонки с таким
свойством сервером автоматически генерируется
возрастающая последовательность, старт = seed и шагом
= increment.
Constraint (ограничения)
13
 Может включать в себя ограничение как для столбца, так
и для всей таблицы.
 Всего на таблицу может быть:
 не более одного PRIMARY KEY,
 не более чем 249 UNIQUE,
 не более чем 31 FOREIGN KEY (каждый из которых
может ссылаться не более чем на 16 колонок),
 не более одного DEFAULT на колонку,
 неограниченное число CHECK.
 Все эти ограничения могут находиться в одном
операторе CREATE TABLE
PRIMARY KEY
14
[CONSTRAINT constraint_name]
PRIMARY KEY [CLUSTERED | NONCLUSTERED]
(col_name [, col_name2 [..., col_name16]])
 Определяет первичный ключ таблицы и тип индекса,
который будет для него построен.
 PK должен содержать уникальные значения
 PK не может быть иметь значение NULL
 Каждая таблица должна иметь PK и он должен быть один
 PK состоящий из одного столбца может быть объявлен в
контексте его объявления
UNIQUE
15
[CONSTRAINT constraint_name]
UNIQUE [CLUSTERED | NONCLUSTERED]
(col_name [, col_name2 [..., col_name16]])
 Определяет ограничение уникальности для колонки, и
указывает тип индекса, создаваемого для этого.
 Для UNIQUE и можно использовать поля, допускающие
значения типа NULL, но рекомендуется этого не делать.
 По умолчанию создается некластеризованный индекс.
FOREIGN KEY
16
[CONSTRAINT constraint_name]
[FOREIGN KEY (col_name [, col_name2 [...,
col_name16]])]
REFERENCES ref_table [(ref_col [, ref_col2
[..., ref_col16]])]
 Создает ограничение FOREIGN KEY для таблицы. Число
полей и их тип должны совпадать.
 FOREIGN KEY не может ссылаться на таблицу,
находящуюся в другой базе данных.
 Если список столбцов отсутствует – то будет принят PK
DEFAULT
17
[CONSTRAINT constraint_name]
DEFAULT {constant_expression | NULL}
[FOR col_name]
 Указывает значение, используемое по умолчанию.
 DEFAULT может использоваться для колонок любых
типов, кроме timestamp или тех, для которых указано
IDENTITY
CHECK
18
[CONSTRAINT constraint_name]
CHECK [NOT FOR REPLICATION] (expression)
 Задает условие проверки
 Указанное expression должно вычисляться в булево
выражение, и если оно принимает значение FALSE -
попытка добавления или изменения данных отвергается.
 При создании таблицы возможно указать только один
CHECK, в дальнейшем же их число можно увеличить.
Пример
19
 Создание таблицы FotballMatch содержащей результаты
футбольных матчей
 Указанное expression должно вычисляться в булево
выражение, и если оно принимает значение FALSE -
попытка добавления или изменения данных отвергается.
 При создании таблицы возможно указать только один
CHECK, в дальнейшем же их число можно увеличить.
Пример
20
Пример
21
 Объявление содержит:
 имя колонки
 тип значения
 специальные ограничения
Пример
22
 Объявление содержит:
 имя колонки
 тип значения
 специальные ограничения
Ограничения
23
 Ограничения столбца:
 Ограничения таблицы:
Пример
24
CREATE TABLE employee
(
emp_id empid
CONSTRAINT PK_emp_id PRIMARY KEY NONCLUSTERED
CONSTRAINT CK_emp_id CHECK (emp_id LIKE
'[А-Я][A-Я][A-Я][1-9][0-9][0-9][0-9][0-9][МЖ]' or
emp_id LIKE '[A-Я]-[A-Я][1-9][0-9][0-9][0-9][0-9][МЖ]'),
fname varchar(20) NOT NULL,
job_id smallint NOT NULL DEFAULT 1 REFERENCES
jobs(job_id),
job_lvl tinyint DEFAULT 10,
hire_date datetime NOT NULL DEFAULT (getdate())
)
Изменение таблиц
25
ALTER TABLE [database.]table_name
[WITH NOCHECK]
[ADD
{col_name column_properties column_constraints]
|[[,]table_constraint]}
[,{next_col_name|next_table_constraint}]...]
| DROP [CONSTRAINT]
constraint_name[,constraint_name]
 Позволят производить различные операции с таблицей
после ее создания
Пример
26
 Добавление PRIMARY KEY CONSTRAINT
ALTER TABLE authors
ADD
CONSTRAINT UPKCL_auidind PRIMARY KEY
CLUSTERED (au_id)
 Добавление FOREIGN KEY CONSTRAINT
ALTER TABLE titles
ADD
CONSTRAINT FK_pub_id FOREIGN KEY (pub_id)
REFERENCES publishers(pub_id)
Пример
27
 Добавление DEFAULT CONSTRAINT
ALTER TABLE authors ADD
DEFAULT 'UNKNOWN' FOR phone
 Добавление CHECK CONSTRAINT
ALTER TABLE authors ADD
CONSTRAINT CK_zip CHECK (zip LIKE '[0-9][0-9][0-9][0-
9][0-9]')
 Добавление новой колонки
ALTER TABLE publishers ADD
country varchar(30) NULL DEFAULT(‘Russia')
Удаление таблицы
28
DROP TABLE [[database.]owner.]table_name
[, [[database.]owner.]table_name...]
 Уничтожение таблицы.
 Невозможно уничтожить таблицу, на которую ссылаются
другие таблицы с помощью FOREIGN KEY
 Невозможно уничтожить системную таблицу.

Управление Данными. Лекция 7

  • 1.
  • 2.
    Язык SQL 2  SQL- универсальный компьютерный язык, применяемый для создания, модификации и управления данными в реляционных базах данных.  Получил статус стандарта ANSI и ISO, поэтому мейнстримовые СУБД обеспечили поддержку SQL.  Универсальность использования в различных СУБД как правило ограничена использованием операторов определения данных и операторов манипуляции данными в остальном SQL диалекты различных СУБД могут отличаться.  В настоящее время существуют системы, поддерживаемые несколько СУБД.
  • 3.
    Язык SQL 3  SQLявляется прежде всего информационно-логическим языком, предназначенным для описания, изменения и извлечения данных, хранимых в реляционных базах данных, а не языком программирования.  Однако в каждой СУБД применяется свое расширение языка (процедурный язык):  Microsoft SQL Server использует Transact-SQL  Oracle Database — PL/SQL  Firebird — PSQL  DB2 — SQL PL
  • 4.
    Язык SQL 4  ПредложениеSQL — это либо запрос данных из базы, либо обращение к базе данных, которое приводит к изменению данных в базе.  В соответствии с тем, какие изменения происходят в базе данных, различают следующие типы запросов:  запросы на создание или изменение в базе данных новых или существующих объектов (при этом в запросе описывается тип и структура создаваемого или изменяемого объекта);  запросы на получение данных;  запросы на добавление новых данных (записей);  запросы на удаление данных;  обращения к СУБД.
  • 5.
    Состав SQL 5  DataDefinition Language (DDL – язык описания данных) состоит из команд, создающих объекты БД: таблицы, поля, первичные и вторичные ключи, индексы и т.д.  Data Manipulation Language (DML – язык манипулирования данными) состоит из команд, позволяющих изменять информацию в БД – добавлять, удалять, изменять.  Data Control Language (DCL – язык управления данными) – команды, определяющие права доступа на получение и модификацию информации в БД, проведение транзакций.  Transaction Control Language (TCL – язык управления транзакциями).  Data Retrieval Language (DRL, DQL – язык получения данных) – вывод данных.
  • 6.
    DDL 6  Запросы DDLпредназначены для определения структуры данных и позволяют создавать домены, таблицы, индексы, представления, а также позволяют обеспечить целостность данных посредством задания ограничителей целостности.  СREATE TABLE  DROP TABLE  ALTER TABLE  CREATE INDEX  DROP INDEX  CREATE VIEW  DROP VIEW  RENAME
  • 7.
    Типы данных SQL 7 Двоичные  binary[(n)] двоичные данные фиксированной длины размером в n байт, где n — значение от 1 до 8000.  varbinary [(n|max)] двоичные данные с переменной длиной.  Символьные  char[(n)] строковые данные фиксированной длины не в Юникоде.  varchar [(n|max)] строковые данные переменной длины не в Юникоде.  nchar[(n)], nvarchar [(n|max)] поддерживают Юникод.
  • 8.
    Типы данных SQL 8 Дата и время  date предназначен для хранения даты  time предназначен для хранения времени суток.  datetime диапазон от 1 января 1753 года до 31 декабря 9999  timestamp 4 байта, предназначенных для хранения даты и времени суток в виде количества секунд, прошедших с 1 января 1970 года  Точное представление чисел  decimal [(p[, s])], numeric [(p[, s])] p - количество отводимых под число символов (максимальное значение – 38, по умолчанию 18), s - количество знаков после запятой (от 0 до p) decimal (4,2) - будет хранить числа от -99,99 до 99,99
  • 9.
    Типы данных SQL 9 Приблизительные числа  float[(n)] максимальная точность 7 разрядов для n не более 24 и 15 разрядов для n не более 53  real равносилен float(24)  Целочисленные  bigint 8 байт  int 4 байта  smallint 2 байта  smallint unsigned 2 байта, только положительные  tinyint 1 байт  tinyint unsigned 1 байт, только положительные  Денежные типы  money, smallmoney
  • 10.
    Типы данных SQL 10 Специальные  bool  bit[(n)]  text, blob, Позволяют хранить большие объемы текста. Тип TEXT используется для хранения именно текста. BLOB - для хранения изображений, звука, электронных документов и т.д.  enum ('value1', 'value2', ...,'valueN') Строки этого типа могут принимать только одно из значений указанного множества. ENUM (‘М', ‘Ж') типы, определяемые пользователем
  • 11.
    Создание таблицы SQL 11 CREATETABLE [database.]table_name ( {col_name column_properties [constraint [constraint [...constraint]]] | [[,] constraint]} [[,] {next_col_name | next_constraint}...] )  Кроме обычных таблиц можно также создавать и временные таблицы, такими таблицами являются те, чье имя начинается с #(локальные временные таблицы) или ##(глобальные временные таблицы).  Временные таблицы существуют только на время клиентской сессии и после ее окончания автоматически уничтожаются.
  • 12.
    Создание таблицы SQL 12 column_properties= datatype [NULL | NOT NULL | IDENTITY[(seed, increment)]]  datatype определяет тип создаваемой колонки - как системный, так и определяемый пользователем.  NULL | NOT NULL определяет, допустимы ли для столбца значения NULL.  IDENTITY[(seed, increment)] Для колонки с таким свойством сервером автоматически генерируется возрастающая последовательность, старт = seed и шагом = increment.
  • 13.
    Constraint (ограничения) 13  Можетвключать в себя ограничение как для столбца, так и для всей таблицы.  Всего на таблицу может быть:  не более одного PRIMARY KEY,  не более чем 249 UNIQUE,  не более чем 31 FOREIGN KEY (каждый из которых может ссылаться не более чем на 16 колонок),  не более одного DEFAULT на колонку,  неограниченное число CHECK.  Все эти ограничения могут находиться в одном операторе CREATE TABLE
  • 14.
    PRIMARY KEY 14 [CONSTRAINT constraint_name] PRIMARYKEY [CLUSTERED | NONCLUSTERED] (col_name [, col_name2 [..., col_name16]])  Определяет первичный ключ таблицы и тип индекса, который будет для него построен.  PK должен содержать уникальные значения  PK не может быть иметь значение NULL  Каждая таблица должна иметь PK и он должен быть один  PK состоящий из одного столбца может быть объявлен в контексте его объявления
  • 15.
    UNIQUE 15 [CONSTRAINT constraint_name] UNIQUE [CLUSTERED| NONCLUSTERED] (col_name [, col_name2 [..., col_name16]])  Определяет ограничение уникальности для колонки, и указывает тип индекса, создаваемого для этого.  Для UNIQUE и можно использовать поля, допускающие значения типа NULL, но рекомендуется этого не делать.  По умолчанию создается некластеризованный индекс.
  • 16.
    FOREIGN KEY 16 [CONSTRAINT constraint_name] [FOREIGNKEY (col_name [, col_name2 [..., col_name16]])] REFERENCES ref_table [(ref_col [, ref_col2 [..., ref_col16]])]  Создает ограничение FOREIGN KEY для таблицы. Число полей и их тип должны совпадать.  FOREIGN KEY не может ссылаться на таблицу, находящуюся в другой базе данных.  Если список столбцов отсутствует – то будет принят PK
  • 17.
    DEFAULT 17 [CONSTRAINT constraint_name] DEFAULT {constant_expression| NULL} [FOR col_name]  Указывает значение, используемое по умолчанию.  DEFAULT может использоваться для колонок любых типов, кроме timestamp или тех, для которых указано IDENTITY
  • 18.
    CHECK 18 [CONSTRAINT constraint_name] CHECK [NOTFOR REPLICATION] (expression)  Задает условие проверки  Указанное expression должно вычисляться в булево выражение, и если оно принимает значение FALSE - попытка добавления или изменения данных отвергается.  При создании таблицы возможно указать только один CHECK, в дальнейшем же их число можно увеличить.
  • 19.
    Пример 19  Создание таблицыFotballMatch содержащей результаты футбольных матчей  Указанное expression должно вычисляться в булево выражение, и если оно принимает значение FALSE - попытка добавления или изменения данных отвергается.  При создании таблицы возможно указать только один CHECK, в дальнейшем же их число можно увеличить.
  • 20.
  • 21.
    Пример 21  Объявление содержит: имя колонки  тип значения  специальные ограничения
  • 22.
    Пример 22  Объявление содержит: имя колонки  тип значения  специальные ограничения
  • 23.
  • 24.
    Пример 24 CREATE TABLE employee ( emp_idempid CONSTRAINT PK_emp_id PRIMARY KEY NONCLUSTERED CONSTRAINT CK_emp_id CHECK (emp_id LIKE '[А-Я][A-Я][A-Я][1-9][0-9][0-9][0-9][0-9][МЖ]' or emp_id LIKE '[A-Я]-[A-Я][1-9][0-9][0-9][0-9][0-9][МЖ]'), fname varchar(20) NOT NULL, job_id smallint NOT NULL DEFAULT 1 REFERENCES jobs(job_id), job_lvl tinyint DEFAULT 10, hire_date datetime NOT NULL DEFAULT (getdate()) )
  • 25.
    Изменение таблиц 25 ALTER TABLE[database.]table_name [WITH NOCHECK] [ADD {col_name column_properties column_constraints] |[[,]table_constraint]} [,{next_col_name|next_table_constraint}]...] | DROP [CONSTRAINT] constraint_name[,constraint_name]  Позволят производить различные операции с таблицей после ее создания
  • 26.
    Пример 26  Добавление PRIMARYKEY CONSTRAINT ALTER TABLE authors ADD CONSTRAINT UPKCL_auidind PRIMARY KEY CLUSTERED (au_id)  Добавление FOREIGN KEY CONSTRAINT ALTER TABLE titles ADD CONSTRAINT FK_pub_id FOREIGN KEY (pub_id) REFERENCES publishers(pub_id)
  • 27.
    Пример 27  Добавление DEFAULTCONSTRAINT ALTER TABLE authors ADD DEFAULT 'UNKNOWN' FOR phone  Добавление CHECK CONSTRAINT ALTER TABLE authors ADD CONSTRAINT CK_zip CHECK (zip LIKE '[0-9][0-9][0-9][0- 9][0-9]')  Добавление новой колонки ALTER TABLE publishers ADD country varchar(30) NULL DEFAULT(‘Russia')
  • 28.
    Удаление таблицы 28 DROP TABLE[[database.]owner.]table_name [, [[database.]owner.]table_name...]  Уничтожение таблицы.  Невозможно уничтожить таблицу, на которую ссылаются другие таблицы с помощью FOREIGN KEY  Невозможно уничтожить системную таблицу.