Обучающее руководство по PostgreSQL

Заполнение класса экземплярами Выражение insert используется для заполнения класса экземплярами: INSERT INTO weather VALUES ('San Francisco', 46, 50, 0.25, '11/27/1994'); Также можно использовать команду copy, чтобы выполнить загрузку большого количества данных из плоских (ASCII) файлов. Обычно это быстрее, потомучто данные читаются (или записываются) как единичная атомарная транзакция напрямую в или из заданной таблицы. Для примера: COPY INTO weather FROM '/home/user/weather.txt' USING DELIMITERS '|'; где файл источник должен быть доступен для машины сервера, а не клиента, т.к. серверная часть читает файл напрямую. Запрос к классу Класс weather может быть опрошен с помощью обычных запросов реляционной выборки и проекции. Для этого используется выражение SQL - select. Выражение делится на список объектов (часть, которая описывает возвращаемые атрибуты) и определение (часть, в которой указаны любые ограничения). Например, получить все строки из weather: SELECT * FROM WEATHER; и получим: CLASS="PROGRAMLISTING" +--------------+---------+---------+------+------------+ |city | temp_lo | temp_hi | prcp | date | +--------------+---------+---------+------+------------+ |San Francisco | 46 | 50 | 0.25 | 11-27-1994 | +--------------+---------+---------+------+------------+ |San Francisco | 43 | 57 | 0 | 11-29-1994 | +--------------+---------+---------+------+------------+ |Hayward | 37 | 54 | | 11-29-1994 | +--------------+---------+---------+------+------------+ Можно указывать любые произвольные выражения в списке объектов. Например: SELECT city, (temp_hi+temp_lo)/2 AS temp_avg, date FROM weather; Произвольные логические операторы (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 | 11-27-1994 | +--------------+---------+---------+------+------------+ В качестве последнего замечания, можно указать, чтобы результаты выборки возвращались в отсортированными и с удалением экземпляров копий. SELECT DISTINCT city FROM weather ORDER BY city; Перенаправление запросов SELECT Любой запрос выборки можно перенаправить в новый класс SELECT * INTO TABLE temp FROM weather; Это формирует неявную команду create, создавая новый класс temp с именами атрибутов и типами, указанными списке объектов команды select into. Затем, мы можем, конечно, выполнить любую операцию над классом результатом, такие какие мы могли выполнять над другими классами. Соединение классов До сих пор, наши запросы имели доступ только к одному классу одновременно. Запросам доступны несколько классов одновременно, или доступен один класс таким образом, что многочисленные экземпляры класса обрабатываются одновременно. Запрос, который работает с несколькими экземплярами одного или разных классов одновременно, называется соединительный запрос. Например, мы хотим найти все записи, которые лежат в температурном диапазоне других записей. В действительности, нам нужно сравнить атрибуты temp_lo и temp_hi каждого экземпляра EMP с атрибутами temp_lo и temp_hi всех остальных экземпляров EMP. Замечание: Это только умозрительная модель. На самом деле, соединение может выполняться более эффективно, но это незаметно для пользователя. Мы можем сделать это с помощью следующего запроса: SELECT W1.city, W1.temp_lo AS low, W1.temp_hi AS high, W2.city, W2.temp_lo AS low, W2.temp_hi AS high FROM weather W1, weather W2 WHERE W1.temp_lo < W2.temp_lo AND W1.temp_hi > W2.temp_hi; +--------------+-----+------+---------------+-----+------+ |city | low | high | city | low | high | +--------------+-----+------+---------------+-----+------+ |San Francisco | 43 | 57 | San Francisco | 46 | 50 | +--------------+-----+------+---------------+-----+------+ |San Francisco | 37 | 54 | San Francisco | 46 | 50 | +--------------+-----+------+---------------+-----+------+ Замечание: Семантика такого соединения, означает что ограничение выражения истинно, для определённого декартова произведения классов, указанных в запросе. Для тех экземпляров из декартова произведения, для которых ограничение верно, Postgres вычисляет и возвращает значения, указанные в списке объектов. Postgres SQL, не принимает в внимание повторяющие значения в таких выражениях. Это значит, что Postgres иногда пересчитывает один и тот же объект несколько раз; это часто случается когда логические выражения соединяются с помощью "or". Для удаления таких повторений, ты должен использовать выражение select distinct. В этом случае, оба W1 и W2 заменяются экземпляром класса weather, и он действует на все экземпляры класса. (По терминологии большинства систем баз данных, W1 и W2 известны как переменные диапазона.) Запрос может содержать произвольное число названий классов и суррогатов. Обновление Можно обновлять существующие экземпляры с помощью команды update. Предположим, что температура понизилась на 2 градуса 28 ноября, ты можешь обновить данные так: UPDATE weather SET temp_hi = temp_hi - 2, temp_lo = temp_lo - 2 WHERE date > '11/28/1994'; Удаление Удаление выполняется с помощью команды delete: DELETE FROM weather WHERE city = 'Hayward'; Все записи о погоде в Hayward будут удалены. Надо быть осторожным с запросами в форме DELETE FROM classname; Без ограничения, delete просто удаляет все экземпляры данного класса, делая его пустым. Система не запрашивает подтверждения перед тем как сделать это. Использование итоговых функций Как и большинство других языков запросов, PostgreSQL поддерживает итоговые функции. Текущая реализация Postgres имеет некоторые ограничения для итоговых функций. Особенно, пока существует подсчет итогов такими функциями как count, sum, avg (среднее), max (максимум) и min (минимум) над множествами экземпляров, итоги могут только появляться в списке объектов запроса, и не прямо в определении (в предложении). Например, SELECT max(temp_lo) FROM weather; разрешено, хотя в SELECT city FROM weather WHERE temp_lo = max(temp_lo); нет. Однако, это часто требуется и для достижения нужного результата может использоваться вложенная выборка:

SELECT city FROM weather WHERE temp_lo = (SELECT max(temp_lo) FROM weather);
Итоги могут также быть при group by предложениях:
SELECT city, max(temp_lo)
FROM weather
GROUP BY city;
Расширенные свойства PostgresSQL
Оглавление
Наследование
Неатомарные значения
Time Travel
Остальные свойства
Получив основы использования e>Postgre> SQL для доступа к данным, теперь мы поговорим о таких свойствах Postgres, которые отличают его от обычных администраторов данных. Эти свойства включают наследование, time travel и неатомарные значения данных (массивы и многозначные атрибуты).Примеры этого раздела можно также найти в advance.sql в каталоге tutorial. (Смотри Главу 5 как их использовать.)

Отправить комментарий

Проверка
Антиспам проверка
Image CAPTCHA
...