|
Программирование >> Исключение дубликатов строк
Этот оператор SELECT будет извлекать такие коды товаров, как G 002 и G OOX. Поскольку мы хотим отыскать один из двух символов, которые определены в стандарте как групповые символы, необходимо включить условие ESCAPE. Если в запросе будет указано LIKE * , СУБД возвратит строки, в которых первой буквой в коде товара будет G, во второй позиции - любой символ (поскольку указан групповой символ), нули в третьей и четвертой позициях и любой символ в пятой позиции. Когда в качестве символа ESCAPE определяется \ , СУБД игнорирует управляющий символ, но интерпретирует первый символ подчеркивания буквально, а не как групповой символ. Поскольку непосредственно перед вторым символом подчеркивания управляющий символ не используется, СУБД интерпретирует второй символ подчеркивания как настоящий групповой символ. Помните, что символ, используемый как управляющий, не должен быть частью значения, которое вы пытаетесь найти. Поэтому не следует использовать как управляющий символ, если осуществляется поиск таких значений, как Martin & Lewis , Smith & Kearns или Hernandez & Viescas . Управляющий символ действует только на групповой символ, расположенный непосредственно за ним. Однако при необходимости можно использовать в образце строки столько управляющих символов, сколько требуется. Null Теперь обсудим поиск неизвестных значений. Из главы 5 вы узнали, что значение Null не представляет собой нульг, символьную строку из одного или нескольких пробелов или символьную строку нулевой длины (т. е. не содержащую в себе символов), потому что каждый из этих элементов може быть значащим во множестве различных ситуаций. Null представляет собой пропущенное или неизвестное значение. Для извлечения значений Null из типизированного выражения используется условие Null, представленное на рис. 6.6. Рис. 6.6. Синтаксическая диаграмма для условия Null В этом условии берется значение типизированного выражения и с помощью предиката IS NULL определяется, является ли оно значением Null. Это достаточно простая операция. Рассмотрим использование условия Null в примерах. Give те а list of customers who didn Ч specify what county they live in . ( Предоставить список клиентов, которые не указали, в каком округе они живут ,) Преобразование: Select first name and last name as Customer from the customers table where the county name is unspecified (Выбрать имя и фамилию как Customer из таблицы Клиенты , для которых не определен округ) Уточнение: Select first name ( 4 т6 last name as Customer from the CustLastName customers table where the country name is null unspecified (Выбрать имя, Г II фамилию как Customer из К/шенты , где название округа is null) SELECT CustFirstName AS Customer FROM Customers WHERE CustCounty IS NULL В наборе результатов для этого оператора SELECT будут присутствовать имена только тех клиентов, которые не знали или не могли вспомнить, в каком округе они живут, или те, кто проживает в Вашингтоне, округ Колумбия. Вот еш,е один запрос, с которым можно обратится к базе данных: Which engagements do not yet have a contract price? ( У каких ангажементов до сих пор нет договорной цены? ) Преобразование: Select engagement number and contract price from the engagements table for any engagement that does not have a contract price (Выбрать номер и договорную цену ангажемента из таблицы Ангажементы для всех ангажементов. Уточнение у которых отсутствует договорная цена) Select engagement number шё contract price from the engagements table for any engagement that does not have a where contract price is null (Выбрать номер, договорную цену ангажемента из Ангажементы , где договорная цена Null) SELECT EngagementNumber, ContractPrice FROM Engagements WHERE ContractPrice IS NULL По внешнему виду данный запрос кажется простым: отыскать все ангажементы, договорная цена которых О . Но впечатление может быть обманчивым и внушить неверные предположения. Если агентство эстрадных мероприятий использует О как договорную цену для любого рекламируемого ангажемента, то ноль является допустимым, имеюш.им смысл значением. Поэтому любая договорная цена, о которой еи;е договариваются, несомненно, должна быть значением Null. Данный пример еще раз демонстрирует, что необходимо понимать свои данные и составлять имеющие смысл, точные запросы к базе данных. Если при выполнении оператора SELECT вы видите, что информация, представленная в наборе результата, является ошибочной, не стоит сразу паниковать. Первым вашим импульсом, вероятно, будет желание переписать весь оператор SELECT, чтобы исправить какую-то роковую ошибку в синтаксисе. Однако пре>вде, чем сделать что-либо радикальное, еще раз просмотрите данные, с которыми работаете, и убедитесь в том, что четко понимаете, как их использовать. Как только будет достигнуто лучшее понимание этих данных, может оказаться, что достаточно внести только небольшие изменения в оператор SELECT, чтобы получить нужную информацию. Внимание! Для поиска значений Null в типизированном выражении требуется применять условие Null. Такие условия, как <ValueExpression> = Null недействительны, поскольку значение типизированного выражения невозможно сравнить с чем-либо, что по определению является неизвестным. Исключение строк с помощью NOT Исключить строки из набора результатов можно с помощью оператора NOT. Мы уже показали один простой способ исключения строк из набора результатов, используя условия сравнения на равенство оператора не равно . Можно также исключить строки в других типах условий, используя оператор NOT. Как показано на рис. 6.7, этот оператор является необязательной компонентой предикатов BETWEEN, IN, LIKE и IS NULL. При включении оператора NOT оператор SELECT проигнорирует все строки, которые удовлетворяют условию, указанному любым из этих предикатов. В наборе результатов будут присутствовать те строки, которые не удовлетворяют условию. Приведенные далее примеры показывают, как можно использовать NOT в качестве части условия поиска: Show те а list of all the orders weve taken, except for those posted in July . ( Показать список всех принятых заказов, за исключением зарегистрированных в июле .) Подобный запрос требует определить оператор SELECT, который исключает строки, удовлетворяющие конкретному условию, и обычно содержат фразы, которые указывают на необходимость использования оператора NOT как части условия поиска, например: ...которые не начинаются с Пег . ...которые отсутствуют в административном отделе или в отделе кадров . ...у кого указан номер факса . ...кто был принят на работу до 1 июня или после 31 августа
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |