SQL. Базовый курс. Электронная библиотека системного администратора

Язык SQL. Базовый курс.

В настоящем учебном пособии, написанном Евгением Моргуновым, излагаются основы языка SQL — это базовый курс. Причем, язык рассматривается применительно к конкретной системе управления базами данных (СУБД) — PostgreSQL. Реализация языка SQL в каждой СУБД соответствует стандарту в той или иной степени, но кроме стандартизированных функций и возможностей, каждая СУБД предлагает и свои дополнительные расширения языка. PostgreSQL обеспечивает очень хорошую поддержку стандарта языка SQL и также предоставляет интересные и практически полезные дополнительные возможности. Одним из главных достоинств PostgreSQL является расширяемость. Это означает, например, что пользователь (конечно, являющийся специалистом в области баз данных) может разработать свои собственные типы данных. Эти типы данных будут обладать всеми свойствами встроенных типов данных и могут быть введены в работу без останова сервера. Кроме того, PostgreSQL является свободно-распространяемым продуктом с открытым исходным кодом, который доступен на большом числе платформ.

В пособии рассматриваются не только все основные команды языка SQL, но также и другие вопросы, такие, как индексы и транзакции. Пособие написано таким образом, чтобы его можно было использовать как под руководством преподавателя, так и самостоятельно. Предполагается, что студенты имеют доступ к уже установленной СУБД, поэтому процедура установки PostgreSQL детально не рассматривается, а лишь даются указания о том, где найти инструкции по установке. Это пособие предназначено для получения практических навыков использования языка SQL. Учебный материал подается таким образом, что многие важные знания читатель должен получить в результате выполнения заданий, находящихся в конце каждой главы.

В основном тексте глав эти знания могут быть не представлены. Предполагается, что значительная часть заданий будет выполняться читателем самостоятельно с помощью документации на СУБД PostgreSQL, но зачастую даются и указания к их выполнению.

Пособие предназначено для студентов, обучающихся по направлениям 09.03.01 - «Информатика и вычислительная техника», 09.03.02 - «Информационные системы и технологии», 09.03.03 - «Прикладная информатика», 09.03.04 - «Программная инженерия» и 02.03.03 - «Математическое обеспечение и администрирование информационных систем». Оно может быть полезно широкому кругу студентов и специалистов, желающих ознакомиться с основами языка SQL в среде системы управления базами данных PostgreSQL.

Издательство - Postgres Professional

Год издания - 2017

Формат книги - PDF

SQL (обычно произносимая как «СИКВЭЛ») символизирует собой «Структурированный Язык Запросов». Это – язык, который дает вам возможность создавать и работать в реляционных базах данных, которые являются наборами связанной информации сохраняемой в таблицах. Если Вы задались вопросом с чего начать изучение SQL, то Вам к нам. Наша фирма предлагает Вам курсы SQL, а также уроки SQL для начинающих, после изучения которых создание базы данных SQL Вы сможете произвести самостоятельно. Изучение SQL – это весьма перспективное занятие. Оно включает в себя SQL лекции, курсы базы данных SQL, а также SQL запросы курсы. Есть возможность пройти курсы язык SQL и провести обучение SQL с нуля, а также пройти курсы SQL программирования при помощи SQL обучение онлайн, получив эксклюзивную практику

Мир баз данных становится все более и более единым, что привело к необходимости создания стандартного языка, который мог бы использоваться для функционирования в большом количестве различных видов компьютерных сред. Стандартный язык позволит пользователям, прошедшим SQL обучение или SQL Server курсы, знающим один набор команд, использовать их, чтобы создавать, отыскивать, изменять, и передавать информацию, независимо от того, где они работают.

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

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

Стандарт SQL определяется ANSI (Американским Национальным Институтом Стандартов) и в данное время также принимается ISO (Международной организацией по стандартизации). Однако, большинство коммерческих программ баз данных расширяют SQL без уведомления ANSI, добавляя разные другие особенности в этот язык, которые, как они считают, будут весьма полезны. Иногда они несколько нарушают стандарт языка, хотя хорошие идеи имеют тенденцию развиваться и вскоре становиться стандартами "рынка" сами по себе в силу полезности своих качеств. И Вы можете изучить все эти функции, пройдя курсы обучения SQL у нас в офисе или пройти изучение SQL онлайн.

Прежде, чем вы сможете использовать SQL, вы должны понять, что такое реляционные базы данных, и как происходит их разработка, а также пройти учебный курс SQL и изучить SQL Server уроки, чтобы разработка базы данных SQL не казалась сложным занятием.

Как мы подчеркивали ранее, SQL символизирует собой Структурированный Язык Запросов. Изучение SQL запросов и создание запросов в базе данных - вероятно наиболее часто используемый аспект SQL. Фактически, для категории SQL пользователей, маловероятно чтобы кто-либо использовал этот язык для чего-то другого. По этой причине, мы будем начинать наше язык SQL изучение с обсуждения запроса и как он выполняется на этом языке.

Запрос - команда которую вы даете вашей программе базы данных, и которая сообщает ей чтобы она вывела определенную информацию из таблиц в память. Эта информация обычно посылается непосредственно на экран компьютера или терминала которым вы пользуетесь, хотя, в большинстве случаев, ее можно также послать принтеру, сохранить в файле (как объект в памяти компьютера), или представить, как вводную информацию для другой команды или процесса.

Запросы обычно рассматриваются как часть языка DML. Однако, так как запрос не меняет информацию в таблицах, а просто показывает ее пользователю, мы будем рассматривать запросы как самостоятельную категорию среди команд DML которые производят действие, а не просто показывают содержание базы данных.

Все запросы в SQL состоят из одиночной команды. Структура этой команды обманчиво проста, потому что вы должны расширять ее так чтобы выполнить высоко сложные оценки и обработки данных. Эта команда называется - SELECT(ВЫБОР).

Сергей Воробьёв
Ведущий инженертестировщик
SQL. Базовый курс
www.aplana.ru

Содержание
● Часть 1. Введение в SQL
● Часть 2. Data Defenition Language
● Часть 3. Data Manipulation Language
● Часть 4. DRL. Простые запросы.
● Часть 5. Выборка данных из нескольких таблиц.
● Часть 6. Агрегатные функции. Группирование данных.
● Часть 7. Подзапросы.
● Часть 8. Функции для работы со строками, датами и числами.
23

SQL. Базовый курс
Часть 1. Введение в SQL
www.aplana.ru

Введение в SQL
SQL (англ. Structured Query Language – «язык структурированных
запросов») – универсальный компьютерный язык, применяемый для
создания, модификации и управления данными в реляционных базах
данных.
43

Введение в SQL
База данных – список или множество связанных списков с
информацией
Система управления базами данных (СУБД) – специальный
софт, управляющиий этими списками
53

Реляционные и нереляционные БД
Реляционная БД – база данных, основанная на реляционной модели
данных:
Данные в базе представляют собой набор таблиц;
Данные удовлетворяют определенным условиям целостности;
Поддерживает операторы манипулирования таблицами
(например, выборка или копирование таблицы).
Нереляционные базы данных – иерархические, сетевые,
объектно-ориентированные, NoSQL.
63

Чем БД отличаются от электронных таблиц
1. Хранение большого количества строк
В электронных таблицах количество строк ограничено.
В БД хранятся миллионы строк.
2. Одновременное обслуживание многих пользователей
3. Безопасность.
Пользователям предоставляются привилегии только на
определенные таблицы и действия.
4. Реляционные свойства.
Данные хранятся в разных таблицах, между таблицами
существуют связи.
5. Ограничения, гарантирующие качество данных.
73

Таблица (table)
Строка(row) – горизонтальный ряд ячеек, отведенный для каждого
объекта таблицы.
Запись (record) – данные в строке.
Столбец(column) – содержит информацию одного типа.
Поле(field) – пересечение столбца и строки.
83

Основы интерфейса SQL
СУБД
93
Название
Расшифровка
InterBase/FireBird
PSQL
Procedural SQL
IBM DB2
SQL PL
SQL Procedural Language
Ms SQL Server/Sybase ASE
T-SQL
Transact-SQL
MySQL
SQL/PSM
SQL/Persistent Stored
Module
Oracle
PL/SQL
Procedural Language/SQL
(основан на языке Ada)
PostgreSQL
PL/pgSQL
Procedural
Language/PostgreSQL
(очень похож на Oracle
PL/SQL)

10.

Различия синтаксиса функций СУБД
MSSQL
DB2
NUMERIC
NUMBER
NUMERIC
DATEADD
MONTH_ADD
(Date + 10 DAYS)
EOMONTH
LAST_DAY
LAST_DAY
DATEDIFF
MONTH_BETWEEN
TIMESTAMPDIFF
UPPER
UPPER
UCASE/UPPER
CONVERT
TO_CHAR
TO_CHAR
INITCAP
INITCAP
-
103
Oracle

11.

Синтаксис SQL
Функции и названия объектов нечуствительны к регистру:
SELECT = sELeCt.
Однако при поиске по текстовым полям регистр учитывается
SQL не чувствителен к переносу строк
Отсутствуют обязательные символы, завершающие строки
Поддерживаются --однострочные комментарии и
/*многострочные */
Каждую транзакцию принято завершать точкой с запятой, но
при выполнении отдельных команд их употребление не
обязательно
113

12.

Типы данных
CHAR(n) – строки постоянной длины (до 256 байтов в MS SQL Server), т.е.
ввели меньше данных в строку – размер не изменится
VARCHAR(n) – строки переменной длины, т.е. требует памяти столько,
сколько данных
INTEGER – число без десятичной точки
NUMERIC (m,n) – используется для хранения нуля и положительных или
отрицательных чисел с фиксированной и плавающей точкой. MТОЧНОСТЬ (общее число цифр), n – МАСШТАБ (число цифр справа от
десятичной точки). m/n –необязательные параметры
DATE - дата в формате yyyy-mm-dd (ISO), dd/mm/yyyy (ANSI), dd-MON-yy.
BOOLEAN – логический тип данных: true/false или 1/0.
Также значением поля может быть NULL – означает отсутствие значений –
пустую ячейку.
123

13.

Тип DATE
По умолчанию можно представлять в базе данных дату в формате DD-MONYYYY (например, ‘01-FEB-1900’):
INSERT INTO table1 (id, date_work) values (1, ‘01-FEB-1900’).
Также можно использовать ключевое слово DATE. При этом уже для
формата даты YYYY-MM-DD (например, ‘1900-02-01’):
INSERT INTO table1 (id, date_work) values (1, DATE ‘1900-02-01’).
Также альтернативно можно использовать тип даты + время TIMESTAMP
для задания уже не только даты, но и времени:
INSERT INTO table1 (id, date_work) values (1, ‘01-FEB-1900-10.50.01’),
т.е.
1 февраля 1900 10 часов 50 минут и 1 секунда (формат dd-MON-yy
-hh.mm.ss.nnnnn)
133

14.

