SlideShare a Scribd company logo
1 of 74
1
Управление данными
Часть 4.
Язык SQL
(©) Владислав Лавров, vlavrov.com
2
4.1. История развития SQL
SQL (Structured Query Language)
- это сокращенное название структурированного языка запросов, предоставляющего
средства создания и обработки данных в реляционных БД
1970 – доктор Эдгар Кодд создаёт модель реляционной базы данных (опубликована
статья «Реляционная модель для больших банков совместно используемых
данных» («A Relational Model of Data for Large Shared Data Banks»))
1974 – начинается разработка проекта System/R компании IBM
1974 – первая статья с описанием языка SEQUEL (Structured English Query Language)
1978 – опытная эксплуатация проекта System/R
1979 – появляется первая коммерческая реляционная СУБД компании Oracle
1981 – компания Relation Technology выпускает СУБД Ingres
1981 – компания IBM создает СУБД SQL/DS
1982 – ANSI формирует комитет по стандартизации языка SQL
1983 – компания IBM объявляет о создании СУБД DB2
1986 – ANSI принимает стандарт SQL-1
Этапы развития языка SQL
(©) Владислав Лавров, vlavrov.com
3
1986 – компания Sybase создает реляционную СУБД для обработки транзакций
1987 – ISO одобряет стандарт SQL-1
1988 – компании Ashton-Tate и Microsoft объявляют о выпуске СУБД SQL Server
для операционной системы OS/2
1989 – опубликован первый тест производительности TPC (TPC-A)
1990 – опубликован тест производительности TPC-B
1991 – консорциум SQL Access Group публикует спецификацию доступа к базам данных
1991 – компания Microsoft публикует спецификация протокола ODBC (Open DataBase
Connectivity)
1992 – ANSI принимает стандарт SQL-2
1992 – опубликован тест производительности TPC-C (для OLTP-систем, Online Transaction
Processing).
1993 – первые поставки систем обслуживания хранилищ данных
1993 – первые поставки программных продуктов, поддерживающих протокол ODBC
1994 – опубликован тест производительности TPC-D (для систем поддержки принятия
решений)
1994 – коммерческие поставки серверов баз данных, поддерживающих параллельную
обработку
Этапы развития языка SQL (продолжение)
(©) Владислав Лавров, vlavrov.com
4
1996 – опубликован стандарт API-функций для доступа к базам данных OLAP и тест
производительности OLAP-систем (OnLine Analytical Processing)
1997 – компания IBM выпускает СУБД DB2 Universal Database, унифицировав ее
архитектуру для работы на платформах других поставщиков
1998 – компания Microsoft выпустила СУБД SQL Server 7, обеспечив поддержку
корпоративных баз данных для платформы Windows NT
1998 – выпущена СУБД Oracle 8i, ознаменовавшая отход от архитектуры клиент/сервер и
обеспечивающая интеграцию баз данных с Internet
1999 – ANSI/ISO опубликовали стандарт SQL-3. Добавлена поддержка регулярных
выражений, рекурсивных запросов, поддержка триггеров, базовые процедурные
расширения, нескалярные типы данных и некоторые объектно-ориентированные
возможности.
Этапы развития языка SQL (продолжение)
(©) Владислав Лавров, vlavrov.com
5
2003 – ANSI/ISO опубликовали стандарт SQL:2003. Введены расширения для работы с
XML-данными, оконные функции (применяемые для работы с OLAP-базами
данных), генераторы последовательностей и основанные на них типы данных.
2006 – ANSI/ISO опубликовали стандарт SQL:2006. Функциональность работы с XML-
данными значительно расширена. Появилась возможность совместно использовать
в запросах SQL и XQuery.
2008 – ANSI/ISO опубликовали стандарт SQL:2008. Улучшены возможности оконных
функций, устранены некоторые неоднозначности стандарта SQL:2003
Этапы развития языка SQL (продолжение)
(©) Владислав Лавров, vlavrov.com
6
4.2. Функциональные категории команд SQL
Интерактивный SQL
используется для функционирования непосредственно в базе данных, чтобы
производить вывод информации для использования ее пользователем.
Вложенный SQL
состоит из команд SQL помещенных внутри программ, которые обычно написаны
на некотором другом языке (типа Паскаля).
Формы языка SQL
Функциональные категории команд языка SQL
DDL (Data Definition Language, Язык Определения Данных)
– состоит из команд которые создают объекты (таблицы, индексы, представления
и так далее ) в базе данных
DML (Data Manipulation Language, Язык Манипулирования Данными)
– это набор команд, которые определяют какие значения представлены в таблицах
в любой момент времени, а также позволяют помещать, изменять и удалять данные
из таблиц БД;
DCL (Data Control Language, Язык Управления Данными)
– состоит из средств, которые управляют выполнением транзакций, а также
определяют разрешить ли пользователю выполнять определенные действия или
нет.
(©) Владислав Лавров, vlavrov.com
7
Операторы определения данных DDL
(©) Владислав Лавров, vlavrov.com
8
Операторы манипулирования данными DML
(©) Владислав Лавров, vlavrov.com
9
Операторы управления данными DCL
(©) Владислав Лавров, vlavrov.com
10
Операторы управления данными DCL (продолжение)
(©) Владислав Лавров, vlavrov.com
11
4.3. Основные возможности SQL
• предложения определения данных;
• запросы на выбор данных;
• предложения модификации данных;
• предложения управления данными
Кроме того, он предоставляет возможность выполнять в этих предложениях:
• арифметические вычисления (включая разнообразные функциональные
преобразования), обработку текстовых строк и выполнение операций сравнения
значений арифметических выражений и текстов;
• упорядочение строк и (или) столбцов при выводе содержимого таблиц на печать
или экран дисплея;
• создание представлений (виртуальных таблиц), позволяющих пользователям
иметь свой взгляд на данные без увеличения их объема в базе данных;
• запоминание выводимого по запросу содержимого таблицы, нескольких таблиц
или представления в другой таблице (реляционная операция присваивания).
• группирование (агрегатирование) данных и применение к этим группам таких
операций, как среднее, сумма, максимум, минимум, число элементов и т.п.
(©) Владислав Лавров, vlavrov.com
12
4.4. Достоинства языка SQL
• стандартность языка SQL
• возможность переноса с одной вычислительной системы на другую
• реляционная основа языка
• возможность создания интерактивных запросов
• возможность программного доступа к БД
• обеспечение различного представления данных
• возможность динамического изменения и расширения структуры БД
• поддержка архитектуры клиент/сервер
(©) Владислав Лавров, vlavrov.com
13
4.5. Управление базами данных с помощью SQL
• всякому столбцу таблицы присвоено имя, которое должно быть уникальным для этой
таблицы;
• столбцы таблицы упорядочиваются слева направо, т.е. столбец 1, столбец 2, ..., столбец n.
• строки таблицы не упорядочены (их последовательность определяется лишь
последовательностью ввода в таблицу);
• в поле на пересечении строки и столбца любой таблицы всегда имеется только одно
значение данных и никогда не должно быть множества значений
• всем строкам таблицы соответствует одно и то же множество столбцов, хотя в
определённых столбцах любая строка может содержать пустые значения (NULL-значения),
т.е. может не иметь значений для этих столбцов;
• все строки таблицы обязательно отличаются друг от друга хотя бы единственным
значением, что позволяет однозначно идентифицировать любую строку такой таблицы;
• при выполнении операций с таблицей ее строки и столбцы можно обрабатывать в любом
порядке безотносительно к их информационному содержанию.
(©) Владислав Лавров, vlavrov.com
14
4.6. Типы данных в SQL
CHARACTER(n), CHAR(n)
(n – число символов 0 < n < 254)
Строки символов постоянной длины
VARCHAR(n) Строки символов переменной длины
INTEGER, INT
SMALLINT
Целые числа
Десятичные числа
DECIMAL(p,q), DEC(p,q)
(0 < p < 16, q < p)
Малые целые числа
FLOAT (n) (n – число байтов ) Вещественное число с плавающей запятой
REAL Вещественное число с плавающей запятой
низкой точности
DOUBLE PRECISION Вещественное число с плавающей запятой
высокой точности
(©) Владислав Лавров, vlavrov.com
15
Типы данных в SQL (продолжение)
DATE дата в формате, определяемом
специальной командой
(по умолчанию mm/dd/yy)
TIME время в формате, определяемом
специальной командой
(по умолчанию hh.mm.ss)
DATETIME комбинация даты и времени
MONEY деньги
(©) Владислав Лавров, vlavrov.com
16
4.7. Определение таблиц в SQL
Пользователь (запрос с терминала или прикладной программы)
SQL-запрос
Виртуальная
таблица
Рабочая Представление
Базовая
таблица
Базовая
таблица
Базовая
таблица
Сервер базы данных
Реальная
таблица
Хранимая
таблица
База данных в восприятии пользователя
(©) Владислав Лавров, vlavrov.com
17
4.7.1. Команда создания таблицы
CREATE TABLE < table name > (
{ < column name > < data type > [ < size > ]
[ < colconstr > ... ] } , ... ) ;
[ < tabconstr > ] , ... ) ;
< table name > - имя таблицы создаваемой этой командой
< column name > - имя столбца таблицы
< data type > - тип данных, который может содержаться в столбце.
Может быть любым из следующих:
INTEGER (ЦЕЛОЕ ЧИСЛО),
CHARACTER (СИМВОЛЬНОЕ),
DECIMAL (ДЕСЯТИЧНОЕ),
NUMERIC (ЧИСЛОВОЕ),
SMALLINT (НАИМЕНЬШЕЕ ЦЕЛОЕ)
FLOAT (С ПЛАВАЮЩЕЙ ТОЧКОЙ)
REAL (РЕАЛЬНОЕ),
DOUBLE PRECISION (УДВОЕННАЯ ТОЧНОСТЬ
С ПЛАВАЮЩЕЙ ТОЧКОЙ),
LONG * (ДЛИННОЕ *),
VARCHAR * (ПЕРЕМЕННОЕ СИМВОЛЬНОЕ) *,
DATE (ДАТА *),
TIME (ВРЕМЯ)
( * - указывает на нестандартный для SQL тип данных)
(©) Владислав Лавров, vlavrov.com
18
Команда создания таблицы (продолжение)
< size > - размер поля. Его значение зависит от <data type>
< colconstr > - ограничение столбца. Может быть любым из следующих:
NOT NULL (НЕ НУЛЕВОЙ),
UNIQUE (УНИКАЛЬНЫЙ),
PRIMARY KEY (ПЕРВИЧНЫЙ КЛЮЧ),
CHECK(<predicate>) (ПРОВЕРКА предиката),
DEFAULT = (ПО УМОЛЧАНИЮ =
<value expression> значимому выражению)
REFERENCES <table name> (ССЫЛКА НА имя таблицы
[(<column name>, ... )] [( имя столбца) ] )
< tabconstr > - ограничение таблицы. Может быть любым из следующих:
UNIQUE (УНИКАЛЬНЫЙ),
PRIMARY KEY (ПЕРВИЧНЫЙ КЛЮЧ),
CHECK(<predicate>) (ПРОВЕРКА предиката),
FOREIGN KEY(<column name>) (ВНЕШНИЙ КЛЮЧ)
REFERENCES <table name> (ССЫЛКА НА имя таблицы
[(<column name>, ... )] [( имя столбца) ] )
(©) Владислав Лавров, vlavrov.com
19
Информационные сущности БД «Рембригада»
РАБОТНИКИ
Табельный_номер
ФИО
Специальность
Почасовая_ставка
Бригадир
ОБЪЕКТЫ
Номер_объекта
Адрес_объекта
Тип_объекта
Уровень_сложности
РАБОТА
Табельный_номер
Номер_объекта
Дата_начала
Количество_дней
1 1
¥
¥
(©) Владислав Лавров, vlavrov.com
20
Пример определения таблиц для БД «Рембригада»
CREATE TABLE РАБОТНИКИ (
ТАБЕЛЬНЫЙ_НОМЕР INTEGER NOT NULL PRIMARY KEY,
ФИО CHARACTER (15),
СПЕЦИАЛЬНОСТЬ CHARACTER (15),
ПОЧАСОВАЯ_СТАВКА DECIMAL (6,1),
БРИГАДИР INTEGER )
CREATE TABLE ОБЪЕКТЫ (
НОМЕР_ОБЪЕКТА INTEGER NOT NULL PRIMARY KEY,
АДРЕС_ОБЪЕКТА CHARACTER (15),
ТИП_ОБЪЕКТА CHARACTER (9) DEFAULT ‘офис’
CHECK (TYPE IN (‘офис’, ’склад’, ’магазин’, ’жилой дом’ ) ),
УРОВЕНЬ_СЛОЖНОСТИ INTEGER DEFAULT 1
CHECK (УРОВЕНЬ_СЛОЖНОСТИ > 0 AND УРОВЕНЬ_СЛОЖНОСТИ < 5) )
CREATE TABLE РАБОТА (
ТАБЕЛЬНЫЙ_НОМЕР INTEGER NOT NULL,
НОМЕР_ОБЪЕКТА INTEGER NOT NULL,
ДАТА_НАЧАЛА DATE,
КОЛИЧЕСТВО_ДНЕЙ INTEGER,
PRIMARY KEY (ТАБЕЛЬНЫЙ_НОМЕР, НОМЕР_ОБЪЕКТА),
FOREIGN KEY ТАБЕЛЬНЫЙ_НОМЕР REFERENCES РАБОТНИКИ
ON DELETE CASCADE,
FOREIGN KEY НОМЕР_ОБЪЕКТА REFERENCES ОБЪЕКТЫ
ON DELETE CASCADE )(©) Владислав Лавров, vlavrov.com
21
4.7.2. Изменение таблицы после того как она была создана
ALTER TABLE < table name >
ADD < column name > < data type > < size > ;
• Столбец будет добавлен со значением NULL для всех строк таблицы.
• Новый столбец станет последним по порядку столбцом таблицы.
• Можно добавить сразу несколько новых столбцов,
отделив их запятыми, в одной команде.
• Имеется возможность удалять или изменять столбцы.
(©) Владислав Лавров, vlavrov.com
22
4.7.3. Удаление таблиц
DROP TABLE < table name >;
• Чтобы иметь возможность удалить таблицу,
пользователь должен иметь права владельца (т.е. быть
создателем) этой таблицы.
• Прежде, чем удалить таблицу из базы данных SQL
потребует очистить ее от данных.
(©) Владислав Лавров, vlavrov.com
23
4.7.4. Ограничение значений данных в таблицах
Виды ограничений
• Ограничение столбца
применяется только к индивидуальным столбцам
• Ограничение таблицы
применяется к группам из одного и более столбцов
(©) Владислав Лавров, vlavrov.com
24
Объявление ограничений
В таблице РАБОТНИКИ
ТАБЕЛЬНЫЙ_НОМЕР INTEGER NOT NULL PRIMARY KEY
ТИП_ОБЪЕКТА CHARACTER (9) DEFAULT ‘офис’
CHECK (TYPE IN (‘офис’, ’склад’, ’магазин’, ’жилой дом’ ) ),
УРОВЕНЬ_СЛОЖНОСТИ INTEGER DEFAULT 1
CHECK (УРОВЕНЬ_СЛОЖНОСТИ > 0 AND УРОВЕНЬ_СЛОЖНОСТИ < 5)
В таблице ОБЪЕКТЫ
PRIMARY KEY (ТАБЕЛЬНЫЙ_НОМЕР, НОМЕР_ОБЪЕКТА),
FOREIGN KEY ТАБЕЛЬНЫЙ_НОМЕР REFERENCES РАБОТНИКИ
ON DELETE CASCADE,
FOREIGN KEY НОМЕР_ОБЪЕКТА REFERENCES ОБЪЕКТЫ
ON DELETE CASCADE
В таблице РАБОТА
(©) Владислав Лавров, vlavrov.com
25
Опции команды ON DELETE
• CASCADE (распространить)
• SET NULL (установить пустое значение)
• SET DEFAULT (установить значение по умолчанию)
(©) Владислав Лавров, vlavrov.com
26
4.8. Манипуляция данными
4.8.1. Простые запросы
Простой запрос
– запрос, который обращается только к одной таблице БД
SELECT * | { [ DISTINCT | ALL ] < value expression > , ... }
FROM { < table name > [ < alias > ] } , ...
[ WHERE < predicate > ]
[ GROUP BY { < column name > | < integer > } , ... ]
[ HAVING < predicate > ]
[ ORDER BY { < column name > | < integer > } , ... ]
(©) Владислав Лавров, vlavrov.com
27
Простые запросы (продолжение)
< value expression > - выражение которое производит значение.
Оно может включать в себя или содержать <column name>.
< table name > - имя или синоним таблицы или представления.
< alias > - временный синоним для <table name>, определенный
в этой таблице и используемый только в этой команде
< predicate > - условие, которое может быть верным или неверным
для каждой строки или комбинации строк таблицы
в предложении FROM.
< column name > - имя столбца в таблице
< integer > - число с десятичной точкой, которое показывает
<value expression> в предложении SELECT с помощью
идентификации его местоположения в этом предложении.
(©) Владислав Лавров, vlavrov.com
28
Некоторые пояснения по синтаксису запроса
SELECT
(выбрать) данные из указанных столбцов и (если необходимо)
выполнить перед выводом их преобразование в соответствии
с указанными выражениями и (или) функциями
FROM
(из) перечисленных таблиц, в которых расположены эти
столбцы
WHERE
(где) строки из указанных таблиц должны удовлетворять
указанному перечню условий отбора строк
GROUP BY
(группируя по) указанному перечню столбцов с тем, чтобы
получить для каждой группы единственное агрегированное
значение, используя во фразе SELECT встроенные
SQL-функции SUM (сумма), COUNT (количество),
MIN (минимальное значение), MAX (максимальное значение)
или AVG (среднее значение)
HAVING
(имея) в результате лишь те группы, которые удовлетворяют
указанному перечню условий отбора групп
(©) Владислав Лавров, vlavrov.com
29
Примеры простых запросов
Кто работает штукатурами?
SELECT ФИО
FROM РАБОТНИКИ
WHERE СПЕЦИАЛЬНОСТЬ = ’штукатур’
БД
Результат
Запрос
(©) Владислав Лавров, vlavrov.com
30
Примеры простых запросов
Привести все данные об объектах типа «офис»
SELECT *
FROM ОБЪЕКТЫ
WHERE ТИП_ОБЪЕКТА = ’офис’
БД
Результат
Запрос
Звездочка (*) в команде SELECT
означает «строка целиком»
(©) Владислав Лавров, vlavrov.com
31
Примеры простых запросов
Какова недельная зарплата каждого электрика (40-часовая рабочая
неделя)?
SELECT ФИО,
‘ Недельная зарплата = ’,
40 * Почасовая_ставка
FROM РАБОТНИКИ
WHERE СПЕЦИАЛЬНОСТЬ = ’электрик ’
ORDER BY ФИО
БД
Результат
Запрос
(©) Владислав Лавров, vlavrov.com
32
Примеры простых запросов
У кого почасовая ставка составляет от 60 до 70 руб.?
SELECT *
FROM РАБОТНИКИ
WHERE Почасовая_ставка > = 60
AND Почасовая_ставка < = 70
БД
Результат
Запрос
Для сравнения столбцов с другими столбцами
или с константами могут использоваться
операторы сравнения (= | <> | < | <= | > | >=)
(©) Владислав Лавров, vlavrov.com
33
Операторы условия в запросах
BETWEEN (между)
– используется для сравнения некоторой величины с двумя другими, первая из
которых меньше второй, если сравниваемая величина может быть равна каждой из
данных величин или любому значению между ними.
Существует и противоположный предикат NOT BETWEEN, который истинен тогда,
когда сравниваемое значение не попадает в заданный интервал, включая его
границы.
БД
Результат
Запрос У кого почасовая ставка составляет от 60 до 70 руб.?
SELECT *
FROM РАБОТНИКИ
WHERE Почасовая_ставка BETWEEN 60 AND 70
(©) Владислав Лавров, vlavrov.com
34
Операторы условия в запросах (продолжение)
IN (принадлежит)
– условие фразы WHERE считается истинным, если значение принадлежит
множеству, состоящему из констант, перечисленных в скобках.
Одновременно существует противоположный предикат NOT IN, который истинен
тогда, когда сравниваемое значение не входит в заданное множество.
БД
Результат
Запрос Перечислить штукатуров и кровельщиков.
SELECT *
FROM РАБОТНИКИ
WHERE Специальность IN (‘штукатур’, ‘кровельщик’)
(©) Владислав Лавров, vlavrov.com
35
Операторы условия в запросах (продолжение)
LIKE (похоже на)
– требуется для сравнения символьных переменных с константами.
LIKE применим только к полям типа CHAR или VARCHAR, с которыми он
используется чтобы находить подстроки. Т.е. он ищет поле символа чтобы
видеть, совпадает ли с условием часть его строки. В качестве условия он
использует символы шаблона - специальные символы которые могут
соответствовать чему-нибудь.
Имеются два типа символов шаблона, используемых с LIKE:
_ (подчеркивание) – замещает ровно один неопределенный символ,
% (процент) – замещает произвольное число символов, начиная с нуля.
БД
Результат
Запрос Перечислить работников, у которых название специальности
начинается с фразы «элек»
SELECT *
FROM РАБОТНИКИ
WHERE Специальность LIKE ( ‘элек%’ )
(©) Владислав Лавров, vlavrov.com
36
Операторы условия в запросах (продолжение)
IS NULL
– оператор сравнения с неопределенным значением
(неизвестным на данный момент времени)
Это значение при появлении дополнительной информации в любой
момент времени может быть заменено на некоторое конкретное
значение.
При сравнении неопределенных значений не действуют стандартные
правила сравнения: одно неопределенное значение никогда не
считается равным другому неопределенному значению.
NULL1 ≠ NULL2
(©) Владислав Лавров, vlavrov.com
37
Таблица истинности логических выражений
AND (и)
– когда должны удовлетворяться оба разделяемых с помощью AND условия;
OR (или)
– когда должно удовлетворяться одно из разделяемых с помощью OR условий;
AND NOT (и не)
– когда должно удовлетворяться первое условие и не должно второе;
OR NOT (или не)
– когда или должно удовлетворяться первое условие или не должно
удовлетворяться второе.
(©) Владислав Лавров, vlavrov.com
38
4.8.2. Многотабличные запросы
Рабочие каких специальностей назначены на объект № 435 ?
SELECT СПЕЦИАЛЬНОСТЬ
FROM РАБОТНИКИ, РАБОТА
WHERE РАБОТНИКИ.ТАБЕЛЬНЫЙ_НОМЕР =
РАБОТА.ТАБЕЛЬНЫЙ_НОМЕР
AND НОМЕР_ОБЪЕКТА = 435
БД
Результат
Запрос
(©) Владислав Лавров, vlavrov.com
39
Многотабличные запросы (продолжение)
Перечислить работников, указав имена их бригадиров.
SELECT A.ФИО, B.ФИО
FROM РАБОТНИКИ А, РАБОТНИКИ B
WHERE B.ТАБЕЛЬНЫЙ_НОМЕР = A.БРИГАДИР
БД
Результат
Запрос
ФИО работника ФИО бригадира
(©) Владислав Лавров, vlavrov.com
40
Многотабличные запросы (продолжение)
Перечислить работников, назначенных на объекты типы «офис».
SELECT ФИО
FROM РАБОТНИКИ, РАБОТА, ОБЪЕКТЫ
WHERE РАБОТНИКИ.ТАБЕЛЬНЫЙ_НОМЕР =
РАБОТА.ТАБЕЛЬНЫЙ_НОМЕР AND
РАБОТА.НОМЕР_ОБЪЕКТА =
ОБЪЕКТЫ.НОМЕР_ОБЪЕКТА AND
ТИП_ОБЪЕКТА = ‘офис’
БД
Результат
Запрос
Пример дубликатов фамилий
(©) Владислав Лавров, vlavrov.com
41
Многотабличные запросы (продолжение)
Перечислить работников, назначенных на объекты типы «офис».
SELECT DISTINCT ФИО
FROM РАБОТНИКИ, РАБОТА, ОБЪЕКТЫ
WHERE РАБОТНИКИ.ТАБЕЛЬНЫЙ_НОМЕР =
РАБОТА.ТАБЕЛЬНЫЙ_НОМЕР AND
РАБОТА.НОМЕР_ОБЪЕКТА =
ОБЪЕКТЫ.НОМЕР_ОБЪЕКТА AND
ТИП_ОБЪЕКТА = ‘офис’
БД
Результат
Запрос
DISTINCT – оператор, исключающий повторяющиеся строки
Дубликаты строк отсутствуют
(©) Владислав Лавров, vlavrov.com
42
Вложенный подзапрос
– это подзапрос, заключенный в круглые скобки и вложенный
в WHERE фразу предложения SELECT или других предложений,
использующих WHERE фразу.
Другими словами, это запрос внутри запроса.
4.8.3. Подзапросы
Запрос: Рабочие каких специальностей назначены на объект № 435 ?
Вложенный
подзапрос
Внешний
запрос
SELECT СПЕЦИАЛЬНОСТЬ
FROM РАБОТНИКИ
WHERE ТАБЕЛЬНЫЙ_НОМЕР IN
( SELECT ТАБЕЛЬНЫЙ_НОМЕР
FROM РАБОТА
WHERE НОМЕР_ОБЪЕКТА = 435 )
1
2
3
(©) Владислав Лавров, vlavrov.com
43
Простой (некоррелированный) подзапрос
– подзапрос, значение которого не зависит ни от какого
внешнего запроса.
Простые и коррелированные подзапросы
Перечислить работников, назначенных на объекты типа «офис».
SELECT ФИО
FROM РАБОТНИКИ
WHERE ТАБЕЛЬНЫЙ_НОМЕР IN
( SELECT ТАБЕЛЬНЫЙ_НОМЕР
FROM РАБОТА
WHERE НОМЕР_ОБЪЕКТА IN
( SELECT НОМЕР_ОБЪЕКТА
FROM ОБЪЕКТЫ
WHERE ТИП_ОБЪЕКТА = ‘офис’ ) )
БД
Результат
Запрос
Вложенный
подзапрос
№ 2
Вложенный
подзапрос
№ 1
Главный
запрос
(©) Владислав Лавров, vlavrov.com
44
Коррелированный подзапрос
– подзапрос, результат которого зависит от строки,
рассматриваемой главным запросом.
Простые и коррелированные подзапросы (продолжение)
Перечислить работников, чьи почасовые ставки выше, чем
почасовые ставки их бригадиров.
SELECT ФИО
FROM РАБОТНИКИ А
WHERE А.ПОЧАСОВАЯ_СТАВКА >
( SELECT B.ПОЧАСОВАЯ_СТАВКА
FROM РАБОТНИКИ B
WHERE B.ТАБЕЛЬНЫЙ_НОМЕР =
A.БРИГАДИР )
БД
Результат
Запрос
Вложенный
подзапрос
Главный
запрос
(©) Владислав Лавров, vlavrov.com
45
4.8.4. Операторы EXISTS и NOT EXISTS
БД
Результат
Запрос Перечислить работников, не назначенных на объект 435.
Пример неправильного запроса
SELECT ТАБЕЛЬНЫЙ_НОМЕР
FROM РАБОТА
WHERE НОМЕР_ОБЪЕКТА <> 435
Работники,
ошибочно попавшие
в результат запроса
(©) Владислав Лавров, vlavrov.com
46
Операторы EXISTS и NOT EXISTS (продолжение)
БД
Результат
Запрос Перечислить работников, не назначенных на объект 435.
SELECT ТАБЕЛЬНЫЙ_НОМЕР
FROM РАБОТНИКИ
WHERE NOT EXISTS
( SELECT *
FROM РАБОТА
WHERE РАБОТА.ТАБЕЛЬНЫЙ_НОМЕР =
РАБОТНИКИ.ТАБЕЛЬНЫЙ_НОМЕР
AND НОМЕР_ОБЪЕКТА = 435 )
(©) Владислав Лавров, vlavrov.com
47
Операторы EXISTS и NOT EXISTS (продолжение)
БД
Результат
Запрос Перечислить работников, не назначенных на объект 435.
Другой способ (использование некоррелированного запроса)
SELECT ТАБЕЛЬНЫЙ_НОМЕР
FROM РАБОТНИКИ
WHERE ТАБЕЛЬНЫЙ_НОМЕР NOT IN
( SELECT ТАБЕЛЬНЫЙ_НОМЕР
FROM РАБОТА
WHERE НОМЕР_ОБЪЕКТА = 435 )
(©) Владислав Лавров, vlavrov.com
48
Операторы EXISTS и NOT EXISTS (продолжение)
БД
Результат
Запрос Перечислить работников, назначенных на каждое здание.
Другая формулировка этого же запроса (двойное отрицание):
Перечислить работников, для которых не существует здания,
на которое они не назначены.
SELECT ТАБЕЛЬНЫЙ_НОМЕР
FROM РАБОТНИКИ
WHERE NOT EXISTS
( SELECT НОМЕР_ОБЪЕКТА
FROM ОБЪЕКТЫ
WHERE NOT EXISTS
( SELECT *
FROM РАБОТА
WHERE РАБОТА.НОМЕР_ОБЪЕКТА = ОБЪЕКТЫ.НОМЕР_ОБЪЕКТА
AND РАБОТА.ТАБЕЛЬНЫЙ_НОМЕР =
РАБОТНИКИ.ТАБЕЛЬНЫЙ_НОМЕР ) )
NOT EXISTS является единственным средством решения запросов,
содержащих в условии слово «каждый».
(©) Владислав Лавров, vlavrov.com
49
Примеры запросов
Каковы максимальная и минимальная почасовые ставки ?
Каково среднее число дней работы служащих на объекте 435 ?
Каково общее число дней, отведенных на штукатурные работы на объекте 312 ?
Сколько всего разных специальностей у работников?
4.8.5. Встроенные функции
Для реализации запросов надо использовать встроенные в SQL
статистические функции:
• SUM (сумма),
• AVG (среднее),
• COUNT (количество),
• MAX (максимум),
• MIN (минимум).
(©) Владислав Лавров, vlavrov.com
50
Встроенные функции (продолжение)
БД
Результат
Запрос Каковы максимальная и минимальная почасовые ставки?
SELECT MAX ( ПОЧАСОВАЯ_СТАВКА ),
MIN ( ПОЧАСОВАЯ_СТАВКА )
FROM РАБОТНИКИ
• Функции MAX и MIN оперируют одним столбцом таблицы. Они выбирают
максимальное или минимальное значение соответственно из этого столбца.
• Столбец может содержать числовые или строковые значения, либо
значения даты/времени.
• Результат, возвращаемый этими функциями, имеет точно такой же тип
данных, что и сам столбец.
(©) Владислав Лавров, vlavrov.com
51
Встроенные функции (продолжение)
БД
Результат
Запрос Каково общее число дней, отведенных на штукатурные работы
на объекте 312 ?
SELECT SUM ( КОЛИЧЕСТВО_ДНЕЙ )
FROM РАБОТА, РАБОТНИКИ
WHERE РАБОТНИКИ.ТАБЕЛЬНЫЙ_НОМЕР =
РАБОТА.ТАБЕЛЬНЫЙ_НОМЕР AND
СПЕЦИАЛЬНОСТЬ = ‘штукатур’ AND
НОМЕР_ОБЪЕКТА = 312
• Функция SUM вычисляет сумму всех значений столбца.
• Данные, содержащиеся в столбце, должны иметь числовой тип (содержать
целые числа, десятичные числа или числа с плавающей запятой или
денежные величины).
• Результат, возвращаемый функцией SUM, имеет тот же тип данных, что и
столбец, однако точность результата может быть выше
(©) Владислав Лавров, vlavrov.com
52
Встроенные функции (продолжение)
БД
Результат
Запрос Каково среднее число дней работы служащих на объекте 435?
SELECT AVG ( КОЛИЧЕСТВО_ДНЕЙ )
FROM РАБОТА
WHERE НОМЕР_ОБЪЕКТА = 435
• Функция AVG вычисляет среднее всех значений столбца. Вначале она
суммирует все значения, содержащиеся в столбце, а затем делит сумму на
число этих значений.
• Данные, содержащиеся в столбце, должны иметь числовой тип.
• Результат может иметь не такой же тип, как столбец. Например, если AVG
применить к столбцу целых чисел, то результат будет либо десятичным
числом, либо числом с плавающей точкой, в зависимости от СУБД.
(©) Владислав Лавров, vlavrov.com
53
Встроенные функции (продолжение)
БД
Результат
Запрос Сколько всего разных специальностей у работников?
SELECT COUNT ( DISTINCT СПЕЦИАЛЬНОСТЬ )
FROM РАБОТНИКИ
• Функция COUNT подсчитывает число значений в данном столбце или
число строк в таблице.
• Когда она считает значения столбца, она используется с DISTINCT чтобы
производить подсчет различных числовых значений в данном поле.
• Тип данных в столбце может быть любым
• Функция COUNT всегда возвращает целый тип данных независимо от типа
данных столбцов
(©) Владислав Лавров, vlavrov.com
54
Встроенные функции (продолжение)
БД
Результат
Запрос Сколько всего работников зарегистрировано в базе данных?
SELECT COUNT ( * )
FROM РАБОТНИКИ
• Чтобы подсчитать общее число строк в таблице, надо использовать
функцию COUNT со звездочкой вместо имени поля, в частности COUNT (*)
• Функция COUNT со звездочкой включает и NULL, и дубликаты, по этой
причине DISTINCT не может быть использован.
(©) Владислав Лавров, vlavrov.com
55
Встроенные функции (продолжение)
БД
Результат
Запрос Какова средняя недельная зарплата рабочих?
SELECT AVG ( 40 * ПОЧАСОВАЯ_СТАВКА )
FROM РАБОТНИКИ
Все функции, кроме COUNT, можно использовать с вычисляемыми
выражениями.
(©) Владислав Лавров, vlavrov.com
56
Встроенные функции (продолжение)
БД
Результат
Запрос Сколько объектов имеют уровень сложности 3 ?
SELECT COUNT ( * )
FROM ОБЪЕКТЫ
WHERE УРОВЕНЬ_СЛОЖНОСТИ = 3
Функция COUNT может ссылаться на строку целиком, а не на отдельный
столбец.
Внимание ! Если в команде SELECT стоит встроенная функция, то больше
в этой команде SELECT ничего стоять не может !
Однако фраза SELECT, содержащая встроенную функцию, может
быть частью подзапроса.
Единственным исключением является команда GROUP BY.
(©) Владислав Лавров, vlavrov.com
57
4.8.6. Операторы GROUP BY и HAVING
БД
Результат
Запрос Для работников каждой специальности рассчитать максимальную
почасовую ставку.
SELECT СПЕЦИАЛЬНОСТЬ, MAX ( ПОЧАСОВАЯ_СТАВКА )
FROM РАБОТНИКИ
GROUP BY СПЕЦИАЛЬНОСТЬ
Фраза GROUP BY означает, что строки должны быть разбиты на группы
с общими значениями указанного столбца (столбцов).
Фраза GROUP BY используется на практике, когда требуется статистическая
информация не об отдельном объекте, а о каждой группе.
(©) Владислав Лавров, vlavrov.com
58
Операторы GROUP BY и HAVING (продолжение)
БД
Результат
Запрос Для каждого типа объектов вычислить среднюю продолжительность
работ, начиная с 20.10.2001 г.
SELECT НОМЕР_ОБЪЕКТА, AVG(КОЛИЧЕСТВО_ДНЕЙ)
FROM РАБОТА
WHERE ДАТА_НАЧАЛА >= 20/10/01
GROUP BY НОМЕР_ОБЪЕКТА
С фразой GROUP BY можно использовать команду WHERE
(©) Владислав Лавров, vlavrov.com
59
Операторы GROUP BY и HAVING (продолжение)
БД
Результат
Запрос Для каждого типа объектов, на которых работают более одного
рабочего, вычислить максимальную продолжительность работ.
Рассматривать только те объекты, работы на которых начались после
20.10.2001 г.
SELECT НОМЕР_ОБЪЕКТА, MAX(КОЛИЧЕСТВО_ДНЕЙ)
FROM РАБОТА
WHERE ДАТА_НАЧАЛА >= 20/10/01
GROUP BY НОМЕР_ОБЪЕКТА
HAVING COUNT ( ТАБЕЛЬНЫЙ_НОМЕР ) >= 2
Фраза HAVING накладывает условия на группы.
Другими словами, чтобы применять условия не только к отдельным строкам,
но и к группам строк, созданным командой GROUP BY, используется фраза
HAVING.
(©) Владислав Лавров, vlavrov.com
60
4.8.7. Встроенные функции и подзапросы
БД
Результат
Запрос У кого из работников почасовая ставка выше средней?
SELECT ФИО
FROM РАБОТНИКИ
WHERE ПОЧАСОВАЯ_СТАВКА >
( SELECT AVG (ПОЧАСОВАЯ_СТАВКА)
FROM РАБОТНИКИ )
Встроенные функции могут использоваться только во фразе SELECT или
команде HAVING. Однако фраза SELECT, содержащая встроенную функцию,
может быть частью подзапроса.
(©) Владислав Лавров, vlavrov.com
61
Встроенные функции и подзапросы (продолжение)
БД
Результат
Запрос У кого из работников почасовая ставка выше средней почасовой
ставки среди подчиненных одного и того же менеджера?
SELECT А.ФИО
FROM РАБОТНИКИ А
WHERE А.ПОЧАСОВАЯ_СТАВКА >
( SELECT AVG ( B.ПОЧАСОВАЯ_СТАВКА )
FROM РАБОТНИКИ B
WHERE B.БРИГАДИР = A.БРИГАДИР )
В коррелированных запросах также могут использоваться встроенный функции
(©) Владислав Лавров, vlavrov.com
62
4.8.8. Операции изменения данных
Значения данных могут быть помещены, скорректированы и удалены
из полей тремя командами языка SQL из категории DML:
• INSERT (вставить),
• UPDATE (модифицировать),
• DELETE (удалить).
(©) Владислав Лавров, vlavrov.com
63
Команда INSERT
INSERT INTO < table name >
VALUES ( < value >, < value > . . . ) ;
Позволяет вводить в таблицу как отдельные строки путем указания
значений каждого столбца, так и множества строк путем
формулировки запроса, определяющего вводимы строки.
Пример. Ввести строку в таблицу РАБОТА
INSERT INTO РАБОТА (
ТАБЕЛЬНЫЙ_НОМЕР, НОМЕР_ОБЪЕКТА, ДАТА_НАЧАЛА )
VALUES (
1284, 485, 13.11.2001 )
(©) Владислав Лавров, vlavrov.com
64
Команда INSERT (продолжение)
Пример.
Допустим, что мы создали новую таблицу с именем ОБЪЕКТЫ_2,
состоящую из столбцов НОМЕР_ОБЪЕКТА, ТИП_ОБЪЕКТА и
УРОВЕНЬ_СЛОЖНОСТИ, и хотим заполнить эту таблицу строками из
таблицы ОБЪЕКТЫ, имеющими УРОВЕНЬ_СЛОЖНСТИ = 3.
Реализация запроса.
INSERT INTO ОБЪЕКТЫ_2
SELECT НОМЕР_ОБЪЕКТА, ТИП_ОБЪЕКТА,
УРОВЕНЬ_СЛОЖНОСТИ
FROM ОБЪЕКТЫ
WHERE УРОВЕНЬ_СЛОЖНОСТИ = 3
(©) Владислав Лавров, vlavrov.com
65
Команда UPDATE
Всегда применяется ко всем строкам, удовлетворяющим условию
выражения WHERE.
Если фраза WHERE отсутствует, то операция применяется к каждой
строке таблицы.
Пример. Повысить на 5 процентов почасовую ставку каждого
штукатура.
UPDATE РАБОТНИКИ
SET ПОЧАСОВАЯ_СТАВКА = 1,05 * ПОЧАСОВАЯ_СТАВКА
WHERE СПЕЦИАЛЬНОСТЬ = ‘штукатур’
(©) Владислав Лавров, vlavrov.com
66
Команда DELETE
Всегда применяется ко всем строкам, удовлетворяющим условию
выражения WHERE.
Если фраза WHERE отсутствует, то удаляются все строки таблицы.
Пример. Допустим, что все рабочие, чей бригадир имеет табельный
номер 1520, были уволены, и необходимо удалить
соответствующие строки из базы данных.
DELETE FROM РАБОТНИКИ WHERE БРИГАДИР = 1520
(©) Владислав Лавров, vlavrov.com
67
4.8.9. Определение представлений данных
ПРЕДСТАВЛЕНИЕ (VIEW)
– объект данных, который не содержит никаких данных.
Это – тип таблицы, чье содержание выбирается из других таблиц с
помощью выполнения запроса. Они работают в запросах и
операторах DML точно также как и основные таблицы, но не
содержат никаких собственных данных.
Поскольку значения в этих таблицах меняются, то автоматически, их
значения могут быть показаны представлением
(©) Владислав Лавров, vlavrov.com
68
Определение представлений данных (продолжение)
Пример. Создать представление данных, показывающее всю информацию
о работнике, кроме его почасовой ставки.
CREATE VIEW П_РАБОТНИКИ AS
SELECT ТАБЕЛЬНЫЙ_НОМЕР,
ФИО,
СПЕЦИАЛЬНОСТЬ,
БРИГАДИР
FROM РАБОТНИКИ
Спецификация запроса
(©) Владислав Лавров, vlavrov.com
69
Определение представлений данных (продолжение)
Пример. Создать представление с информацией об электриках: объекты, на
которые они назначены работать, и дата начала работы.
CREATE VIEW П_ЭЛЕКТРИКИ AS
SELECT ФИО, НОМЕР_ОБЪЕКТА, ДАТА_НАЧАЛА
FROM РАБОТНИКИ, РАБОТА
WHERE СПЕЦИАЛЬНОСТЬ = ‘электрик’ AND
РАБОТНИКИ.ТАБЕЛЬНЫЙ_НОМЕР =
РАБОТА.ТАБЕЛЬНЫЙ_НОМЕР
(©) Владислав Лавров, vlavrov.com
70
Примеры использования представлений
Пример 1. Показать все сведения об электриках и объектах, на которых
они поработали.
SELECT * FROM П_ЭЛЕКТРИКИ
Пример 2. Кто из электриков назначен работать на объект 435 ?
SELECT ФИО, ДАТА_НАЧАЛА
FROM П_ЭЛЕКТРИКИ
WHERE НОМЕР_ОБЪЕКТА = 435
(©) Владислав Лавров, vlavrov.com
71
Примеры использования представлений (продолжение)
Пример 3. Создать представление, в котором реализован запрос,
определяющий для работников каждой специальности величину
максимальной почасовой ставки.
CREATE VIEW П_МАКС_СТАВКА (
СПЕЦИАЛЬНОСТЬ, МАКС_СТАВКА ) AS
SELECT СПЕЦИАЛЬНОСТЬ, MAX ( ПОЧАСОВАЯ_СТАВКА )
FROM РАБОТНИКИ
GROUP BY СПЕЦИАЛЬНОСТЬ
При определении представления данных можно использовать
также операции группировки.
(©) Владислав Лавров, vlavrov.com
72
Примеры использования представлений (продолжение)
Пример 4. У работников какой специальности максимальная почасовая ставка
превышает 70 рублей ?
SELECT СПЕЦИАЛЬНОСТЬ
FROM П_МАКС_СТАВКА
WHERE МАКС_СТАВКА > 70
Этапы выполнения запроса:
1. Выполнить спецификацию запроса
из представления
SELECT СПЕЦИАЛЬНОСТЬ,
MAX ( ПОЧАСОВАЯ_СТАВКА )
FROM РАБОТНИКИ
GROUP BY СПЕЦИАЛЬНОСТЬ
2. Выполнить запрос
1
2
(©) Владислав Лавров, vlavrov.com
73
4.8.10. Ограничения на обновления представлений данных
Внимание! Представление может изменяться командами модификации DML,
но модификация не будет воздействовать на само представление.
Команды будут на самом деле перенаправлены к базовой таблице.
Обновлять представления данных можно только тогда, когда его
спецификация запроса такова:
• В команде SELECT перечислены только имена столбцов, т.е. нет
вычислений и встроенных функций), отсутствует ключевое слово DISTINCT.
• В команде FROM стоит ссылка только на одну таблицу. Таблица, на
которую ссылается фраза FROM, должна быть либо базовой таблицей, либо
обновляемым представлением базы данных
• Отсутствуют команды GROUP BY, HAVING.
(©) Владислав Лавров, vlavrov.com
74
4.8.11. Удаление представлений данных
DROP VIEW < view name >
• нет необходимости сначала удалять всё содержание
представления данных как это делается с базовой
таблицей, потому что содержание представления не
является созданным и сохраняется в течении
определенной команды.
• пользователь должен являться владельцем (т.е. быть
создателем) представления, чтобы иметь возможность
удалить его.
(©) Владислав Лавров, vlavrov.com

