Postgresql запросы: 1. Этапы выполнения / Хабр

PostgreSQL : Документация: 10: 2.5. Выполнение запроса : Компания Postgres Professional

Чтобы получить данные из таблицы, нужно выполнить запрос. Для этого предназначен SQL-оператор SELECT. Он состоит из нескольких частей: выборки (в которой перечисляются столбцы, которые должны быть получены), списка таблиц (в нём перечисляются таблицы, из которых будут получены данные) и необязательного условия (определяющего ограничения). Например, чтобы получить все строки таблицы weather, введите:

SELECT * FROM weather;

Здесь * — это краткое обозначение «всех столбцов». [2] Таким образом, это равносильно записи:

SELECT city, temp_lo, temp_hi, prcp, date FROM weather;

В результате должно получиться:

     city      | temp_lo | temp_hi | prcp |    date
---------------+---------+---------+------+------------
 San Francisco |      46 |      50 | 0.25 | 1994-11-27
 San Francisco |      43 |      57 |    0 | 1994-11-29
 Hayward       |      37 |      54 |      | 1994-11-29
(3 rows)

В списке выборки вы можете писать не только ссылки на столбцы, но и выражения. Например, вы можете написать:

SELECT city, (temp_hi+temp_lo)/2 AS temp_avg, date FROM weather;

И получить в результате:

     city      | temp_avg |    date
---------------+----------+------------
 San Francisco |       48 | 1994-11-27
 San Francisco |       50 | 1994-11-29
 Hayward       |       45 | 1994-11-29
(3 rows)

Обратите внимание, как предложение AS позволяет переименовать выходной столбец. (Само слово AS можно опускать.)

Запрос можно дополнить «условием», добавив предложение WHERE, ограничивающее множество возвращаемых строк. В предложении WHERE указывается логическое выражение (проверка истинности), которое служит фильтром строк: в результате оказываются только те строки, для которых это выражение истинно. В этом выражении могут присутствовать обычные логические операторы (AND, OR и NOT). Например, следующий запрос покажет, какая погода была в Сан-Франциско в дождливые дни:

SELECT * FROM weather
    WHERE city = 'San Francisco' AND prcp > 0. 0;

Результат:

     city      | temp_lo | temp_hi | prcp |    date
---------------+---------+---------+------+------------
 San Francisco |      46 |      50 | 0.25 | 1994-11-27
(1 row)

Вы можете получить результаты запроса в определённом порядке:

SELECT * FROM weather
    ORDER BY city;
     city      | temp_lo | temp_hi | prcp |    date
---------------+---------+---------+------+------------
 Hayward       |      37 |      54 |      | 1994-11-29
 San Francisco |      43 |      57 |    0 | 1994-11-29
 San Francisco |      46 |      50 | 0.25 | 1994-11-27

В этом примере порядок сортировки определён не полностью, поэтому вы можете получить строки Сан-Франциско в любом порядке. Но вы всегда получите результат, показанный выше, если напишете:

SELECT * FROM weather
    ORDER BY city, temp_lo;

Если требуется, вы можете убрать дублирующиеся строки из результата запроса:

SELECT DISTINCT city
    FROM weather;
     city
---------------
 Hayward
 San Francisco
(2 rows)

И здесь порядок строк также может варьироваться. Чтобы получать неизменные результаты, соедините предложения DISTINCT и ORDER BY: [3]

SELECT DISTINCT city
    FROM weather
    ORDER BY city;


[2] Хотя запросы SELECT * часто пишут экспромтом, это считается плохим стилем в производственном коде, так как результат таких запросов будет меняться при добавлении новых столбцов.

[3] В некоторых СУБД, включая старые версии PostgreSQL, реализация предложения DISTINCT автоматически упорядочивает строки, так что ORDER BY добавлять не обязательно. Но стандарт SQL этого не требует и текущая версия PostgreSQL не гарантирует определённого порядка строк после DISTINCT.

HighLoad Junior

