Базы данных Лекция 06 Основы SQL
1. Связи между таблицами БД Разновидности связи между таблицами БД: Один–ко–многим – одной записи родительской таблицы может соответствовать несколько записей дочерней Один–к–одному – одной записи в родительской таблице соответствует одна запись в дочерней Многие–ко–многим – применяется в следующих случаях: –Одной записи в родительской таблице соответствует более одной записи в дочерней –Одной записи в дочерней таблице соответствует более одной записи в родительской 2
2. Стандарт и реализация языка SQL Язык SQL (Structured Query Language) – стандартный язык реляционных БД Стандарт на язык SQL был выпущен: ANSI в 1986 г. ISO в 1987 г. 3 Год Назва- ние Иное название Изменения 1986SQL-86SQL-87 Первый вариант стандарта, принятый институтом ANSI и одобренный ISO в 1987 году. 1989SQL-89FIPS 127-1Немного доработанный вариант предыдущего стандарта. 1992SQL-92 SQL2, FIPS Значительные изменения (ISO 9075); уровень Entry Level стандарта SQL-92 был принят как стандарт FIPS SQL:1999SQL3 Триггеры, базовые процедурные расширения, не скалярные типы данных и некоторые объектно-ориентированные возможности. 2003SQL:2003 Введены расширения для работы с XML-данными, оконные функции (применяемые для работы с OLAP-базами данных), генераторы последовательностей и основанные на них типы данных. 2006SQL:2006 Функциональность работы с XML-данными значительно расширена. Появилась возможность совместно использовать в запросах SQL и XQuery.XQuery 2008SQL:2008 Улучшены возможности оконных функций, устранены некоторые неоднозначности стандарта SQL:2003
3. Типы команд SQL Язык SQL может использоваться для: выполнения запросов к данным построения прикладных программ Основные категории команд языка SQL: DDL – язык определения данных ( CREATE TABLE, ALTER TABLE, DROP TABLE, CREATE INDEX, ALTER INDEX, DROP INDEX ) DML – язык манипулирования данными ( INSERT, UPDATE, DELETE ) DQL – язык запросов ( SELECT ) DCL – язык управления данными ( GRANT, REVOKE ) Команды администрирования данных Команды управления транзакциями ( COMMIT, ROLLBACK, SAVEPOINT, SET TRANSACTION ) 4
3. Типы команд SQL Фазы выполнения SQL-оператора 5 SELECT A, B, C FROM X, Y WHERE A
4. Типы данных SQL Типизированные данные – данные одного из предопределённых SQL-языком типов NULL – неопределенное значение в поле Арифметические операции operation (+, – и т. д.): A operation NULL= NULL NULL operation A = NULL NULL operation NULL = NULL Операций сравнения comparison (=,, >, < и т. д.): A comparison NULL = unknown NULL comparison A = unknown NULL comparison NULL = unknown 6
4. Типы данных SQL Категории типов данных: Точные числовые типы: –INTEGER –SMALLINT876 –NUMERIC(p, s)125.4 –DECIMAL(p, s)26.36 Приближенные числовые типы: –REAL123 –DOUBLE PRECISION23.12 –FLOAT(p)123.12E1 7
4. Типы данных SQL Категории типов данных: Типы символьных строк –CHARACTER(x) [CHAR] –CHARACTER VARYING(x) [VARCHAR] Операции: o Конкатенации (||) o Выделения подстроки ( SUBSTRING ) o Регистр строки ( UPPER / LOWER ) o определения длины ( CHARACTER_LENGTH ) o определения позиции ( POSITION ) –CHARACTER LARGE OBJECT(z) [CLOB] 8
4. Типы данных SQL Категории типов данных: Типы даты и времени –DATE yyyy-mm-dd Пример: = 8 апреля 1949 г –TIME hh:mm-ss:f...f 16:33-20:333 = 16 ч 33 мин 20 сек и 0,333 сек –TIMESTAMP yyyy-mm-dd hh:mm-ss:f...f :33-20:333 = 16 ч 33 мин 20 сек и 0,333 сек 8 апреля 1949 г Типы временных интервалов ( TIME WITH TIME ZONE ) 9
4. Типы данных SQL Категории типов данных: Булевский тип (BOOLEAN) 10
4. Типы данных SQL Категории типов данных: Тип массив type ARRAY [m] Integer ARRAY [10] Типы битовых строк (bit strings) Типы коллекций (collection types) Анонимные строчные типы (anonymous row types) Типы, определяемые пользователем (user-defined types) Ссылочные типы (reference types) 11
4. Типы данных SQL Домен – объект схемы БД: Именованный Долговременно хранимый Создание домена: CREATE DOMAIN domain_name [AS] data_type [ default_definition ] [ domain_constraint_definition_list ] CREATE DOMAIN EMP_NO AS INTEGER CHECK (VALUE BETWEEN 1 AND 10000); CREATE DOMAIN SALARY AS NUMERIC (10, 2) DEFAULT CHECK (VALUE BETWEEN AND ) CONSTRAINT SAL_NOT_NULL CHECK (VALUE IS NOT NULL); 12
4. Типы данных SQL Изменить характеристики домена: 1. ALTER DOMAIN SALARY SET DEFAULT ; 2. ALTER DOMAIN SALARY DROP DEFAULT; 3. ALTER DOMAIN SALARY ADD CHECK (VALUE ); 4. ALTER DOMAIN SALARY DROP CONSTRAINT SAL_NOT_NULL; Отменить ранее созданное определение домена: DROP DOMAIN domain_name {RESTRICT | CASCADES} Явные преобразования типов или доменов: CAST({scalar-expression|NULL} AS {data_type|domain_name}) 13
5. Применение языка SQL Подключение к СУБД: CONNECT TO MyDB1 USER User1/Password1 Создание таблицы в БД: CREATE [ [ { GLOBAL | LOCAL } ] TEMPORARY] TABLE имя_таблицы ( { column | [table_constraint] }.,.. [ ON COMMIT { DELETE | PRESERVE} ROWS ] ); column определяется как: имя_поля {domain | datatype [size]} [column_constraint:] [ DEFAULT default_value ] [ COLLATE collate_value ] 14
5. Применение языка SQL Ограничения для столбца: NOT NULL UNIQUE PRIMARY KEY CHECK REFERENCES table Ограничения для таблицы: CHECK (condition) FOREIGN KEY (fields_list) 15
4. Типы данных SQL Изменение структуры таблицы: ALTER TABLE TableName1 ADD | ALTER [COLUMN] FieldName1 FieldType [(nFieldWidth [, nPrecision])] [NULL | NOT NULL] [CHECK lExpression1 [ERROR cMessageText1]] [DEFAULT eExpression1] [PRIMARY KEY | UNIQUE] [REFERENCES TableName2 [TAG TagName1]] Пример: 1. ALTER TABLE table_name2. ALTER TABLE table_name ADD column_name datatype DROP COLUMN column_name 3. ALTER TABLE table_name ALTER COLUMN column_name datatype 16
4. Типы данных SQL Удаление таблицы: DROP TABLE [IF EXISTS] tbl_name [, tbl_name,...] [RESTRICT | CASCADE] Пример: DROP TABLE Users 17
5. Применение языка SQL SELECT – позволяет формировать запрос к БД: SELECT [DISTINCT] {{function_agregate | expr [AS new_field_name]}.,: | specification.* | * [INTO list_variable] FROM {{ имя_таблицы [AS] [table_alias] [(field.,:)]} | {subquery [AS] subquery_alas [(field.,:)]} | union_table | constructor_of_table_value | {TABLE имя_таблицы [AS] alias [(field.,:)]} }.,: [WHERE condition] [GROUP BY {{ имя_таблицы | alias }.field}.,: {COLLATE name}] [HAVING condition] [{ UNION | INTERSECT | EXCEPT } [ALL] [CORRESPONDING [BY (field.,:)]] SELECT_operator | {TABLE имя_таблицы}|constructor_of_table_value [ORDER BY] {{field_result [ASC|DESC]}.,:} |{{ integer [ASC|DESC]}.,:} ; 18
4. Типы данных SQL 19
Спасибо за внимание 20