Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #28, МАРТ 2003 г.

Do you speak SQL?

GLAZъ (glazy@mail.ru)

Спецвыпуск Xakep, номер #028, стр. 028-044-4


>= - Больше или равно;

<= - Меньше или равно;

<> - Не равно;

Ими можно пользоваться и при сравнении строк. При этом меньшим считается тот элемент, который стоит раньше в таблице ASCII. Например, буква "А" будет меньше "Б", но "а" будет больше "Б". Кстати, при сравнении строк ты можешь использовать оператор LIKE, он почти эквивалентен "=", только позволяет искать, к примеру, слова с одинаковым началом.

В запросе можно использовать булевы операторы (логические), т.е. AND, OR, NOT.

Пример:

SELECT * FROM articles WHERE author LIKE "GLAZ" AND number_articles > '1';

В некоторых запросах удобно использовать IN. Пример:

SELECT * FROM authors WHERE nick LIKE "GLAZ" OR nick LIKE "Dronich" OR ...;

Если авторов много, то умрем за клавой, перечисляя их всех. Смотри, как это красиво делается, используя IN:

SELECT * FROM authors WHERE nick IN ("GLAZ", "Dronich", ...);

Вот как стало все удобно и понятно, а главное сухо!

Есть еще такой оператор, как IS NULL. Разберем его на примере:

SELECT * FROM news WHERE author IS NULL;

Запрос возвратит всех авторов, которые пожелали остаться анонимными. Понял, для чего он? Для тех, кто в танке, поясняю: для проверки заполнено ли поле.

Ну и напоследок скажу об операторах, которые позволяют делать выборку данных по шаблону. Встречайте: "%" и "_". Первый означает несколько символов, второй - один. Показываю:

SELECT * FROM xsauthors WHERE nick LIKE "D%";

Запрос возвратит авторов: Dronich, Dr.Cod, Donor, Danya и т.д. Думаю, что со вторым оператором все понятно.

Чтобы узнать, какие дополнительные функции и операторы поддерживаются твоей СУБД, читай мануалы.

- GROUP BY позволяет выполнять группировку данных по столбцу или столбцам таким образом, что для всех строк с одинаковым значением в столбце, по которому выполняется группировка, в результате выборки будет возвращена всего одна строка. Например, когда ты хочешь просуммировать заказы в интернет-магазине за месяц и вывести результат в виде таблицы с полями КЛИЕНТ и СУММА.

Фишка в том, что в начале запроса помимо существующих полей можно указать одну из групповых функций - MAX, MIN, SUM или COUNT (это наиболее используемые, их на самом деле побольше). Запрос, считающий затраты клиента, будет выглядеть как:

SELECT name, SUM(paid) FROM shop_paiments GROUP BY name;

Здесь "name" - имя столбца с именами клиентов, а "paid" - имя столбца с суммами их заказов. Если ты хочешь просто узнать число покупок или максимальную сумму заказа, заменяй итоговую функцию на COUNT или MAX соответственно, и будет тебе счастье :).

- ORDER BY используется для сортировки вывода запросов. После этой команды пишутся столбцы, по которым выполняется сортировка, а после них тип сортировки: ASC или DESC, что значит по возрастанию или убыванию соответственно. По умолчанию стоит ASC. Втыкай пример:

SELECT * FROM authors ORDER BY nick;

После этого ты получишь ответ, где все данные будут расположены в порядке возрастания по никам авторов.

Турбомоддинг

Фью! Запрос SELECT был успешно добит! Теперь вернемся к нашей таблице. Посмотрим, что мы в ней натворили. Напомню, что мы остановились на том, что добавили одну строку. Давай посмотрим, что получилось. Пиши в командной строке:

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