More Related Content

What's hot

О.В. Сухорослов "Распределенные хранилища данных"
О.В. Сухорослов "Распределенные хранилища данных"О.В. Сухорослов "Распределенные хранилища данных"
О.В. Сухорослов "Распределенные хранилища данных"Yandex
 
Olap и oltp технологии
Olap и oltp технологииOlap и oltp технологии
Olap и oltp технологииIlya Ternovoy
 
Основы OLAP. Вебинар Workaround в Softengi
Основы OLAP. Вебинар Workaround в SoftengiОсновы OLAP. Вебинар Workaround в Softengi
Основы OLAP. Вебинар Workaround в SoftengiSoftengi
 
Все самые важные команды SQL за 60 минут
Все самые важные команды SQL за 60 минутВсе самые важные команды SQL за 60 минут
Все самые важные команды SQL за 60 минутSkillFactory
 
Konspekt
KonspektKonspekt
KonspektArtem
 
Data Destribution service OMG standart
Data Destribution service OMG standart Data Destribution service OMG standart
Data Destribution service OMG standart Sergei Seleznev
 
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»Mail.ru Group
 
Обзор инструментов Toad для администраторов Oracle
Обзор инструментов Toad для администраторов OracleОбзор инструментов Toad для администраторов Oracle
Обзор инструментов Toad для администраторов OracleBAKOTECH
 
