Открытая коллекция знаний

OpenU.Ru

Язык запросов SQL. DML.

Использование условий поиска в sql-запросах

Очень часто нужно выбрать не все данные из таблицы, а только те которые удовлетворяют некоторому условию. Для этого используется оператор WHERE. WHERE – предложение команды SELECT, которое позволяет устанавливать предикаты, условие которых может быть либо верным, либо неверным для каждой записи таблицы. В запросе он пишется после таблицы, к которой обращается запрос. Например, пусть из списка товаров требуется выбрать наименование товаров, цена которых равна 9 рублей. Тогда запрос будет иметь вид:

SELECT GName FROM Goods WHERE GPrice=9

В результате получим:

Gname
Мука
Пиво

Вообще, в предикате часто требуется оценивать не только на равенство оператора, но и осуществлять другие виды связей. Это реализуется с помощью булевых операторов и знаков отношения. К операторам знаков отношения относятся следующие операторы: =, >, <, <=, >=, < >. Эти операторы принимают стандартные значения для числовых данных, а для символьных их определение зависит от кодировки символов. Например, «A» > «Z».

Булевы (логические) операторы условий

Основные булевы операторы также распознаются в SQL. Выражения Буля являются или верными или неверными, подобно предикатам. Булевы операторы связывают одно или более верных/неверных значений и производят единственное верное/или/неверное значение. Стандартными операторами Буля распознаваемыми в SQL являются: AND, OR, и NOT:

  • AND берет два операнда (в форме A AND B) как аргументы и оценивает их по отношению к истине, верны ли они оба.
  • OR берет два операнда (в форме A OR B) как аргументы и оценивает на правильность, верен ли один из них.
  • NOT берет одиночный операнд (в форме NOT A) как аргумент и заменяет его значение с неверного на верное или с верного на неверное.

Рассмотрим пример: Из списка товаров выбрать только те, у которых цена ниже 10 р. и которые относятся к первой группе товаров. Запрос будет выглядеть следующим образом:

SELECT GName FROM Goods
WHERE NPrice<10 AND GTypeNum=1

В результате получим:

Gname
Мука

В предложении WHERE в дополнении к традиционным реляционным и булевским операторам могут быть использованы специальные операторы IN, BETWEEN, LIKE, IS NULL.

Оператор IN определяет, содержится ли указанное значение в определенном наборе. Набор определяется с помощью списка, заключенного в круглые скобки, с разделителями в виде запятых. Например, пусть требуется из таблицы товаров выбрать только те товары, которые относятся к первой и второй группе. При использовании связки OR запрос будет выглядеть следующим образом:

SELECT GName FROM Goods
WHERE GTypeNum=1 OR GTypeNum=2

Но это можно сделать более простым способом, воспользовавшись оператором IN:

SELECT GName FROM Goods 
WHERE GTypeNum IN (1, 2)

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

SELECT GName FROM Goods
WHERE GTypeNum BETWEEN 1 AND 3

Оператор BETWEEN работает как с числовыми значениями, так и со строковыми.

Оператор LIKE применим только к символьным (строковым) полям, в которых он ищет подстроки и проверяет на совпадение их с условием поиска. В качестве условий поиска оператор LIKE использует подстроку, с которой происходит сравнение, при этом в подстроках поиска часто используются так называемые групповые символы. Групповые символы – это специальные символы, которые могут соответствовать любому символу или набору символов в строках, по которым ведется поиск. Имеются два типа групповых символов используемых в LIKE:

  • символ подчеркивания ( _ ) замещает любой одиночный символ. Например, ‘м_ч’ будет соответствовать словам ‘мяч’ или ‘меч’, но не будет соответствовать ‘матч’.
  • знак процента (%) замещает последовательность любого числа символов (в том числе и ни одного). Например ‘%л%о’ будет соответствовать словам ‘молоко’, ‘колокол’, но не ‘поле’.

Давайте найдем всех покупателей, чьи имена начинаются с «Д»:

SELECT BName FROM Buyers WHERE BName LIKE "Д%"

В результате получим:

Bname
Дельта
Дельфин

Оператор NULL – указывает на отсутствие значения в каком-либо поле. Вы не можете знать, каков будет результат любого сравнения с использованием NULL. Когда NULL сравнивается с любым значением, даже с другим таким же NULL, результат будет ни верным ни неверным, он – не определен. Не стоит путать неверное значение (неверный предикат) с неопределенным. Для этого в языке SQL используют специальный оператор IS с ключевым словом NULL. Найдем все записи в таблице покупателей, у которых не указан номер города:

SELECT * FROM Buyers WHERE BTown IS NULL
BNum BName BTown
2 Золотой колос

Содержание