Оператор SELECT является в MySQL настоящей "рабочей лошадкой". Он извлекает данные из базы данных, выбирая из таблицы строки, которые отвечают заданному критерию поиска. Существует множество опций и вариантоав использования оператора SELECT.
Основная же его форма выглядит следующим образом:
SELECT [options] items
[INTO file_details]
FROM tables
[WHERE condition]
[GROUP BY group_type0
[HAVING where_definition]
[ORDER BY order_type]
[LIMIT limit_criteria]
[PROCEDURE proc_name (arguments)]
[lock_options]
;
В последующих разделах каждая конструкция будет описана по отдельности. Однако рассмотрим запрос без каких либо дополнительных конструкций, когда просто требуется просто выбрать определенные элементы из конкретной таблицы. Обычно такими элементами являются столбцы таблиц. Кроме того, они могут быть результатами вычислений любых MySQL-выражений. Следующий запрос выводит содержимое столбцов name и city таблицы customers:
select name, city
from customers;
Если данные были введены за счет выполнения сценария из предыдущего листинга и остальных двух примеров операторов INSERT, результат запроса будет следующим:
Как видите, получена таблица с выбранными элементами — name (ФИО) и city (город) — из уникальной таблицы клиентов customers. Эти данные собраны из всех строк таблицы customers.
Из таблицы можно выбрать любое количество стобцов, помещая их список после ключевого слова SELECT. Кроме того, в операторе можно указать и другие элементы. Весьма полезна групповая операция *, которая соответствует всем столбцам указанной таблицы или таблиц. Например, чтобы извлеч все столбцы из строки таблицы order_items, можно воспользоваться следующим оператором:
select *
from order_items;
в результате выполнения которого будет получен такой вывод:
Чтобы получить доступ к подмножеству строк в таблице, следует указать критерий выбора. В этом нам поможет конструкция where. Например:
select *
from orders
where customerid = 3 ;
выбирает все столбцы из таблицы заказов, но только из строк с customerid, равным 3. Вот результат:
Конструкция WHERE устанавливает критерий выбора определенных строк. В нашем случае выбраны строки, в которых столбец customerid содержит значение равное 3. Одиночный знак равенства используется для проверки на равенство — обратите внимание, что это немного отличается от РНР, и если работать и с тем, и с другим, вполне можно запутаться.
Вдобавок к равенству, MySQL поддерживает целое семейство операторов и регулярных выражений. Наиболее употребимые в конструкции where перечислены в табл. Обратите внимание, что список далеко не полон, и если понадобится что-нибудь, отсутствующее в нем, обратитесь к руководству по MySQL.
Таблица. Полезные операции сравнения, используемые в конструкции WHERE
Операция | Название (если применимо) | Пример | Описание |
= | равно | customerid = 3 | Проверяет, являются ли значения равными |
> | больше | amount > 100.00 | Проверяет, боле ли одно значение другого |
< | меньше | amount < 100.00 | Проверяет, меньше ли одно значение другого |
>= | больше или равно | amount >= 100.00 | Проверяет, больше или равно одно значение по отношению к другому |
<= | меньше или равно | amount <= 100.00 | Проверяет, меньше или равно одно значение по отношению к другому |
!= или <> | не равно | quantity != 0 | Проверяет, не равны ли два значения |
IS NOT NULL | address is not null | Проверяет, содержит ли поле значение | |
IS NULL | address is null | Проверяет, что поле не содержит значение | |
BETWEEN | amount between 0 and 100.00 | Проверяет, является ли значениебольщим или равным минимальному и меньшим или равным максимальному | |
IN | city in ("Carlton", "Мое") | Проверяет, содержится ли значение в определенном наборе | |
NOT IN | city not in ("Carlton", "Мое") | Проверяет, не содержится ли значение в определенном наборе | |
LIKE | сопоставление с шаблоном | name like ("Fred %") | Используется простое сопоставление значения с SQL-шаблоном, проверяет, соответствует ли значение шаблону |
NOT LIKE | сопоставление с шаблоном | name not like ("Fred %") | Проверяет, что значение не соответствует шаблону |
REGEXP | регулярное выражение | name regexp | Проверяет, соответствует ли значение регулярному выражению |
Три последних строки таблицы относятся к LIKE и REGEXP. Это формы соответствия шаблону.
LIKE использует простой механизм соответствия SQL. Образец может состоять из обычного текста плюс % (знак процента) для указания совпадения с любым количеством символов и _ (символ подчеркивания) для указания совпадения с одним символом. В MySQL соответствия не чувствительны к регистру. Например, 'Fred %' найдет любое значение, которое начинается с 'fred '.
Ключевое слово REGEXP используется для соответствия регулярных выражений. MySQL использует регулярные выражения в стиле POSIX. Вместо REGEXP можно применять и RLIKE, что является синонимом. Регулярные выражения POSIX также применяются и в РНР.
Можно проверять несколько критериев сразу, объединяя их операциями AND или OR. Например:
select * from orders
where customerid = 3 or customerid = 4 ;