Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #75, МАРТ 2005 г.

Качай мускулы

Степан Ильин 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 опционален. Он указывает на то, что сортировка производится в обратном порядке. Если такой необходимости нет, его можно смело опустить:

Назад на стр. 075-028-3  Содержание  Вперед на стр. 075-028-5