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.2.1.
- 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.