C# Desktop. Занятие 09.
C# Desktop. Занятие 09.C# Desktop. Занятие 09.
C# Desktop. Занятие 09.Igor Shkulipa
 
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 08
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 08Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 08
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 087bits
 
DBD lection 4. Big Data, NoSQL. In Russian.
DBD lection 4. Big Data, NoSQL. In Russian.DBD lection 4. Big Data, NoSQL. In Russian.
DBD lection 4. Big Data, NoSQL. In Russian.mikhaelsmirnov
 
базы данных в Delphi
базы данных в Delphiбазы данных в Delphi
базы данных в DelphiAeka227
 

What's hot (20)

О.В. Сухорослов "Распределенные хранилища данных"
О.В. Сухорослов "Распределенные хранилища данных"О.В. Сухорослов "Распределенные хранилища данных"
О.В. Сухорослов "Распределенные хранилища данных"
 
Olap и oltp технологии
Olap и oltp технологииOlap и oltp технологии
Olap и oltp технологии
 
Основы OLAP. Вебинар Workaround в Softengi
Основы OLAP. Вебинар Workaround в SoftengiОсновы OLAP. Вебинар Workaround в Softengi
Основы OLAP. Вебинар Workaround в Softengi
 
Информатика (прикладное ПО)
Информатика (прикладное ПО)Информатика (прикладное ПО)
Информатика (прикладное ПО)
 
Информатика (рекомендуемые информационные ресурсы)
Информатика (рекомендуемые информационные ресурсы)Информатика (рекомендуемые информационные ресурсы)
Информатика (рекомендуемые информационные ресурсы)
 
Информатика (СУБД)
Информатика (СУБД)Информатика (СУБД)
Информатика (СУБД)
 
Информатика (эффективный поиск в Интернет)
Информатика (эффективный поиск в Интернет)Информатика (эффективный поиск в Интернет)
Информатика (эффективный поиск в Интернет)
 
Все самые важные команды SQL за 60 минут
Все самые важные команды SQL за 60 минутВсе самые важные команды SQL за 60 минут
Все самые важные команды SQL за 60 минут
 
базы данных
базы данныхбазы данных
базы данных
 
Konspekt
KonspektKonspekt
Konspekt
 
Data Destribution service OMG standart
Data Destribution service OMG standart Data Destribution service OMG standart
Data Destribution service OMG standart
 
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
 
Информатика (устройство ПК)
Информатика (устройство ПК)Информатика (устройство ПК)
Информатика (устройство ПК)
 
Обзор инструментов Toad для администраторов Oracle
Обзор инструментов Toad для администраторов OracleОбзор инструментов Toad для администраторов Oracle
Обзор инструментов Toad для администраторов Oracle
 
C# Desktop. Занятие 09.
C# Desktop. Занятие 09.C# Desktop. Занятие 09.
C# Desktop. Занятие 09.
 
Информатика (архитектура ПО)
Информатика (архитектура ПО)Информатика (архитектура ПО)
Информатика (архитектура ПО)
 
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 08
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 08Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 08
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 08
 
Информатика (архитектура)
Информатика (архитектура)Информатика (архитектура)
Информатика (архитектура)
 
DBD lection 4. Big Data, NoSQL. In Russian.
DBD lection 4. Big Data, NoSQL. In Russian.DBD lection 4. Big Data, NoSQL. In Russian.
DBD lection 4. Big Data, NoSQL. In Russian.
 
базы данных в Delphi
базы данных в Delphiбазы данных в Delphi
базы данных в Delphi
 

Viewers also liked

Язык программирования C#
Язык программирования C#Язык программирования C#
Язык программирования C#Dmitri Soshnikov
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)Pavel Tsukanov
 

Viewers also liked (18)

Управление данными (транзакции)
Управление данными (транзакции)Управление данными (транзакции)
Управление данными (транзакции)
 
МиСПИСиТ (источники ошибок)
МиСПИСиТ (источники ошибок)МиСПИСиТ (источники ошибок)
МиСПИСиТ (источники ошибок)
 
МиСПИСиТ (IDEF)
МиСПИСиТ (IDEF)МиСПИСиТ (IDEF)
МиСПИСиТ (IDEF)
 
МиСПИСиТ (тестирование и отладка)
МиСПИСиТ (тестирование и отладка)МиСПИСиТ (тестирование и отладка)
МиСПИСиТ (тестирование и отладка)
 
МиСПИСиТ (архитектура)
МиСПИСиТ (архитектура)МиСПИСиТ (архитектура)
МиСПИСиТ (архитектура)
 
МиСПИСиТ (общие принципы разработки)
МиСПИСиТ (общие принципы разработки)МиСПИСиТ (общие принципы разработки)
МиСПИСиТ (общие принципы разработки)
 
МиСПИСиТ (разработка программного модуля)
МиСПИСиТ (разработка программного модуля)МиСПИСиТ (разработка программного модуля)
МиСПИСиТ (разработка программного модуля)
 
МиСПИСиТ (введение)
МиСПИСиТ (введение)МиСПИСиТ (введение)
МиСПИСиТ (введение)
 
МиСПИСиТ (структура)
МиСПИСиТ (структура)МиСПИСиТ (структура)
МиСПИСиТ (структура)
 
Образовательная программа ИСТ на кафедре ТИМ УрФУ
Образовательная программа ИСТ на кафедре ТИМ УрФУОбразовательная программа ИСТ на кафедре ТИМ УрФУ
Образовательная программа ИСТ на кафедре ТИМ УрФУ
 
1. Кафедра ТИМ УрФУ
1. Кафедра ТИМ УрФУ1. Кафедра ТИМ УрФУ
1. Кафедра ТИМ УрФУ
 
