|
Программирование >> Исключение дубликатов строк
False! Ваша СУБД может возвратить в этот момент ошибку (СА - строковый литерал - неверный тип данных для оператора OR) или возвратить только те строки, где штат - Вашингтон. Всегда следите за тем, чтобы ваши условия были полностью и правильно определены. В противном случае условие поиска для оператора SELECT вызовет ошибку. Внимание! Этот пример использовался для пояснения обычной ловушки, в которую попадают при использовании оператора OR. Однако если предполагается, что можно использовать такое условие принадлежности, как WHERE VendState IN (WA\ CA) , то это абсолютно правильно. Иногда для выражения некоторого условия суи;ествует более одного способа Совместное использовонип AND и OR Для ответов на особенно сложные запросы можно использовать AND и OR вместе. Например, используя оба оператора, можно ответить на запрос следуюи;его типа: 7 need to see the names of staff members who have a 425 area code and a phone number that begins with 555, along with anyone who was hired between October I and December 31 of 1999 . ( Мне необходимо узнать имена сотрудников, междугородный телефонный код которых - 425 и номер телефона начинается с 555, вместе с теми, кто был принят на работу в промежутке между 1 октября и 31 декабря 1999 .) Сейчас вы должны легко определить, какие типы условий необходимы для данного запроса. Этих условий три: условие сравнения на равенство - для поиска междугородного телефонного кода, ycJЮвиe совпадения с образцом - Д71я поиска телефонных номеров и условие диапазона - для поиска тех сотрудников, которые приняты на работу с октября по конец декабря. Теперь требуется только определить, как предполагается объединить эти условия. Условие сравнения и условие совпадения с образцом необходимо объединить в операторе AND, потому что они определяют искомые номера телефонов, и оба условия должны быть удовлетворены, чтобы строка была включена в набор результатов. Эта совокупность условий затем интерпретируется как единый блок и объединяется с условием диапазона с помои;ью оператора OR. Теперь строка -будет включаться в набор результатов только в том случае, если она будет удовлетворять совокупному условию, либо усповию диапазона. Вот снова запрос и преобразование: 7 need to see the names of stuff members who have a 425 area code and a phone number that begins with 555, along with anyone who was hired between October 1 and December 31 of 1999 . Преобразование: Select first name, last name, area code, phone number, and date hired from the staff table where the area code is 425 and the phone number begins with 555 or the date hired falls between October 1, 1999, and December 31, 1999 амилию, междугородный теле1 номер телефона и дату приема на работу из таблицы Персонал , где междугородный телефонный код - 425 и номер телефона начинается с 555 или дата приема на работу приходится между 1 октября 1999 и 31 декабря 1999) Уточнение: Select first name, last name, area code, phone number, me date hired from the staff table where the area code is = 425 and the phone number begins with like 555% or the date hired fafe between October 1, 1000 1999-10-0Г and December 31, 1000 1999-12-ЗГ (Выбрать имя, фамилию, междугородный телефонный код, номер телефона, дату приема на работу из Персонал , где междугородный телефонный код = 425 и номер телефона соответствует шаблону 555% или дата приема на работу между 1999-10-ОГ и 1999-12-31) SQL SELECT StfFirstName. StfLastName, StfAreaCode, StfPhoneNuTber, DateHired FROM Staff WHERE (StfAreaCode: = 425 AND StfPhoneNumber LIKE 555%) OR DateHired BETWEEN 4999-10-01 AND 4999-12-31 Этот пример четко показывает ситуацию, когда можно использовать условие поиска внутри условия поиска. В данном случае необходимо объединить условие сравнения и условие совпадения образца в операторе AND, а затем интерпретировать его как единый блок. Когда объединенный набор условий рассматривается как единый блок, то по определению он становится условием поиска и его можно заключить в скобки (как и сделано в примере). А теперь другой пример с использованием AND и OR: 7 need the name of every professor or associate professor who was hired on May 16, 1989 . ( Нужны имена всех профессоров и адъюнкт-профессоров, принятых на работу 16 мая 1989 .) Уточнение: Преобразование: Select first name, last name, and date hired from the staff table where the title is professor or associate professor and the date hired is May 16, 1989 (Выбрать имя, фамилию и дату приема на работу из таблицы Персонал тех, у которых должность профессор или адъюнкт-профессор и дата приема на работу 16 мая 1989) Select first name, last name, and date hired from the staff table where the title = professor or title = associate professor and the date hired ts = May 16, 1980 1989-05-16 (Выбрать имя, фамилию, дату приема на работу из Персонал тех, для которых должность = профессор или должность адъюнкт-профессор и дата приема на работу = 1989-05-16) SELECT StfFirstName, StfLastName. Title, FROM Staff WHERE (Title = Professor OR Title = Associate Professor) AND DateHired = 1989-05-16 Datehired Вы уже вероятно догадались, что два условия, объединенные в операторе OR, интерпретируются как единое условие поиска. Этот пример просто подтверждает, что можно определить условие поиска либо с оператором AND, либо OR. Но основной момент состоит в том, чтобы заключить условие поиска в скобки. Исключение строк: Второй подход Если возникает легкое ошуш,ение дежа вю , не стоит тревожиться. Как вы уже знаете, оператор NOT является опцией предикатов BETWEEN, IN, LIKE и IS NULL. также является опцией как первое ключевое слово условия поиска, и оно позволяет исключить строки из набора результатов таким же образом, как при использовании NOT в предикате. Этот конкретный оператор NOT используется перед отдельным условием (предикатом) или вложенным условием поиска. И опять одно и то же условие можно выразить различными способами. УСАОВИ0 поиска
Предика Г (Условие поиска Рис. 6.1 1. Включение оператора NOT в условие поиска
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |