Создание простых запросов

Создание запроса с помощью оператора SELECT

Оператор SELECT является фактически самым важным для пользователя и самым сложным оператором SQL. Он предназначен для выборки данных из таблиц, т.е. он, собственно, и реализует одно их основных назначений БД - предоставлять информацию пользователю.

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

Замечание. Каждый оператор интерактивного SQL представляет собой одну команду, которая заканчивается «;». В наших примерах служебные слова SQL будем приводить прописными буквами.

Рассмотрим сначала простые конструкции оператора SELECT, постепенно усложняя его запись:

SELECT<список выбора> FROM<имя таблицы>;

Пример 4.1 Выбрать все данные из таблицы Продавцы:SELECT snum, sname, city, comm FROM Продавцы;

Результатом работы этой команды будет вывод всей таблицы 4.2 .

Пример 4.2 Выбрать все данные из таблицы: SELECT * FROM Продавцы;Здесь «звездочка» (*) служит кратким обозначением всех имен полей в таблице, указанной во фразе FROM. При этом порядок вывода полей соответствует порядку, в котором эти поля определялись при создании.

Пример 4.3 Выбрать некоторые колонки из исходной таблицы (указание списка отбираемых колонок): SELECT sname, comm FROM Продавцы;

Эта команда выведет только два указанных столбца из таблицы.

Пример 4.4 Выбрать некоторые колонки из исходной таблицы (указание списка отбираемых колонок): SELECT odate, snum, onum, amt FROM Порядки;

Столбцы по этой команде будут выведены в заданном порядке. Пример 4.5 Вывести список номеров продавцов из таблицы Порядки:SELECT snum FROM Порядки ;Результатом выполнения этой команды является список номеров из таблицы 4.4, в котором есть повторяющиеся записи. Для исключения дубликатов необходимо дополнить запрос ключевым словом DISTINCT (различный, различные), как показано в следующем примере.Пример 4.6 Вывести список номеров продавцов из таблицы Порядки без повторений: SELECT DISTINCT snum FROM Порядки;

В предыдущих примерах в операторах SELECT была реализована операция проекция. Для реализации операции выборка необходимо в конструкцию оператора добавить предложение WHERE: SELECT<список выбора> FROM<имя таблицы> WHERE <предикат>;

В синтаксисе предложения WHERE для отбора нужных строк таблицы можно использовать:

· операторы сравнения: = (равно), <> (не равно), < (меньше), <= (меньше или равно), > (больше), > = (больше или равно);

· логические операции: OR, NOT, AND;

· операторы: IN, BETWEEN …. AND, LIKE, IS NULL.

Пример 4.7 Вывести имена и комиссионные всех продавцов в Лондоне: SELECT sname, city FROM Продавцы WHERE city = ‘Лондон’;Пример 4.8 Вывести все данные о заказчиках в Мехико, которые имеют оценку (рейтинг) выше 200: SELECT * FROM Заказчики WHERE city = ‘Мехико' AND rating > 200;Будет выведена одна строка:

CNUM CNAME CITY RATING SNUM

2008 Киснерос Мехико 300 1007

Сложные логические выражения в предикате формируются с помощью скобок.Пример 4.9 SELECT * FROM Порядки WHERE NOT ((odate = 10/03/2003 AND snum >1002) OR amt > 2000.00);В результате выполнения этого запроса будут выведены строки:

ONUM AMT DATE SNUM CNUM

3003 767.19 10/03/2003 2001 1001

3009 1713.23 10/04/2003 2002 1003

3007 75.76 10/04/2003 2004 1002

3009 1309.95 10/06/2003 2004 1002

Сложные логические выражения можно преобразовать, используя аксиомы, называемые законами де Моргана: NOT (a AND b) ≡ NOT a OR NOT b NOT (a OR b ≡ NOT a AND NOT b , где a и b – логические выражения, а символ «≡» означает «эквивалентно».Оператор IN определяет, включено ли значение левого операнда в набор значений (список) правого операнда. Значение предиката, образованного с помощью оператора IN, равно true в том и только в том случае, когда значение левого операнда совпадает хотя бы с одним значением списка правого операнда. Пример 4.10 Найти всех продавцов, которые живут в Барселоне или в Лондоне: SELECT * FROM Продавцы WHERE city = 'Барселона' OR city = 'Лондон'; Имеется и более простой способ получить ту же информацию: SELECT * FROM Продавцы WHERE city IN ( 'Барселона', 'Лондон' );

С помощью оператора BETWEEN ... AND ... (находится в интервале от ... до ...) можно отобрать строки, в которых значение какого-либо столбца находятся в заданном диапазоне. Результат «x BETWEEN y AND z» тот же самый, что результат «x >= y AND x <= z». Результат «x NOT BETWEEN y AND z» тот же самый, что результат «NOT (x BETWEEN y AND z)».

Пример 4.11 Этот запрос выбирает всех заказчиков, чьи имена попали в определенныйалфавитный диапазон: SELECT * FROM Заказчики WHERE cname BETWEEN 'Г' AND 'Л'; Вывод для этого запроса:

CNUM CNAME CITY RATING SNUM

2002 Джованни Рим 200 1003

2004 Грасс Берлин 300 1002

2006 Клеменс Лондон 100 1001

2008 Киснерос Мехико 300 1007

Обратите внимание, что Луи отсутствует. Это происходит из-за того, что BETWEEN сравнивает строки неравной длины. Строка 'Л' более короткая, чем строка ‘Луи’, поэтому и невыбирается. Важно помнить это когда используете оператор BETWEEN для выбора значений из алфавитных диапазонов.

Обычная форма оператора LIKE «имя_столбца» LIKE «текстовая_константа» для столбца текстового типа позволяет отыскать все значения указанного столбца, соответствующие образцу, заданному «текстовой_константой». Символы этой константы интерпретируются следующим образом:

  • символ _ (подчеркивание) – заменяет любой одиночный символ (для СУБД ACCESS –«?»);
  • символ % (процент) – заменяет любую последовательность из N символов (где N может быть нулем) (для СУБД ACCESS –«*»);
  • все другие символы означают просто сами себя.

Для оператора LIKE типы данных столбца левого операнда и образца должны быть типами символьных строк.