Качай мускулы Степан Ильин aka Step Хакер, номер #075, стр. 075-028-4 SELECT * FROM orders WHERE (Payment = ‘Visa’) and (Sum>1000) // Вывести все заказы, оплаченные картой Visa, на сумму более 1000 y.e. SELECT * FROM orders WHERE not ((Payment = ‘Visa’) and (Sum>1000)) // Результат этого запроса диаметрально противоположен. Экстравагантные штучки С помощью логических условий можно составить самые изощренные запросы. Тем не менее, их использования частенько можно избежать, задав условие более понятно и изящно. Рассмотрим следующий пример. SELECT * FROM customers WHERE (City=’Калуга’)or(City =’Москва’) Согласись, этот запрос для вывода всех покупателей из Калуги и Москвы выглядит вполне прилично. Но представь ситуацию, когда от тебя потребуется сделать выборку покупателей, скажем, из ста или вообще тысячи городов. Что тогда? Тупо набирать условия copy-past’ом? Куда более уместно здесь воспользоваться оператором IN. SELECT * FROM customers WHERE City IN (‘Калуга’, ‘Москва’, ‘Екатеринбург’) // Последние два запроса аналогичны. Почувствуй разницу! Кроме того, задавая критерий, нередко приходится указывать диапазоны значений. Это, опять же, может с легкостью быть представлено таким логическим условием: SELECT * FROM orders WHERE (Sum>100)and(Sum<1000). Однако в SQL возможен и другой вариант — с использованием служебного слова BETWEEN (между). SELECT * FROM orders WHERE Sum BETWEEN 100 AND 1000 // Комментарии, как говорится, излишни. Единственное, на что хочу обратить твое внимание: записи со значением Sum, равным 100 или 1000, под этот критерий не подходят. В реальных ситуациях иногда приходится накладывать условия и на поля строкового типа данных. В этом случае своеобразной палочкой-выручалочкой является специальный оператор LIKE. Без лишних прелюдий опишу принцип его работы на примерах: SELECT * FROM customers WHERE FirstName LIKE ‘С%’ // Запрос вернет список покупателей, имя которых начинается на букву «С». SELECT * FROM customers WHERE LastName LIKE "%ни%" // А в этом случае мы ищем клиентов, в фамилии которых встречается буквосочетание «ни». Важно заметить, что знак процента (%) в SQL обозначает группу символов. Обрабатывая запрос, сервер считает, что на его месте может находиться как один, так и несколько символов. Чтобы исключить последний случай, необходимо использовать другую управляющую инструкцию – символ подчеркивания (_).Впрочем, никто не ограничивает тебя в использовании одного и другого символов одновременно: SELECT * FROM customers WHERE LastName LIKE "П__%в". От информации, поступающей в хаотичном порядке, толку мало. Результаты, предназначенные для просмотра пользователем, естественно, нужно четко систематизировать. По крайней мере, банально отсортировать. Выполнить это крайне просто. Достаточно к любому запросу добавить приписку ORDER BY <имя столбца, по которому происходит сортировка> [DESC]. Ключ DESC опционален. Он указывает на то, что сортировка производится в обратном порядке. Если такой необходимости нет, его можно смело опустить: |