МиСПИСиТ (литература по курсу)
МиСПИСиТ (литература по курсу)МиСПИСиТ (литература по курсу)
МиСПИСиТ (литература по курсу)
 
МиСПИСиТ (жизненный цикл)
МиСПИСиТ (жизненный цикл)МиСПИСиТ (жизненный цикл)
МиСПИСиТ (жизненный цикл)
 
МиСПИСиТ (внешнее описание)
МиСПИСиТ (внешнее описание)МиСПИСиТ (внешнее описание)
МиСПИСиТ (внешнее описание)
 
3. Общая характеристика АСУ
3. Общая характеристика АСУ3. Общая характеристика АСУ
3. Общая характеристика АСУ
 
Язык программирования C#
Язык программирования C#Язык программирования C#
Язык программирования C#
 
Лекция 1. Введение в Android.
Лекция 1. Введение в Android.Лекция 1. Введение в Android.
Лекция 1. Введение в Android.
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
 

Similar to Управление данными (sql)

0041
00410041
0041JIuc
 
0039
00390039
0039JIuc
 
0044
00440044
0044JIuc
 
Базы данных лекция №7
Базы данных лекция №7Базы данных лекция №7
Базы данных лекция №7Vitaliy Pak
 
Стажировка-2013, разработчики, занятие 11. Базы данных
Стажировка-2013, разработчики, занятие 11. Базы данныхСтажировка-2013, разработчики, занятие 11. Базы данных
Стажировка-2013, разработчики, занятие 11. Базы данных7bits
 
Лекция Android. БД SQLite, ContentProvider, Loader
Лекция Android. БД SQLite, ContentProvider, LoaderЛекция Android. БД SQLite, ContentProvider, Loader
Лекция Android. БД SQLite, ContentProvider, LoaderАлександр Брич
 
Управление Данными. Лекция 7
Управление Данными. Лекция 7Управление Данными. Лекция 7
Управление Данными. Лекция 7Dmitriy Krukov
 
лабораторная работа 2
лабораторная работа 2лабораторная работа 2
лабораторная работа 2student_kai
 
005
005005
005JIuc
 
Использование Sedna в WEB
Использование Sedna в WEBИспользование Sedna в WEB
Использование Sedna в WEBAlexandre Kalendarev
 
Embarcadero All-Access
Embarcadero All-AccessEmbarcadero All-Access
Embarcadero All-AccessSerghei Urban
 

Similar to Управление данными (sql) (20)

0041
00410041
0041
 
0039
00390039
0039
 
0044
00440044
0044
 
Базы данных лекция №7
Базы данных лекция №7Базы данных лекция №7
Базы данных лекция №7
 
Стажировка-2013, разработчики, занятие 11. Базы данных
Стажировка-2013, разработчики, занятие 11. Базы данныхСтажировка-2013, разработчики, занятие 11. Базы данных
Стажировка-2013, разработчики, занятие 11. Базы данных
 
Лекция Android. БД SQLite, ContentProvider, Loader
Лекция Android. БД SQLite, ContentProvider, LoaderЛекция Android. БД SQLite, ContentProvider, Loader
Лекция Android. БД SQLite, ContentProvider, Loader
 
Введение в Oracle
Введение в OracleВведение в Oracle
Введение в Oracle
 
Управление Данными. Лекция 7
Управление Данными. Лекция 7Управление Данными. Лекция 7
Управление Данными. Лекция 7
 
Lekcia9
Lekcia9Lekcia9
Lekcia9
 
лабораторная работа 2
лабораторная работа 2лабораторная работа 2
лабораторная работа 2
 
005
005005
005
 
Drupal Migrate
Drupal MigrateDrupal Migrate
Drupal Migrate
 
Использование Sedna в WEB
Использование Sedna в WEBИспользование Sedna в WEB
Использование Sedna в WEB
 
JDBC
JDBCJDBC
JDBC
 
Embarcadero All-Access
Embarcadero All-AccessEmbarcadero All-Access
Embarcadero All-Access
 
My sql 0
My sql 0My sql 0
My sql 0
 
10 субд
10 субд10 субд
10 субд
 
лекция 2
лекция 2лекция 2
лекция 2
 
Microsoft access 2007
Microsoft access 2007Microsoft access 2007
Microsoft access 2007
 
Microsoft access 2007
Microsoft access 2007Microsoft access 2007
Microsoft access 2007
 

More from Ural Federal University named after First President of Russia B.N. Yeltsin

More from Ural Federal University named after First President of Russia B.N. Yeltsin (20)

2016 ВКР Черемискина Н.А.
2016 ВКР Черемискина Н.А.2016 ВКР Черемискина Н.А.
2016 ВКР Черемискина Н.А.
 
2016 ВКР Гребнева Н.В.
2016 ВКР Гребнева Н.В.2016 ВКР Гребнева Н.В.
2016 ВКР Гребнева Н.В.
 
2016 ВКР Имашева А.А.
2016 ВКР Имашева А.А.2016 ВКР Имашева А.А.
2016 ВКР Имашева А.А.
 
Введение в методы agile
Введение в методы agileВведение в методы agile
Введение в методы agile
 
ООП. Рекомендуемые информационные ресурсы
ООП. Рекомендуемые информационные ресурсыООП. Рекомендуемые информационные ресурсы
ООП. Рекомендуемые информационные ресурсы
 
Методоллогии Agile
Методоллогии AgileМетодоллогии Agile
Методоллогии Agile
 
3. Информация и ее роль
3. Информация и ее роль3. Информация и ее роль
3. Информация и ее роль
 
Наследование и полиморфизм
Наследование и полиморфизмНаследование и полиморфизм
Наследование и полиморфизм
 
Классы и объекты С#
Классы и объекты С#Классы и объекты С#
Классы и объекты С#
 
Составные части объектного подхода
Составные части объектного подходаСоставные части объектного подхода
Составные части объектного подхода
 
Интерфейсы
ИнтерфейсыИнтерфейсы
Интерфейсы
 
магистратура 09.04.02 ист на кафедре тим урфу+
магистратура 09.04.02 ист на кафедре тим урфу+магистратура 09.04.02 ист на кафедре тим урфу+
магистратура 09.04.02 ист на кафедре тим урфу+
 
магистратура 22.04.02 металлургия на кафедре тим+
магистратура 22.04.02 металлургия на кафедре тим+магистратура 22.04.02 металлургия на кафедре тим+
магистратура 22.04.02 металлургия на кафедре тим+
 
1.5 тп (технологические подходы)+
1.5 тп (технологические подходы)+1.5 тп (технологические подходы)+
1.5 тп (технологические подходы)+
 
1.4 тп (общие принципы разработки)+
1.4 тп (общие принципы разработки)+1.4 тп (общие принципы разработки)+
1.4 тп (общие принципы разработки)+
 
1.3 тп (источники ошибок)+
1.3 тп (источники ошибок)+1.3 тп (источники ошибок)+
1.3 тп (источники ошибок)+
 
2014 Сабиров Е.Р. презентация КП по ПБД
2014 Сабиров Е.Р. презентация КП по ПБД2014 Сабиров Е.Р. презентация КП по ПБД
2014 Сабиров Е.Р. презентация КП по ПБД
 
2014 Мищенко К.В. презентация КП по ПБД
2014 Мищенко К.В. презентация КП по ПБД2014 Мищенко К.В. презентация КП по ПБД
2014 Мищенко К.В. презентация КП по ПБД
 
2014 Пильщиков С.Н. презентация КП по ПБД
2014 Пильщиков С.Н. презентация КП по ПБД2014 Пильщиков С.Н. презентация КП по ПБД
2014 Пильщиков С.Н. презентация КП по ПБД
 
2014 диплом Терехова А.Ю
2014 диплом Терехова А.Ю2014 диплом Терехова А.Ю
2014 диплом Терехова А.Ю
 