Преобразование типов данных в MSSQL
CONVERT(тип данных, строка, стиль) – преобразование одного
формата данных в другой
В символы:
CONVERT(VARCHAR(20), GETDATE())
В дату
CONVERT(DATETIME, "14-11-2015", 105)
В число
CONVERT(NUMERIC, ‘1234657890")
143

15.

Преобразование типов данных в Oracle
TO_CHAR(входное значение, формат) – преобразование даты,
числа, времени в строку.
Формат: ’MONTH DD’, ‘MONTH DD, YYYY’, ‘DD/MM/YYYY’, ‘DAY MON, YY AD’
YEAR
$9,999.00
И т. д.
TO_CHAR(SYSDATE, "MONTH DD")
TO_DATE(входное значение, формат) – преобразование строки в
дату. Формат: DD-MON-YYYY
Month dd, YYYY , HH:MI p.m.
И т. д.
TO_DATE("02-JAN-2012", "DD-MON-YYYY")
TO_NUMBER(входное значение, формат) – преобразование строки в число.
TO_NUMBER("123")
153

16.

Другие объекты базы данных
Представление (view) – это объекты БД, которые не содержат
собственных таблиц, но их содержимое берется из других таблиц
или представлений посредством выполнения запроса.
Схема (schema) – поименованная группа связанных объектов БД.
Индекс (index) – объект, создаваемый для повышения
производительности Поиска. Скрытая таблица, содержащая один
или несколько важных столбцов таблицы и указатели на строки
таблицы.
Ограничение (constraint) – условия, которым должны удовлетворять
введенные пользователем записи.
163

17.

Другие объекты базы данных
Хранимая процедура (stored procedure) – объект базы данных,
представляющий собой набор SQL-инструкций. Хранится в БД.
Вызов процедуры приводит к выполнению содержащихся в ней
инструкций.
Функция (function) – похожа на хранимую процедуру, но возвращает
значение, которое может быть использовано в более крупном
операторе.
Триггер (trigger) – процедура, которая выполняется автоматически,
когда происходит некоторое заданное событие.
Курсор (cursor) – ссылка на контекстную область памяти. Используя
курсор, можно отдельно обрабатывать каждую строку связанного с
ним SQL-оператора.
173

18.

Разделы языка SQL
1. DDL - Data Defenition Language (язык определения объектов БД).
CREATE, ALTER, DROP и тд
2. DCL - Data Control Language (язык управления данными).
GRANT, REVOKE
3. DML - Data Manipulation Language (язык манипулирования
данными). INSERT, UPDATE, DELETE
4. Data Retrieval - выборка данных SELECT
5. Transaction Control (язык поддержания процесса транзакций).
COMMIT, ROLLBACK, SAVEPOINT.
183

19.

SQL. Базовый курс
Часть 2. Data Defenition Language
www.aplana.ru

20.

Data Defenition Language
1.
CREATE TABLE (создание таблиц)
Общий синтаксис:
CREATE TABLE имя_таблицы (
поле1 Тип поля1,
поле2 Тип поля2,
…, полеN Тип поляN);
CREATE TABLE person_info (
person_id INTEGER NOT NULL,
first_name VARCHAR(15) NOT NULL,
last_name VARCHAR(20) NOT NULL,
gender CHAR(1),
birthday DATE,
salary NUMERIC(7,2));
203

21.

Data Defenition Language
2. ALTER TABLE (изменение таблиц)
ALTER TABLE имя_таблицы {ADD <имя столбца> <определение столбца>}|
{MODIFY <имя столбца> <Определение столбца>}| {DROP COLUMN <имя
столбца>}
3. DROP TABLE (удаление таблиц)
DROP TABLE имя_таблицы {CASCADE CONSTRAINTS};
4. TRUNCATE TABLE (очистка таблиц)
TRUNCATE TABLE имя_таблицы
213

22.

SQL. Базовый курс
Часть 3. Data Manipulation Language
www.aplana.ru

23.

Data Manipulation Language
1. INSERT - Вставка отдельной записи.
INSERT INTO имя_таблицы VALUES (значение поля1, значение поля2,..,
значение поляN);
INSERT INTO имя_таблицы (поле1, поле3,…) VALUES (значение поля1, значение поля2,...,
значение поляN);
INSERT INTO person_info VALUES (1, "John", "Smith", "M", "15-OCT-1973",
45568.56);
INSERT INTO person_info (person_id, first_name, last_name) VALUES (5, Sarah", ‘Connor");
Успешно.
INSERT INTO person_info VALUES (NULL, "Jane", "Smith", "F", "8-AUG-1987",
NULL);
Ошибка, т.к person_id не может быть NULL.
233

24.

Data Manipulation Language
Вставка группы записей
INSERT INTO имя_таблицы
SELECT…;
CREATE TABLE t2 (
first_1 VARCHAR(15),
last_1 VARCHAR(20),
birthday_1 DATE);
INSERT INTO t2
SELECT first_name, last_name, birthday
FROM person_info;
243

25.

Data Manipulation Language
INSERT INTO person_info VALUES (2, "Sara", "Doe", "F", "9-OCT-1986",
29789.56);

29789.56);
Успешно.
INSERT INTO person_info VALUES (3, "Sara", "Doe", "F", "9-OCT-1986",
29789.56);
Теперь удалим вторую запись с person_id=2
DELETE FROM person_info WHERE person_id = 2
253

26.

Data Manipulation Language
Целостность данных
Целостность сущностей - определяет строку таблицы как уникальный экземпляр
некоторой сущности.
Первичный ключ (primary key) - столбец или группа столбцов уникально
идентифицирующий каждую запись.
Внешний ключ (foreign key) – отражение связей между таблицами. Подчиненная
таблица должна иметь идентичный столбец (или группу столбцов) для хранения
значений, уникально идентифицирующих главные записи.
Ссылочная целостность – в подчиненных таблицах не должно быть записей,
ссылающихся на несуществующие записи главных таблиц.
263

27.

Data Manipulation Language
273

28.

Data Manipulation Language
Первичный ключ
ALTER TABLE имя_таблицы
ADD PRIMARY KEY (имя_столбца);
ALTER TABLE person_info
ADD PRIMARY KEY(person_id);
Значения первичного ключа подразумевают уникальную идентификацию
записи, соответственно, значения не могут повторяться.
И опять попытаемся добавить запись с person_id=2:
INSERT INTO person_info VALUES (2, "Rita", "Blow", "F", "9-OCT-1975",
29789.56);
283

29.

Внешний ключ
ALTER TABLE имя_подчиненной_таблицы
ADD CONSTRAINT имя_ограничения FOREIGN KEY (имя_столбца
подчиненной
таблицы) REFERENCES имя_главной_таблицы;
CREATE TABLE person_address (
person_id INTEGER,
address VARCHAR(200));
ALTER TABLE person_address
ADD CONSTRAINT person_fk_address
FOREIGN KEY (person_id)
REFERENCES person_info;
293

30.

Data Manipulation Language
INSERT INTO person_address VALUES (1, "Moscow, Arbat street, 67-14");
INSERT INTO person_address VALUES (2, "Moscow, Arbat street, 67-14");
Успешно.
INSERT INTO person_address VALUES (4, "Zelenograd,Green street, 23");
Ошибка. Попытка вставить подчиненную запись при отсутствии
соответствующей главной записи.
INSERT INTO person_address VALUES (3, "Zelenograd,Green street, 23");
303

31.

Связывание таблиц при создании
Как мы уже рассмотрели ранее, широко используется создание
первичного (PRIMARY KEY) и внешнего (FOREIGN KEY) ключей
через команды изменения структуры существующих таблиц. Также
можно добавлять эти конструкции и при создании таблицы:
CREATE TABLE tab1(
id integer PRIMARY KEY,
…..
313

32.

Data Manipulation Language
2. UPDATE - Изменение значений столбцов таблицы
A)Изменение всех значений столбца таблицы
UPDATE
SET =
UPDATE person_address
SET address = "Volgograd, First street, 15-20"
Б)Изменение конкретных значений таблицы
UPDATE
SET =
WHERE =
UPDATE person_address SET address = "Volgograd, First street, 15-20"
WHERE person_id = 3;
UPDATE
SET =
WHERE = [оператор]
UPDATE person_info SET salary = salary * 2
WHERE person_id = 3;
323

33.

Data Manipulation Language
3. DELETE - Удаление строк из таблицы
А) Удаление всех значений столбца таблицы
DELETE FROM
Б) Удаление конкретных значений таблицы
DELETE FROM
WHERE =
333

34.

Практическое задание № 1
1. Создать БД, изображенную на рис.1 (создать таблицы и внешний ключ)
2. Внести в таблицы следующие данные.
Dept: (1, "Marketing"), (2, "RD")
Emp: (1, 1, "James", 1000), (2, 2, "Smith", 2000)
3. Создать таблицу dept_arch с такой же структурой, как и у таблицы dept.
4. Вставить в таблицу dept_arch все данные из таблицы dept.
343

35.

Практическое задание № 1 (продолжение)
5. Увеличьте на 15% зарплату сотруднику Smith.
6. Убедитесь, что в таблицу dept нельзя вставить такую запись: (2, "Sales"). Почему?
7. Убедитесь, что в таблицу emp нельзя вставить такую запись: (3, 4, "Black", 3000,
"Active"). Почему?
8. Измените название отдела RD на RandD (таблица dept).
9. Удалите из таблицы emp запись с emp_id = 1.
12. Удалите из таблицы emp все записи.
13. Удалите таблицу emp.
353

36.

SQL. Базовый курс
Часть 4. DRL. Простые запросы
www.aplana.ru

37.

Наша учебная БД
373

38.

Data Retrieval Language
SELECT – выборка данных. Этот раздел является обязательным в запросе и
позволяет:
SELECT поле1,…полеN FROM таблица1, .., таблицаN WHERE условие
383
Определить список выходных столбцов
Включить вычисляемые столбцы
Включить константы
Переименовать выходные столбцы
Указать принцип обработки дублей строк
Включить агрегатные функции

39.

Data Retrieval Language
1.
Определение списка выходных столбцов
Список выходных столбцов может быть указан несколькими способами:
. Указать символ *, обозначающий включение в результаты запроса всех колонок
запроса в естественной последовательности.
. Перечислить в желательном порядке только нужные <имена столбцов>.
SELECT person_code, first_name, last_name FROM person;
--Можем менять порядок столбцов
SELECT first_name, last_name, person_code FROM person;
393

40.

Конкатенация
Соединение двух и более частей текста.
SELECT product_name + " was sold by " + salesperson FROM purchase;
403

41.