Логика проектирования
и архитектура крупных проектов

  • Общие подходы к проектированию, масштабированию
  • Типичная схема
  • Балансировка нагрузки
  • Stateless, shared nothing, уровни абстракции

Проблемы нагрузки
на базу данных

  • Оптимизация запросов и индексов
  • Индексы в базах данных PostgreSQL и MySQL
  • Правильное чтение explain

Масштабирование базы
данных через шардирование
и партиционирование

  • Как устроена MySQL-репликация
  • Секционирование/партиционирование данных
  • Шардирование базы данных
  • Выбор ключа шардирования

Кеширование, NoSQL, очереди;
Поиск, Hadoop и бинарные хранилища

  • Принцип действия и суть NoSQL-баз данных
  • Российская NoSQL база данных Tarantool
  • Принципы и приёмы обработки очередей
  • Кэширование данных в web приложениях
  • Внутреннее устройство поискового движка
  • Организация бинарного (файлового) хранилища
  • Сетевые файловые системы

Простые и логичные лекции для вас читают топовые
разработчики highload систем

Илья
Космодемьянский

CEO и консультант в компании PostgreSQL-Consulting LLC. Специалист по эксплуатации баз данных PostgreSQL, Oracle, DB2.

PostgreSQL-Consulting.com

Андрей
Аксёнов

«Всю жизнь пишу низкоуровневый код, по состоянию на 2015 делаю поисковой движок Sphinx».

Sphinx

Константин
Осипов

Директор по разработке в компании ScyllaDB Inc.

ScyllaDB Inc

Александр
Крижановский

Системный архитектор и ведущий разработчик Tempesta FW. До 2008 года разрабатывал высокопроизводительное ПО в таких компаниях как IBM, Yandex и Parallels.

Tempesta FW

Сергей
Туленцев

Разработчик с 10+ годами опыта. Одним из первых в России выкатил MongoDB в продакшен.

TextMaster

Ваш результат после просмотра лекций

Вы пройдете все этапы от самых общих вещей пректирования до понимания деталей разработки крупных систем;

Узнаете главные секреты и самые свежие «фишки» разработки highload систем

Сдвиг мыслительной парадигмы, слушатели HighLoad++ Junior начинают думать, как разработчики высоконагруженных проектов

Ваша стоимость на рынке труда возрастет минимум на 20%

PostgreSQL: Документация: 15: 2.

5. Запрос к таблице

Для извлечения данных из таблицы выполняется запрос . Для этого используется оператор SQL SELECT . Оператор разделен на список выбора (часть, в которой перечислены возвращаемые столбцы), список таблиц (часть, в которой перечислены таблицы, из которых нужно получить данные) и необязательное уточнение (часть, в которой указаны любые ограничения). . Например, чтобы получить все строки таблицы погода , тип:

ВЫБЕРИТЕ * ОТ погоды;
 

Здесь * — это сокращение от «все столбцы». [2] Таким образом, тот же результат будет получен с:

ВЫБЕРИТЕ город, temp_lo, temp_hi, prcp, дату ИЗ погоды;
 

Вывод должен быть:

     город | temp_lo | temp_hi | пркп | дата
---------------+---------+----------+------+------- -----
 Сан-Франциско | 46 | 50 | 0,25 | 1994-11-27
 Сан-Франциско | 43 | 57 | 0 | 1994-11-29
 Хейворд | 37 | 54 | | 1994-11-29
(3 ряда)
 

В списке выбора можно писать выражения, а не только простые ссылки на столбцы. Например, вы можете сделать:

ВЫБЕРИТЕ город, (temp_hi+temp_lo)/2 AS temp_avg, дату ИЗ погоды;
 

Это должно дать:

     город | темп_среднее | дата
---------------+-----------+------------
 Сан-Франциско | 48 | 1994-11-27
 Сан-Франциско | 50 | 1994-11-29
 Хейворд | 45 | 1994-11-29
(3 ряда)
 

Обратите внимание, как используется предложение AS для переименования выходного столбца. (Предложение AS является необязательным.)

