OpenU.Ru
Очень часто нужно выбрать не все данные из таблицы, а только те которые удовлетворяют некоторому условию. Для этого используется оператор WHERE. WHERE – предложение команды SELECT, которое позволяет устанавливать предикаты, условие которых может быть либо верным, либо неверным для каждой записи таблицы. В запросе он пишется после таблицы, к которой обращается запрос. Например, пусть из списка товаров требуется выбрать наименование товаров, цена которых равна 9 рублей. Тогда запрос будет иметь вид:
SELECT GName FROM Goods WHERE GPrice=9
В результате получим:
Gname |
Мука |
Пиво |
Вообще, в предикате часто требуется оценивать не только на равенство оператора, но и осуществлять другие виды связей. Это реализуется с помощью булевых операторов и знаков отношения. К операторам знаков отношения относятся следующие операторы: =, >, <, <=, >=, < >. Эти операторы принимают стандартные значения для числовых данных, а для символьных их определение зависит от кодировки символов. Например, «A» > «Z».
Основные булевы операторы также распознаются в SQL. Выражения Буля являются или верными или неверными, подобно предикатам. Булевы операторы связывают одно или более верных/неверных значений и производят единственное верное/или/неверное значение. Стандартными операторами Буля распознаваемыми в SQL являются: AND, OR, и NOT:
Рассмотрим пример: Из списка товаров выбрать только те, у которых цена ниже 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 | Золотой колос |