Data Retrieval Language
2. Включение вычисляемых столбцов
В качестве вычисляемых столбцов запроса могут выступать:
. Результаты простейших арифметических выражения (+, -, /, *_ или
конкатенации строк (+).
. Результаты функций агрегирования {AVG|SUM|MAX|MIN|
COUNT}
413

42.

Data Retrieval Language
3. Включение констант
В качестве столбцов могут выступать константы числового и
символьного типов.
SELECT "Есть такой код",person_code, "для", first_name, last_name
FROM person
423

43.

Data Retrieval Language
4.
Переименование выходных столбцов
Вычисляемым, а также любым другим столбцам, при желании,
можно присвоить уникальное имя с помощью ключевого слова
AS: <выражение> AS <новое имя>
SELECT product_name + " was sold by " + salesperson AS SOLDBY
FROM purchase;
Можно задавать псевдонимы и без использования ключевого слова, но с ограничениями:
SELECT product_name + " was sold by " + salesperson SOLDBY
FROM purchase;
SELECT product_name + " was sold by " + salesperson "Sold By"
FROM purchase;
433

44.

Data Retrieval Language
5. Указывание принципа обработки дублей
DISTINCT – запрещает появление строк-дублей в выходном
множестве. Его можно задавать один раз для оператора SELECT.
На практике первоначально формируется выходное множество,
упорядочивается, а затем из него удаляются повторяющиеся
значения. Обычно это занимает много времени и не следует этим
злоупотреблять.
SELECT DISTINCT * FROM person
ALL (действует по умолчанию) – обеспечивает включение в
результаты запроса и повторяющихся значений
443

45.

Data Retrieval Language
6.
Включение агрегатных функций
Функции агрегирования (функции над множествами, статистические или
базовые) предназначены для вычисления некоторых значений для
заданного множества строк. Используются следующие агрегатные
функции:
AVG|SUM(<выражение) – подсчитывает среднее значение | сумму от
<выражение>.
MIN|MAX(<выражение>) – находит максимальное | минимальное значение.
COUNT(*| <имя столбца>) – подсчитывает число строк
Но об этом далее
453

46.

Data Retrieval Language
WHERE – выборка данных, которые удовлетворяют определенным
условиям.
SELECT поле1,…полеN FROM таблица1, .., таблицаM WHERE
условие1,…условиеY
463

47.

Data Retrieval Language
Примеры:
SELECT * FROM product WHERE laststockdate IS NULL;
SELECT * FROM product WHERE laststockdate IS NOT NULL;
SELECT product_name, product_price, quantity_on_hand
FROM product WHERE quantity_on_hand > 150;
SELECT product_name, product_price FROM product
WHERE product_name <> "Square Zinculator";
473

48.

Data Retrieval Language
Есть и более сложные условия:
Попадания во множество
<конструктор значений строки> IN (<подзапрос>|<набор конструкторов
значений строки>)
Определяется множество значений, которому объект сравнения, записанный до
ключевого слова IN, может принадлежать или не принадлежать. Если подзапрос не
возвращает строк, то предикат принимает значение FALSE.
Примеры на работу со множествами:
SELECT * FROM purchase WHERE salesperson IN ("CA", "BB");
SELECT * FROM purchase WHERE salesperson NOT IN ("CA", "BB");
SELECT * FROM purchase WHERE (salesperson + product_name) in (("CA" + "Small
Widget"), ("GA" + "Chrome Phoobar"))
483

49.

Data Retrieval Language
Принадлежности диапазону
<конструктор значений строки> BETWEEN <конструктор
значений строки 1> AND <конструктор значений строки 2>
Предикат BETWEEN сходен с предикатом IN, но вместо элементов
множества он задает включающие границы, в которые [не] должно
попадать проверяемое значение.
WHERE
product_price NOT BETWEEN 1 AND 80;
493

50.

Data Retrieval Language
Булевы операторы
<предикат> {AND|OR|NOT} <предикат>
Примечания: булевы оператора связывают один или несколько предикатов, образуя
единственное логическое значение TRUE|FALSE. Используя предикаты с
булевыми операторами, можно значительно увеличить и избирательную
способность по отбору строк в результат запроса.
При использовании булевых операторов, особенно оператора NOT, следует
применять круглые скобки для правильного составления условий (AND
выполняется раньше OR).

"%Widget" OR product_price < 20;
SELECT product_name, product_price FROM product WHERE product_name LIKE
"%Widget" AND product_price < 20;
503

51.

Data Retrieval Language

SELECT список полей FROM список таблиц WHERE проверяемое значение LIKE
(шаблон) (ESCAPE (имя пропуска));
Один любой символ - _
SELECT person_code, first_name, last_name FROM person WHERE person_code LIKE "_A";
Любая подстрока - %
SELECT product_name FROM product WHERE product_name LIKE "%Chrome%";
Если надо найти текст с символом % (например, название продукта
ab%cdef):
WHERE product_name LIKE "ab$%c%" ESCAPE "$";
Первый % читается как символ в названии, второй – как любая строка.
513

52.

Data Retrieval Language
Оператор примерного поиска LIKE
… where отчество like ‘%ов%’
… where отчество like ‘И%’
… where отчество like ‘%вич’
… where Фамилия like ‘____ов’
523

53.

Data Retrieval Language
Оператор примерного поиска LIKE

select product_name from purchase
where product_name like "%Widget"
select product_name from purchase
where product_name like "%$%Widget"
escape "$"
533

54.

Data Retrieval Language
Сортировка
SELECT список столбцов FROM список таблиц WHERE условие
ORDER BY список столбцов ASC (DESC);
По убыванию:
SELECT product_name, product_price FROM product
ORDER BY product_price DESC;
По возрастанию:
SELECT product_name, product_price FROM product
ORDER BY product_name ASC;
543

55.

Практическое задание № 2
1. Напишите запрос, полностью показывающий таблицу purchase.
2. Напишите запрос, выбирающий столбцы product_name и quantity из
таблицы Purchase.
3. Напишите запрос, выбирающий эти столбцы в обратном порядке.
4. Напишите запрос, выводящий для каждой строки таблицы person
следующий текст:
started work *. Получаемому столбцу
присвоить псевдоним “Started Work”.
5. Напишите запрос,выводящий наименование продуктов product_name
(таблица product), для которых цена не определена (NULL).
6. Напишите запрос, выводящий наименование продуктов product_name
(таблица purchase), которых продали от 3 до 23 штук.
* MSSQL не поддерживает объединение столбцов с типами данных varchar и date. Используйте оператор
конветации: CONVERT(VARCHAR, hiredate)
3

56.

Практическое задание № 2 (продолжение)
7. Напишите запрос, выводящий фамилии сотрудников, которых
приняли на работу 1го, 15го и 28го февраля 2010 года.
8. Напишите запрос, выводящий наименование продуктов
product_name (таблица purchase), проданных сотрудниками, фамилии которых начинаются на “B”.
9. Напишите запрос, выводящий наименование продуктов
product_name (таблица purchase), проданных сотрудниками, фамилии которых не начинаются на
“B”.
10. Напишите запрос, выводящий фамилии и дату приема на работу
сотрудников, фамилии которых начинаются на “B” и которых приняли
на работу раньше 1 марта 2010 года.
11. Напишите запрос, выводящий наименование продуктов
product_name и дату последней поставки laststockdate (таблица
product), наименование которых Small Widget, Medium Widget и Large
Widget или те, для которых не указана дата последней поставки.
Отсортируйте по убыванию даты последней поставки.
563

57.

SQL. Базовый курс
Часть 5. Выборка данных из нескольких таблиц
www.aplana.ru

58.

Выборка данных из нескольких таблиц
SELECT имя_таблицы_1.имя_столбца, имя_таблицы_2.
имя_столбца
FROM имя_таблицы_1, имя_таблицы_2;

FROM purchase, person;
Декартово произведение (Cartesian product) - соединение без
конструкции WHERE, в результате которого каждая строка
одной таблицы комбинируется с каждой строкой другой
таблицы.
583

59.

Выборка данных из нескольких таблиц с условием
SELECT имя_таблицы_1.имя_столбца, имя_таблчцы_2. имя_столбца
FROM имя_таблицы_1, имя_таблицы_2
WHERE имя_главной_таблицы.первичный_ключ =
имя_подчиненной_таблицы.внешний_ключ;
SELECT purchase.product_name, person.first_name, person.last_name
FROM purchase, person
WHERE person.person_code = purchase.salesperson;
593

60.

Типы соединения
Существуют также иные способы соединения таблиц по ключам:
<таблица А> [<тип соединения>] JOIN <таблица B> ON <предикат>
<тип соединения> представляет собой один из аргументов: INNER|{LEFT|RIGHT|
FULL}
INNER – включает строки, в которых есть столбцы с совпадающими данными
объединяемых таблиц. Используется по умолчанию.
LEFT – включает все строки таблицы А (левая таблица) и все совпадающие
значения из таблицы B. Столбцы несовпадающих строки заполняются NULL-значениями.
RIGHT – включает все строки таблицы B (правая таблица) и все совпадающие
значения таблицы А. обратный вариант для левого объединения.
FULL – включает все строки обеих таблиц. Столбцы совпадающих строк
заполнены реальными значениями, а несовпадающих строк – NULL-значениями.
OUTER (внешний) – уточняющее слово, означающее, что несовпадающие строки из
ведущей таблицы включаются вместе с совпадающими.
603

61.

Варианты соединения таблиц
address
phone
INNER JOIN
SELECT * FROM address INNER JOIN phone ON address.ClientID=phone.ClientID
613

62.

Варианты соединения таблиц
address
phone
SELECT * FROM address, phone WHERE address.clientID=phone.ClientID
623

63.

Варианты соединения таблиц
address
phone
LEFT JOIN
SELECT * FROM address LEFT JOIN phone ON address.ClientID=phone.ClientID
633

64.

Варианты соединения таблиц
address
phone
RIGHT JOIN
SELECT * FROM address RIGHT JOIN phone ON address.ClientID=phone.ClientID
643

65.

Варианты соединения таблиц
address
phone
FULL JOIN
SELECT * FROM address FULL JOIN phone ON address.ClientID=phone.ClientID
653

66.

Операторы соединения
UNION возвращает все строки из обоих операторов SELECT; повторяющиеся
значения удаляются.
UNION ALL возвращает все строки из обоих операторов SELECT; повторяющиеся
значения показываются.
INTERSECT возвращает строки, которые возвращены и первым, и вторым
оператором SELECT.
EXCEPT возвращает строки, которые возвращены первым оператором SELECT,
исключая те, которые возвращены вторым оператором.
Количество и порядок столбцов, возвращаемых SELECT из обеих таблиц, должны
совпадать.
663

67.

Операторы соединения
SELECT product_name
FROM purchase
ORDER BY product_name
673
SELECT product_name
FROM purchase_archive
ORDER BY product_name
SELECT product_name
FROM purchase
UNION
SELECT product_name
FROM purchase_archive
ORDER BY product_name

68.

Операторы соединения
SELECT product_nam e
FRO M purchase
U N IO N ALL
SELECT product_nam e
FRO M purchase_archive
O RD ER BY 1
683
SELECT product_nam e
FRO M purchase
EXCEPT
SELECT product_nam e
FRO M purchase_archive
O RD ER BY 1
SELECT product_nam e
FRO M purchase
IN TERSECT
SELECT product_nam e
FRO M purchase_archive
O RD ER BY 1

69.

Псевдоним в области FROM
При использовании больших баз со схемами принято
использование псевдонимов:
SELECT purc.product_name, prod.laststockdate, pers.first_name,
pers.last_name
FROM purchase as purc,
Person as pers,
Product prod
WHERE pers.person_code = purc.salesperson AND
prod.product_name = purc.product_name;
693

70.

Практическое задание № 3
1. Напишите запрос, выводящий декартово произведение таблиц product
и purchase.
2. Напишите запрос, выводящий наименование проданного товара
product_name, количество quantity (таблица purchase) и
quantity_on_hand (таблица product).
3.Напишите запрос, выводящий наименование товара product_name
(таблица purchase), дату последней поставки laststockdate (таблица
product) и фамилию продавца last_name (таблица person).
4. Напишите запрос, выводящий столбцы product_name, first_name,
last_name внешнего объединения таблиц purchase и person. Используйте для таблиц
короткие псевдонимы.
703

71.

Практическое задание № 3 (продолжение)
5. Напишите запрос, который выводит все неповторяющиеся в purchase коды
продавцов
salesperson из таблицы purchase_archive.
6. Напишите запрос, который выводит коды только тех продавцов salesperson из
таблицы purchase, которые так же содержаться в таблице purchase_archive.
7. Напишите запрос, который выводит все (в том числе повторяющиеся) коды
продавцов salesperson из таблиц purchase и purchase_archive.
713

72.

SQL. Базовый курс
Часть 6. Агрегатные функции. Группирование
данных.
www.aplana.ru

73.

Математические операторы
Математический оператор – символы, обозначающие операции (+, -,*, /)
Вычисления с использованием данных из таблиц.
SELECT product_name, product_price * 1.07 FROM product;
SELECT product_name, product_price * quantity_on_hand
FROM product;
SELECT product_name, product_price * 1.07 * quantity_on_hand product_price * quantity_on_hand
FROM product;
SELECT product_name, product_price * (quantity_on_hand + 10)
FROM product;
733

74.

Математические операторы
Функции агрегирования (функции над множествами, статистические или базовые)
предназначены для вычисления некоторых значений для заданного множества
строк.
1. SUM - суммирует значения и возвращает итог.
SELECT SUM(quantity)
FROM purchase;
2. AVG – возвращает среднее значение по указанному
столбцу.
SELECT AVG(product_price)
FROM product;
743

75.

Математические операторы
3. MIN – возвращает минимальное значение из указанного столбца.
SELECT MIN(product_price)
FROM product;
4. MAX - возвращает максимальное значение из указанного столбца.
SELECT MAX(product_price)
FROM product;
753

76.

Математические операторы
5. COUNT – подсчитывает записи.
SELECT COUNT(*)
FROM purchase; --число строк с учетом NULL значений
SELECT COUNT(product_name)
FROM purchase;--значений в столбце, игнорируя NULL
763

77.

GROUP BY
Этот раздел предназначен для объединения результатов запроса в группы и расчета
для каждой из них статистических значений. Иногда используют термин
«сгруппированная таблица».
SELECT product_name, SUM(quantity)
FROM purchase
GROUP BY product_name;
В оператор SELECT можно включить несколько групповых функций.
SELECT product_name, SUM(quantity) "Total Sold", COUNT(quantity) Transactions
FROM purchase
GROUP BY product_name;
773

78.

HAVING
HAVING – является подразделом предназначенным для ограничения числа
строк в сгруппированной таблице и является частью раздела GROUP BY.
Предикат этого раздела строится по тем же семантическим правилам, что и
в разделе WHERE, однако напрямую в предикате могут участвовать только
те столбцы, которые указаны в раздел GROUP BY. Остальные можно
использовать только внутри функций агрегирования. Этот раздел
ограничивает состав групп (подгрупп) строк, на которые разбивается
результат запроса. В группы (подгруппы) включаются только те из
множества возможных строк, для значений которых выполняются условия
предиката раздела HAVING. Внутри раздела HAVING можно использовать
вложенные запросы с функциями агрегирования, а также связанные
подзапросы.
783

79.

HAVING
Т.е., подведя итог выше описанного, можно сузить
назначение подраздела до:
С помощью конструкции HAVING можно
фильтровать группы.
HAVING работает для групп так же, как и WHERE для отдельных записей.
SELECT product_name, SUM(quantity) "Total Sold",
COUNT(quantity) Transactions
FROM purchase
GROUP BY product_name
HAVING SUM(quantity) < 5;
793

80.

Практическое задание № 4
1. Напишите запрос, показывающий, какой будет цена продукта product_price после
увеличения на 15%.
2. Напишите запрос, показывающий, сколько всего имеется товаров в таблице product.
3.Напишите запрос, показывающий, для какого количества товаров (таблица product) не
указана цена.
4. Напишите запрос, выводящий минимальную и максимальную цену товаров product_price.
5. Напишите запрос, показывающий, какая сумма была выручена с продаж товаров каждого
наименования.
6. Напишите запрос, показывающий, какая сумма была выручена с продаж товаров каждого
наименования. Вывести только те записи, для которых сумма продаж больше 125.
803

81.

SQL. Базовый курс
Часть 7. Подзапросы
www.aplana.ru

82.

Подзапросы
Подзапрос - это обычный запрос SELECT, вложенный в оператор
SELECT,
UPDATE
или
DELETE.
Он используется в качестве источника данных для раздела FROM или
WHERE родительского оператора.
823

83.

Подзапросы
Есть некие ограничения использования подзапросов:
833
Подзапрос должен выбирать только один столбец (за исключением подзапроса с
предикатом EXISTS), и тип данных его результата должен соответствовать типу
данных значения, указанному в предикате.
В ряде случаев можно использовать ключевое слово DISTINCT для гарантии
получения единственного значения.
Во вложенном запросе нельзя включать раздел ORDER BY и UNION.
Подзапрос может находиться и слева и справа от условия поиска.
В подзапросах могут использоваться функции агрегирования без раздела
GROUP BY

84.

Однострочные подзапросы
Однострочный подзапрос – это подзапрос, который возвращает лишь 1 значение.
Используются символы сравнения с результатом вложенного запроса (=, <>, <, <=,
>, >=)
SELECT * FROM product
WHERE laststockdate = (SELECT laststockdate
FROM product WHERE product_name = "Small Widget");
Пример (использование агрегатной функции в однострочном подзапросе):
SELECT * FROM product WHERE product_price >
(SELECT AVG(product_price) FROM product);
843

85.

Многострочные подзапросы
Многострочный подзапрос – это подзапрос, который возвращает лишь >=1
значение.
Для таких подзапросов нельзя выполнять сравнение с
помощью знаков равенства/неравенства; необходимо использовать функцию
IN.
SELECT * FROM product
WHERE product_name IN
(SELECT DISTINCT product_name FROM purchase);
UPDATE product SET product_price = product_price * 0.9
WHERE product_name NOT IN (SELECT DISTINCT product_name
FROM purchase);
853

86.

EXISTS
EXISTS использует подзапрос в качестве аргумента и
оценивает его как истинный, если в подзапросе есть
выходные данные, а в противном случае как ложный.
Выполняется подзапрос один раз и может содержать
несколько столбцов, поскольку их значения не проверяются,
а просто фиксируется результат наличия строк.
Примечания по предикату EXISTS:
EXISTS – предикат, возвращающий значение TRUE или FALSE, и
его можно применять отдельно или вместе с другими булевыми
выражениями.
863

87.

EXISTS
SELECT * FROM product
WHERE EXISTS
(SELECT * FROM purchase
WHERE product.product_name = purchase.product_name);
873

88.


ALL - сравнение будет производиться со всеми записями, которые
возвращает подзапрос (или просто со всеми значениями в наборе). True
вернется только в том случае, если все записи, которые возвращает
подзапрос, будут удовлетворять указанному вами условию.
SELECT * FROM product
WHERE product_price >= ALL (SELECT product.product_price
FROM purchase, product


Запрос вернёт все товары из таблицы product, цена которых больше или
равна цене каждого товара, проданного сотрудником с кодом "GA".
883

89.

Групповые условия (операторы сравнения).
ANY - сравнение вернет true, если условию будет удовлетворять хотя бы одна
запись из подзапроса (или набора).
SELECT * FROM product WHERE product_price > ANY (SELECT
product.product_price
FROM purchase, product
WHERE purchase.product_name = product.product_name
AND purchase.salesperson = "GA");
Запрос вернет все записи из таблицы product, для которых цена продукта
больше цены какого-либо продукта, проданного сотрудником с кодом "GA".
SOME - делает то же самое, что ANY. Полностью взаимозаменяемы.
893

90.

Практическое задание № 5
1. Напишите запрос, который возвращает всех сотрудников, которых взяли на работу в то же
день, что и сотрудника John Smith.
2. Напишите запрос, который возвращает все товары, цена которых ниже средней цены.
3. Напишите запрос, который возвращает все товары, которые продавались более одного
раза.
4. Выведите увеличенную на 15% цену товаров, которые продавались более одного раза.
5. Используя условие EXISTS, напишите запрос, который возвращает всех сотрудников,
которые хотя бы один раз что-либо продали.
6. Напишите запрос, который возвращает все товары из таблицы product, цена которых
меньше цены любого товара, проданного сотрудником с кодом "GA".
7. напишите запрос, который вернет все товары из таблицы product, цена которых меньше
цены хотя бы одного товара, проданного сотрудником с кодом "GA". Убедитесь, что
операторы SOME и ANY взаимозаменяемы.
903

91.

SQL. Базовый курс
Часть 8. Функции для работы со строками, датами и
числами
www.aplana.ru

92.

Функции для работы с числами
ROUND - округляет числа с любой заданной точностью.
ROUND(входное_значение, число_знаков_после_десятичной_точки)
SELECT product_name, ROUND(product_price, 0)
FROM product;
SELECT ROUND(1234.5678, 3) --MSSQL
SELECT ROUND(1234.5678, 3) FROM DUAL;
Функция ROUND
ROUND(1234.5678,4)
ROUND(1234.5678, 3)
ROUND(1234.5678, 2)
ROUND(1234.5678,1)
ROUND(1234.5678,0)
ROUND(1234.5678, -1)
ROUND(1234.5678,-2)
ROUND(1234.5678,-3)
923
Возвращаемое значение
1234.5678
1234.568
1234.57
1234.6
1235
1230
1200
1000
--Oracle

93.

Функции для работы с числами
TRUNC - усекает число, понижая его точность.
Функция TRUNC
Возвращаемое значение
TRUNC(1234.5678,4)
1234.5678
TRUNC(1234.5678,3)
1234.567
TRUNC(1234.5678, 2) 1234.56
TRUNC(1234.5678,1)
1234.5
TRUNC(1234.5678,0)
1234
TRUNC(1234.5678,-1)
1230
TRUNC(1234.5678, -2) 1200
TRUNC(1234.5678, -3) 1000
933

94.

Вспомогательные таблицы
Вспомогательные (dummy) таблицы
Для выполнения функций, без привязки к конкретным таблицам в ряде СУБД
необходимо указывать служебную таблицу, поскольку SQL подразумевает
конструкцию select … from.
Oracle – DUAL
DB2 – SYSDUMMY1
SYBASE – DUMMY
MySQL – DUAL
MSSQL – отсутствует. MSSQL распознает служебные запросы без
необходимости указывать dummy-таблицу.
943

95.

Функции для работы с датами
GETDATE – возвращает текущую дату.
select getdate();
DATEADD – Возвращает дату, полученную как сумму исходной даты
date и интервала, добавленного к заданному компоненту datepart даты
date.
АDD_МONTHS(величина, количество, начальная дата)
SELECT DATEADD(month, 1, GETDATE());
SELECT DATEADD(year, -2, GETDATE());
953

96.

Функции для работы с датами
EOMONTH – возвращает последний день любого месяца, указанного
в переданной ей дате (MSSQL 2012+).
EOMONTH(дата)
SELECT EOMONTH(GETDATE());
SELECT EOMONTH("2015-03-15");
SELECT first_name, last_name, hiredate, EOMONTH(hiredate)+1
FROM person;
963

97.

Функции для работы с датами
DATEDIFF – возвращает количество единиц, разделяющих две даты.
DATEDIFF(величина, начальная дата, конечная дата)
SELECT DATEDIFF(millisecond, GETDATE(), SYSDATETIME());
SELECT DATEDIFF(MONTH, "17-AUG-2012", GETDATE());
973

98.

Функции для работы с текстом
UPPER – ставит все символы строки в верхний регистр.
LOWER - ставит все символы строки в нижний регистр.
INITCAP (oracle) – изменяет регистр строки на смешанный (первая буква каждого
слова будет в верхнем регистре, остальное слово – в нижнем).
SELECT UPPER(product_name) FROM product;
SELECT LOWER(product_name) FROM product;
SELECT INITCAP("this TEXT hAd UNpredictABLE caSE") FROM DUAL;
983

99.

Функции для работы с текстом
LEN – определяет длину строки.
SELECT product_name, LEN(product_name) LENGTH
FROM product
WHERE LEN(product_name) > 15;
993

100.

Функции для работы с текстом
SUBSTRING – обрезает значение в параметре.
SUBSTRING(исходный_текст, позиция начального символа,
количество символов)
SUBSTRING(строка 1, a, [,b])
Возвращает часть «Строка 1», начинающуюся с символа с номером a,
и имеющую длину b символов. Если a = 0, это равносильно тому, что
a = 1 (начало строки) если b положительно возвращаются символы
слева направо. Если b отрицательно то, начиная с конца строки и
считаются справа налево! Если b отсутствует, то по умолчанию
возвращаются все символы, до конца строки
100
3

101.

Функции для работы с текстом
SELECT SUBSTRING(item_id, 1, 3) LOCATION,
SUBSTRING(item_id, 5, 3) ITEM_NUMBER
FROM old_item;
101
3

102.

Функции для работы с текстом
CHARINDEX- находит позицию символа (или символов), разделяющего элементы
cтрок.
CHARINDEX(строка 1, строка 2, [,a])
Возвращает местоположение "строка 1", в "строка 2". "строка 2" просматривается
слева, начиная с позиции a. Если a отрицательно, то "строка 2", просматривается
справа. Значением по умолчанию для a является 1, что дает в результате позицию,
первого вхождения, "строка 1", в "строка 2". Если при заданной a, "строка 1" не
найдена, возвращается 0
102
3

103.

Функции для работы с текстом
CHARINDEX(искомый_символ, текст _для_поиска, позиция
_начального_символа)
SELECT item_desc, CHARINDEX(",", item_desc, 1)
FROM old_item;
103
3

104.

Вложение функций
SELECT item_desc, SUBSTRING(item_desc, 1, CHARINDEX(",", item_desc, 1))
CATEGORY
FROM old_item;
104
3

105.

Вложение функций
105
3
SELECT item_desc,
SUBSTRING(item_desc, 1, CHARINDEX(",", item_desc, 1)-1) CATEGORY,
SUBSTRING(item_desc, CHARINDEX(",", item_desc, 1)+2, 99) ITEM_SIZE
FROM old_item;

106.

Практическое задание № 6
1. Использую функции для работы с датами и числами, посчитайте,
сколько вам полных лет.
2. Выведите строку "я ЗнаЮ тЕкСтовыЕ фУнкциИ" в верхнем и
нижнем регистре.
3. Узнайте длину этой строки.
4. Работая со столбцом purchase.product_name, выведите:
первые три символа
все оставшиеся символы, начиная с четвёртого
полную строку
106
3

107.

Полезные ресурсы
http://sqlfiddle.com/ - инструмент, эмулирующий пустую БД:
позволяет выполнять значительную часть DML, DDR и DR
запросов. Поддерживает 5 основных диалектов
http://www.sql-tutorial.ru/ - интерактивный учебник по SQL на
русском
http://www.sql-ex.ru/ - интерактивный портал для решения
задач на SQL
https://dev.mysql.com/downloads/mysql/ - бесплатный SQL
сервер под различные ОС
https://www.mysql.com/products/workbench/ - бесплатный
инструмент для работы с MySql сервером
107
3

108.

Спасибо за внимание!
Ваши вопросы?
Компания «Аплана»
Сергей Воробьёв
Ведущий инженер-тестировщик
+7-917-556-13-49
www.aplana.ru

Транскрипт

2 Компания Postgres Professional Е. П. Моргунов ЯЗЫК SQL. БАЗОВЫЙ КУРС УЧЕБНО-ПРАКТИЧЕСКОЕ ПОСОБИЕ Москва 2017

3 УДК ББК М79 М79 Моргунов, Е. П. Язык SQL. Базовый курс: учеб.-практ. пособие / Е. П. Моргунов; под ред. Е. В. Рогова, П. В. Лузанова; Postgres Professional. М., с. Настоящее учебно-практическое пособие представляет собой первую, базовую, часть учебного курса по языку SQL, предлагаемого российской компанией Postgres Professional. Учебный материал излагается в расчете на использование системы управления базами данных PostgreSQL. Пособие может использоваться как под руководством преподавателя, так и для самостоятельного изучения языка SQL. Пособие предназначено для студентов, обучающихся по направлениям «Информатика и вычислительная техника», «Информационные системы и технологии», «Прикладная информатика», «Программная инженерия» и «Математическое обеспечение и администрирование информационных систем». Оно может быть полезно широкому кругу студентов и специалистов, желающих ознакомиться с основами языка SQL в среде системы управления базами данных PostgreSQL. УДК ББК Postgres Professional, 2017 Е. П. Моргунов, 2017

4 Оглавление Введение 5 1 Введение в базы данных и SQL Что такое базы данных и зачем они нужны Основные понятия реляционной модели Что такое язык SQL Описание предметной области и учебной базы данных Контрольные вопросы и задания Создание рабочей среды Установка СУБД Программа psql интерактивный терминал PostgreSQL Развертывание учебной базы данных Контрольные вопросы и задания Основные операции с таблицами 22 Контрольные вопросы и задания Типы данных СУБД PostgreSQL Числовые типы Символьные (строковые) типы Типы «дата/время» Логический тип Массивы Типы JSON Контрольные вопросы и задания Основы языка определения данных Значения по умолчанию и ограничения целостности Создание и удаление таблиц Модификация таблиц Представления Схемы базы данных Контрольные вопросы и задания Запросы Дополнительные возможности команды SELECT Соединения Агрегирование и группировка Подзапросы Контрольные вопросы и задания Изменение данных Вставка строк в таблицы Обновление строк в таблицах Удаление строк из таблиц Контрольные вопросы и задания

5 8 Индексы Общая информация Индексы по нескольким столбцам Уникальные индексы Индексы на основе выражений Частичные индексы Контрольные вопросы и задания Транзакции Уровень изоляции READ UNCOMMITTED Уровень изоляции READ COMMITTED Уровень изоляции REPEATABLE READ Уровень изоляции SERIALIZABLE Пример использования транзакций Блокировки Контрольные вопросы и задания Повышение производительности Основные понятия Методы просмотра таблиц Методы формирования соединений наборов строк Управление планировщиком Оптимизация запросов Контрольные вопросы и задания Рекомендуемые источники 255 4

6 Введение В настоящее время термин «база данных» известен многим людям, даже далеким от профессиональной разработки компьютерных программ. Базы данных стали очень широко распространенной технологией, что потребовало, в свою очередь, большего числа специалистов, способных проектировать их и обслуживать. В ходе эволюции теории и практики баз данных стандартом де-факто стала реляционная модель данных, а в рамках этой модели сформировался и специализированный язык программирования, позволяющий выполнять все необходимые операции с данными Structured Query Language (SQL). Таким образом, важным компонентом квалификации специалиста в области баз данных является владение языком SQL. В настоящем учебном пособии излагаются основы языка SQL это базовый курс. Причем, язык рассматривается применительно к конкретной системе управления базами данных (СУБД) PostgreSQL. Реализация языка SQL в каждой СУБД соответствует стандарту в той или иной степени, но кроме стандартизированных функций и возможностей, каждая СУБД предлагает и свои дополнительные расширения языка. PostgreSQL обеспечивает очень хорошую поддержку стандарта языка SQL и также предоставляет интересные и практически полезные дополнительные возможности. Одним из главных достоинств PostgreSQL является расширяемость. Это означает, например, что пользователь (конечно, являющийся специалистом в области баз данных) может разработать свои собственные типы данных. Эти типы данных будут обладать всеми свойствами встроенных типов данных и могут быть введены в работу без останова сервера. Кроме того, PostgreSQL является свободно-распространяемым продуктом с открытым исходным кодом, который доступен на большом числе платформ. В пособии рассматриваются не только все основные команды языка SQL, но также и другие вопросы, такие, как индексы и транзакции. Пособие написано таким образом, чтобы его можно было использовать как под руководством преподавателя, так и самостоятельно. Предполагается, что студенты имеют доступ к уже установленной СУБД, поэтому процедура установки PostgreSQL детально не рассматривается, а лишь даются указания о том, где найти инструкции по установке. Это пособие предназначено для получения практических навыков использования языка SQL. Учебный материал подается таким образом, что многие важные знания читатель должен получить в результате выполнения заданий, находящихся в конце каждой главы. В основном тексте глав эти знания могут быть не представлены. Предполагается, что значительная часть заданий будет выполняться читателем самостоятельно с помощью документации на СУБД PostgreSQL, но зачастую даются и указания к их выполнению. Задания, приведенные в пособии, различаются по уровню сложности. Самые сложные из них, а также те, которые требуют много времени для выполнения, отмечены звездочкой. Задания можно выполнять по мере изучения учебного материала конкретной главы. Однако некоторые из них имеют комплексный характер, поэтому для их выполнения необходимо изучить всю главу или, как минимум, несколько ее разделов. 5

7 Хотя пособие имеет практическую направленность и не является теоретическим курсом, все же в первой главе кратко, на элементарном уровне излагаются основные понятия теории баз данных и реляционной модели. Это сделано для того, чтобы студенты могли приступить к практическому освоению языка SQL без задержки, с первых дней учебного семестра, еще до того момента, когда эти понятия будут основательно рассмотрены в лекционном курсе. На факультетах информационных технологий в российских вузах базы данных традиционно изучаются на втором или третьем курсе. Причем, этой дисциплине, как правило, отводится один семестр. Однако количество академических учебных часов может различаться. Если на практические занятия по этой дисциплине учебный план отводит 36 часов, тогда мы рекомендуем следующее распределение времени на изучение материала пособия. Глава 1. Введение в базы данных и SQL Глава 2. Создание рабочей среды Глава 3. Основные операции с таблицами Глава 4. Типы данных СУБД PostgreSQL Глава 5. Основы языка определения данных Глава 6. Запросы Глава 7. Изменение данных Глава 8. Индексы Глава 9. Транзакции Глава 10. Повышение производительности 1 час 1 час 4 часа 4 часа 4 часа 8 часов 4 часа 2 часа 4 часа 4 часа Главы 1 и 2 могут быть изучены за одно двухчасовое занятие, поскольку СУБД PostgreSQL уже должна быть установлена в учебной аудитории заранее. Глава 3 представляет собой краткий обзор основных возможностей языка SQL, после ее изучения студенты должны представлять себе простые способы использования всех основных команд языка. Эта глава не очень сложная, но объемная, поэтому на ее изучение отводится четыре часа. Глава 4 посвящена рассмотрению основных типов данных, используемых в PostgreSQL. Это большая глава, однако в ней значительную часть составляют задания и упражнения. Предполагается, что студенты за четыре часа должны усвоить только основные приемы использования типов данных. А для того, чтобы знания закрепились, рекомендуется обращаться к материалу этой главы (в том числе и к упражнениям) в процессе изучения остальных глав пособия, при необходимости уточнения тех или иных особенностей применения конкретных типов. Распределить время, выделенное на изучение этой главы, мы рекомендуем следующим образом: два часа на первые четыре параграфа числовые и строковые типы, типы «дата/время» и логический тип, еще два часа на массивы и тип json/jsonb. Чтобы выполнять запросы к базе данных, необходимо хорошо понимать ее структуру, взаимосвязи таблиц. Поэтому глава 5, в которой рассматриваются основы языка определения данных, очень важна с точки зрения детального изучения таблиц базы данных «Авиаперевозки» и подготовки к освоению главы 6. Поскольку материал главы основан на том, что база данных уже развернута на компьютере студента, то вводить команды для создания таблиц не требуется. Это позволяет сократить время, затрачиваемое на изучение главы. В пособии принят подход, при котором сначала рассматриваются команды определения данных, а затем команды манипулирования данными. Поэтому глава 5 «Основы языка определения данных» предшествует 6

8 главе 6 «Запросы». Однако избранный подход реализуется не слишком жестко: в обзорной главе 3 рассматриваются основные команды, в том числе, и несложные запросы. А запросы это уже язык манипулирования данными. На изучение главы 5 отведено четыре часа. В течение первого двухчасового занятия нужно изучить два первых параграфа, в которых освещаются такие вопросы, как ограничения целостности и создание и удаление таблиц. Второе двухчасовое занятие нужно посвятить изучению трех оставшихся параграфов. В них говорится о способах модификации таблиц, а также о представлениях (views) и схемах базы данных. Глава 6 является центральной главой пособия, поэтому на ее изучение отводится восемь часов, т. е. больше, чем на изучение других глав. Она состоит из четырех параграфов. Первый из них посвящен разнообразным дополнительным возможностям команды SELECT. Речь идет, в частности, о таких вещах, как предложения LIMIT и OFFSET, оператор LIKE и регулярные выражения в условиях предложения WHERE и о других возможностях. Тем не менее, материал этого параграфа несложный, для его изучения достаточно выделить один час. Во втором параграфе рассказывается о способах соединения таблиц. Это более сложная тема, для ее изучения необходимо выделить два часа. Третий параграф посвящен агрегированию и группировке. В нем рассматривается и такая важная и интересная тема, как оконные функции. Данный параграф также требует двухчасового занятия. Самый сложный раздел этой главы четвертый. Он посвящен подзапросам. В нем, в частности, освещается такая важная и интересная тема, как общие табличные выражения (Common Table Expressions CTE). Для изучения материала данного параграфа необходимо выделить три часа. В главе 7 собраны все команды, предназначенные для изменения данных: вставка строк, их обновление и удаление. Поскольку в предшествующих главах эти команды уже использовались для решения простых задач, то в данной главе рассматриваются более сложные способы их использования. В ней много упражнений, они составляют половину ее объема. Рекомендуется уделить два часа изучению способов вставки строк в таблицы, а еще два часа рассмотрению операций обновления и удаления строк. Глава 8 посвящена индексам, она небольшая, поэтому с ней можно ознакомиться за одно двухчасовое занятие. Поскольку индексы тесно связаны с вопросами производительности, т. е. скорости выполнения запросов, то было бы целесообразно после изучения заключительной главы вернуться к главе 8 и посмотреть на представленные в ней команды и запросы, уже зная о команде EXPLAIN. Транзакциям посвящена глава 9. Механизмы их выполнения имеют много тонкостей, поэтому при изучении этой главы необходимо экспериментировать и стараться объяснить полученные результаты. В заключительной главе 10 рассматриваются вопросы повышения производительности. Эта глава может показаться слишком абстрактной и сложной для начального курса языка SQL, тем не менее, она очень важна. Студенты должны научиться читать планы выполнения запросов и понимать назначение каждой операции, представленной в плане. А овладение искусством оптимизации запросов потребует много времени и опыта, оно придет не сразу. В том случае, когда на практические занятия по дисциплине «Базы данных» в учебном плане отводится 54 часа, можно изменить предлагаемое распределение учебных часов. В частности, в главе 4 можно больше времени посвятить типам данных 7

9 json/jsonb и массивам. В главе 6 можно более детально рассмотреть оконные функции и общие табличные выражения. При изучении главы 9, посвященной транзакциям, было бы целесообразно разработать несложное приложение, в котором использовались бы транзакции, и провести эксперименты с этим приложением, выполняя параллельно несколько сеансов и изменяя при этом уровни изоляции транзакций. В рамках главы 10 имеет смысл вернуться к командам и запросам главы 8 и изучить планы их выполнения с помощью команды EXPLAIN. За счет дополнительного времени можно рассмотреть все задания и упражнения повышенной сложности (помеченные звездочкой). Таким образом, распределение времени может быть таким: Глава 1. Введение в базы данных и SQL Глава 2. Создание рабочей среды Глава 3. Основные операции с таблицами Глава 4. Типы данных СУБД PostgreSQL Глава 5. Основы языка определения данных Глава 6. Запросы Глава 7. Изменение данных Глава 8. Индексы Глава 9. Транзакции Глава 10. Повышение производительности 1 час 1 час 4 часа 6 часов 6 часов 12 часов 6 часов 4 часа 8 часов 6 часов В пособии используются различные виды шрифтов для выделения фрагментов текста в зависимости от их назначения. Команды, вводимые пользователем как в среде операционной системы, так и в среде утилиты psql, выделяются полужирным моноширинным шрифтом. Например: psql -d demo -U postgres или SELECT avg(total_amount) FROM bookings; Результаты работы команд операционной системы и SQL-команд, выполняемых в среде утилиты psql, напечатаны моноширинным шрифтом. Например, в ответ на команду EXPLAIN SELECT * FROM aircrafts; на экран будет выведено следующее: QUERY PLAN Seq Scan on aircrafts (cost= rows=9 width=52) (1 строка) Мы надеемся, что изучение материала, изложенного в учебном пособии, будет способствовать повышению уровня вашей квалификации и расширению профессионального кругозора. 8

10 1 Введение в базы данных и SQL Эта глава вводная. В ней мы расскажем об основах баз данных, о том, что такое реляционная модель и зачем нужен язык SQL. Очень важной темой этой главы станет описание предметной области, на основе которой будет спроектирована учебная база данных, которая и будет служить в качестве площадки для изучения языка SQL. Это пособие предназначено в первую очередь для практического освоения языка SQL, а не для изучения теории баз данных, поэтому для изучения теории необходимо обращаться к авторитетным источникам, список которых приведен в конце учебного пособия. 1.1 Что такое базы данных и зачем они нужны Технологии баз данных существовали не всегда. Однако и до их внедрения в практику люди также собирали и обрабатывали данные. Одним из способов хранения данных были так называемые плоские файлы (flat files), которые имели очень простую структуру: данные хранились в виде записей, разделенных на поля фиксированной длины. В реальной жизни между элементами данных зачастую возникают сложные связи, которые необходимо перенести и в электронную базу данных. При использовании плоских файлов эти связи организовать сложно, а еще сложнее поддерживать их при изменениях и удалениях отдельных элементов данных. Одним из основных понятий в теории баз данных является модель данных. Можно сказать, что она характеризует способ организации данных и основные методы доступа к ним. Сначала были предложены иерархическая и сетевая модели данных. Однако в ходе эволюции теорий и идей была разработана реляционная модель данных, которая сейчас и является доминирующей. Поэтому в настоящее время преобладают базы данных реляционного типа. Их характерной чертой является тот факт, что данные воспринимаются пользователем как таблицы. В распоряжении пользователя имеются операторы для выборки данных из таблиц, а также для вставки новых данных, обновления и удаления имеющихся данных. Одним из достоинств реляционной базы данных является ее способность поддерживать связи между элементами данных, избавляя программиста от необходимости заниматься этой рутинной и очень трудоемкой работой. В те времена, когда технологии реляционных баз данных еще не получили широкого распространения, программистам приходилось на процедурных языках вручную реализовывать такие операции, которые сейчас называются каскадным обновлением внешних ключей или каскадным удалением записей из подчиненных таблиц (файлов). Здесь слово «вручную» означает, что для выполнения этих операций приходилось писать код, состоящий из элементарных команд, позволяющий добраться до каждой обновляемой или удаляемой записи. Тот подход к работе с базами данных назывался навигационным программист указывал программе конкретный алгоритм поиска записей. Приведем в качестве примера простую ситуацию: в базе данных, построенной на основе файлов, хранится информация о студентах и их экзаменационных оценках, причем, личные данные студентов хранятся в одном файле, назовем его условно «Студенты», а экзаменационные оценки в другом файле, который условно назовем «Оценки». Если требуется удалить информацию о конкретном студенте и его экзаменационных 9

11 оценках, то придется не только выполнить операцию удаления конкретной записи из файла «Студенты», но дополнительно организовать цикл для поиска и удаления тех записей из файла «Оценки», у которых ключевое поле имеет то же значение, что и поле в удаляемой записи из файла «Студенты». Работая с реляционными базами данных, программист избавлен от программирования на «атомарном» уровне, потому что современные языки для «общения» с этими базами данных являются декларативными. Это означает, что для получения результата достаточно лишь указать, что нужно получить, но не требуется предписывать способ получения результата, т. е. как его получить. Система баз данных это компьютеризированная система, предназначенная для хранения, переработки и выдачи информации по запросу пользователей. Такая система включает в себя программное и аппаратное обеспечение, сами данные, а также пользователей. Современные системы баз данных являются, как правило, многопользовательскими. В таких системах одновременный доступ к базе данных могут получить сразу несколько пользователей. Основным программным обеспечением является система управления базами данных. По-английски она называется database management system (DBMS). Кроме СУБД в систему баз данных могут входить утилиты, средства для разработки приложений (программ), средства проектирования базы данных, генераторы отчетов и др. Пользователи систем с базами данных подразделяются на ряд категорий. Первая категория это прикладные программисты. Вторая категория это конечные пользователи, ради которых и выполняется вся работа. Они могут получить доступ к базе данных, используя прикладные программы или универсальные приложения, которые входят в программное обеспечение самой СУБД. В большинстве СУБД есть так называемый процессор языка запросов, который позволяет пользователю вводить команды языка высокого уровня (например, языка SQL). Третья категория пользователей это администраторы базы данных. В их обязанности входят: создание базы данных, выбор оптимальных режимов доступа к ней, разграничение полномочий различных пользователей на доступ к той или иной информации в базе данных, выполнение резервного копирования базы данных и т. д. Систему баз данных можно разделить на два главных компонента: сервер и набор клиентов (или внешних интерфейсов). Сервер это и есть СУБД. Клиентами являются различные приложения, написанные прикладными программистами, или встроенные приложения, поставляемые вместе с СУБД. Один сервер может обслуживать много клиентов. Современные СУБД включают в себя словарь данных. Это часть базы данных, которая описывает сами данные, хранящиеся в ней. Словарь данных помогает СУБД выполнять свои функции. 1.2 Основные понятия реляционной модели В каждой технологической сфере есть своя терминология. Существуют базовые термины, на которых основываются все дальнейшие рассуждения. Такие термины при- 10

12 сутствуют и в сфере баз данных. Сейчас мы кратко о них поговорим. В эпоху, предшествующую рождению реляционной теории, базы данных традиционно рассматривались как набор файлов, состоящих из записей, а записи, в свою очередь, подразделялись на отдельные поля. Поле являлось элементарной единицей данных. В реляционных базах данных пользователь воспринимает данные в виде таблиц. Поэтому термину «файл» соответствует термин «таблица», вместо термина «запись» используется термин «строка», а вместо термина «поле» термин «столбец» (или «колонка»). Таким образом, таблицы состоят из строк и столбцов, на пересечении которых должны находиться «атомарные» значения, которые нельзя разбить на более мелкие элементы без потери смысла. В формальной теории реляционных баз данных эти таблицы называют отношениями (relations) поэтому и базы данных называются реляционными. Отношение это математический термин. При определении свойств таких отношений используется теория множеств. В терминах данной теории строки таблицы будут называться кортежами (tuples), а колонки атрибутами. Отношение имеет заголовок, который состоит из атрибутов, и тело, состоящее из кортежей. Количество атрибутов называется степенью отношения, а количество кортежей кардинальным числом. Кроме теории множеств, одним из оснований реляционной теории является такой раздел математической логики, как исчисление предикатов. Таким образом, в теории и практике баз данных существует три группы терминов. Иногда термины из разных групп используют в качестве синонимов, например, запись и строка. Как мы уже сказали выше, в реляционных базах данных пользователь воспринимает данные в виде таблиц. Рассмотрим простую систему, в которой всего две таблицы. Первая «Студенты»: зачетной книжки Ф. И. О. Серия документа Номер документа Иванов Иван Петрович Климов Андрей Иванович Новиков Николай Юрьевич И вторая «Успеваемость»: Зачетная книжка Предмет Учебный год Семестр Оценка Физика 2016/ Математика 2016/ Физика 2016/ Физика 2016/ При работе с базами данных часто приходится следовать различным ограничениям, которые могут быть обусловлены спецификой конкретной предметной области. Упрощая реальную ситуацию, примем следующие ограничения: 11

13 номер зачетной книжки состоит из пяти цифр и не может быть отрицательным (в разных вузах используются различные схемы присваивания номеров зачетным книжкам, эти схемы могут быть гораздо сложнее принятой нами и могут учитывать, например, год поступления студента в вуз); серия документа, удостоверяющего личность, является четырехзначным числом, а номер документа, удостоверяющего личность шестизначным числом; номер семестра может принимать только два значения 1 (осенний семестр) и 2 (весенний семестр); оценка может принимать только три значения 3 (удовлетворительно), 4 (хорошо) и 5 (отлично): другие оценки выставлять в зачетные книжки не принято. Для идентификации строк в таблицах и для связи таблиц между собой используются так называемые ключи. Потенциальный ключ это комбинация атрибутов таблицы, позволяющая уникальным образом идентифицировать строки в ней. Ключ может состоять и только лишь из одного атрибута таблицы. Например, в таблице «Студенты» таким идентификатором может быть атрибут «Номер зачетной книжки». В качестве потенциального ключа данной таблицы могут также служить два ее атрибута, взятые вместе: «Серия документа, удостоверяющего личность» и «Номер документа, удостоверяющего личность». Ни один из них в отдельности не может использоваться в качестве уникального идентификатора. В таком случае ключ будет составным. При этом важным является то, что потенциальный ключ должен быть не избыточным, т. е. никакое подмножество атрибутов, входящих в него, не должно обладать свойством уникальности. Потенциальный ключ, включающий два упомянутых атрибута, является не избыточным. Ключи нужны для адресации на уровне строк (записей). При наличии в таблице более одного потенциального ключа один из них выбирается в качестве так называемого первичного ключа, а остальные будут являться альтернативными ключами. Рассмотрим таблицы «Студенты» и «Успеваемость». Предположим, что в таблице «Студенты» нет строки с номером зачетной книжки 55900, тогда включать строку с таким номером зачетной книжки в таблицу «Успеваемость» не имеет смысла. Таким образом, значения столбца «Номер зачетной книжки» в таблице «Успеваемость» должны быть согласованы со значениями такого же столбца в таблице «Студенты». Атрибут «Номер зачетной книжки» в таблице «Успеваемость» является примером того, что называется внешним ключом. Таблица, содержащая внешний ключ, называется ссылающейся таблицей (referencing table). Таблица, содержащая соответствующий потенциальный ключ, называется ссылочной (целевой) таблицей (referenced table). В таких случаях говорят, что внешний ключ ссылается на потенциальный ключ в ссылочной таблице. Внешний ключ может быть составным, т. е. может включать более одного атрибута. Внешний ключ не обязан быть уникальным. Проблема обеспечения того, чтобы база данных не содержала неверных значений внешних ключей, известна как проблема ссылочной целостности. Ограничение, согласно которому значения внешних ключей должны соответствовать значениям потенциальных ключей, называется ограничением ссылочной целостности (ссылочным ограничением). Обеспечением выполнения ограничений ссылочной целостности занимается СУБД, а от разработчика требуется лишь указать атрибуты, служащие в качестве внешних 12

14 ключей. При проектировании баз данных часто предусматривается, что при удалении строки из ссылочной таблицы соответствующие строки из ссылающейся таблицы должны быть также удалены, а при изменении значения столбца, на который ссылается внешний ключ, должны быть изменены значения внешнего ключа в ссылающейся таблице. Этот подход называется каскадным удалением (обновлением). Иногда применяются и другие подходы. Например, вместо удаления строк из ссылающейся таблицы в этих строках просто заменяют значения атрибутов, входящих во внешний ключ, так называемыми NULL-значениями. Это специальные значения, означающие «ничто» или отсутствие значения, они не совпадают со значением «нуль» или «пустая строка». NULL-значение применяется в базах данных и в качестве значения по умолчанию, когда пользователь не ввел никакого конкретного значения. Первичные ключи не могут содержать NULL-значений. Транзакция одно из важнейших понятий теории баз данных. Она означает набор операций над базой данных, рассматриваемых как единая и неделимая единица работы, выполняемая полностью или не выполняемая вовсе, если произошел какойто сбой в процессе выполнения транзакции. Таким образом, транзакции являются средством обеспечения согласованности данных. В нашей базе данных транзакцией могут быть, например, две операции: удаление строки из таблицы «Студенты» и удаление связанных по внешнему ключу строк из таблицы «Успеваемость». 1.3 Что такое язык SQL Язык SQL это непроцедурный язык, который является стандартным средством работы с данными во всех реляционных СУБД. Операторы (команды), написанные на этом языке, лишь указывают СУБД, какой результат должен быть получен, но не описывают процедуру получения этого результата. СУБД сама определяет способ выполнения команды пользователя. В языке SQL традиционно выделяются группа операторов определения данных (Data Definition Language DDL), группа операторов манипулирования данными (Data Manipulation Language DML) и группа операторов, управляющих привилегиями доступа к объектам базы данных (Data Control Language DCL). К операторам языка определения данных (DDL) относятся команды для создания, изменения и удаления таблиц, представлений и других объектов базы данных. Детальному рассмотрению этих команд посвящены главы 5 и 8. К операторам языка манипулирования данными (DML) относятся команды для выборки строк из таблиц, вставки строк в таблицы, обновления и удаления строк. Эти команды подробно рассматриваются в главах 6 и 7. Операторы DCL в пособии не рассматриваются, т. к. PostgreSQL позволяет на начальном этапе изучения языка SQL обойтись без их использования. 13

15 1.4 Описание предметной области и учебной базы данных Чтобы показать все основные возможности языка SQL, нам потребуется база данных. Эта база данных не должна быть слишком сложной, чтобы ее изучение не потребовало слишком много времени. Но, вместе с тем, она должна быть достаточно разнообразной, чтобы запросы к ней выглядели бы правдоподобными, почти такими же, как и в реальной работе. В качестве предметной области выберем пассажирские авиаперевозки. Ее оригинальное описание и описание базы данных «Авиаперевозки» можно найти по адресам и ru/docs/postgrespro/current/demodb-bookings.html. Надеемся, что эта область знакома многим читателям нашего учебного пособия. Конечно, в учебных целях реальная ситуация намеренно упрощена, но все принципиальные вещи сохранены. Итак, некая российская авиакомпания выполняет пассажирские авиаперевозки. Она обладает своим парком самолетов различных моделей. Каждая модель самолета имеет определенный код, который присваивает Международная ассоциация авиаперевозчиков (IATA). При этом будем считать, что самолеты одной модели имеют одинаковые компоновки салонов, т. е. порядок размещения кресел и нумерацию мест в салонах бизнес-класса и экономического класса. Например, если это модель Sukhoi SuperJet-100, то место 2A относится к бизнес-классу, а место 20D к экономическому классу. Бизнес-класс и экономический класс это разновидности так называемого класса обслуживания. Наша авиакомпания выполняет полеты между аэропортами России. Каждому аэропорту присвоен уникальный трехбуквенный код, при этом используются только заглавные буквы латинского алфавита. Эти коды присваивает не сама авиакомпания, а специальные организации, управляющие пассажирскими авиаперевозками. Зачастую название аэропорта не совпадает с названием того города, которому этот аэропорт принадлежит. Например, в городе Новосибирске аэропорт называется Толмачево, в городе Екатеринбурге Кольцово, а в Санкт-Петербурге Пулково. К тому же некоторые города имеют более одного аэропорта. Сразу в качестве примера вспоминается Москва с ее аэропортами Домодедово, Шереметьево и Внуково. Добавим еще одну важную деталь: каждый аэропорт характеризуется географическими координатами долготой и широтой, а также часовым поясом. Формируются маршруты перелетов между городами. Конечно, каждый такой маршрут требует указания не только города, но и аэропорта, поскольку, как мы уже сказали, в городе может быть и более одного аэропорта. В качестве упрощения реальности мы решим, что маршруты не будут иметь промежуточных посадок, т. е. у них будет только аэропорт отправления и аэропорт назначения. Каждый маршрут имеет шестизначный номер, включающий цифры и буквы латинского алфавита. На основе перечня маршрутов формируется расписание полетов (или рейсов). В расписании указывается плановое время отправления и плановое время прибытия, а также тип самолета, выполняющего этот рейс. При фактическом выполнении рейса возникает необходимость в учете дополнительных сведений, а именно: фактического времени отправления и фактического времени прибытия, а также статуса рейса. Статус рейса может принимать ряд значений: 14

16 Scheduled (за месяц открывается возможность бронирования); On Time (за сутки открывается регистрация); Delayed (рейс задержан); Departed (вылетел); Arrived (прибыл); Cancelled (отменен). Теперь обратимся к пассажирам. Полет начинается с бронирования авиабилета. В настоящее время общепринятой практикой является оформление электронных билетов. Каждый такой билет имеет уникальный номер, состоящий из 13 цифр. В рамках одной процедуры бронирования может быть оформлено несколько билетов, но каждая такая процедура имеет уникальный шестизначный номер (шифр) бронирования, состоящий из заглавных букв латинского алфавита и цифр. Кроме того, для каждой процедуры бронирования записывается дата бронирования и рассчитывается общая стоимость оформленных билетов. В каждый билет, кроме его тринадцатизначного номера, записывается идентификатор пассажира, а также его имя и фамилия (в латинской транскрипции) и контактные данные. В качестве идентификатора пассажира используется номер документа, удостоверяющего личность. Конечно, пассажир может сменить свой документ, а иной раз даже фамилию и имя, за время, прошедшее между бронированием билетов в разные дни, поэтому невозможно наверняка сказать, что какие-то конкретные билеты были оформлены на одного и того же пассажира. В каждый электронный билет может быть вписано более одного перелета. Специалисты называют эти записи о перелетах сегментами. В качестве примера наличия нескольких сегментов можно привести такой: Красноярск Москва, Москва Анапа, Анапа Москва, Москва Красноярск. При этом возможно в рамках одного бронирования оформить несколько билетов на различных пассажиров. Для каждого перелета указывается номер рейса, аэропорты отправления и назначения, время вылета и время прибытия, а также стоимость перелета. Кроме того, указывается и так называемый класс обслуживания: экономический, бизнес и др. Когда пассажир прибывает в аэропорт отправления и проходит регистрацию билета, оформляется так называемый посадочный талон. Этот талон связан с авиабилетом: в талоне указывается такой же номер, который имеет электронный авиабилет данного пассажира. Кроме того, в талоне указывается номер рейса и номер места в самолете. Указывается также и номер посадочного талона последовательный номер, присваиваемый в процессе регистрации билетов на данный рейс. Напомним, что каждому креслу в салоне самолета соответствует конкретный класс обслуживания. Данная информация учитывается при регистрации билетов и оформлении посадочных талонов. Если, например, пассажир приобрел билет с экономическим классом обслуживания, то в его посадочном талоне будет указан номер места в салоне экономического класса, но не в салоне бизнес-класса. Следуя приведенному описанию предметной области, можно спроектировать модельную базу данных, предназначенную для изучения языка SQL. Поскольку наше учебное пособие в первую очередь предназначено для изучения языка SQL, а не для овладения искусством проектирования баз данных, то мы приведем лишь диаграмму 15

17 Bookings Бронирования Airports Аэропорты # book_ref * book_date * total_amount # airport_code * airport_name * city * longitude * latitude * timezone Tickets Билеты # ticket_no * book_ref * passenger_id * passenger_name contact_data Ticket_flights Перелеты # ticket_no # flight_id * fare_conditions * amount Flights Рейсы # flight_id * flight_no * scheduled_departure * scheduled_arrival * departure_airport * arrival_airport * status * aircraft_code actual_departure actual_arrival Aircrafts Самолеты # aircraft_code * model * range Boarding_passes Посадочные талоны Seats Места # ticket_no # flight_id * boarding_no * seat_no # aircraft_code # seat_no * fare_conditions схемы данных, на которой показаны сущности, выделенные в предметной области, а также их связи и атрибуты. Конкретные же типы данных, первичные и внешние ключи, а также ограничения, наложенные на атрибуты и таблицы, мы покажем уже в последующих главах в процессе рассмотрения команд SQL, предназначенных для физического создания таблиц в базе данных. Приведенную схему можно найти на сайте компании Postgres Professional по адресам, указанным в начале этого раздела. Контрольные вопросы и задания 1. Какие группы операторов выделяются в составе языка SQL? 2. Дайте неформальное определение основных понятий реляционной модели данных: отношение, кортеж, атрибут. 3. Для чего нужны внешние ключи в реляционных таблицах? 4. Что такое потенциальный ключ? 5.* Предложите пример избыточного потенциального ключа для одной из таблиц базы данных «Авиаперевозки» и объясните, почему он будет избыточным. 16

18 6.* В текущей реализации базы данных «Авиаперевозки» предполагается, что самолеты одной модели могут иметь только одну компоновку салона. Представим, что руководством принято решение о том, что нужно учитывать возможность наличия различных компоновок для каждой модели. Какие таблицы придется модифицировать в таком случае и каким образом? Потребуется ли создавать дополнительные таблицы? 17

19 2 Создание рабочей среды Прежде чем приступать к непосредственному изучению языка SQL, нужно получить доступ к серверу PostgreSQL. Это можно сделать, например, в компьютерном классе или путем обращения к удаленному серверу через терминал. Однако можно создать рабочую среду для себя и на своем локальном компьютере, установив полную версию СУБД PostgreSQL, т. е. сервер и клиентские программы. В этом случае у вас будет гораздо больше полномочий по настройке и использованию PostgreSQL. В заключительной части главы мы покажем, как развернуть учебную базу данных «Авиаперевозки», наполненную специально подготовленными правдоподобными данными. 2.1 Установка СУБД Поскольку настоящее учебное пособие предназначено для изучения языка SQL, а не основ администрирования СУБД PostgreSQL, то мы ограничимся лишь краткими указаниями о том, где найти инструкции по установке. Начать нужно с выбора того дистрибутива СУБД, который вы хотели бы установить. Вы можете выбрать оригинальный вариант PostgreSQL или тот, который предлагается компанией Postgres Professional. Он называется Postgres Pro и содержит не только все функции и модули, входящие в состав стандартного дистрибутива, но и дополнительные разработки, выполненные в компании Postgres Professional. Для изучения основ языка SQL эти дистрибутивы подходят в равной степени. Однако документация на русском языке включена только в состав Postgres Pro. После того как вы определитесь с конкретным дистрибутивом СУБД, необходимо выбрать операционную систему. PostgreSQL поддерживает множество систем, в том числе различные версии Linux, а также Windows. Устанавливать рекомендуется последнюю стабильную версию СУБД. Если вы решили воспользоваться оригинальным дистрибутивом PostgreSQL, то найти инструкции по его установке в различных операционных системах можно по адресу Если же вы остановили свой выбор на дистрибутиве Postgres Pro, тогда следует обратиться сюда: latest. После установки как PostgreSQL, так и Postgres Pro в среде Windows придется предпринять дополнительные меры, чтобы использование русского алфавита в интерактивном терминале psql не вызывало проблем. Утилита psql рассматривается в следующем разделе. В процессе установки будет создана учетная запись пользователя СУБД с именем postgres. Для изучения настоящего пособия создавать дополнительные учетные записи не требуется. 18

20 Установив тот или иной дистрибутив PostgreSQL, нужно научиться запускать сервер баз данных, потому что иначе невозможно работать с данными. Как это сделать, подробно описано в документации в разделе 18.3 «Запуск сервера баз данных». Найти этот раздел можно по адресу current/server-start.html. При установке СУБД в среде Windows создается служба (service) для автоматического запуска сервера PostgreSQL при загрузке операционной системы. Завершив работу с сервером, нужно корректно остановить (выключить) его. Порядок действий в такой ситуации описан в документации в разделе 18.5 «Выключение сервера». Найти этот раздел можно по адресу postgresql/9.6/server-shutdown.html. 2.2 Программа psql интерактивный терминал PostgreSQL Для доступа к серверу баз данных в комплект PostgreSQL входит интерактивный терминал psql. Для его запуска нужно ввести команду psql При запуске утилиты psql в среде Windows возможно некорректное отображение букв русского алфавита. Для устранения этого потребуется в свойствах окна, в котором выполняется psql, изменить шрифт на Lucida Console и с помощью команды chcp сменить текущую кодовую страницу на CP1251: chcp 1251 В среде утилиты psql можно вводить не только команды языка SQL, но и различные сервисные команды, поддерживаемые самой утилитой. Для получения краткой справки по всем сервисным командам нужно ввести \? Многие такие команды начинаются с символов \d. Например, для того чтобы просмотреть список всех таблиц и представлений (views), созданных в той базе данных, к которой вы сейчас подключены, введите команду \dt Если же вас интересует определение (попросту говоря, структура) какой-либо конкретной таблицы базы данных, например, students, нужно ввести команду \d students Для получения списка всех SQL-команд нужно выполнить команду \h Для вывода описания конкретной SQL-команды, например, CREATE TABLE, нужно сделать так: \h CREATE TABLE 19

21 Эта утилита позволяет сокращать объем ручного ввода за счет дополнения вводимой команды «силами» psql. Например, при вводе SQL-команды можно использовать клавишу Tab для дополнения вводимого ключевого слова команды или имени таблицы базы данных. Например, при вводе команды CREATE TABLE... можно, введя символы «cr», нажать клавишу Tab psql дополнит это слово до «create». Аналогично можно поступить и со словом TABLE. Для его ввода достаточно ввести лишь буквы «ta» и нажать клавишу Tab. Если вы ввели слишком мало букв для того, чтобы утилита psql могла однозначно идентифицировать ключевое слово, дополнения не произойдет. Но в таком случае вы можете нажать клавишу Tab дважды и получить список всех ключевых слов, начинающихся с введенной вами комбинации букв. 2.3 Развертывание учебной базы данных Завершив установку сервера баз данных, мы можем перейти непосредственно к рассмотрению вопроса о том, как развернуть в вашем кластере PostgreSQL учебную базу данных «Авиаперевозки», подготовленную компанией Postgres Professional. На сайте компании есть раздел, посвященный этой базе данных, найти его можно по ссылке Она предоставляется в трех версиях, отличающихся только объемом данных: самая компактная версия содержит данные за один месяц, версия среднего размера охватывает временной период в три месяца, а самая полная версия включает данные за целый год. Все данные были сгенерированы с помощью специальных алгоритмов, обеспечивающих их «правдоподобность». Мы рекомендуем вам начать с компактной версии базы данных «Авиаперевозки», а после получения некоторого опыта написания SQL-запросов вы установите полную версию и уже на ней сможете лучше «прочувствовать» различные тонкости работы с данными больших объемов, например, оцените влияние индексов на скорость доступа к данным. В качестве первого шага к развертыванию базы данных нужно скачать ее заархивированную резервную копию по ссылке zip. Затем необходимо извлечь файл из архива: unzip demo_small.zip Извлеченный файл называется demo_small.sql. Теперь мы создадим базу данных с именем demo в вашем кластере PostgreSQL. Самый краткий вариант команды будет таким: psql -f demo_small.sql -U postgres Если вы хотите перенаправить вывод сообщений, которые генерирует СУБД в процессе работы, с экрана в файлы, то можно поступить так: psql -f demo_small.sql -U postgres > demo.log 2>demo.err Можно разделить стандартное устройство вывода и стандартное устройство вывода ошибок. Обычные сообщения будут перенаправлены в файл demo.log, а сообщения об ошибках в файл demo.err. Обратите внимание, что между цифрой 2, обозначающей дескриптор стандартного устройства вывода сообщений об ошибках, и знаком «>», обозначающим переадресацию вывода, не должно быть пробела. 20

22 Если вам удобнее собрать все сообщения в один общий файл, тогда нужно сделать так: psql -f demo_small.sql -U postgres > demo.log 2>&1 Обратите внимание, что все выражение 2>&1 в конце команды пишется без пробелов. Оно указывает операционной системе, что сообщения об ошибках нужно направить туда же, куда выводятся и обычные сообщения. Если бы наш SQL-файл был очень большим, тогда можно было бы выполнить команду в фоновом режиме, поставив в конце командной строки символ «&», а за ходом процесса в реальном времени наблюдать с помощью команды tail. psql -f demo_small.sql -U postgres > demo.log 2>&1 & tail -f demo.log Выберите один из предложенных вариантов команды для развертывания базы данных и выполните эту команду. Все готово! Можно подключаться к новой базе данных: psql -d demo -U postgres Контрольные вопросы и задания 1. Выполните процедуру установки СУБД PostgreSQL в среде выбранной вами операционной системы. 2. Ознакомьтесь с утилитой psql с помощью встроенной справки, а также с помощью справки, вызываемой по команде psql --help 3. Кроме утилиты psql существуют и другие универсальные программы для работы с сервером баз данных PostgreSQL, например, pgadmin. Это мощная утилита с графическим интерфейсом. Самостоятельно установите программу pgadmin и изучите основные приемы работы с ней. 4. Выполните развертывание учебной базы данных. Попробуйте подключиться к ней с помощью утилиты psql. Для выхода из утилиты используйте команду \q. 21

23 3 Основные операции с таблицами Язык SQL очень многообразный, он включает в себя целый ряд команд, которые, в свою очередь, иной раз имеют множество параметров и ключевых слов. Но начнем мы с краткого обзора основных возможностей языка SQL. В этой главе вы научитесь вводить данные в базу данных, освоите основные способы получения информации из базы данных, т. е. выборки, а также узнаете, как можно внести изменения в информацию, хранящуюся в базе данных, и удалить те данные, которые больше не нужны. В практике изучения иностранных языков есть хорошая традиция. Уже на первом занятии ученик изучает некоторые базовые грамматические конструкции и слова, позволяющие ему сказать несколько самых простых, но, тем не менее, практически полезных фраз. Мы последуем этой традиции. В данном разделе нашего пособия вы ознакомитесь с основными командами языка SQL, которые позволят вам выполнять базовые операции. А более сложные (и интересные) команды вы изучите в следующих главах. Скажем два слова о нашем подходе к работе. В принципе возможны два способа организации работы студента (обучающегося). Первый способ таков: студент использует базу данных, в которой уже содержатся все необходимые таблицы и другие объекты базы данных, подготовленные заранее автором учебного пособия или другим квалифицированным специалистом. При этом некоторый набор необходимых данных также уже введен в таблицы, поэтому можно сразу же переходить к выполнению запросов к этим таблицам. Описанный способ кажется очень привлекательным, поскольку он требует меньше усилий на начальном этапе освоения языка SQL. Однако, на наш взгляд, более правильным является другой способ. Наверное, он более трудоемкий, но при его использовании вы лучше, как говорится, прочувствуете процесс создания таблиц и ввода записей в эти таблицы. А выполняя различные запросы к базе данных, вам будет легче оценить правильность полученного результата выполнения запроса, поскольку вы ввели все данные самостоятельно и поэтому сможете обоснованно предположить, какие результаты ожидаете увидеть на экране. Конечно, первый способ может быть очень полезным при изучении более сложных, продвинутых, возможностей языка SQL, которые трудно понять без использования больших массивов данных, а большие массивы данных вводить в базу данных вручную нерационально. Гораздо более рациональным будет их автоматическое формирование программным путем. В главе 1 мы описали предметную область, поэтому сейчас можем приступить к непосредственному созданию таблиц в базе данных. Для выполнения всех последующих команд и операций мы будем использовать утилиту psql, входящую в стандартную поставку СУБД PostgreSQL. На вашем компьютере уже должна быть развернута база данных demo. Процесс ее создания описан в главе 2. Теперь запустите утилиту psql и подключитесь к этой базе данных с учетной записью пользователя postgres: psql -d demo --U postgres Для создания таблиц в языке SQL служит команда CREATE TABLE. Ее полный синтаксис представлен в документации на PostgreSQL, а упрощенный синтаксис таков: 22


Компания Postgres Professional Е. П. Моргунов PostgreSQL. Основы языка SQL Учебное пособие Санкт-Петербург «БХВ-Петербург» 2018 УДК 004.655 ББК 32.973.26-018.2 М79 Моргунов, Е. П. М79 PostgreSQL. Основы

Язык SQL Лекция 6 Индексы Е. П. Моргунов Сибирский государственный университет науки и технологий имени академика М. Ф. Решетнева г. Красноярск Институт информатики и телекоммуникаций [email protected]

Братчиков И.Л. 41. Основы проектирования баз данных. Методы построения СУБД. SQL, примеры реализации. Основы современных баз данных. 1. Основные определения. Терминология. В литературе можно встретить

Тема 10. Основы технологии баз данных Технология баз данных является одним из ключевых достижений информатики, используемым для построения компьютерных информационных систем и приложений, реализующих информационные

ОСНОВНЫЕ ПОНЯТИЯ БАЗ ДАННЫХ 1. Выберите правильный порядок действий при проектировании БД а) Решение проблемы передачи данных б) Анализ предметной области, с учетом требования конечных пользователей в)

Введение Эта книга предназначена для разработчиков, которые в качестве системы управления базами данных (СУБД) используют Oracle. Поэтому в настоящей книге не отводится много места для рассмотрения вопросов,

Вариант 1 Выберите правильный вариант ответа. Возможен только один вариант правильного ответа. 1. Информационная система-это а) Любая система обработки информации б) Система обработки текстовой информации

