postgresql: промышленная разработка баз данных. Лекция 3

13
PostgreSQL: промышленная разработка баз данных Лекция 3 Манипуляционные средства языка SQL: операторы SELECT, UPDATE, INSERT, DELETE. Основные разделы оператора SELECT.

Upload: nikolay-samokhvalov

Post on 11-Apr-2015

502 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: PostgreSQL: промышленная разработка баз данных. Лекция 3

PostgreSQL: промышленнаяразработка баз данных

Лекция 3

Манипуляционные средства языка SQL: операторы SELECT, UPDATE, INSERT, DELETE. Основные разделы оператора SELECT.

Page 2: PostgreSQL: промышленная разработка баз данных. Лекция 3

PostgreSQL: промышленная разработка баз данных. Лекция 3

Операторы SQL

Сегодня будем «препарировать» операторы SELECT/INSERT/UPDATE/DELETE

Что нас интересует? Синтаксис Семантика Процесс исполнения (алгоритмы)

Page 3: PostgreSQL: промышленная разработка баз данных. Лекция 3

PostgreSQL: промышленная разработка баз данных. Лекция 3

Операторы SQL

1. DDL (Data Definition Language): CREATE ..., ALTER ..., DROP ... и пр.

Примечание: в PostgreSQL DDL­операторы можно использовать в транзакциях!

2. Операторы манипулирования данными:

1. Выборка: SELECT

2. Удаление: DELETE

3. Обновление: UPDATE

4. Вставка: INSERT

Используют некоторые принципы образованияSELECT для определения целевого множества строк

Может использовать непосредственно операторSELECT для определения данных для вставки

Page 4: PostgreSQL: промышленная разработка баз данных. Лекция 3

PostgreSQL: промышленная разработка баз данных. Лекция 3

Оператор INSERT

Как устроен? Не забываем про \h:postgres=# \h INSERTCommand: INSERTDescription: create new rows in a tableSyntax:INSERT INTO table [ ( column [, ...] ) ] { DEFAULT VALUES | VALUES ( { expression | DEFAULT } [, ...] ) [, ...] | query } [ RETURNING * | output_expression [ AS output_name ] [, ...] ]

Пример:INSERT INTO person (person_name, person_age)VALUES ('Сергей', 22)RETURNING person_id AS id;

Может использовать непосредственно операторSELECT для определения данных для вставки

Полезное расширение, позволяет избежать дополнительного вызова SELECT

Можно вставлять сразу несколько строк

Page 5: PostgreSQL: промышленная разработка баз данных. Лекция 3

PostgreSQL: промышленная разработка баз данных. Лекция 3

Оператор DELETE

DELETE FROM [ ONLY ] table [ [ AS ] alias ] [ USING usinglist ] [ WHERE condition | WHERE CURRENT OF cursor_name ] [ RETURNING * | output_expression [ AS output_name ] [, ...] ]

Примеры:DELETE FROM person WHERE person_age < 18;

DELETE FROM personUSING "group"WHERE person_group_id = group_id AND group_name = 'aaa123';

Полезное расширение, даёт возможностьссылаться на другие таблицы в разделе WHERE

Для работы с курсорами (8.3; стандарт)Полезно при использованиимеханизма наследования

Page 6: PostgreSQL: промышленная разработка баз данных. Лекция 3

PostgreSQL: промышленная разработка баз данных. Лекция 3

Оператор UPDATE

UPDATE [ ONLY ] table [ [ AS ] alias ] SET { column = { expression | DEFAULT } | ( column [, ...] ) = ( { expression | DEFAULT } [, ...] ) } [, ...] [ FROM fromlist ] [ WHERE condition | WHERE CURRENT OF cursor_name ] [ RETURNING * | output_expression [ AS output_name ] [, ...] ]

Примеры:UPDATE person SET person_status = 'blocked' WHERE person_age < 18;

UPDATE personSET person_status = 'blocked'FROM "group"WHERE person_group_id = group_id AND group_name = 'aaa123';RETURNING person_id AS id, person_name AS name; -- return IDs&names of -- affected persons

Полезное расширение, даёт возможностьссылаться на другие таблицы в разделе WHERE

Для работы с курсорами (8.3; стандарт)Полезно при использованиимеханизма наследования

