
- •Лабораторная работа №2 sql: выборка данных.
- •Знакомство с Query Tool pgAdmin
- •Синтаксис инструкции select.
- •Выборка без использования предложения where. Простая выборка данных
- •Выборка null-значений
- •Выборка c использованием предложения where.
- •Использование between
- •Использование in
- •Использование like
- •Выборка null-значений
- •Ограничение максимального размера выборки
- •Использование данных типа timestamp
- •Выборка с упорядочением
- •Выборка и агрегирование данных.
- •Преобразование типов данных в инструкции select.
- •Задания для самостоятельной работы
- •Использование select для соединения двух и более таблиц. Декартово произведение таблиц
- •Соединение таблицы со своей копией
- •Вложенные подзапросы.
- •Простые вложенные подзапросы
- •Коррелированные вложенные подзапросы
- •Запросы, использующие exists в предложении where
- •Подзапросы c any и all
- •Использование with
- •Объединение двух или более запросов
- •Реализация операций реляционной алгебры c помощью предложения select.
- •Задания для самостоятельной работы
- •Контрольное задание
- •Требования к отчету:
- •Контрольные вопросы:
Выборка c использованием предложения where.
Допустим, нас интересует OID базы данных BookShop . Его можно получить из системной таблицы pg_database по запросу, в котором указано имя интересующей нас базы данных:
SELECT OID, datname
FROM pg_database
WHERE datname = 'BookShop'
Для отбора нужных строк таблицы в предложении WHERE можно использовать операторы сравнения, которые могут предваряться оператором NOT, создавая, например, отношения "не меньше" и "не больше", а также возможно использование нескольких условий, соединенных логическими операторами AND, OR, AND NOT и OR NOT, что позволяет осуществить более детальный отбор строк. Например, чтобы получить список книг из базы данных BookShop, поставленных за последний месяц, вводим запрос:
SELECT "Код_книги", "Количество", "Дата"
FROM "Поставки"
WHERE ("Дата" >= '1/9/2011') AND ("Дата" < '1/10/2011')
Если в базе данных нет строк, удовлетворяющих заданному(ым) условию(ям), на экран ничего не будет выводиться. Следует иметь в виду, что в SQL ситуация, когда запрос ничего не возвращается, не является ошибочной, поэтому контроль за корректностью вводимого запроса и результатах его выполнения должен осуществлять пользователь.
Использование between
С помощью BETWEEN ... AND ... (находится в интервале от ... до ...) можно отобрать строки, в которых значение какого-либо столбца находятся в заданном диапазоне. Например, предыдущий запрос можно переписать так:
SELECT "Код_книги", "Количество", "Дата"
FROM "Поставки"
WHERE "Дата" BETWEEN '1/9/2011' AND '1/10/2011'
Можно задать и NOT BETWEEN, если необходимо указать на данные, не принадлежащие некоторому диапазону. Оператор BETWEEN можно заменить предикатом, но он улучшает восприятие и читаемость текстов запросов SQL.
Использование in
В запросе
SELECT *
FROM “Поставщики”
WHERE “Город” IN (‘Киев’, ‘С-Петербург’, ‘Петербург’)
оператор IN является в действительности просто краткой записью последовательности отдельных сравнений, соединенных операторами OR. Предыдущее предложение эквивалентно, очевидно, такому:
SELECT *
FROM “Поставщики”
WHERE “Город”=‘Киев’ OR “Город” =‘С-Петербург' OR “Город”=‘С-Петербург'
Можно также вводить NOT IN (не принадлежит) и использовать вместо списка IN (NOT IN) подзапрос.
Использование like
Обычная форма столбец LIKE текстовая_константа для столбца текстового типа позволяет отыскать все значения указанного столбца, соответствующие образцу, заданному текстовой_константой. Символы этой константы интерпретируются следующим образом:
символ «_» заменяет любой одиночный символ,
символ «%» заменяет любую последовательность из 0 или более символов,
все другие символы означают просто сами себя.
Например, чтобы получить список книг, в названии которых есть подстрока «С++», надо сформировать запрос
SELECT “Код_книги”, “Название”, “Автор”
FROM “Книги”
WHERE “Название” LIKE ‘%C++%"
Выборка null-значений
Если при загрузке данных не введено значение в какое-либо поле таблицы, то СУБД поместит в него NULL-значение. Обнаружить эти значения можно с помощью условий
столбец IS NULL или столбец IS NOT NULL
Например, запрос, приведенный ниже, возвратит строки в таблице Поставщики, в которых отсутствуют сведения в указанных столбцах:
SELECT *
FROM “Поставщики”
WHERE “Адрес” IS NULL OR “Телефон” IS NULL