Язык SQL Лекция 3 Основы языка определения данных Е. П. Моргунов Сибирский государственный университет науки и технологий имени академика М. Ф. Решетнева г. Красноярск Институт информатики и телекоммуникаций

Язык SQL Лекция 5 Изменение данных Е. П. Моргунов Сибирский государственный университет науки и технологий имени академика М. Ф. Решетнева г. Красноярск Институт информатики и телекоммуникаций [email protected]

➀ Информационные системы и банки данных. Важнейшим условием обеспечения эффективного функционирования любой организации является наличие развитой информационной системы. Информационная система это система,

Глава 1. Начало работы Как устроена база данных Microsoft Access Проектирование структуры данных Этапы работы с базой данных Приступим к работе Пользовательский интерфейс Access 2007 Настройка элементов

Глава 3. Установка и запуск многопользовательской версии Требования и условия...1 Порядок установки СБиС++ в сети...2 Установка и настройка сервера и клиента Pervasive.SQL...3 Установка программы...4 Подготовка

БАНК ТЕСТОВЫХ ЗАДАНИЙ Учебная дисциплина Направление Уровень подготовки Кафедра Б1.Б.12 Управление данными 09.03.02 Информационные системы и технологии бакалавриат Методов и средств измерений и автоматизации

Базы данных Развития вычислительной техники осуществлялось по двум основным направлениям: применение вычислительной техники для выполнения численных расчетов; использование средств вычислительной техники

Московский государственный технический университет имени Н. Э. Баумана Калужский филиал Ю. Е. Гагарин, С. В. Пономарев ПРИМЕНЕНИЕ ЯЗЫКА SQL В MS ACCESS Учебно-методическое пособие УДК 681.3.06 ББК 32.973

1. Информация и данные 2. Основные понятия систем с базами данных Информационные компьютерные системы с базами данных это системы информационных, математических, программных, языковых, организационных

PDM STEP SUITE версия 5.0 Инструкция по установке PDM STEP Suite Инструкция для системного программиста. Часть 1 АО НИЦ «Прикладная Логистика» 2019 PDM STEP Suite v.5.0. Инструкция для системного программиста

1 из 6 Лекция 1. Архитектура системы баз данных. Функции администратора системы баз данных в корпоративной информационной системе. Объекты базы данных. 1.1. Архитектура системы баз данных ANSI/SPARC...1

СОДЕРЖАНИЕ ВВЕДЕНИЕ... 3 1 ИССЛЕДОВАНИЕ ПРЕДМЕТНОЙ ОБЛАСТИ И ПОСТАНОВКА ЗАДАЧИ... 4 2 ПОСТРОЕНИЕ ИНФОЛОГИЧЕСКОЙ МОДЕЛИ... 5 3 ДАТАЛОГИЧЕСКОЕ ПРОЕКТИРОВАНИЕ БАЗЫ ДАННЫХ... 6 3.1 Выбор системы управления

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

Учебная дисциплина «Базы данных и управление ими» для студентов специальности Прикладная информатика (бакалавриат) 080800.62 Лекция 15 МОДЕЛИ ОРГАНИЗАЦИИ ДОСТУПА К БАЗАМ ДАННЫХ Учебные вопросы: 1. Архитектура

Язык SQL Лекция 7 Транзакции Е. П. Моргунов Сибирский государственный университет науки и технологий имени академика М. Ф. Решетнева г. Красноярск Институт информатики и телекоммуникаций [email protected]

Компьютерные информационные технологии Модуль 13. Общая характеристика СУБД Access 1 ЗАДАЧИ МОДУЛЯ После изучения модуля вы сможете: рассказать о функциональных возможностях СУБД Access; знать особенности

Система электронного документооборота А р х и в а р и у с Руководство по установке Москва, 2008 2 АННОТАЦИЯ В настоящем документе приводится описание комплекта поставки программного продукта «ЕВФРАТ-Документооборот

БАЗЫ ДАННЫХ (БД). СИСТЕМЫ УПРАВЛЕНИЯ БД Общие положения Цель любой информационной системы - обработка данных об объектах реального мира. В широком смысле слова база данных - это совокупность сведений о

Введение в базы данных. Введение в SQL. Sumy Educational Center Software Quality Assurance (QA) Netcracker 2016 1 Вы узнаете о следующем Что такое база данных Классификация баз данных СУБД Клиенты СУБД