Управление данными (sql)

  • 1. 1 Управление данными Часть 4. Язык SQL (©) Владислав Лавров, vlavrov.com
  • 2. 2 4.1. История развития SQL SQL (Structured Query Language) - это сокращенное название структурированного языка запросов, предоставляющего средства создания и обработки данных в реляционных БД 1970 – доктор Эдгар Кодд создаёт модель реляционной базы данных (опубликована статья «Реляционная модель для больших банков совместно используемых данных» («A Relational Model of Data for Large Shared Data Banks»)) 1974 – начинается разработка проекта System/R компании IBM 1974 – первая статья с описанием языка SEQUEL (Structured English Query Language) 1978 – опытная эксплуатация проекта System/R 1979 – появляется первая коммерческая реляционная СУБД компании Oracle 1981 – компания Relation Technology выпускает СУБД Ingres 1981 – компания IBM создает СУБД SQL/DS 1982 – ANSI формирует комитет по стандартизации языка SQL 1983 – компания IBM объявляет о создании СУБД DB2 1986 – ANSI принимает стандарт SQL-1 Этапы развития языка SQL (©) Владислав Лавров, vlavrov.com
  • 3. 3 1986 – компания Sybase создает реляционную СУБД для обработки транзакций 1987 – ISO одобряет стандарт SQL-1 1988 – компании Ashton-Tate и Microsoft объявляют о выпуске СУБД SQL Server для операционной системы OS/2 1989 – опубликован первый тест производительности TPC (TPC-A) 1990 – опубликован тест производительности TPC-B 1991 – консорциум SQL Access Group публикует спецификацию доступа к базам данных 1991 – компания Microsoft публикует спецификация протокола ODBC (Open DataBase Connectivity) 1992 – ANSI принимает стандарт SQL-2 1992 – опубликован тест производительности TPC-C (для OLTP-систем, Online Transaction Processing). 1993 – первые поставки систем обслуживания хранилищ данных 1993 – первые поставки программных продуктов, поддерживающих протокол ODBC 1994 – опубликован тест производительности TPC-D (для систем поддержки принятия решений) 1994 – коммерческие поставки серверов баз данных, поддерживающих параллельную обработку Этапы развития языка SQL (продолжение) (©) Владислав Лавров, vlavrov.com
  • 4. 4 1996 – опубликован стандарт API-функций для доступа к базам данных OLAP и тест производительности OLAP-систем (OnLine Analytical Processing) 1997 – компания IBM выпускает СУБД DB2 Universal Database, унифицировав ее архитектуру для работы на платформах других поставщиков 1998 – компания Microsoft выпустила СУБД SQL Server 7, обеспечив поддержку корпоративных баз данных для платформы Windows NT 1998 – выпущена СУБД Oracle 8i, ознаменовавшая отход от архитектуры клиент/сервер и обеспечивающая интеграцию баз данных с Internet 1999 – ANSI/ISO опубликовали стандарт SQL-3. Добавлена поддержка регулярных выражений, рекурсивных запросов, поддержка триггеров, базовые процедурные расширения, нескалярные типы данных и некоторые объектно-ориентированные возможности. Этапы развития языка SQL (продолжение) (©) Владислав Лавров, vlavrov.com
  • 5. 5 2003 – ANSI/ISO опубликовали стандарт SQL:2003. Введены расширения для работы с XML-данными, оконные функции (применяемые для работы с OLAP-базами данных), генераторы последовательностей и основанные на них типы данных. 2006 – ANSI/ISO опубликовали стандарт SQL:2006. Функциональность работы с XML- данными значительно расширена. Появилась возможность совместно использовать в запросах SQL и XQuery. 2008 – ANSI/ISO опубликовали стандарт SQL:2008. Улучшены возможности оконных функций, устранены некоторые неоднозначности стандарта SQL:2003 Этапы развития языка SQL (продолжение) (©) Владислав Лавров, vlavrov.com
  • 6. 6 4.2. Функциональные категории команд SQL Интерактивный SQL используется для функционирования непосредственно в базе данных, чтобы производить вывод информации для использования ее пользователем. Вложенный SQL состоит из команд SQL помещенных внутри программ, которые обычно написаны на некотором другом языке (типа Паскаля). Формы языка SQL Функциональные категории команд языка SQL DDL (Data Definition Language, Язык Определения Данных) – состоит из команд которые создают объекты (таблицы, индексы, представления и так далее ) в базе данных DML (Data Manipulation Language, Язык Манипулирования Данными) – это набор команд, которые определяют какие значения представлены в таблицах в любой момент времени, а также позволяют помещать, изменять и удалять данные из таблиц БД; DCL (Data Control Language, Язык Управления Данными) – состоит из средств, которые управляют выполнением транзакций, а также определяют разрешить ли пользователю выполнять определенные действия или нет. (©) Владислав Лавров, vlavrov.com
  • 7. 7 Операторы определения данных DDL (©) Владислав Лавров, vlavrov.com
  • 8. 8 Операторы манипулирования данными DML (©) Владислав Лавров, vlavrov.com
  • 9. 9 Операторы управления данными DCL (©) Владислав Лавров, vlavrov.com
  • 10. 10 Операторы управления данными DCL (продолжение) (©) Владислав Лавров, vlavrov.com
  • 11. 11 4.3. Основные возможности SQL • предложения определения данных; • запросы на выбор данных; • предложения модификации данных; • предложения управления данными Кроме того, он предоставляет возможность выполнять в этих предложениях: • арифметические вычисления (включая разнообразные функциональные преобразования), обработку текстовых строк и выполнение операций сравнения значений арифметических выражений и текстов; • упорядочение строк и (или) столбцов при выводе содержимого таблиц на печать или экран дисплея; • создание представлений (виртуальных таблиц), позволяющих пользователям иметь свой взгляд на данные без увеличения их объема в базе данных; • запоминание выводимого по запросу содержимого таблицы, нескольких таблиц или представления в другой таблице (реляционная операция присваивания). • группирование (агрегатирование) данных и применение к этим группам таких операций, как среднее, сумма, максимум, минимум, число элементов и т.п. (©) Владислав Лавров, vlavrov.com
  • 12. 12 4.4. Достоинства языка SQL • стандартность языка SQL • возможность переноса с одной вычислительной системы на другую • реляционная основа языка • возможность создания интерактивных запросов • возможность программного доступа к БД • обеспечение различного представления данных • возможность динамического изменения и расширения структуры БД • поддержка архитектуры клиент/сервер (©) Владислав Лавров, vlavrov.com
  • 13. 13 4.5. Управление базами данных с помощью SQL • всякому столбцу таблицы присвоено имя, которое должно быть уникальным для этой таблицы; • столбцы таблицы упорядочиваются слева направо, т.е. столбец 1, столбец 2, ..., столбец n. • строки таблицы не упорядочены (их последовательность определяется лишь последовательностью ввода в таблицу); • в поле на пересечении строки и столбца любой таблицы всегда имеется только одно значение данных и никогда не должно быть множества значений • всем строкам таблицы соответствует одно и то же множество столбцов, хотя в определённых столбцах любая строка может содержать пустые значения (NULL-значения), т.е. может не иметь значений для этих столбцов; • все строки таблицы обязательно отличаются друг от друга хотя бы единственным значением, что позволяет однозначно идентифицировать любую строку такой таблицы; • при выполнении операций с таблицей ее строки и столбцы можно обрабатывать в любом порядке безотносительно к их информационному содержанию. (©) Владислав Лавров, vlavrov.com
  • 14. 14 4.6. Типы данных в SQL CHARACTER(n), CHAR(n) (n – число символов 0 < n < 254) Строки символов постоянной длины VARCHAR(n) Строки символов переменной длины INTEGER, INT SMALLINT Целые числа Десятичные числа DECIMAL(p,q), DEC(p,q) (0 < p < 16, q < p) Малые целые числа FLOAT (n) (n – число байтов ) Вещественное число с плавающей запятой REAL Вещественное число с плавающей запятой низкой точности DOUBLE PRECISION Вещественное число с плавающей запятой высокой точности (©) Владислав Лавров, vlavrov.com
  • 15. 15 Типы данных в SQL (продолжение) DATE дата в формате, определяемом специальной командой (по умолчанию mm/dd/yy) TIME время в формате, определяемом специальной командой (по умолчанию hh.mm.ss) DATETIME комбинация даты и времени MONEY деньги (©) Владислав Лавров, vlavrov.com
  • 16. 16 4.7. Определение таблиц в SQL Пользователь (запрос с терминала или прикладной программы) SQL-запрос Виртуальная таблица Рабочая Представление Базовая таблица Базовая таблица Базовая таблица Сервер базы данных Реальная таблица Хранимая таблица База данных в восприятии пользователя (©) Владислав Лавров, vlavrov.com
  • 17. 17 4.7.1. Команда создания таблицы CREATE TABLE < table name > ( { < column name > < data type > [ < size > ] [ < colconstr > ... ] } , ... ) ; [ < tabconstr > ] , ... ) ; < table name > - имя таблицы создаваемой этой командой < column name > - имя столбца таблицы < data type > - тип данных, который может содержаться в столбце. Может быть любым из следующих: INTEGER (ЦЕЛОЕ ЧИСЛО), CHARACTER (СИМВОЛЬНОЕ), DECIMAL (ДЕСЯТИЧНОЕ), NUMERIC (ЧИСЛОВОЕ), SMALLINT (НАИМЕНЬШЕЕ ЦЕЛОЕ) FLOAT (С ПЛАВАЮЩЕЙ ТОЧКОЙ) REAL (РЕАЛЬНОЕ), DOUBLE PRECISION (УДВОЕННАЯ ТОЧНОСТЬ С ПЛАВАЮЩЕЙ ТОЧКОЙ), LONG * (ДЛИННОЕ *), VARCHAR * (ПЕРЕМЕННОЕ СИМВОЛЬНОЕ) *, DATE (ДАТА *), TIME (ВРЕМЯ) ( * - указывает на нестандартный для SQL тип данных) (©) Владислав Лавров, vlavrov.com
  • 18. 18 Команда создания таблицы (продолжение) < size > - размер поля. Его значение зависит от <data type> < colconstr > - ограничение столбца. Может быть любым из следующих: NOT NULL (НЕ НУЛЕВОЙ), UNIQUE (УНИКАЛЬНЫЙ), PRIMARY KEY (ПЕРВИЧНЫЙ КЛЮЧ), CHECK(<predicate>) (ПРОВЕРКА предиката), DEFAULT = (ПО УМОЛЧАНИЮ = <value expression> значимому выражению) REFERENCES <table name> (ССЫЛКА НА имя таблицы [(<column name>, ... )] [( имя столбца) ] ) < tabconstr > - ограничение таблицы. Может быть любым из следующих: UNIQUE (УНИКАЛЬНЫЙ), PRIMARY KEY (ПЕРВИЧНЫЙ КЛЮЧ), CHECK(<predicate>) (ПРОВЕРКА предиката), FOREIGN KEY(<column name>) (ВНЕШНИЙ КЛЮЧ) REFERENCES <table name> (ССЫЛКА НА имя таблицы [(<column name>, ... )] [( имя столбца) ] ) (©) Владислав Лавров, vlavrov.com
  • 19. 19 Информационные сущности БД «Рембригада» РАБОТНИКИ Табельный_номер ФИО Специальность Почасовая_ставка Бригадир ОБЪЕКТЫ Номер_объекта Адрес_объекта Тип_объекта Уровень_сложности РАБОТА Табельный_номер Номер_объекта Дата_начала Количество_дней 1 1 ¥ ¥ (©) Владислав Лавров, vlavrov.com
  • 20. 20 Пример определения таблиц для БД «Рембригада» CREATE TABLE РАБОТНИКИ ( ТАБЕЛЬНЫЙ_НОМЕР INTEGER NOT NULL PRIMARY KEY, ФИО CHARACTER (15), СПЕЦИАЛЬНОСТЬ CHARACTER (15), ПОЧАСОВАЯ_СТАВКА DECIMAL (6,1), БРИГАДИР INTEGER ) CREATE TABLE ОБЪЕКТЫ ( НОМЕР_ОБЪЕКТА INTEGER NOT NULL PRIMARY KEY, АДРЕС_ОБЪЕКТА CHARACTER (15), ТИП_ОБЪЕКТА CHARACTER (9) DEFAULT ‘офис’ CHECK (TYPE IN (‘офис’, ’склад’, ’магазин’, ’жилой дом’ ) ), УРОВЕНЬ_СЛОЖНОСТИ INTEGER DEFAULT 1 CHECK (УРОВЕНЬ_СЛОЖНОСТИ > 0 AND УРОВЕНЬ_СЛОЖНОСТИ < 5) ) CREATE TABLE РАБОТА ( ТАБЕЛЬНЫЙ_НОМЕР INTEGER NOT NULL, НОМЕР_ОБЪЕКТА INTEGER NOT NULL, ДАТА_НАЧАЛА DATE, КОЛИЧЕСТВО_ДНЕЙ INTEGER, PRIMARY KEY (ТАБЕЛЬНЫЙ_НОМЕР, НОМЕР_ОБЪЕКТА), FOREIGN KEY ТАБЕЛЬНЫЙ_НОМЕР REFERENCES РАБОТНИКИ ON DELETE CASCADE, FOREIGN KEY НОМЕР_ОБЪЕКТА REFERENCES ОБЪЕКТЫ ON DELETE CASCADE )(©) Владислав Лавров, vlavrov.com
  • 21. 21 4.7.2. Изменение таблицы после того как она была создана ALTER TABLE < table name > ADD < column name > < data type > < size > ; • Столбец будет добавлен со значением NULL для всех строк таблицы. • Новый столбец станет последним по порядку столбцом таблицы. • Можно добавить сразу несколько новых столбцов, отделив их запятыми, в одной команде. • Имеется возможность удалять или изменять столбцы. (©) Владислав Лавров, vlavrov.com
  • 22. 22 4.7.3. Удаление таблиц DROP TABLE < table name >; • Чтобы иметь возможность удалить таблицу, пользователь должен иметь права владельца (т.е. быть создателем) этой таблицы. • Прежде, чем удалить таблицу из базы данных SQL потребует очистить ее от данных. (©) Владислав Лавров, vlavrov.com
  • 23. 23 4.7.4. Ограничение значений данных в таблицах Виды ограничений • Ограничение столбца применяется только к индивидуальным столбцам • Ограничение таблицы применяется к группам из одного и более столбцов (©) Владислав Лавров, vlavrov.com
  • 24. 24 Объявление ограничений В таблице РАБОТНИКИ ТАБЕЛЬНЫЙ_НОМЕР INTEGER NOT NULL PRIMARY KEY ТИП_ОБЪЕКТА CHARACTER (9) DEFAULT ‘офис’ CHECK (TYPE IN (‘офис’, ’склад’, ’магазин’, ’жилой дом’ ) ), УРОВЕНЬ_СЛОЖНОСТИ INTEGER DEFAULT 1 CHECK (УРОВЕНЬ_СЛОЖНОСТИ > 0 AND УРОВЕНЬ_СЛОЖНОСТИ < 5) В таблице ОБЪЕКТЫ PRIMARY KEY (ТАБЕЛЬНЫЙ_НОМЕР, НОМЕР_ОБЪЕКТА), FOREIGN KEY ТАБЕЛЬНЫЙ_НОМЕР REFERENCES РАБОТНИКИ ON DELETE CASCADE, FOREIGN KEY НОМЕР_ОБЪЕКТА REFERENCES ОБЪЕКТЫ ON DELETE CASCADE В таблице РАБОТА (©) Владислав Лавров, vlavrov.com
  • 25. 25 Опции команды ON DELETE • CASCADE (распространить) • SET NULL (установить пустое значение) • SET DEFAULT (установить значение по умолчанию) (©) Владислав Лавров, vlavrov.com
  • 26. 26 4.8. Манипуляция данными 4.8.1. Простые запросы Простой запрос – запрос, который обращается только к одной таблице БД SELECT * | { [ DISTINCT | ALL ] < value expression > , ... } FROM { < table name > [ < alias > ] } , ... [ WHERE < predicate > ] [ GROUP BY { < column name > | < integer > } , ... ] [ HAVING < predicate > ] [ ORDER BY { < column name > | < integer > } , ... ] (©) Владислав Лавров, vlavrov.com
  • 27. 27 Простые запросы (продолжение) < value expression > - выражение которое производит значение. Оно может включать в себя или содержать <column name>. < table name > - имя или синоним таблицы или представления. < alias > - временный синоним для <table name>, определенный в этой таблице и используемый только в этой команде < predicate > - условие, которое может быть верным или неверным для каждой строки или комбинации строк таблицы в предложении FROM. < column name > - имя столбца в таблице < integer > - число с десятичной точкой, которое показывает <value expression> в предложении SELECT с помощью идентификации его местоположения в этом предложении. (©) Владислав Лавров, vlavrov.com
  • 28. 28 Некоторые пояснения по синтаксису запроса SELECT (выбрать) данные из указанных столбцов и (если необходимо) выполнить перед выводом их преобразование в соответствии с указанными выражениями и (или) функциями FROM (из) перечисленных таблиц, в которых расположены эти столбцы WHERE (где) строки из указанных таблиц должны удовлетворять указанному перечню условий отбора строк GROUP BY (группируя по) указанному перечню столбцов с тем, чтобы получить для каждой группы единственное агрегированное значение, используя во фразе SELECT встроенные SQL-функции SUM (сумма), COUNT (количество), MIN (минимальное значение), MAX (максимальное значение) или AVG (среднее значение) HAVING (имея) в результате лишь те группы, которые удовлетворяют указанному перечню условий отбора групп (©) Владислав Лавров, vlavrov.com
  • 29. 29 Примеры простых запросов Кто работает штукатурами? SELECT ФИО FROM РАБОТНИКИ WHERE СПЕЦИАЛЬНОСТЬ = ’штукатур’ БД Результат Запрос (©) Владислав Лавров, vlavrov.com
  • 30. 30 Примеры простых запросов Привести все данные об объектах типа «офис» SELECT * FROM ОБЪЕКТЫ WHERE ТИП_ОБЪЕКТА = ’офис’ БД Результат Запрос Звездочка (*) в команде SELECT означает «строка целиком» (©) Владислав Лавров, vlavrov.com
  • 31. 31 Примеры простых запросов Какова недельная зарплата каждого электрика (40-часовая рабочая неделя)? SELECT ФИО, ‘ Недельная зарплата = ’, 40 * Почасовая_ставка FROM РАБОТНИКИ WHERE СПЕЦИАЛЬНОСТЬ = ’электрик ’ ORDER BY ФИО БД Результат Запрос (©) Владислав Лавров, vlavrov.com
  • 32. 32 Примеры простых запросов У кого почасовая ставка составляет от 60 до 70 руб.? SELECT * FROM РАБОТНИКИ WHERE Почасовая_ставка > = 60 AND Почасовая_ставка < = 70 БД Результат Запрос Для сравнения столбцов с другими столбцами или с константами могут использоваться операторы сравнения (= | <> | < | <= | > | >=) (©) Владислав Лавров, vlavrov.com
  • 33. 33 Операторы условия в запросах BETWEEN (между) – используется для сравнения некоторой величины с двумя другими, первая из которых меньше второй, если сравниваемая величина может быть равна каждой из данных величин или любому значению между ними. Существует и противоположный предикат NOT BETWEEN, который истинен тогда, когда сравниваемое значение не попадает в заданный интервал, включая его границы. БД Результат Запрос У кого почасовая ставка составляет от 60 до 70 руб.? SELECT * FROM РАБОТНИКИ WHERE Почасовая_ставка BETWEEN 60 AND 70 (©) Владислав Лавров, vlavrov.com
  • 34. 34 Операторы условия в запросах (продолжение) IN (принадлежит) – условие фразы WHERE считается истинным, если значение принадлежит множеству, состоящему из констант, перечисленных в скобках. Одновременно существует противоположный предикат NOT IN, который истинен тогда, когда сравниваемое значение не входит в заданное множество. БД Результат Запрос Перечислить штукатуров и кровельщиков. SELECT * FROM РАБОТНИКИ WHERE Специальность IN (‘штукатур’, ‘кровельщик’) (©) Владислав Лавров, vlavrov.com
  • 35. 35 Операторы условия в запросах (продолжение) LIKE (похоже на) – требуется для сравнения символьных переменных с константами. LIKE применим только к полям типа CHAR или VARCHAR, с которыми он используется чтобы находить подстроки. Т.е. он ищет поле символа чтобы видеть, совпадает ли с условием часть его строки. В качестве условия он использует символы шаблона - специальные символы которые могут соответствовать чему-нибудь. Имеются два типа символов шаблона, используемых с LIKE: _ (подчеркивание) – замещает ровно один неопределенный символ, % (процент) – замещает произвольное число символов, начиная с нуля. БД Результат Запрос Перечислить работников, у которых название специальности начинается с фразы «элек» SELECT * FROM РАБОТНИКИ WHERE Специальность LIKE ( ‘элек%’ ) (©) Владислав Лавров, vlavrov.com
  • 36. 36 Операторы условия в запросах (продолжение) IS NULL – оператор сравнения с неопределенным значением (неизвестным на данный момент времени) Это значение при появлении дополнительной информации в любой момент времени может быть заменено на некоторое конкретное значение. При сравнении неопределенных значений не действуют стандартные правила сравнения: одно неопределенное значение никогда не считается равным другому неопределенному значению. NULL1 ≠ NULL2 (©) Владислав Лавров, vlavrov.com
  • 37. 37 Таблица истинности логических выражений AND (и) – когда должны удовлетворяться оба разделяемых с помощью AND условия; OR (или) – когда должно удовлетворяться одно из разделяемых с помощью OR условий; AND NOT (и не) – когда должно удовлетворяться первое условие и не должно второе; OR NOT (или не) – когда или должно удовлетворяться первое условие или не должно удовлетворяться второе. (©) Владислав Лавров, vlavrov.com
  • 38. 38 4.8.2. Многотабличные запросы Рабочие каких специальностей назначены на объект № 435 ? SELECT СПЕЦИАЛЬНОСТЬ FROM РАБОТНИКИ, РАБОТА WHERE РАБОТНИКИ.ТАБЕЛЬНЫЙ_НОМЕР = РАБОТА.ТАБЕЛЬНЫЙ_НОМЕР AND НОМЕР_ОБЪЕКТА = 435 БД Результат Запрос (©) Владислав Лавров, vlavrov.com
  • 39. 39 Многотабличные запросы (продолжение) Перечислить работников, указав имена их бригадиров. SELECT A.ФИО, B.ФИО FROM РАБОТНИКИ А, РАБОТНИКИ B WHERE B.ТАБЕЛЬНЫЙ_НОМЕР = A.БРИГАДИР БД Результат Запрос ФИО работника ФИО бригадира (©) Владислав Лавров, vlavrov.com
  • 40. 40 Многотабличные запросы (продолжение) Перечислить работников, назначенных на объекты типы «офис». SELECT ФИО FROM РАБОТНИКИ, РАБОТА, ОБЪЕКТЫ WHERE РАБОТНИКИ.ТАБЕЛЬНЫЙ_НОМЕР = РАБОТА.ТАБЕЛЬНЫЙ_НОМЕР AND РАБОТА.НОМЕР_ОБЪЕКТА = ОБЪЕКТЫ.НОМЕР_ОБЪЕКТА AND ТИП_ОБЪЕКТА = ‘офис’ БД Результат Запрос Пример дубликатов фамилий (©) Владислав Лавров, vlavrov.com
  • 41. 41 Многотабличные запросы (продолжение) Перечислить работников, назначенных на объекты типы «офис». SELECT DISTINCT ФИО FROM РАБОТНИКИ, РАБОТА, ОБЪЕКТЫ WHERE РАБОТНИКИ.ТАБЕЛЬНЫЙ_НОМЕР = РАБОТА.ТАБЕЛЬНЫЙ_НОМЕР AND РАБОТА.НОМЕР_ОБЪЕКТА = ОБЪЕКТЫ.НОМЕР_ОБЪЕКТА AND ТИП_ОБЪЕКТА = ‘офис’ БД Результат Запрос DISTINCT – оператор, исключающий повторяющиеся строки Дубликаты строк отсутствуют (©) Владислав Лавров, vlavrov.com
  • 42. 42 Вложенный подзапрос – это подзапрос, заключенный в круглые скобки и вложенный в WHERE фразу предложения SELECT или других предложений, использующих WHERE фразу. Другими словами, это запрос внутри запроса. 4.8.3. Подзапросы Запрос: Рабочие каких специальностей назначены на объект № 435 ? Вложенный подзапрос Внешний запрос SELECT СПЕЦИАЛЬНОСТЬ FROM РАБОТНИКИ WHERE ТАБЕЛЬНЫЙ_НОМЕР IN ( SELECT ТАБЕЛЬНЫЙ_НОМЕР FROM РАБОТА WHERE НОМЕР_ОБЪЕКТА = 435 ) 1 2 3 (©) Владислав Лавров, vlavrov.com
  • 43. 43 Простой (некоррелированный) подзапрос – подзапрос, значение которого не зависит ни от какого внешнего запроса. Простые и коррелированные подзапросы Перечислить работников, назначенных на объекты типа «офис». SELECT ФИО FROM РАБОТНИКИ WHERE ТАБЕЛЬНЫЙ_НОМЕР IN ( SELECT ТАБЕЛЬНЫЙ_НОМЕР FROM РАБОТА WHERE НОМЕР_ОБЪЕКТА IN ( SELECT НОМЕР_ОБЪЕКТА FROM ОБЪЕКТЫ WHERE ТИП_ОБЪЕКТА = ‘офис’ ) ) БД Результат Запрос Вложенный подзапрос № 2 Вложенный подзапрос № 1 Главный запрос (©) Владислав Лавров, vlavrov.com
  • 44. 44 Коррелированный подзапрос – подзапрос, результат которого зависит от строки, рассматриваемой главным запросом. Простые и коррелированные подзапросы (продолжение) Перечислить работников, чьи почасовые ставки выше, чем почасовые ставки их бригадиров. SELECT ФИО FROM РАБОТНИКИ А WHERE А.ПОЧАСОВАЯ_СТАВКА > ( SELECT B.ПОЧАСОВАЯ_СТАВКА FROM РАБОТНИКИ B WHERE B.ТАБЕЛЬНЫЙ_НОМЕР = A.БРИГАДИР ) БД Результат Запрос Вложенный подзапрос Главный запрос (©) Владислав Лавров, vlavrov.com
  • 45. 45 4.8.4. Операторы EXISTS и NOT EXISTS БД Результат Запрос Перечислить работников, не назначенных на объект 435. Пример неправильного запроса SELECT ТАБЕЛЬНЫЙ_НОМЕР FROM РАБОТА WHERE НОМЕР_ОБЪЕКТА <> 435 Работники, ошибочно попавшие в результат запроса (©) Владислав Лавров, vlavrov.com
  • 46. 46 Операторы EXISTS и NOT EXISTS (продолжение) БД Результат Запрос Перечислить работников, не назначенных на объект 435. SELECT ТАБЕЛЬНЫЙ_НОМЕР FROM РАБОТНИКИ WHERE NOT EXISTS ( SELECT * FROM РАБОТА WHERE РАБОТА.ТАБЕЛЬНЫЙ_НОМЕР = РАБОТНИКИ.ТАБЕЛЬНЫЙ_НОМЕР AND НОМЕР_ОБЪЕКТА = 435 ) (©) Владислав Лавров, vlavrov.com
  • 47. 47 Операторы EXISTS и NOT EXISTS (продолжение) БД Результат Запрос Перечислить работников, не назначенных на объект 435. Другой способ (использование некоррелированного запроса) SELECT ТАБЕЛЬНЫЙ_НОМЕР FROM РАБОТНИКИ WHERE ТАБЕЛЬНЫЙ_НОМЕР NOT IN ( SELECT ТАБЕЛЬНЫЙ_НОМЕР FROM РАБОТА WHERE НОМЕР_ОБЪЕКТА = 435 ) (©) Владислав Лавров, vlavrov.com
  • 48. 48 Операторы EXISTS и NOT EXISTS (продолжение) БД Результат Запрос Перечислить работников, назначенных на каждое здание. Другая формулировка этого же запроса (двойное отрицание): Перечислить работников, для которых не существует здания, на которое они не назначены. SELECT ТАБЕЛЬНЫЙ_НОМЕР FROM РАБОТНИКИ WHERE NOT EXISTS ( SELECT НОМЕР_ОБЪЕКТА FROM ОБЪЕКТЫ WHERE NOT EXISTS ( SELECT * FROM РАБОТА WHERE РАБОТА.НОМЕР_ОБЪЕКТА = ОБЪЕКТЫ.НОМЕР_ОБЪЕКТА AND РАБОТА.ТАБЕЛЬНЫЙ_НОМЕР = РАБОТНИКИ.ТАБЕЛЬНЫЙ_НОМЕР ) ) NOT EXISTS является единственным средством решения запросов, содержащих в условии слово «каждый». (©) Владислав Лавров, vlavrov.com
  • 49. 49 Примеры запросов Каковы максимальная и минимальная почасовые ставки ? Каково среднее число дней работы служащих на объекте 435 ? Каково общее число дней, отведенных на штукатурные работы на объекте 312 ? Сколько всего разных специальностей у работников? 4.8.5. Встроенные функции Для реализации запросов надо использовать встроенные в SQL статистические функции: • SUM (сумма), • AVG (среднее), • COUNT (количество), • MAX (максимум), • MIN (минимум). (©) Владислав Лавров, vlavrov.com
  • 50. 50 Встроенные функции (продолжение) БД Результат Запрос Каковы максимальная и минимальная почасовые ставки? SELECT MAX ( ПОЧАСОВАЯ_СТАВКА ), MIN ( ПОЧАСОВАЯ_СТАВКА ) FROM РАБОТНИКИ • Функции MAX и MIN оперируют одним столбцом таблицы. Они выбирают максимальное или минимальное значение соответственно из этого столбца. • Столбец может содержать числовые или строковые значения, либо значения даты/времени. • Результат, возвращаемый этими функциями, имеет точно такой же тип данных, что и сам столбец. (©) Владислав Лавров, vlavrov.com
  • 51. 51 Встроенные функции (продолжение) БД Результат Запрос Каково общее число дней, отведенных на штукатурные работы на объекте 312 ? SELECT SUM ( КОЛИЧЕСТВО_ДНЕЙ ) FROM РАБОТА, РАБОТНИКИ WHERE РАБОТНИКИ.ТАБЕЛЬНЫЙ_НОМЕР = РАБОТА.ТАБЕЛЬНЫЙ_НОМЕР AND СПЕЦИАЛЬНОСТЬ = ‘штукатур’ AND НОМЕР_ОБЪЕКТА = 312 • Функция SUM вычисляет сумму всех значений столбца. • Данные, содержащиеся в столбце, должны иметь числовой тип (содержать целые числа, десятичные числа или числа с плавающей запятой или денежные величины). • Результат, возвращаемый функцией SUM, имеет тот же тип данных, что и столбец, однако точность результата может быть выше (©) Владислав Лавров, vlavrov.com
  • 52. 52 Встроенные функции (продолжение) БД Результат Запрос Каково среднее число дней работы служащих на объекте 435? SELECT AVG ( КОЛИЧЕСТВО_ДНЕЙ ) FROM РАБОТА WHERE НОМЕР_ОБЪЕКТА = 435 • Функция AVG вычисляет среднее всех значений столбца. Вначале она суммирует все значения, содержащиеся в столбце, а затем делит сумму на число этих значений. • Данные, содержащиеся в столбце, должны иметь числовой тип. • Результат может иметь не такой же тип, как столбец. Например, если AVG применить к столбцу целых чисел, то результат будет либо десятичным числом, либо числом с плавающей точкой, в зависимости от СУБД. (©) Владислав Лавров, vlavrov.com
  • 53. 53 Встроенные функции (продолжение) БД Результат Запрос Сколько всего разных специальностей у работников? SELECT COUNT ( DISTINCT СПЕЦИАЛЬНОСТЬ ) FROM РАБОТНИКИ • Функция COUNT подсчитывает число значений в данном столбце или число строк в таблице. • Когда она считает значения столбца, она используется с DISTINCT чтобы производить подсчет различных числовых значений в данном поле. • Тип данных в столбце может быть любым • Функция COUNT всегда возвращает целый тип данных независимо от типа данных столбцов (©) Владислав Лавров, vlavrov.com
  • 54. 54 Встроенные функции (продолжение) БД Результат Запрос Сколько всего работников зарегистрировано в базе данных? SELECT COUNT ( * ) FROM РАБОТНИКИ • Чтобы подсчитать общее число строк в таблице, надо использовать функцию COUNT со звездочкой вместо имени поля, в частности COUNT (*) • Функция COUNT со звездочкой включает и NULL, и дубликаты, по этой причине DISTINCT не может быть использован. (©) Владислав Лавров, vlavrov.com
  • 55. 55 Встроенные функции (продолжение) БД Результат Запрос Какова средняя недельная зарплата рабочих? SELECT AVG ( 40 * ПОЧАСОВАЯ_СТАВКА ) FROM РАБОТНИКИ Все функции, кроме COUNT, можно использовать с вычисляемыми выражениями. (©) Владислав Лавров, vlavrov.com
  • 56. 56 Встроенные функции (продолжение) БД Результат Запрос Сколько объектов имеют уровень сложности 3 ? SELECT COUNT ( * ) FROM ОБЪЕКТЫ WHERE УРОВЕНЬ_СЛОЖНОСТИ = 3 Функция COUNT может ссылаться на строку целиком, а не на отдельный столбец. Внимание ! Если в команде SELECT стоит встроенная функция, то больше в этой команде SELECT ничего стоять не может ! Однако фраза SELECT, содержащая встроенную функцию, может быть частью подзапроса. Единственным исключением является команда GROUP BY. (©) Владислав Лавров, vlavrov.com
  • 57. 57 4.8.6. Операторы GROUP BY и HAVING БД Результат Запрос Для работников каждой специальности рассчитать максимальную почасовую ставку. SELECT СПЕЦИАЛЬНОСТЬ, MAX ( ПОЧАСОВАЯ_СТАВКА ) FROM РАБОТНИКИ GROUP BY СПЕЦИАЛЬНОСТЬ Фраза GROUP BY означает, что строки должны быть разбиты на группы с общими значениями указанного столбца (столбцов). Фраза GROUP BY используется на практике, когда требуется статистическая информация не об отдельном объекте, а о каждой группе. (©) Владислав Лавров, vlavrov.com
  • 58. 58 Операторы GROUP BY и HAVING (продолжение) БД Результат Запрос Для каждого типа объектов вычислить среднюю продолжительность работ, начиная с 20.10.2001 г. SELECT НОМЕР_ОБЪЕКТА, AVG(КОЛИЧЕСТВО_ДНЕЙ) FROM РАБОТА WHERE ДАТА_НАЧАЛА >= 20/10/01 GROUP BY НОМЕР_ОБЪЕКТА С фразой GROUP BY можно использовать команду WHERE (©) Владислав Лавров, vlavrov.com
  • 59. 59 Операторы GROUP BY и HAVING (продолжение) БД Результат Запрос Для каждого типа объектов, на которых работают более одного рабочего, вычислить максимальную продолжительность работ. Рассматривать только те объекты, работы на которых начались после 20.10.2001 г. SELECT НОМЕР_ОБЪЕКТА, MAX(КОЛИЧЕСТВО_ДНЕЙ) FROM РАБОТА WHERE ДАТА_НАЧАЛА >= 20/10/01 GROUP BY НОМЕР_ОБЪЕКТА HAVING COUNT ( ТАБЕЛЬНЫЙ_НОМЕР ) >= 2 Фраза HAVING накладывает условия на группы. Другими словами, чтобы применять условия не только к отдельным строкам, но и к группам строк, созданным командой GROUP BY, используется фраза HAVING. (©) Владислав Лавров, vlavrov.com
  • 60. 60 4.8.7. Встроенные функции и подзапросы БД Результат Запрос У кого из работников почасовая ставка выше средней? SELECT ФИО FROM РАБОТНИКИ WHERE ПОЧАСОВАЯ_СТАВКА > ( SELECT AVG (ПОЧАСОВАЯ_СТАВКА) FROM РАБОТНИКИ ) Встроенные функции могут использоваться только во фразе SELECT или команде HAVING. Однако фраза SELECT, содержащая встроенную функцию, может быть частью подзапроса. (©) Владислав Лавров, vlavrov.com
  • 61. 61 Встроенные функции и подзапросы (продолжение) БД Результат Запрос У кого из работников почасовая ставка выше средней почасовой ставки среди подчиненных одного и того же менеджера? SELECT А.ФИО FROM РАБОТНИКИ А WHERE А.ПОЧАСОВАЯ_СТАВКА > ( SELECT AVG ( B.ПОЧАСОВАЯ_СТАВКА ) FROM РАБОТНИКИ B WHERE B.БРИГАДИР = A.БРИГАДИР ) В коррелированных запросах также могут использоваться встроенный функции (©) Владислав Лавров, vlavrov.com
  • 62. 62 4.8.8. Операции изменения данных Значения данных могут быть помещены, скорректированы и удалены из полей тремя командами языка SQL из категории DML: • INSERT (вставить), • UPDATE (модифицировать), • DELETE (удалить). (©) Владислав Лавров, vlavrov.com
  • 63. 63 Команда INSERT INSERT INTO < table name > VALUES ( < value >, < value > . . . ) ; Позволяет вводить в таблицу как отдельные строки путем указания значений каждого столбца, так и множества строк путем формулировки запроса, определяющего вводимы строки. Пример. Ввести строку в таблицу РАБОТА INSERT INTO РАБОТА ( ТАБЕЛЬНЫЙ_НОМЕР, НОМЕР_ОБЪЕКТА, ДАТА_НАЧАЛА ) VALUES ( 1284, 485, 13.11.2001 ) (©) Владислав Лавров, vlavrov.com
  • 64. 64 Команда INSERT (продолжение) Пример. Допустим, что мы создали новую таблицу с именем ОБЪЕКТЫ_2, состоящую из столбцов НОМЕР_ОБЪЕКТА, ТИП_ОБЪЕКТА и УРОВЕНЬ_СЛОЖНОСТИ, и хотим заполнить эту таблицу строками из таблицы ОБЪЕКТЫ, имеющими УРОВЕНЬ_СЛОЖНСТИ = 3. Реализация запроса. INSERT INTO ОБЪЕКТЫ_2 SELECT НОМЕР_ОБЪЕКТА, ТИП_ОБЪЕКТА, УРОВЕНЬ_СЛОЖНОСТИ FROM ОБЪЕКТЫ WHERE УРОВЕНЬ_СЛОЖНОСТИ = 3 (©) Владислав Лавров, vlavrov.com
  • 65. 65 Команда UPDATE Всегда применяется ко всем строкам, удовлетворяющим условию выражения WHERE. Если фраза WHERE отсутствует, то операция применяется к каждой строке таблицы. Пример. Повысить на 5 процентов почасовую ставку каждого штукатура. UPDATE РАБОТНИКИ SET ПОЧАСОВАЯ_СТАВКА = 1,05 * ПОЧАСОВАЯ_СТАВКА WHERE СПЕЦИАЛЬНОСТЬ = ‘штукатур’ (©) Владислав Лавров, vlavrov.com
  • 66. 66 Команда DELETE Всегда применяется ко всем строкам, удовлетворяющим условию выражения WHERE. Если фраза WHERE отсутствует, то удаляются все строки таблицы. Пример. Допустим, что все рабочие, чей бригадир имеет табельный номер 1520, были уволены, и необходимо удалить соответствующие строки из базы данных. DELETE FROM РАБОТНИКИ WHERE БРИГАДИР = 1520 (©) Владислав Лавров, vlavrov.com
  • 67. 67 4.8.9. Определение представлений данных ПРЕДСТАВЛЕНИЕ (VIEW) – объект данных, который не содержит никаких данных. Это – тип таблицы, чье содержание выбирается из других таблиц с помощью выполнения запроса. Они работают в запросах и операторах DML точно также как и основные таблицы, но не содержат никаких собственных данных. Поскольку значения в этих таблицах меняются, то автоматически, их значения могут быть показаны представлением (©) Владислав Лавров, vlavrov.com
  • 68. 68 Определение представлений данных (продолжение) Пример. Создать представление данных, показывающее всю информацию о работнике, кроме его почасовой ставки. CREATE VIEW П_РАБОТНИКИ AS SELECT ТАБЕЛЬНЫЙ_НОМЕР, ФИО, СПЕЦИАЛЬНОСТЬ, БРИГАДИР FROM РАБОТНИКИ Спецификация запроса (©) Владислав Лавров, vlavrov.com
  • 69. 69 Определение представлений данных (продолжение) Пример. Создать представление с информацией об электриках: объекты, на которые они назначены работать, и дата начала работы. CREATE VIEW П_ЭЛЕКТРИКИ AS SELECT ФИО, НОМЕР_ОБЪЕКТА, ДАТА_НАЧАЛА FROM РАБОТНИКИ, РАБОТА WHERE СПЕЦИАЛЬНОСТЬ = ‘электрик’ AND РАБОТНИКИ.ТАБЕЛЬНЫЙ_НОМЕР = РАБОТА.ТАБЕЛЬНЫЙ_НОМЕР (©) Владислав Лавров, vlavrov.com
  • 70. 70 Примеры использования представлений Пример 1. Показать все сведения об электриках и объектах, на которых они поработали. SELECT * FROM П_ЭЛЕКТРИКИ Пример 2. Кто из электриков назначен работать на объект 435 ? SELECT ФИО, ДАТА_НАЧАЛА FROM П_ЭЛЕКТРИКИ WHERE НОМЕР_ОБЪЕКТА = 435 (©) Владислав Лавров, vlavrov.com
  • 71. 71 Примеры использования представлений (продолжение) Пример 3. Создать представление, в котором реализован запрос, определяющий для работников каждой специальности величину максимальной почасовой ставки. CREATE VIEW П_МАКС_СТАВКА ( СПЕЦИАЛЬНОСТЬ, МАКС_СТАВКА ) AS SELECT СПЕЦИАЛЬНОСТЬ, MAX ( ПОЧАСОВАЯ_СТАВКА ) FROM РАБОТНИКИ GROUP BY СПЕЦИАЛЬНОСТЬ При определении представления данных можно использовать также операции группировки. (©) Владислав Лавров, vlavrov.com
  • 72. 72 Примеры использования представлений (продолжение) Пример 4. У работников какой специальности максимальная почасовая ставка превышает 70 рублей ? SELECT СПЕЦИАЛЬНОСТЬ FROM П_МАКС_СТАВКА WHERE МАКС_СТАВКА > 70 Этапы выполнения запроса: 1. Выполнить спецификацию запроса из представления SELECT СПЕЦИАЛЬНОСТЬ, MAX ( ПОЧАСОВАЯ_СТАВКА ) FROM РАБОТНИКИ GROUP BY СПЕЦИАЛЬНОСТЬ 2. Выполнить запрос 1 2 (©) Владислав Лавров, vlavrov.com
  • 73. 73 4.8.10. Ограничения на обновления представлений данных Внимание! Представление может изменяться командами модификации DML, но модификация не будет воздействовать на само представление. Команды будут на самом деле перенаправлены к базовой таблице. Обновлять представления данных можно только тогда, когда его спецификация запроса такова: • В команде SELECT перечислены только имена столбцов, т.е. нет вычислений и встроенных функций), отсутствует ключевое слово DISTINCT. • В команде FROM стоит ссылка только на одну таблицу. Таблица, на которую ссылается фраза FROM, должна быть либо базовой таблицей, либо обновляемым представлением базы данных • Отсутствуют команды GROUP BY, HAVING. (©) Владислав Лавров, vlavrov.com
  • 74. 74 4.8.11. Удаление представлений данных DROP VIEW < view name > • нет необходимости сначала удалять всё содержание представления данных как это делается с базовой таблицей, потому что содержание представления не является созданным и сохраняется в течении определенной команды. • пользователь должен являться владельцем (т.е. быть создателем) представления, чтобы иметь возможность удалить его. (©) Владислав Лавров, vlavrov.com