Академический Документы
Профессиональный Документы
Культура Документы
Сегодня будем «препарировать» операторы
SELECT/INSERT/UPDATE/DELETE
Что нас интересует?
Синтаксис
Семантика
Процесс исполнения (алгоритмы)
1. DDL (Data Definition Language): CREATE ..., ALTER ..., DROP ... и пр.
Примечание: в PostgreSQL DDLоператоры можно использовать в
транзакциях!
2. Операторы манипулирования данными:
1. Выборка: SELECT
2. Удаление: DELETE Используют некоторые принципы образования
SELECT для определения целевого
3. Обновление: UPDATE множества строк
4. Вставка: INSERT
Может использовать непосредственно оператор
SELECT для определения данных для вставки
Как устроен? Не забываем про \h:
postgres=# \h INSERT
Command: INSERT Можно вставлять сразу несколько строк
Description: create new rows in a table
Syntax:
INSERT INTO table [ ( column [, ...] ) ]
{ DEFAULT VALUES | VALUES ( { expression | DEFAULT } [, ...] ) [, ...] | query }
[ RETURNING * | output_expression [ AS output_name ] [, ...] ]
Полезное расширение, позволяет избежать Может использовать непосредственно оператор
дополнительного вызова SELECT SELECT для определения данных для вставки
Пример:
INSERT INTO person (person_name, person_age)
VALUES ('Сергей', 22)
RETURNING person_id AS id;
Полезное расширение, даёт возможность
ссылаться на другие таблицы в разделе WHERE
Примеры:
DELETE FROM person WHERE person_age < 18;
Полезное расширение, даёт возможность
ссылаться на другие таблицы в разделе WHERE
Примеры:
UPDATE person SET person_status = 'blocked' WHERE person_age < 18;
UPDATE person
SET 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
PostgreSQL: промышленная разработка баз данных. Лекция 3
Оператор SELECT
7
SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ]
4
* | expression [ AS output_name ] [, ...]
1 [ FROM from_item [, ...] ]
2 [ WHERE condition ]
[ GROUP BY expression [, ...] ]
3
[ HAVING condition [, ...] ]
5 [ { UNION | INTERSECT | EXCEPT } [ ALL ] select ]
6 [ ORDER BY expression [ ASC | DESC | USING operator ] [ NULLS { FIRST | LAST } ]
[, ...] ]
[ LIMIT { count | ALL } ]
8
[ OFFSET start ]
9 [ FOR { UPDATE | SHARE } [ OF table_name [, ...] ] [ NOWAIT ] [...] ]
Примеры:
SELECT 1;
SELECT CURRENT_TIMESTAMP;
SELECT now();
SELECT
group_name, person_name
FROM
person, "group"
WHERE
person_group_id = group_id
AND group_id IN (10, 11, 12);
SELECT
group_name, person_name
FROM
person
JOIN "group" ON person_group_id = group_id
WHERE
AND group_id IN (10, 11, 12);
2. Расширьте схему БД: «пользовательблог(группа)темыкомментарии»
3. Напишите SQLзапросы:
1. для создания новой темы;
2. для создания комментария к теме;
3. для блокировки пользователей;
4. для удаления всех комментариев всех заблокированных (неактивных)
пользователей
5. для подсчёта количества тем у каждого пользователя (результат: две
«колонки»: имя, колво тем)