1.1. Основы работы с базами данных 1.1.1. Базы данных и системы управления базами данных. Модели данных База данных (БД) это именованная совокупность структурированных данных, относящихся к определенной

Кажется, это было совсем недавно, но какие с тех пор произошли существенные изменения! В то время, когда автор занимался подготовкой к печати книги Professional SQL Server 7.0 Programming в начале 1999

Введение в теорию баз данных Лекция 1 План лекции Основные понятия Организация данных в БД Виды моделей данных Архитектура БД Классификация БД Server 2008. Лекция 1 2 Основные понятия Server 2008. Лекция

Приложение 4 Подсистема управления процессами и вычислениями ОГЛАВЛЕНИЕ 1. Общие сведения... 2 2. Моделирование состояний и рабочих процессов... 2 2.1. Управление списком групп состояний... 2 2.2. Создание

Softacom CRM Руководство по установке Версия 2.1. 1 «Руководство по установке Softacom CRM». Содержит описание процесса установки системы. Содержание 1 ВВЕДЕНИЕ... 3 1.1 Общее о системе... 3 1.2 Особенности

Лабораторная работа 4 «Создание связей между таблицами» Цель работы: изучение технологии создания структуры реляционной базы данных в Microsoft Office Access 2007 1. Краткие теоретические сведения Слово

Логическое резервирование Темы Логическое и физическое резервирование Копирование отдельных таблиц Резервирование и восстановление баз данных и кластера 2 Виды резервирования Логическое резервирование

MICROSOFT ACCESS: СВЯЗИ, ВЫЧИСЛЯЕМЫЕ ПОЛЯ, СОЗДАНИЕ КНОПОЧНОЙ ФОРМЫ БД I. СВЯЗИ ТАБЛИЦ Современные базы данных обычно состоят из многих таблиц, связанных между собой. Одной из целей создания хорошей структуры

НАЦИОНАЛЬНЫЙ АВИАЦИОННЫЙ УНИВЕРСИТЕТ Кафедра прикладной информатики Курсовая работа Тема: СУБД Microsoft Access Создание и обработка БД Цель работы: теоретически и практически освоить основные приемы работы

Транзакции и одновременный доступ: сравнение реализаций в PostgreSQL и Oracle Егор Рогов, Postgres Professional Зачем все это? запрос результат Зачем все это? запрос результат Транзакции Атомарность все

@БД, CУБД 1. Структура данных, для которой характерна подчиненность объектов нижнего уровня объектам верхнего уровня, называется A. табличной B. реляционной *C. иерархической D. сетевой 2. Отличительная

VOGBIT Руководство по установке 2010 Оглавление Введение... 4 Требования к программному и аппаратному обеспечению... 5 Последовательность установки... 6 Установка программы... 7 Запрос и получение лицензии...

Этапы разработки базы данных С базами данных, как правило, работают не профессионалы, поэтому можно сформулировать следующие требования к БД. Разработчики, при создании БД, должны ориентироваться на эти

Система управления базами данных Access Выполнила Чибинова Назлыгуль Ниязовна, студентка факультета иностранных языков Елабужского Института Казанского (Привожского) федерального университета. Научный

Информатика Лекция 5 MS Access Информационные системы Приложения для хранения, пополнения, редактирования и использования больших объемов данных Под использованием подразумевается в простейшем случае доступ

Оглавление Предисловие...3 Ч а с т ь I. Базы данных, СУБД и модели данных Глава 1. Назначение технологии баз данных. Функции и основные компоненты систем управления базами данных..........................................

Лаборатория мониторинга и автоматизации образовательного процесса. Руководство администратора сайта поддержки образовательного процесса Редакция 3 от 18.12.15. Коротков Д.С., Жучок И.О. Включение/отключение

Глава 6 Теория баз данных 6.1. Общие понятия 6.2. Модели данных 6.3. Реляционные базы данных 6.4. Постреляционные модели и базы данных 6.5. Проектирование баз данных Современные информационные системы,

Лабораторная работа 9 Исследование возможностей Microsoft Access 2007 по формированию запросов с использованием SQL. Цель: 1. Изучить порядок формирования запросов с использованием SQL в Microsoft Access

Комплекс подготовки документов аэронавигационной информации Создание базы аэронавигационных данных Общие положения Основным источником аэронавигационной информации комплекса является реляционная база аэронавигационных

1. Оценочные средства текущего контроля. Вопросы, выносимые на опрос (для дискуссии) разделам учебной дисциплины: Раздел 1.Введение в банки данных 1. Понятие банка данных (БнД). Компоненты БнД. 1.1. Информационный

Лекция 2 1 По словарю: Архитектуры информационных систем Информационная система организационно упорядоченная совокупность документов (массивов документов) и информационных технологий, в том числе с использованием

Дж.Боуман, С.Эмерсон, М.Дарновски ПРАКТИЧЕСКОЕ РУКОВОДСТВО ПО SQL Эта книга поможет даже в тех случаях, когда бесполезно самое лучшее руководство пользователя. Здесь раскрываются темы, которые часто пропускаются

Система электронного документооборота А р х и в а р и у с Руководство по установке Москва, 2009 2 АННОТАЦИЯ В настоящем документе приводится описание комплекта поставки программного продукта «ЕВФРАТ-Документооборот.



Понравилась статья? Поделиться с друзьями: