PostgreSQL
  • Introduction
  • PostgreSQL
    • Введение
    • Установка и базовые операции
    • Запуск команд SQL из файла
    • Агрегатные функции
    • Реляционная алгебра
    • Создание счётчика
    • Изменение структуры таблицы
    • Диапазоны и множества
    • Регулярные выражения
    • Скрипты SQL
    • Группировка
    • Регистры строк
    • Уникальные поля
    • Сортировки и вычисляемые поля
    • Представления
    • Массивы и триггеры
    • Индексы и анализ
    • Текстовый анализ
    • Использование RETURNING
    • Возврат массива записей
    • Внешние ключи
    • Ускорение БД
    • Запросы WITH
    • JSON
Powered by GitBook
On this page
  • Выборка
  • Проекция
  • Объединение
  • Пересечение
  • Соединение
  • Произведение
  • Разность

Was this helpful?

  1. PostgreSQL

Реляционная алгебра

Создадим таблицу, в которой будут храниться данные о студентах

CREATE TABLE students (idMan INTEGER, nameMan TEXT);

Заполним таблицу данными

INSERT INTO students (idMan, nameMan) VALUES (2, 'Maxim');
INSERT INTO students (idMan, nameMan) VALUES (5, 'Nina');
INSERT INTO students (idMan, nameMan) VALUES (3, 'Ann');
INSERT INTO students (idMan, nameMan) VALUES (4, 'George');

Выборка

Выбрать все записи таблицы

SELECT * FROM students;

Выбрать все записи из таблицы и упорядочить их по полю idMan

SELECT * FROM students ORDER BY idMan;

Проекция

Выбрать содержимое столбца nameMan

SELECT nameMan FROM students;

Объединение

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

CREATE TABLE gamers (idMan INTEGER, nameMan TEXT);

Заполним таблицу, хранящую информацию о геймерах

INSERT INTO gamers (idMan, nameMan) VALUES (2, 'Maxim');
INSERT INTO gamers (idMan, nameMan) VALUES (8, 'Oleg');
INSERT INTO gamers (idMan, nameMan) VALUES (5, 'Nina');
INSERT INTO gamers (idMan, nameMan) VALUES (9, 'Piter');

Объединим две таблицы в одну с удалением лишних дублей

SELECT * FROM students UNION SELECT * FROM gamers;

Пересечение

Выбрать записи, которые есть в обеих таблицах

SELECT * FROM students NATURAL JOIN gamers;

Соединение

Создадим таблицу для хранения информации о странах

CREATE TABLE countries (countryId INTEGER, countryName TEXT);

Создадим таблицу для хранения информации о городах

CREATE TABLE cities (cityId INTEGER, cityName TEXT, countryNumber INTEGER);

Заполним информацией таблицу, хранящую страны

INSERT INTO countries (countryId, countryName) VALUES (1, 'Russia');
INSERT INTO countries (countryId, countryName) VALUES (2, 'USA');

Заполним информацией таблицу, хранящую города

INSERT INTO cities (cityId, cityName, countryNumber) VALUES (10, 'Moscow', 1);
INSERT INTO cities (cityId, cityName, countryNumber) VALUES (20, 'Omsk', 1);
INSERT INTO cities (cityId, cityName, countryNumber) VALUES (30, 'New-York', 2);
INSERT INTO cities (cityId, cityName, countryNumber) VALUES (40, 'Washington', 2);

Вывести таблицу, в которой отображается информация о городе и стране, в которой он находится

SELECT * FROM cities INNER JOIN countries ON (countryNumber = countryId);

Вывести два столбца: название города и название страны, в которой он находится

SELECT cityName, countryName FROM 
(SELECT * FROM cities INNER JOIN countries ON (countryNumber = countryId)) AS myTab1;

Произведение

Создадим таблицу, хранящую информацию о мальчиках

CREATE TABLE boys (boy_id SERIAL PRIMARY KEY, boy_name TEXT );

Создадим таблицу, хранящую информацию о девочках

CREATE TABLE girls ( girl_id SERIAL PRIMARY KEY, girl_name TEXT );

Заполним таблицу с мальчиками

INSERT INTO boys (boy_name) VALUES ('Maxim');
INSERT INTO boys (boy_name) VALUES ('George');

Заполним таблицу с девочками

INSERT INTO girls (girl_name) VALUES ('Ann');
INSERT INTO girls (girl_name) VALUES ('Nina');
INSERT INTO girls (girl_name) VALUES ('Ola');

Выведем все возможные пары (девочка - мальчик)

SELECT * FROM girls, boys;

Вывести все возможные пары (девочка - мальчик). Вывод только их имён.

SELECT girl_name, boy_name FROM (SELECT * FROM girls, boys) AS ttt;

Разность

Создадим таблицу для хранения всех каналов

CREATE table channels (slug TEXT, code INTEGER);

Заполним таблицу, хранящую все каналы

INSERT INTO channels (slug, code) VALUES ( '2x2', 10 );
INSERT INTO channels (slug, code) VALUES ( 'CTC', 20 );
INSERT INTO channels (slug, code) VALUES ( 'PornoTv', 30 );

Создадим таблицу для хранения запрещённых каналов

INSERT INTO prohibited_channels (slug, code) VALUES ( '2x2', 10 );
INSERT INTO prohibited_channels (slug, code) VALUES ( 'PornoTv', 30 );

Выведем на экран только разрешённые каналы.

Для этого мы вычтем из всех каналов запрещённые каналы.

SELECT * FROM channels NATURAL LEFT JOIN prohibited_channels WHERE prohibited_channels IS NULL;
PreviousАгрегатные функцииNextСоздание счётчика

Last updated 5 years ago

Was this helpful?