базой данных для нахождения нужных вам сведений. Об этом и пойдет речь в следующем разделе.
2.5. Извлечение данных из таблиц
Для получения информации из таблиц базы данных используются
Простые запросы
Знакомство с запросами начнем с наиболее простой команды, которая выводит все данные, содержащиеся в таблице:
Например, в результате выполнения запроса
вы получите всю информацию о клиентах (см. рис. 2.2 и 2.4).
Примечание
Последующие примеры запросов не будут проиллюстрированы изображениями окон с результатом запроса, поскольку окна различных клиентских приложений при выполнении одного и того же запроса будут отображать один и тот же результат. Мы с вами ограничимся тем, что приведем таблицу, содержащую выводимые запросом данные.
Вместо звездочки можно указать список столбцов таблицы, из которых нужно получить информацию. Например, чтобы вывести только имя, телефон и рейтинг каждого клиента, выполните запрос
Результатом выполнения этого запроса будет следующий набор данных (табл. 2.4): Таблица 2.4. Результат выполнения запроса
Получать с помощью запроса можно не только значения столбцов, но и значения, вычисленные с помощью выражений.
Например, запросвозвращает результат, аналогичный предыдущему, только значения рейтинга разделены на 1000 (табл. 2.5). Таблица 2.5. Результат выполнения запроса
О функциях и операторах, которые можно использовать в выражениях, подробно будет рассказано в главе 3.
С помощью запросов можно также вычислять значения без обращения к какой-либо таблице.
Например, запросвозвращает результат 4 Результат запроса может содержать повторяющиеся строки. Например, клиенты могут иметь одинаковые рейтинги, поэтому запрос
выдает результат, в котором есть одинаковые строки (табл. 2.6). Таблица 2.6. Результат выполнения запроса
Чтобы исключить повторения из результата запроса, добавьте в текст запроса ключевое слово DISTINCT. Например, чтобы просмотреть список рейтингов клиентов, не содержащий дубликатов, выполните запроси получите следующий результат (табл. 2.7). Таблица 2.7. Результат выполнения запроса
Чтобы упорядочить строки, выведенные запросом, по значениям одного из столбцов, добавьте в текст запроса выражениеКлючевое слово ASC означает, что сортировка выполняется по возрастанию, DESC – по убыванию значений. Если ни то, ни другое слово не указано, выполняется сортировка по возрастанию. Кроме того, для сортировки можно использовать сразу несколько столбцов, тогда строки будут отсортированы по значениям первого из столбцов, строки с одинаковым значением в первом столбце будут отсортированы по значениям второго из столбцов и т. д. Например, запрос
возвращает следующий результат (табл. 2.8). Таблица 2.8. Результат выполнения запроса
Как вы видите, в результате запроса вначале располагается строка с наибольшим рейтингом, а строки с одинаковым рейтингом располагаются в алфавитном порядке имен клиентов.
Вместо имен столбцов в выражении ORDER BY можно использовать их порядковые имена в результате запроса. Например, приведенный выше запрос аналогичен запросуЗапросы, которые рассматривались в этом подразделе, выводили информацию из всех имеющихся в таблице строк. В следующем подразделе вы узнаете, как использовать запросы для отбора строк таблицы.
Условия отбора
Чтобы выбрать из таблицы строки, удовлетворяющие какому-либо критерию, добавьте в текст запроса выражениеНапример, запрос
возвращает только те строки, в которых значение рейтинга равно 1000 (табл. 2.9). Таблица 2.9. Результат выполнения запроса
В условии отбора можно использовать любые операторы и функции языка SQL (подробно о них вы узнаете в главе 3), в том числе логические операторы AND и OR для создания составных условий отбора.
Например, запросвыводит информацию о тех клиентах, чье имя начинается с «ООО», а также о тех, чей рейтинг превосходит 1000, упорядочивая строки в порядке убывания значения рейтинга (табл. 2.10). Таблица 2.10. Результат выполнения запроса
Пока мы рассматривали запросы, получающие данные только из одной таблицы. В следующем подразделе вы узнаете о запросах, позволяющих выводить информацию сразу из нескольких таблиц.
Объединение таблиц
Получить информацию из нескольких таблиц вы можете, указав в запросе список столбцов и список таблиц, из которых нужно получить информацию:Например, если требуется вывести информацию о всех заказанных товарах за определенную дату с указанием имен и адресов заказчиков, выполните команду
Эта команда выводит следующий результат (табл. 2.11). Таблица 2.11. Результат выполнения запроса
С помощью этого запроса мы получили данные из столбцов name (имя) и address (адрес) таблицы Customers (Клиенты) и столбцов product_id (товар) и qty (кол-во) таблицы Orders (Заказы). Указав условие WHERE Customers. id = customer_id, мы сообщили программе MySQL, что для каждого клиента должны выводиться сведения только о заказах этого клиента. Иначе мы получили бы бессмысленный набор всевозможных комбинаций данных из таблицы Customers с данными из таблицы Orders. Обратите внимание, что столбец с именем id есть и в таблице Customers, и в таблице Orders, поэтому мы добавили имя таблицы Customers в виде префикса к имени столбца.
По такому же принципу можно объединять в запросе и более двух таблиц, и даже таблицу с самой собой. Объединение таблицы с собой можно представить себе как объединение нескольких идентичных таблиц. Чтобы различать эти таблицы, им присваиваются разные псевдонимы. В качестве примера объединения таблицы с самой собой рассмотрим запрос, который выводит всевозможные пары клиентов с одинаковым рейтингом:Создавая этот запрос, мы присвоили «первому экземпляру» таблицы Customers псевдоним L, «второму экземпляру» – псевдоним R. В результате объединения «таблиц» мы получили всевозможные пары клиентов: первый клиент в каждой паре – это строка из «таблицы» L, второй – строка из «таблицы» R. С помощью условия WHERE L.rating = R.rating мы выбрали те пары, в которых рейтинг клиента из таблицы L (L.rating) равен рейтингу клиента из таблицы R (R.rating). Как и в предыдущем примере, к именам столбцов мы добавили в виде префикса имена «таблиц» (в данном случае – псевдонимы), чтобы указать, к какому из экземпляров таблицы относится каждый из столбцов.
Таким образом, запрос выводит следующие пары имен (табл. 2.12).
Поскольку наборы строк в «таблицах» L и R одинаковые, в результате запроса появилось много лишних данных: пары одинаковых имен (они возникли при сравнении строки «таблицы» L с точной копией этой строки в «таблице» R), а также одна и та же пара имен сначала в прямом, затем в обратном порядке. Чтобы избавиться от повторений, введите дополнительное условие отбора.
Таблица