Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторные_задания / Лабораторная работа 3

.docx
Скачиваний:
24
Добавлен:
15.06.2014
Размер:
19.95 Кб
Скачать

Лабораторная работа №8. Выборка данных. Простые запросы. Критерий выборки.

Цель работы

Научиться выполнять выборку данных из одной таблицы с использованием различных критериев.

Указания к работе

Все запросы на получение практически любого количества данных из одной или нескольких таблиц выполняются с помощью единственного предложения SELECT. В общем случае результатом запроса является другая таблица, к которой может быть снова применена операция SELECT, т.е. запросы могут быть вложены друг в друга.

Простая выборка

Использование предложения SELECT в качестве самостоятельной команды предполагает следующую минимальную форму:

SELECT * FROM table_name;

Здесь символ * определяет необходимость отображения данных из всех столбцов таблицы, указанной во фразе FROM. Например, для того, чтобы получить всю информацию из таблицы goods, необходимо выполнить запрос вида:

SELECT * FROM goods;

Исключение столбцов

Для того чтобы исключить ненужные для конкретной задачи столбцы вместо символа * необходимо указать явно имена столбцов, значения которых необходимо вывести. В качестве примера модифицируем приведенный выше запрос, чтобы получить только наименование и цену товаров:

SELECT name, coast FROM goods;

Отметим, что явное указание столбцов позволяет изменить их порядок, т.е. используя предложение SELECT можно управлять отображением информации не изменяя структуру таблиц. Например, запрос

SELECT coast, name FROM goods;

выведет сначала столбец с ценой товара, а потом - его название.

Условия выборки

Основная масса запросов используется для выборки из таблицы не только определенных столбцов, но и строк, удовлетворяющих некоторому условию. Для реализации такого рода запросов в предложение SELECT необходимо ввести оператор WHERE, в котором и задаются критерии отбора записей из таблицы. Так, для выборки товаров с ценой, не превышающей, например, 100 у.е. используем запрос вида (выведем только столбцы code, name и coast):

SELECT code, name, coast FROM goods WHERE coast<=100;

Для формирования более сложных критериев отбора в предложение WHERE можно ввести логические операторы для объединения условий. Например, пусть нас интересуют товары в ценовом диапазоне от 80 до 100 у.е.:

SELECT code, name, coast FROM goods WHERE (coast>=50) AND (coast<=100);

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

SELECT name, vendorID FROM goods WHERE vendorID IN (5,11,24);

Использование оператора IN эквивалентно объединению нескольких условий логическим OR. Т.е., приведенный запрос эквивалентен следующему:

SELECT name, vendorID FROM goods WHERE (vendorID=5) OR (vendorID=11) OR (vendorID=24);

Несомненное удобство оператора IN проявляется тогда, когда количество вариантов значительно или в качестве набора используются результаты вложенного запроса.

Другой возможностью SQL является задание в качестве условия непрерывного диапазона порядковых значений оператором BETWEEN...AND. Запрос с использованием этого оператора:

SELECT name, vendorID FROM goods WHERE vendorID BETWEEN 5 AND 24;

вернет все записи, где поле vendorID имеет значения от 5 до 24 включительно. Т.е., эквивалентный запрос может быть сформирован с помощью объединения условий оператором AND:

SELECT name, vendorID FROM goods WHERE (vendorID>=5) AND (vendorID<=24);

Кроме приведенных выше операторов, в условии отбора могут быть использованы и такие:

  • IS NULL – проверка неопределенного значения;

  • EXISTS – проверка существования объекта БД;

  • LIKE – проверка подобия строкового значения заданному образцу.

Критерии выбора можно инвертировать логическим оператором NOT.

При обработке условия числа сравниваются алгебраически – отрицательные числа считаются меньшими, чем положительные, независимо от их абсолютной величины. Строки символов сравниваются в соответствии с их представлением в коде, используемом в конкретной СУБД, например, в коде ASCII. Если сравниваются две строки символов, имеющих разные длины, более короткая строка дополняется справа пробелами для того, чтобы они имели одинаковую длину перед осуществлением сравнения.

Сортировка данных

Т.к. оператор INSERT добавляет записи в конец таблицы, то информация хранится в общем случае в неупорядоченном виде. Оператор SELECT позволяет отсортировать записи в указанном порядке (не изменяя фактический порядок записей в таблице!), если вы используете в запросе фразу ORDER BY. По умолчанию сортировка будет произведена по возрастанию значений. Рассмотрим пример запроса:

SELECT * FROM goods ORDER BY name;

Этот запрос отсортирует результирующий набор по возрастанию (по умолчанию) по названию товара. Для сортировки в порядке убывания необходимо явно указать это в запросе оператором DESC:

SELECT * FROM goods ORDER BY name DESC;

Отметим, что сортировку по возрастанию можно явно задать оператором ASC.

Следующий пример иллюстрирует сортировку по нескольким ключам:

SELECT * FROM goods ORDER BY name, vendor;

Здесь сортировка будет осуществляться сначала по полю name, во вторую очередь - по полю vendor.

Исключение дубликатов

Таблица может содержать повторяющиеся значения в столбцах. Имеется возможность исключения дубликатов из результирующего набора, если в предложение SELECT ввести фразу DISTINCT. В качестве примера выберем из таблицы goods коды производителей (поле vendor):

SELECT DISTINCT vendor FROM goods;

Этот запрос вернет только первые вхождения значений поля.

Если изменить запрос с указанием выбрать еще и название товара:

SELECT DISTINCT name, vendor FROM goods;

то проверка дубликатов будет вестись уже по значениям двух полей и количество записей в результате выборки будет бОльшим.

Вычислимые поля

Используя предложение SELECT можно получить дополнительную информацию из таблицы, на основе той, которая имеется. Для этого язык SQL предлагает возможность использования вычислимых значений. Рассмотрим пример с таблицей goods - в ней имеется информация о цене (поле cost) товаров в у.е. Этой информации достаточно для того, чтобы подсчитать, например, стоимость товаров в национальной валюте. Для этого необходимо выполнить такой запрос:

SELECT code AS "№ пп", name AS Наименование, (cost * 32.5) AS "Цена (руб.)" FROM goods;

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

Задания к лабораторной работе

  1. Изучить синтаксис предложения SELECT и оператора WHERE. Выполнить 2-3 запроса к созданным вами в предыдущих работах таблицам.

  2. Изучить порядок формирования условий выборки во фразе WHERE с использованием логических операторов AND, OR, NOT и создать 4-5 запросов с использованием этих операторов.

  3. Изучить синтаксис операторов IN и BETWEEN...AND.... Используя эти операторы, создать 4-6 запросов.