- •Лабораторная работа №2 sql: выборка данных.
- •Знакомство с Query Tool pgAdmin
- •Синтаксис инструкции select.
- •Выборка без использования предложения where. Простая выборка данных
- •Выборка null-значений
- •Выборка null-значений
- •Выборка c использованием предложения where.
- •Использование between
- •Использование in
- •Использование like
- •Ограничение максимального размера выборки
- •Использование данных типа timestamp
- •Выборка с упорядочением
- •Выборка и агрегирование данных.
- •Преобразование типов данных в инструкции select.
- •Задания для самостоятельной работы
- •Использование select для соединения двух и более таблиц. Декартово произведение таблиц
- •Соединение таблицы со своей копией
- •Вложенные подзапросы.
- •Простые вложенные подзапросы
- •Коррелированные вложенные подзапросы
- •Запросы, использующие exists в предложении where
- •Подзапросы c any и all
- •Использование with
- •Объединение двух или более запросов
- •Реализация операций реляционной алгебры c помощью предложения select.
- •Задания для самостоятельной работы
- •Контрольное задание
- •Требования к отчету:
- •Контрольные вопросы:
Ограничение максимального размера выборки
В PostgreSQL есть специфические конструкции LIMITи OFFSET , с помощью которых можно управлять количеством и порядком вывода записей. LIMIT ограничивает максимальное количества возвращаемых записей, а OFFSET задает номер записи в курсоре (0,1,2, … ), начиная с которой будут выводиться записи. Они имеют следующий синтаксис:
LIMIT { число | ALL } [OFFSET начало]
где число количество записей, ALL все записи, начало номер первой записи. Например, если число = 10 и начало = 3, то запрос вернет 10 записей, начиная с четвертой (номер 3) по порядку.
Использование данных типа timestamp
Данные типа timestamp используются в предложении WHERE для предотвращения одновременного обновления одной и той же строки двумя пользователями. Если при изменении значений данной строки поле типа timestamp также изменяется, то при одновременном редактировании строки двумя пользователями при сохранении одним из них обновленной информации поле timestamp изменится и строка не будет соответствовать прежней копии. Когда другой пользователь попытаетесь сохранить свои изменения, предложение WHERE не даст ему этого сделать, поскольку команда не найдет выбранную ранее строку. Данные типа timestamp это хорошее средство для поддержания сервером уникальности каждой строки.
Выборка с упорядочением
Простейший вариант использования модификатора ORDER упорядочение строк результата по значению одного из столбцов с указанием порядка сортировки или без такого указания (по умолчанию строки будут сортироваться в порядке возрастания значений в указанном столбце.). Например, выдать перечень книг из таблицы Книги в алфавитном порядке по фамилиям авторов:
SELECT “Код_книги”, “Автор”, “Название”
FROM “Книги”
ORDER BY “Автор”
или в порядке убывания цены :
SELECT “Код_книги”, “Цена”
FROM “Книги”
ORDER BY “Цена” DESC
При включении в список ORDER BY нескольких столбцов СУБД сортирует строки результата по значениям первого столбца списка пока не появится несколько строк с одинаковыми значениями данных в этом столбце. Такие строки сортируются по значениям следующего столбца из списка ORDER BY и т.д. Например, выдать содержимое таблицы Заказы, отсортировав ее строки по столбцам Код_заказчика и Дата:
SELECT *
FROM “Заказы”
ORDER BY “Код_заказчика”, “Дата”
Кроме того, в список ORDER BY можно включать не только имя столбца, но и его порядковую позицию в перечне SELECT. Номер столбца в списке элементов SELECT отсчитывается слева направо. Благодаря этому возможно упорядочение результатов на основе вычисляемых столбцов, не имеющих имен, например:
SELECT “Код_книги”, ”Цена” * 0.2
FROM “Книги”
ORDER BY 2 DESC
В списке выбора инструкции SELECT столбцы можно задавать различными способами, не учитывая порядок их следования в базовой таблице. Можно даже один и тот же столбец указывать несколько раз, например:
SELECT “Код_книги”, ”Автор”, “ Название”, “Издательство”, “Цена”, “Код_книги”
FROM “Книги”
ORDER BY 2, 3
Выдаваемые по этому запросу строки не помещаются полностью на экране, и поэтому при горизонтальной прокрутке первые столбцы выходят за пределы активного окна. Выводимый повторно в конце списка Код_книги облегчит работу с таким списком.
