Подробности к шагу 12.

Для экспериментов с операторами и функциями mysql удобно создать таблицу-пустышку по аналогии с oracle-иным решением (я думаю, Вы уже создали какую-нибудь базу для экспериментов, ну, например, mysqladmin create test):
connect test;
create table dual (id char(1));
insert into dual values('X');
Итак, сокращенный список операторов и функций MySQL. (Здесь описаны лишь некоторые функции, отобранные в основном по критерию отличности от SQL-стандарта.)

Условия WHERE:

[NOT] BETWEEN .. AND
диапазон (как в стандарте - просто напоминаю).
[NOT] IN (...)
список значений (то же замечание).
Стандартный оператор [NOT] LIKE строка_с_подстановками,
где подстановки могут быть символом '%' (любое число символов) и/или '_' (одиночный символ), например, поле field в таблице test некоторой записи содержит такой текст: "PHP - рулез форева!"; тогда добраться до него можно так:
select * from test where field like '%рул_з%'
(предполагается, что мы забыли, что именно является рулезом и как вообще пишется рулез: "рулЕз" или "рУлиз" ;)
[NOT] REGEXP/RLIKE (а вот это интересно!)
использование регулярных выражений (!), например, если таблица из предыдущего примера хранит записи с утверждениями для всех версий PHP, а мы согласны с рулезностью только 3-й и 4-й версий, то условие WHERE можно записать так:
field regexp '^PHP[3|4]'
LIMIT [начало,] конец_выборки
ограничение диапазона выборки.
По моему скромному разумению, без этой фразы mysql в интернете не прижился бы. LIMIT позволяет ограничить объем выборки указанным диапазоном. На этой штуке базируется логика выборки данных для всяких форумов, конференций, новостных страниц и пр. Почему? Ну представьте, что посетитель Вашей страницы хочет просмотреть список новостей, начиная с текущей даты. Вы можете вывалить ему в ответ список сообщений (допустим, их накопилось штук 300 или 1000), превратив бегунок вертикального скроллбара броузера в узкую полоску или выдать сообщения порциями по нескольку штук. Но где хранить всю выборку между выдачами очередных порций? Ведь после ответа на запрос клиентского броузера web-сервер разорвет соединение, освободив выделенные ранее ресурсы. Решение может быть таким:
$result=mysql_query("SELECT * FROM ".$table." LIMIT ".$start.", ".$rows)
где $start=$rows * $page_number, а $page_number - параметр, на 1 больший номера текущей страницы для перехода к следующей "пачке", и на 1 меньший - для предыдущей порции Ваших сообщений. Этот прием будет продемонстрирован в следующих шагах, когда мы разработаем полноценный отчет по книжным спискам.
PROCEDURE имя_процедуры
с версии 3.22 можно задать процедуру обработки запроса. Эту возможность я сам еще не использовал. Привожу ее для "кучи". Позднее разберусь - опишу.
Некоторые функции, которые могут быть использованы в WHERE и в SELECT (скажем, в конструкции SELECT функция(...) FROM dual, где dual - созданная нами таблица с одной (все равно какой) записью - см. замечание в начале "Подробностей").
DATABASE()
вернет имя текуще базы (скажем,
SELECT DATASET() FROM какая_нибудь_таблица_из_открытой_базы LIMIT 1
(LIMIT - чтобы на выводе иметь только одну строку.).
Обращаю внимание на изобилие форматов вывода для дат в функции DATE_FORMAT().
ENCRYPT и PASSWORD
предназначены для шифрования строк (по-моему, по методу DES от UNIX-операционок).

By Konstantin Platonov.