Page 7: PostgreSQL: промышленная разработка баз данных. Лекция 3

PostgreSQL: промышленная разработка баз данных. Лекция 3

Оператор SELECT

SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ] * | expression [ AS output_name ] [, ...] [ FROM from_item [, ...] ] [ WHERE condition ] [ GROUP BY expression [, ...] ] [ HAVING condition [, ...] ] [ { UNION | INTERSECT | EXCEPT } [ ALL ] select ] [ ORDER BY expression [ ASC | DESC | USING operator ] [ NULLS { FIRST | LAST } ] [, ...] ] [ LIMIT { count | ALL } ] [ OFFSET start ] [ FOR { UPDATE | SHARE } [ OF table_name [, ...] ] [ NOWAIT ] [...] ]

Примеры:SELECT 1;

SELECT CURRENT_TIMESTAMP;

SELECT now();

12

4

3

556

7

8

9

Page 8: PostgreSQL: промышленная разработка баз данных. Лекция 3

PostgreSQL: промышленная разработка баз данных. Лекция 3

Оператор SELECT

Примеры:SELECT person_name AS "name", person_age AS "age"FROM personWHERE age > 18;

SELECT group_name, person_nameFROM person, "group"WHERE person_group_id = group_id AND group_id IN (10, 11, 12);

SELECT group_name, person_nameFROM person JOIN "group" ON person_group_id = group_idWHERE AND group_id IN (10, 11, 12);

Page 9: PostgreSQL: промышленная разработка баз данных. Лекция 3

PostgreSQL: промышленная разработка баз данных. Лекция 3

Упражнение 1

1. Создайте таблицу "test", состоящую из двух столбцов типов integer (первичный ключ) и float (числовые значения).

2. Заполните таблицу десятью случайными значениями, перенумерованными по порядку от 1 до 10.

1. для нумерования по порядку используйте функцию generate_series(from, to);

2. для заполнения случайными значениями используйте функцию random();3. для определения сигнатуры функций используйте команду \df в psql (или 

доступную документацию).4. поместите функции в раздел FROM оператора SELECT.

3. Произведите выборку всех данных из таблицы и проанализируйте увиденное.4. Удалите все строки и повторите задание, поместив функцию random() в раздел 

списка выборки оператора SELECT.5. В чём разница этих двух подходов?

Page 10: PostgreSQL: промышленная разработка баз данных. Лекция 3

PostgreSQL: промышленная разработка баз данных. Лекция 3

Упражнение 2

1. Создайте таблицу пользователей (произвольная форма), внесите туда несколько пользователей. У каждого пользователя должен быть флаг «активен» (для возможности блокировки пользователей).

2. Расширьте схему БД: «пользователь­блог(группа)­темы­комментарии»

3. Напишите SQL­запросы:

1. для создания новой темы;

2. для создания комментария к теме;

3. для блокировки пользователей;

4. для удаления всех комментариев всех заблокированных (неактивных) пользователей

5. для подсчёта количества тем у каждого пользователя (результат: две «колонки»: имя, кол­во тем)

Page 11: PostgreSQL: промышленная разработка баз данных. Лекция 3

PostgreSQL: промышленная разработка баз данных. Лекция 3

Проверка знаний и навыков

Результаты (ответы на пункты с предыдущих слайдов, описанные подчёркнутым текстом) присылать на [email protected]

Page 12: PostgreSQL: промышленная разработка баз данных. Лекция 3

PostgreSQL: промышленная разработка баз данных. Лекция 3

Литература: рекомендации для данной лекции

● PostgreSQL Reference Manual — II.4-II.8, VI.I (SELECT, INSERT, UPDATE, DELETE)

● Дейт, К.. Введение в системы баз данных — Главы 4, 7.7, Приложения А.2, Б.

● Кузнецов, С. Д. Основы баз данных — Лекции 13, 14, 15.

Page 13: PostgreSQL: промышленная разработка баз данных. Лекция 3

PostgreSQL: промышленная разработка баз данных. Лекция 3

Контакты

[email protected]

● Blog: http://nikolay.samokhvalov.com

● XMPP/GTalk: [email protected]

● Skype: samokhvalov & postgresmen

● +7 905 783 9804