Учебник SQLУрок 4. Фильтрация данныхНа этом уроке вы узнаете, как использовать предложение WHERE оператора SELECT для указания предложений поиска. Использование предложения WHEREВ таблицах баз данных обычно содержится очень много информации и довольно редко возникает необходимость выбирать все строки таблицы. Гораздо чаще бывает нужно извлечь какую-то часть данных таблицы для каких-либо действий или отчетов. Выборка только необходимых данных включает в себя критерий поиска, также известный под названием предложение фильтрации. В операторе SELECT данные фильтруются путем указания критерия поиска в предложении WHERE. Предложение WHERE указывается сразу после названия таблицы (предложения FROM) следующим образом: SELECT prod_name, prod_price FROM Products WHERE prod_price = 3.49; Этот оператор извлекает два столбца из таблицы товаров, но показывает не все строки, а только те, значение в столбце prod_price которых равно 3.49: Вывод: prod_name prod_price ------------------------------- Fish bean bag toy 3.4900 Bird bean bag toy 3.4900 Rabbit bean bag toy 3.4900 В этом примере используется простая проверка на равенство: сначала проверяется, существует ли в столбце указанное значение, а затем данные фильтруются соответствующим образом. Однако SQL позволяет использовать не только проверку на равенство. Требовательная PostgreSQLСУБД PostgreSQL имеет строгие правила, управляющие значениями, передающимися в SQL-операторы, особенно это касается чисел с десятичными дробями. Таким образом, предыдущий пример может и не работать в PostgreSQL. Чтобы он заработал, необходимо точно указать, что 3.49 — это "правильное" число, включив в предложение WHERE его тип. Для этого замените = 3.49 на = decimal '3.49'. Фильтрация в SQL и в приложении
Данные также могут быть отфильтрованы на уровне приложения. Для этого посредством оператора SELECT осуществляется выборка большего количества данных, чем на самом деле необходимо для клиентского приложения, а затем клиентский код обрабатывает полученные данные для извлечения только нужных строк. Положение предложения WHEREПри использовании обоих предложений, ORDER BY и WHERE, убедитесь, что предложение ORDER BY следует за предложением WHERE, иначе возникнет ошибка. (Более подробно предложение ORDER BY описывается в уроке 3.) Операции в предложении WHEREВ первом предложении WHERE, которое мы рассмотрели, проводилась проверка на равенство, т.е. определялось, содержится ли в столбце указанное значение. SQL поддерживает весь спектр условных (логических) операций, которые приведены в табл. 4.1. Таблица 4.1. Операции в предложении WHERE
Совместимость операцийНекоторые из операций, приведенных в табл. 4.1, повторяются (например, < > — это то же самое, что и ! =). Выполнение операции ! < (не меньше чем) дает такой же результат, что и > = (больше или равно). Однако заметьте: не все из этих операций поддерживаются всеми СУБД. Обратитесь к документации вашей СУБД, чтобы точно знать, какие логические операции она поддерживает. Проверка одного значенияМы рассмотрели пример проверки на равенство. Теперь рассмотрим примеры использования других операций. В первом примере выводятся названия товаров, стоимость которых не превышает $10: SELECT prod_name, prod_price FROM Products WHERE prod_price < 10; Вывод: prod_name prod_price ------------------------------- Fish bean bag toy 3.4900 Bird bean bag toy 3.4900 Rabbit bean bag toy 3.4900 8 inch teddy bear 5.9900 12 inch teddy bear 8.9900 Raggedy Ann 4.9900 King doll 9.4900 Queen doll 9.4900 В следующем выражении выбираются все товары, которые стоят $10 и меньше (результат будет такой же, как и в первом примере, так как в базе данных нет товаров, которые бы стоили ровно $10): SELECT prod_name, prod_price FROM Products WHERE prod_price <= 10; Проверка на несовпаденияВ этом примере выводятся товары, не изготовленные фирмой DLL01. SELECT vend_id, prod_name FROM Products WHERE vend_id <> 'DLL01'; Вывод: vend_id prod_name --------------------------- BRS01 8 inch teddy bear BRS01 12 inch teddy bear BRS01 18 inch teddy bear FNG01 King doll FNG01 Queen doll Когда использовать кавычкиЕсли вы внимательно рассмотрите выражения в предыдущих предложениях WHERE, то заметите, что некоторые значения заключены в одинарные кавычки, а некоторые — нет. Одинарные кавычки используются для определения границ строки. При сравнении значения со столбцом, содержащим строковые данные, необходимы отделяющие строку кавычки. При использовании числовых столбцов кавычки не используются. Ниже приведен тот же пример, только здесь уже используется операция !=, вместо <>: SELECT vend_id, prod_price FROM Products WHERE vend_id != 'DLL01'; Операция != или <>Операции != и <> обычно взаимозаменяемы. Однако не во всех СУБД поддерживаются обе формы операции неравенства. Например, в Microsoft Access поддерживается операция <> и не поддерживается !=. Если у вас возникли сомнения по поводу своей СУБД, обратитесь к ее документации. Проверка на диапазон значенийДля поиска диапазона значений можно использовать операцию BETWEEN. Ее синтаксис немного отличается от других операций предложения WHERE, так как для нее требуются два значения: начальное и конечное. Например, операцию BETWEEN можно использовать для поиска товаров, цена которых находится в промежутке между $5 и $10, или всех дней, которые попадают в диапазон между указанными начальным и конечным числами. В следующем примере демонстрируется использование операции BETWEEN для выборки всех товаров, цена которых выше $5 и ниже $10: SELECT prod_name, prod_price FROM Products WHERE prod_price BETWEEN 5 AND 10; Вывод: prod_name prod_price ------------------------------ 8 inch teddy bear 5.9900 12 inch teddy bear 8.9900 King doll 9.4900 Queen doll 9.4900 Как видно из этого примера, при использовании операции BETWEEN нужно указывать два значения — меньшее и большее из выбранного диапазона. Эти два значения должны быть разделены ключевым словом AND. При этом выбираются все значения из диапазона, включая указанные начальное и конечное значения. Проверка на отсутствие значенияПосле создания таблицы разработчик может указать, допустимо ли, чтобы в отдельных ее столбцах не содержались никакие значения. Когда в столбце не содержится никакого значения, это значит, что в нем содержится значение NULL. NULLОтсутствие какого-либо значения, в отличие от поля, содержащего или 0, или пустую строку, или просто несколько пробелов. Для оператора SELECT предусмотрена специальная форма предложения WHERE, которая используется для проверки значений NULL в столбцах и содержит проверку IS NULL. Синтаксис выглядит следующим образом: SELECT prod_name FROM Products WHERE prod_price IS NULL; Это выражение возвращает список товаров без цены (поле prod_price пустое, а не с ценой 0), а поскольку таковых нет, никаких данных мы не получим. Однако в таблице Vendors есть столбцы со значениями NULL — в столбце vend_state будет содержаться NULL, если не указан никакой штат (в случае, когда адресат находится за пределами Соединенных Штатов): SELECT vend_id FROM Vendors WHERE vend_state IS NULL; Вывод: vend_id ------- FNG1 JTS01 Особые операции СУБДВо многих СУБД набор операций расширен дополнительными фильтрами. Обратитесь к документации вашей СУБД за дополнительной информацией. РезюмеВ этом уроке рассказывалось о том, как отфильтровывать возвращаемые данные при помощи предложения WHERE оператора SELECT. Теперь вы знаете, как можно проверить данные на равенство, неравенство, наличие значений больше чем и меньше чем, диапазон значений, а также на значение NULL. |
||||||||||||||||||||||||||