Запрос можно «уточнить», добавив предложение WHERE , указывающее, какие строки нужны. Предложение WHERE содержит логическое выражение (значение истинности), и возвращаются только строки, для которых логическое выражение истинно. В квалификации разрешены обычные булевы операторы ( И , ИЛИ и НЕ ). Например, следующий код возвращает погоду в Сан-Франциско в дождливые дни:

ВЫБЕРИТЕ * ИЗ погоды
    ГДЕ город = 'Сан-Франциско' И prcp > 0. 0;
 

Результат:

     город | temp_lo | temp_hi | пркп | дата
---------------+---------+----------+------+------- -----
 Сан-Франциско | 46 | 50 | 0,25 | 1994-11-27
(1 ряд)
 

Вы можете запросить, чтобы результаты запроса возвращались в отсортированном порядке:

ВЫБЕРИТЕ * ИЗ погоды
    ЗАКАЗАТЬ ПО ГОРОДУ;
 
     город | temp_lo | temp_hi | пркп | дата
---------------+---------+----------+------+------- -----
 Хейворд | 37 | 54 | | 1994-11-29
 Сан-Франциско | 43 | 57 | 0 | 1994-11-29
 Сан-Франциско | 46 | 50 | 0,25 | 1994-11-27
 

В этом примере порядок сортировки указан не полностью, поэтому вы можете получить строки Сан-Франциско в любом порядке. Но вы всегда получите показанные выше результаты, если сделаете:

ВЫБЕРИТЕ * ИЗ погоды
    ORDER BY city, temp_lo;
 

Вы можете запросить удаление повторяющихся строк из результатов запроса:

ВЫБЕРИТЕ ОТЛИЧНЫЙ город
    ОТ погоды;
 
     город
---------------
 Хейворд
 Сан-Франциско
(2 ряда)
 

Здесь снова порядок строк результатов может различаться. Вы можете обеспечить стабильные результаты, используя DISTINCT и ORDER BY вместе: [3]

ВЫБЕРИТЕ ОТЛИЧНЫЙ город
    ОТ погоды
    ЗАКАЗАТЬ ПО ГОРОДУ;
 


[2] Хотя SELECT * полезен для импровизированных запросов, он широко считается плохим стилем в производственном коде, поскольку добавление столбца в таблицу может изменить результаты.

[3] В некоторых системах баз данных, включая старые версии PostgreSQL, реализация DISTINCT автоматически упорядочивает строки, поэтому ORDER BY не нужен. Но это не требуется по стандарту SQL, и текущий PostgreSQL не гарантирует, что DISTINCT приведет к упорядочению строк.

PostgreSQL: Документация: 15: Глава 7. Запросы

Документация → PostgreSQL 15

Поддерживаемые версии:

Текущий
(15)

/

14

/

13

/

12

/

11

Разрабатываемые версии:

devel

Неподдерживаемые версии:

10

/
9,6

/
9,5

/
9. 4

/
9.3

/
9.2

/
9.1

/
9,0

/
8.4

/
8.3

/
8.2

/
8.1

/
8,0

/
7.4

/
7.3

/
7.2

/
7.1

Содержание

7.1. Обзор
7. 2. Табличные выражения
7.2.1. ИЗ Статья
7.2.2. ГДЕ Статья
7.2.3. ГРУППА BY и , ИМЕЮЩИЕ Пункты
7.2.4. НАБОРЫ ДЛЯ ГРУППИРОВАНИЯ , КУБ и ОБЪЕМ
7.2.5. Обработка оконных функций
7.3. Выберите списки
7.3.1. Элементы списка выбора
7.3.2. Метки столбцов
7.3.3. ОТЛИЧНЫЙ
7.4. Объединение запросов ( UNION , INTERSECT , , ИСКЛЮЧАЯ )
7.5. Сортировка рядов ( ЗАКАЗАТЬ )
7.6. ПРЕДЕЛ и СМЕЩЕНИЕ
7.7. ЗНАЧЕНИЯ Списки
7.8. WITH Запросы (общие табличные выражения)
7.