|
Программирование >> Понятие sql
Вывод для этого запроса показывается в Рисунке 5.6. SQL Execution Log SELECT * FROM Customers WHERE cname BETWEEN A AND G; cnum 2006 2008 cname city rating snum Clemens London Cisneros San Jose 100 300 1001 1007 Рисунок 5.6: Использование BETWEEN в алфавитных порядках Обратите внимание, что Grass и Giovanni отсутствуют, даже при включенном BETWEEN. Это происходит из-за того что BETWEEN сравнивает строки неравной длины. Строка G более короткая чем строка Giovanni, поэтому BETWEEN выводит G с пробелами. Пробелы предшествуют символам в алфавитном порядке (вбольшинст-ве реализаций), поэтому Giovanni не выбирается. То же самое происходит с Grass. Важно помнить это когда вы используете BETWEEN для извлечения значений из алфавитных диапазонов. Обычно вы указываете диапазон с помощью символа начала диапазона и символа конца (вместо которого можно просто поставить z). ОПЕРАТОР LIKE LIKE применим только к полям типа CHAR или VARCHAR, с которыми он используется чтобы находить подстроки. Т. е. он ищет поле символа чтобы видеть, совпадает ли с условием часть его строки. В качестве условия он использует групповые символы (wildkards) - специальные символы которые могут соответствовать чему-нибудь. Имеются два типа групповых символов используемых с LIKE: символ подчеркивания ( ) замещает любой одиночный символ. Например, b t будет соответствовать словам bat или bit, но не будет соответствовать brat. знак процента (%) замещает последовательность любого числа символов (включая символы нуля). Например %p%t будет соответствовать словам put, posit, или opt, но не spite. Давайте найдем всех заказчиков чьи имена начинаются с G(вывод показывается в Рисунке 5.7): SELECT FROM Customers WHERE cname LIKE 0%; =============== SQL Execution Log ============ SELECT * FROM Customers WHERE cname LIKE G%; cnum cname city rating snum 2002 Giovanni Rome 200 1003 2004 Grass Berlin 300 1002 Рисунок 5.7: SELECT использует LIKE с % LIKE может быть удобен если вы ищете имя или другое значение, и если вы не помните как они точно пишутся. Предположим что вы неуверены как записано по буквам имя одного из ваших продавцов Peal или Peel. Вы можете просто использовать ту часть которую вы знаете и групповые символы чтобы находить все возможные пары (вывод этого запроса показывается в Рисунке 5.8): SELECT * FROM Salespeople WHERE sname LIKE P l%; Групповые символы подчеркивания, каждый из которых представляет один символ, добавят только два символа к уже существующим P и I, поэтому имя наподобии Prettel не может быть показано. Групповой символ % - в конце строки необходим в большинстве реализаций если длина поля sname больше чем число символов в имени Peel (потому что некоторые другие значения sname - длиннее чем четыре символа). В таком случае, значение поля sname, фактически сохраняемое как имя Peel, сопровождается рядом пробелов. Следовательно, символ l не будет рассматриваться концом строки. Групповой символ % - просто соответствует этим пробелам. Это необязательно, если поля sname имеет тип - VARCHAR. =============== SQL Execution Log ============ SELECT * FROM Salespeople WHERE sname LIKEP snum sname city comm 1001 Peel London 0.12 Рисунок 5.8: SELECT использует LIKE с подчеркиванием ( ) А что же Вы будете делать если вам нужно искать знак процента или знак подчеркивания в строке? В LIKE предикате, вы можете определить любой одиночный символ как символ ESC. Символ ESC используется сразу перед процентом или подчеркиванием в предикате, и означает что процент или подчеркивание будет интерпретироваться как символ, анекакгрупповойсимвол. Например, мы могли бы найти наш sname столбец где присутствует подчеркивание, следующим образом: SELECT * FROM Salespeople WHERE sname LIKE %/ %ESCAPE/; С этими данными не будет никакого вывода, потому что мы не включили никакого подчеркивания в имя нашего продавца. Предложение ESCAPE определяет / как символ ESC. Символ ESC используемый в LIKE строке, сопровождается знаком про- цента, знаком подчеркивания, или знаком ESCAPE, который будет искаться в столбце, а не обрабатываться как групповой символ. Символ ESC должен быть одиночным символом и применяться только к одиночному символу сразу после него. В примере выше, символ процента начала и символ процента окончания обрабатываются как групповые символы; только подчеркивание предоставлено само себе. Как упомянуто выше, символ ESC может также использоваться самостоятельно. Другими словами, если вы будете искать столбец с вашим символом ESC, вы просто вводите его дважды. Во-первых это будет означать что символ ESC берет следующий символ буквально как символ , иво-вторых что символ ESC самостоятелен. Имеется предыдущий пример который пересмотрен чтобы искать местонахождение строки / в sname столбце: SELECT * FROM Salespeople WHERE sname LIKE%/ %ESCAPE/; Снова не будет никакого вывода с такими данными. Строка сравнивается с содержанием любой последовательности символов (%), сопровождаемых символом подчеркивания (/ ), символом ESC ( ), и любой последовательностью символов в конце строки (%). РАБОТА С НУЛЕВ1МИ (NULL) ЗНАЧЕНИЯМИ Часто, будут иметься записи в таблице которые не имеют никаких значений для каждого поля, например потому что информация не завершена, или потому что это поле просто не заполнялось.SQL учитывает такой вариант, позволяя вам вводить значение NULL (ПУСТОЙ) вполе, вместо значения. Когда значение поля равно NULL, это означает, что программа базы данных специально промаркировала это поле как не имеющее никакого значения для этой строки (или записи). Это отличается от просто назначения полю значения нуля или пробела, которые база данных будет обрабатывать также как и любое другое значение. Точно также, как NULL не является техническим значением, ононеимеетитипаданных. Оно может помещаться в любой тип поля. Тем ни менее, NULL в SQL часто упоминается как нуль. Предположим, что вы получили нового заказчика который еще не был назначен продавцу. Чем ждать продавца к которому его нужно назначить, вы можете ввести заказчика в базу данных теперь же, так что он не потеряется при перестановке. Вы можете ввести строку для заказчика со значением NULL вполе snum и заполнить это поле значением позже, когда продавец будет назначен. NULL ОПЕРАТОР Так как NULL указывает на отсутствие значения, вы не можете знать, каков будет результат любого сравнения с использованием NULL. Когда NULL сравнивается с любым значением, даже с другим таким же NULL, результат будет ни верным ни неверным, он - неизвестен. Неизвестный Булев, вообще ведет себя также как неверная строка, которая произведя неизвестное значение в предикате не будет выбрана запросом - имейте ввиду, что в то время как NOT (неверное) - равняется верно,NOT (неизвестное)-равняется неизвестно. Следовательно, выражение типа city = NULL или city IN (NULL) будет неизвестно, независимо от значения city. Часто вы должны делать различия между неверно и неизвестно - между строками содержащими значения столбцов, которые не соответствуют условию предиката и которые содержат NULL в столбцах. По этой причине,SQL предоставляет специальный оператор IS, ко-
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |