KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Программирование » Виктор Гольцман - MySQL 5.0. Библиотека программиста

Виктор Гольцман - MySQL 5.0. Библиотека программиста

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Виктор Гольцман, "MySQL 5.0. Библиотека программиста" бесплатно, без регистрации.
Перейти на страницу:

Теперь, когда данные внесены в таблицы, можно пользоваться базой данных для нахождения нужных вам сведений. Об этом и пойдет речь в следующем разделе.

2.5. Извлечение данных из таблиц

Для получения информации из таблиц базы данных используются запросы – SQL-команды, начинающиеся с ключевого слова SELECT. В этом разделе вы познакомитесь со структурой запросов.

Простые запросы

Знакомство с запросами начнем с наиболее простой команды, которая выводит все данные, содержащиеся в таблице:

SELECT * FROM <Имя таблицы>;

Например, в результате выполнения запроса

SELECT * FROM Customers;

вы получите всю информацию о клиентах (см. рис. 2.2 и 2.4).

...

Примечание

Последующие примеры запросов не будут проиллюстрированы изображениями окон с результатом запроса, поскольку окна различных клиентских приложений при выполнении одного и того же запроса будут отображать один и тот же результат. Мы с вами ограничимся тем, что приведем таблицу, содержащую выводимые запросом данные.

Вместо звездочки можно указать список столбцов таблицы, из которых нужно получить информацию. Например, чтобы вывести только имя, телефон и рейтинг каждого клиента, выполните запрос

SELECT name,phone,rating FROM Customers;

Результатом выполнения этого запроса будет следующий набор данных (табл. 2.4): Таблица 2.4. Результат выполнения запроса

Получать с помощью запроса можно не только значения столбцов, но и значения, вычисленные с помощью выражений.

Например, запрос

SELECT name,phone,rating/1000 FROM CUSTOMERS;

возвращает результат, аналогичный предыдущему, только значения рейтинга разделены на 1000 (табл. 2.5). Таблица 2.5. Результат выполнения запроса

О функциях и операторах, которые можно использовать в выражениях, подробно будет рассказано в главе 3.

С помощью запросов можно также вычислять значения без обращения к какой-либо таблице.

Например, запрос

SELECT 2*2;

возвращает результат 4 Результат запроса может содержать повторяющиеся строки. Например, клиенты могут иметь одинаковые рейтинги, поэтому запрос

SELECT rating FROM Customers;

выдает результат, в котором есть одинаковые строки (табл. 2.6). Таблица 2.6. Результат выполнения запроса

Чтобы исключить повторения из результата запроса, добавьте в текст запроса ключевое слово DISTINCT. Например, чтобы просмотреть список рейтингов клиентов, не содержащий дубликатов, выполните запрос

SELECT DISTINCT rating FROM Customers;

и получите следующий результат (табл. 2.7). Таблица 2.7. Результат выполнения запроса

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

ORDER BY <Имя столбца> [ASC или DESC]

Ключевое слово ASC означает, что сортировка выполняется по возрастанию, DESC – по убыванию значений. Если ни то, ни другое слово не указано, выполняется сортировка по возрастанию. Кроме того, для сортировки можно использовать сразу несколько столбцов, тогда строки будут отсортированы по значениям первого из столбцов, строки с одинаковым значением в первом столбце будут отсортированы по значениям второго из столбцов и т. д. Например, запрос

SELECT name,phone,rating FROM Customers ORDER BY rating DESC, name;

возвращает следующий результат (табл. 2.8). Таблица 2.8. Результат выполнения запроса

Как вы видите, в результате запроса вначале располагается строка с наибольшим рейтингом, а строки с одинаковым рейтингом располагаются в алфавитном порядке имен клиентов.

Вместо имен столбцов в выражении ORDER BY можно использовать их порядковые имена в результате запроса. Например, приведенный выше запрос аналогичен запросу

SELECT name,phone,rating FROM Customers ORDER BY 3 DESC, 1;

Запросы, которые рассматривались в этом подразделе, выводили информацию из всех имеющихся в таблице строк. В следующем подразделе вы узнаете, как использовать запросы для отбора строк таблицы.

Условия отбора

Чтобы выбрать из таблицы строки, удовлетворяющие какому-либо критерию, добавьте в текст запроса выражение

WHERE <Условие отбора>

Например, запрос

SELECT name,phone,rating FROM Customers WHERE rating = 1000;

возвращает только те строки, в которых значение рейтинга равно 1000 (табл. 2.9). Таблица 2.9. Результат выполнения запроса

В условии отбора можно использовать любые операторы и функции языка SQL (подробно о них вы узнаете в главе 3), в том числе логические операторы AND и OR для создания составных условий отбора.

Например, запрос

SELECT name,phone,rating FROM Customers

WHERE name LIKE 'ООО%' OR rating>1000

ORDER BY rating DESC;

выводит информацию о тех клиентах, чье имя начинается с «ООО», а также о тех, чей рейтинг превосходит 1000, упорядочивая строки в порядке убывания значения рейтинга (табл. 2.10). Таблица 2.10. Результат выполнения запроса

Пока мы рассматривали запросы, получающие данные только из одной таблицы. В следующем подразделе вы узнаете о запросах, позволяющих выводить информацию сразу из нескольких таблиц.

Объединение таблиц

Получить информацию из нескольких таблиц вы можете, указав в запросе список столбцов и список таблиц, из которых нужно получить информацию:

SELECT <Список столбцов> FROM <Список таблиц> WHERE <Условие отбора>;

Например, если требуется вывести информацию о всех заказанных товарах за определенную дату с указанием имен и адресов заказчиков, выполните команду

SELECT name,address,product_id,qty

FROM Customers, Orders

WHERE Customers.id = customer_id AND date = '2007-12-12

Эта команда выводит следующий результат (табл. 2.11). Таблица 2.11. Результат выполнения запроса

С помощью этого запроса мы получили данные из столбцов name (имя) и address (адрес) таблицы Customers (Клиенты) и столбцов product_id (товар) и qty (кол-во) таблицы Orders (Заказы). Указав условие WHERE Customers. id = customer_id, мы сообщили программе MySQL, что для каждого клиента должны выводиться сведения только о заказах этого клиента. Иначе мы получили бы бессмысленный набор всевозможных комбинаций данных из таблицы Customers с данными из таблицы Orders. Обратите внимание, что столбец с именем id есть и в таблице Customers, и в таблице Orders, поэтому мы добавили имя таблицы Customers в виде префикса к имени столбца.

По такому же принципу можно объединять в запросе и более двух таблиц, и даже таблицу с самой собой. Объединение таблицы с собой можно представить себе как объединение нескольких идентичных таблиц. Чтобы различать эти таблицы, им присваиваются разные псевдонимы. В качестве примера объединения таблицы с самой собой рассмотрим запрос, который выводит всевозможные пары клиентов с одинаковым рейтингом:

SELECT L.name,R.name FROM Customers L, Customers R WHERE L.rating = R.rating;

Создавая этот запрос, мы присвоили «первому экземпляру» таблицы Customers псевдоним L, «второму экземпляру» – псевдоним R. В результате объединения «таблиц» мы получили всевозможные пары клиентов: первый клиент в каждой паре – это строка из «таблицы» L, второй – строка из «таблицы» R. С помощью условия WHERE L.rating = R.rating мы выбрали те пары, в которых рейтинг клиента из таблицы L (L.rating) равен рейтингу клиента из таблицы R (R.rating). Как и в предыдущем примере, к именам столбцов мы добавили в виде префикса имена «таблиц» (в данном случае – псевдонимы), чтобы указать, к какому из экземпляров таблицы относится каждый из столбцов.

Таким образом, запрос выводит следующие пары имен (табл. 2.12).

Поскольку наборы строк в «таблицах» L и R одинаковые, в результате запроса появилось много лишних данных: пары одинаковых имен (они возникли при сравнении строки «таблицы» L с точной копией этой строки в «таблице» R), а также одна и та же пара имен сначала в прямом, затем в обратном порядке. Чтобы избавиться от повторений, введите дополнительное условие отбора.

Таблица 2.12. Результат выполнения запроса

SELECT L.name,R.name FROM Customers L, Customers R WHERE L.rating = R.rating AND L.name<R.name;

Поскольку в действительности одинаковый рейтинг имеют только клиенты Крылов и ООО «Кускус», результатом этого запроса является единственная строка (табл. 2.13). Таблица 2.13. Результат выполнения запроса

Запросы, объединяющие таблицу с самой собой, можно использовать, в частности, для поиска ошибок дублирования данных в таблице, например для поиска клиентов с разными идентификаторами, но одинаковыми именами, адресами и телефонами.

Далее мы рассмотрим возможности комбинирования запросов.

Вложенные запросы

Результатом запроса является массив данных в виде таблицы, поэтому вы можете использовать результат одного запроса в другом запросе. Во многих случаях вложенными запросами можно заменить объединение таблиц. Например, получить список имен клиентов, когда-либо заказывавших товар № 5, можно с помощью вложенного запроса:
Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*