Виктор Гольцман - MySQL 5.0. Библиотека программиста
- Название:MySQL 5.0. Библиотека программиста
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Виктор Гольцман - MySQL 5.0. Библиотека программиста краткое содержание
Эта книга предназначена для всех, кто желает освоить СУБД MySQL. Для ее чтения вам не нужны никакие специальные знания – достаточно быть пользователем Windows. Вы узнаете, как установить и запустить MySQL, как создать собственную базу данных, как работать с данными при помощи команд SQL, как администрировать базу данных и оптимизировать ее работу. Разработчики веб-приложений на языках PHP, Perl и Java найдут в этой книге полезные сведения по использованию базы данных MySQL в соответствующих приложениях. Для всех операций, которые вам предстоит выполнить, приводятся подробные пошаговые инструкции, все основные действия поясняются на примере учебной базы данных.
MySQL 5.0. Библиотека программиста - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
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
Поскольку в действительности одинаковый рейтинг имеют только клиенты Крылов и ООО «Кускус», результатом этого запроса является единственная строка (табл. 2.13). Таблица 2.13.Результат выполнения запроса
Запросы, объединяющие таблицу с самой собой, можно использовать, в частности, для поиска ошибок дублирования данных в таблице, например для поиска клиентов с разными идентификаторами, но одинаковыми именами, адресами и телефонами.
Далее мы рассмотрим возможности комбинирования запросов.
Вложенные запросы
Результатом запроса является массив данных в виде таблицы, поэтому вы можете использовать результат одного запроса в другом запросе. Во многих случаях вложенными запросами можно заменить объединение таблиц. Например, получить список имен клиентов, когда-либо заказывавших товар № 5, можно с помощью вложенного запроса:SELECT name FROM Customers
WHERE id IN
(SELECT DISTINCT customer_id FROM Orders
WHERE product_id = 5);Здесь вложенный запрос получают из таблицы Orders (Заказы) номера клиентов, заказавших товар № 5. Для обработки результатов подзапроса мы применили оператор IN, который возвращает истинное значение (TRUE), если элемент слева от оператора совпадает с одним из элементов списка справа от оператора. В данном случае оператор IN проверяет, содержится ли номер клиента (значение столбца id) в списке номеров, выданных подзапросом. Таким образом, внешний запрос выводит имена тех клиентов, номера которых получены в результате подзапроса (табл. 2.14). Таблица 2.14.Результат выполнения запроса
Такой же результат можно получить и с использованием объединения таблиц:SELECT DISTINCT name FROM Customers, Orders WHERE Customers.id = customer_id AND product_id = 5;
Однако не всегда вложенные запросы и объединения таблиц взаимозаменяемы. В частности, запросы с объединениями могут выводить данные из всех участвующих в запросе таблиц, а запросы с вложенными запросами, – только из таблиц, участвующих во внешнем запросе. А с помощью запросов, использующих групповые (агрегатные) функции в подзапросах, можно получить результат, не достижимый другими способами. Например, вывести заказ с наибольшей суммой можно только с помощью вложенного запроса, подсчитывающего максимальную сумму заказа:
Читать дальшеИнтервал:
Закладка: