SELECT sname, comm FROM Salespeople

Лабораторные работы №1,2

Изучение операторов языка SQL

Цель работы: получить начальные навыки работы с оператором SELECT в среде СУБД Visual FoxPro.

Пояснения к работе

Если необходимо увидеть каждую колонку таблицы, существует упрощенный вариант сделать это. Можно использовать символ "*" ("звездочка"), который заменяет полный список столбцов.

SELECT *FROM Salespeople

Мощность команды SELECT заключается в ее свойстве извлекать из таблицы лишь определенную информацию. Надо отметить возможность просмотра толь­ко указанных столбцов таблицы. Для этого достаточно пропустить столбцы, которые нет необходимости просматривать, в части команды SELECT. Напри­мер,

SELECT sname, comm FROM Salespeople

Устранение избыточных данных

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

SELECT DISTINCT snum FROM Orders

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

DISTINCT можно задать только один раз для данного предложения SELECT. Если SELECT извлекает множество полей, то он исключает строки, в которых все выбранные поля идентичны. Строки, в которых некоторые значения одинаковы, а другие — различны, включаются в результат. DISTINCT, фактически, действует на всю выходную строку, а не на отдельное поле (исключе­ние составляет его применение внутри агрегатных функций), исклю­чая возможность их повторения. Альтернативой DISTINCT является ALL. Это ключевое слово имеет противоположное действие: повторяющиеся строки включаются в состав выходных данных. Поскольку часто бывает так, что не заданы ни DISTINCT, ни ALL, предполагается ALL; это ключевое слово имеет преимущество перед функциональным аргументом.

Определение выборки — предложение WHERE

Таблицы бывают достаточно большими с тенденцией к увеличению по мере добавления строк. В данный момент времени интересны только некоторые стро­ки таблицы. SQL дает возможность задать критерий определения строк, которые следует включить в состав выходных данных. Предложение WHERE команды SELECT позволяет определить предикат, условие, которое может быть либо истинным, либо ложным для каждой строки таблицы. Команда извлекает только те строки из таблицы, для которых предикат имеет значение "истина". Предпо­ложим, необходимо узнать имена всех продавцов в Лондоне (London). В этом случае можно ввести следующую команду:

SELECT sname, city;

FROM Salespeople WHERE city = 'London'

При наличии предложения WHERE программа обработки базы данных про­сматривает таблицу строка за строкой и для каждой строки проверяет, истинен ли на ней предикат. Столбец city включен в результат не потому, что он указан в предложении WHERE, а потому, что имя этого столбца указано в предложении SELECT. Совершенно необязательно, чтобы столбец, используемый в предложении WHERE, был представлен в числе тех столбцов, которые необходимо видеть среди выходных данных. Можно выбрать всех покупателей (Customers) с рейтингом (rating) 100 следующим образом:

SELECT *FROM Customers WHERE rating = 100

Здесь не используются одиночные кавычки, поскольку поле rating является числовым.

Использование специальных операторов в «условиях»

Оператор IN

IN полностью определяет множество, которому данное значение может при­надлежать или не принадлежать. Если нужно найти всех продавцов, располо­женных либо в 'Barcelona', либо в 'London', основываясь только на том, что известно к настоящему моменту, необходимо написать следующий запрос:

SELECT *FROM Salespeople WHERE city IN ('Barcelona', 'London')

Как видно из примера, IN определяет множество, элементы которого точно перечисляются в круглых скобках и разделяются запятыми. Если в поле, имя которого указано слева от IN, есть одно из перечисленных в списке значений (требуется точное совпадение), то предикат считается истинным. Если элементы множества имеют числовой, а не символьный тип, то одиночные кавычки непо­средственно слева и справа от значения необходимо опустить. Можно найти всех покупателей, обслуживаемых продавцами 1001, 1007, 1004.

SELECT *FROM Customers WHERE snum IN (1001,1007,1004)

Оператор BETWEEN

Оператор BETWEEN сходен с IN. Вместо перечисления элементов множества, как это делается в IN, BETWEEN задает границы, в которые должно попадать значение, чтобы предикат был истинным. Используется ключевое слово BETWEEN, за которым следуют начальное значение, ключевое слово AND и конечное значение. Также как и IN, BETWEEN чувствителен к порядку: первое значение в предложении должно быть первым в соответствии с алфавитным или числовым порядком.

Следующий запрос позволит извлечь из таблицы Salespeople всех продавцов (salespeople), комиссионные которых имеют величину в диапазоне .10 и .12:

SELECT * FROM Salespeople WHERE comm BETWEEN .10 AND. 12

Оператор BETWEEN является включающим, т.е. граничные значения (в дан­ном примере это .10 и .12) делают предикат истинным. SQL непосредственно не поддерживает исключающий BETWEEN. Необходимо сформулировать гра­ничные значения так, чтобы включающая интерпретация была справедлива, либо сделать примерно следующую запись:

SELECT *FROM Salespeople WHERE (comm BETWEEN .10, AND.12) AND NOT comm. IN (.10, .12)

Пусть эта запись и неуклюжа, но она показывает, как новые операторы можно комбинировать с булевыми операторами для получения более сложных предикатов. Значит, IN и BETWEEN используются, как и операторы сравнения, для сопоставления значений, одно из которых является множеством (для IN) или диапазоном (для BETWEEN).

Следующий запрос выбирает всех покупателей, имена которых попадают в заданный алфавитный диапазон:

SELECT *FROM Customers WHERE cname BETWEEN 'A' AND 'G'

Оператор LIKE

LIKE применим только к полям типа CHAR или VARCHAR, поскольку он используется для поиска подстрок. Другими словами, он осуществляет просмотр строки для выяснения: входит ли заданная подстрока в указанное поле. С этой же целью используются шаблоны — специальные символы, которые могут обозначать все, что угодно. Существует два типа шаблонов, используемых с LIKЕ:

§ Символ "подчеркивание" (_) заменяет один любой символ. Например, образцу 'b_t' соответствуют 'bat' или 'bit', но не соответствует 'brat'.

§ Символ "процент" (%) заменяет последовательность символов произвольной длины, в том числе и нулевой. Например, образцу '%p%t' соответствуют 'put', 'posit', 'opt', но не 'spite'.

Можно найти покупателей, фамилии которых начинаются на'G' :

SELECT * FROM Customers WHERE cname LIKE 'G%'

Работа с NULL-значениями

Часто в таблице встречаются записи с незаданными значениями какого-либо полей, потому что значение поля неизвестно или его просто нет. В таких случаях SQL позволяет указать в поле NULL-значение. Строго говоря, NULL-значение вовсе не представлено в поле. Когда значение поля есть NULL это значит, что программа базы данных специальным образом помечает поле, как не содержащее какого-ибо значения для данной строки (записи). Дело обстоит не так в случае простого приписывания полю значения "нуль" или "пробел", которые база данных трактует как любое другое значение. Поскольку NULL не является значением как таковым, он не имеет типа данных. NULL может раз­даться в поле любого типа. Тем не менее, NULL, как NULL-значение, часто используется в SQL.

Оператор IS NULL

Поскольку NULL фиксирует пропущенные значения, результат любого сравнения при наличии NULL-значений неизвестен. Когда NULL-значение сравнивается с любым значением, даже с NULL-значением, результат просто неизвестен. Булево значение "неизвестно" ведет себя также, как "ложь" — строка на которой предикат принимает значение "неизвестно", не включается в результат запроса — при одном важном исключении: NOT от лжи есть истина (NOT(false)=true), тогда как NOT от неизвестного значения есть также неизвестное значение. Следовательно, такое выражение как "city = NULL" или "city IN (NULL)” является неизвестным независимо от значения city.

Часто необходимо различать false и unknown — строки, содержащие значения не удовлетворяющие предикату, и строки, которые содержат NULL. Для этой цели SQL располагает специальным оператором IS, который используется с ключевым словом NULL для локализации NULL-значения.

Для нахождения всех записей со значениями NULL в таблице Customers в столбце city следует ввести:

SELECT * FROM Customers WHERE city IS NULL

Использование NOT со специальными операторами

Специальные операторы, которые были рассмотрены в этой главе, могут непосредственно предшествовать булеву оператору NOT. Этим они отличаются от операторов сравнения, которые должны содержать NOT перед всем выраже­нием. Например, если не осуществляется поиск NULL-значений, а, напротив, необходимо исключить их из выходных данных, то нужно использовать NOT для того, чтобы придать предикату противоположное значение:

SELECT *FROM Customers WHERE City IS NOT NULL

Если NULL-значения отсутствуют, то в результате выполнения этого запроса будет получена вся таблица Customers.

SELECT * FROM Salespeople WHERE city NOT IN ('London', 'San Jose')

Другой способ выразить то же самое:

SELECT *FROM Salespeople WHERE NOT city IN ('London', 'San Jose')

Аналогичным образом можно использовать NOT BETWEEN и NOT LIKE.

SELECT SUM(amt) FROM Orders

Специальные атрибуты в COUNT

Функция COUNT отличается от предыдущих тем, что подсчитывает

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

Лабораторные работы №1,2

Изучение операторов языка SQL

Цель работы: получить начальные навыки работы с оператором SELECT в среде СУБД Visual FoxPro.

Пояснения к работе

Если необходимо увидеть каждую колонку таблицы, существует упрощенный вариант сделать это. Можно использовать символ "*" ("звездочка"), который заменяет полный список столбцов.

SELECT *FROM Salespeople

Мощность команды SELECT заключается в ее свойстве извлекать из таблицы лишь определенную информацию. Надо отметить возможность просмотра толь­ко указанных столбцов таблицы. Для этого достаточно пропустить столбцы, которые нет необходимости просматривать, в части команды SELECT. Напри­мер,

SELECT sname, comm FROM Salespeople

Наши рекомендации