СУБД POSTGRES - разрабатывался под руководством Майкла Стоунбрейкера (Michael Stonebraker), профессора Калифорнийского
университета в Беркли. До этого Майкл Стоунбрейкер уже возглавлял разработку INGRES : POSTGRES возник, как результат продолжения работы. Первая версия СУБД была выпущена в 1989 году. В 1994 году Беркли Эндрю и Джоли Чену взялись за его дальнейшее развитие. Проект получил название Postgres95. К 1996 году получило новое развитие, связь с языком SQL и получило название PostgreSQL.
Скачайте с сайта: www.postgrespro.ru/ postgresql-13.2-1-windows-x64 PostgreSQL_9.6.12_64bit_Setup – установочник PostgreSQL . PgAdmin3_1.22.1_X86bit_Setup — графическое средство для
PostgreSQL. Программа упрощает основные задачи администрирования, отображает объекты баз данных, позволяет выполнять запросы SQL.
Приглашение имеет вид : postgres=#. «Postgres» здесь — имя базы данных, к которой
вы сейчас подключены. Один сервер PostgreSQL может одновременно обслуживать несколько баз данных, но одновременно вы работаете только с одной из них. При неправильным отображением русских букв в терминале : Вести команду chcp 1251. В свойствах окна измените на «Lucida Console».
\? Справка по командам psql. \h Справка по SQL: список
доступных команд или синтаксис конкретной команды. \x Переключает обычный табличный вывод(столбцы и строки) на расширенный (каждый столбец на отдельной строке) и обратно. Удобно для просмотра нескольких «широких» строк. \l Список баз данных. \dt Список таблиц. \q Завершить сеанс работы.
значения true (истина) или false (ложь); Date - дата. неопределенное значение null «значение неизвестно» или «значение не задано». полный список типов данных : postgrespro.ru/doc/datatype.html
NOT NULL – (NULL - неопределенность ) –не содержит неопределенное значение. CHECK
задаётся выражение, возвращающее булевский результат, по которому определяется, будет ли успешна операция добавления или изменения для конкретного значения. CREATE TABLE aircrafts ( aircraft_code char( 3 ) NOT NULL, model text NOT NULL, range integer NOT NULL, CHECK ( range > 0 ), PRIMARY KEY ( aircraft_code )); CREATE TABLE progress ( ... mark numeric( 1 ), CONSTRAINT valid_mark CHECK ( mark >= 3 AND mark <= 5 ), ... );
Чтобы вывести все столбцы, необходимо указать символ звездочки: SELECT * FROM courses; Чтобы
результирующей строке убрать дублирующие строки, после select надо добавить слово distinct: SELECT DISTINCT start_year FROM students; Подробно в документации:
Условие фильтрации записывается во фразе WHERE: SELECT * FROM courses WHERE
hours > 45; Условие должно иметь логический тип. Оно может содержать отношения =, <> (или !=), >, >=, <, <=, Like (NOT Like) . может объединять опреаторов с and, or, not и круглых скобок — как в обычных языках программирования. Можно использовать шаблоны %, _. Between …. And…. Примеры SELECT * FROM aircrafts WHERE model LIKE 'Airbus%'; SELECT * FROM aircrafts WHERE range BETWEEN 3000 AND 6000; SELECT model, aircraft_code, range FROM aircrafts WHERE range >= 4000 AND range <= 6000;
По возрастанию (по умолчанию): SELECT * FROM aircrafts ORDER BY
range; По убыванию DESC : SELECT * FROM aircrafts ORDER BY range DESC; Ограничение число строк (LIMIT) : SELECT airport_name, city, longitude FROM airports ORDER BY longitude DESC LIMIT 3; Для пропуска строк (OFFSET): SELECT airport_name, city, longitude FROM airports ORDER BY longitude DESC LIMIT 3 OFFSET 3;
CASE WHEN condition THEN result [WHEN ...] [ELSE result] END; SELECT model, range, CASE
WHEN range < 2000 THEN ‘Ближнемагистральный' WHEN range < 5000 THEN ‘Среднемагистральный‘ ELSE ' Дальнемагистральный ' END AS type FROM aircrafts ORDER BY model;
Группировка данных – это объединение записей в соответствии со
значениями некоторого заданного поля. Для группировки результатов выборки совместно с оператором SELECT используется предложение GROUP BY. Данное предложение должно следовать после предложение WHERE, но перед предложением ORDER BY. Как правило, совместно с предложением GROUP BY используются функции агрегирования.
Соединение двух таблиц на основе равенства значений атрибутов SELECT a.aircraft_code, a.model, s.seat_no, s.fare_conditions FROM
seats AS s, aircrafts AS a WHERE s.aircraft_code = a.aircraft_code AND a.model ~ '^Cessna' ORDER BY s.seat_no; SELECT a.aircraft_code, a.model, s.seat_no, s.fare_conditions FROM seats s JOIN aircrafts a ON s.aircraft_code = a.aircraft_code WHERE a.model ~ '^Cessna' ORDER BY s.seat_no;
Левое внешнее соединение(LEFT OUTER JOIN ) SELECT a.aircraft_code AS a_code, a.model, r.aircraft_code AS
r_code, count( r.aircraft_code ) AS num_routes FROM aircrafts a LEFT OUTER JOIN routes r ON r.aircraft_code = a.aircraft_code GROUP BY 1, 2, 3 ORDER BY 4 DESC; Правое внешнее соединение(RIGHT OUTER JOIN) Полное внешнее соединение(FULL OUTER JOIN)
В SELECT предусмотрены средства выполнения операции с выборками, как множествами: UNION-
для вычисления объединения множества строк из двух выборок; INTERSECT – для вычисления пересечения множества строк из двух выборок; EXCERT- для вычисления разности множества строк из двух выборок;
Вопрос: В какие города можно улететь: либо из Москвы, либо из Санкт-Петербурга? SELECT
arrival_city FROM routes WHERE departure_city = ‘Москва' UNION SELECT arrival_city FROM routes WHERE departure_city = ' Санкт-Петербурга ' ORDER BY arrival_city;
Вопрос: В какие города можно улететь: как из Москвы, так из Санкт-Петербурга? SELECT
arrival_city FROM routes WHERE departure_city = ‘Москва' INTERSECT SELECT arrival_city FROM routes WHERE departure_city = ' Санкт-Петербурга ' ORDER BY arrival_city;
Вопрос: В какие города можно улететь:из Санкт-Петербурга , но нельзя из Москвы? SELECT
arrival_city FROM routes WHERE departure_city = ‘Санкт-Петербурга' EXCEPT SELECT arrival_city FROM routes WHERE departure_city = ' Москва' ORDER BY arrival_city;