MySQL 4.1 позволяет вкладывать одни запросы в другие, используя результирующий набор внутреннего запроса внешним запросом. Как результат, вместо выполнения двоих (или более) отдельных запросов, вы выполняете один запрос, содержащий один (или более) подзапросов.
Рассмотрим следующий пример, в котором используется вложенный подзапрос для получения перечня всех счетов, остаток которых превышает средний остаток на всех счетах.
Здесь MySQL начинает обрабатывать внутренний запрос и сначала определяет из записей таблицы средний остаток на всех счетах. Затем он переходит на внешний для вложенного запроса уровень и замещает полученным результирующим набором вложенного запроса представленное в предложении WHERE выражение. Это сделано для того, чтобы получить список обладателей счетов, остаток на которых больше среднего.
О подзапросах подробнее можно узнать в главе 11, "Подзапросы".
Управление поведением оператора select
Для управления поведением оператора SELECT предназначено несколько ключевых слов.
■ Ключевое слово DISTINCT исключает из результирующего набора записи, содержащие повторяющиеся значения.
■ Ключевое слово SQL_CALC_FOUND_ROWS сообщает MySQL о необходимости подсчитать общее количество строк, соответствующих запросу (не принимая во внимание значение LIMIT, которое может быть установлено). Это общее количество можно получить с помощью функции FOUND_ROWS () .
■ Ключевые слова SQL_CACHE и SQL_NO_CACHE сообщают MySQL о необходимости кэшировать полученные результирующие наборы.
■ Ключевое слово SQL_BUFFER_RESULT приводит к сохранению результирующих наборов во временной таблице. Применение такого буфера устраняет необходимость блокировать на время передачи результатов клиенту таблицы, используемые запросом, обеспечивая тем самым беспрепятственное использование их другими процессами.
■ Ключевые слова SQL_BIG_RESULT и SQL_SMALL_RESULT используются для того, чтобы показать ожидаемый размер результирующего набора, позволяя тем самым определить наиболее оптимальный способ сортировки и хранения возвращенных записей (соответственно, на диске или во временных таблицах, которые хранятся в оперативной памяти).
■ Ключевое слово SQL_HIGH_PRIORITY поднимает приоритет запроса наряду с другими параллельно выполняющимися операторами UPDATE, INSERT или DELETE, приводя тем самым к более быстрому (но ненамного) выполнению запросов на сильно загруженных серверах баз данных.
На той же странице
Ключевое слово SQL_CALC_FOUND_ROWS может пригодиться в приложениях, которые выводят содержимое таблиц базы данных на нескольких страницах (или экранах). Оно позволяет осуществлять подсчет общего числа найденных записей, даже если полученный результат будет содержать только малое подмножество этого общего числа.
Если, например, вы хотите отобразить на экране только пять записей из таблицы account, и при этом вы хотите вывести общее число записей, ваш запрос должен выглядеть следующим образом:
mysql> SELECT SQL_CALC_FOUND_ROWS accountName FROM account LIMIT 5;
Этот метод возвращает не только подмножество из пяти записей, но также подсчитывает общее число записей, выбранных запросом, которое можно получить с помощью функции FOUND_ROWS ().
Секрет скорости
Правильное использование ключевых слов SQL_CACHE, SQL_BUFFER_RESULT, SQL_BIG_RESULT, SQL_SMALL_RESULT и SQL_HIGH_PRIORITY поможет вам существенно повысить скорость транзакций с сервером MySQL.
ТОП-10 популярных
Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...
БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Компьютер для гурманов.«Эксимер ДМ»
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...
В дополнение к календарным типам, предназначенным для хранения даты и времени отдельно, MySQL также поддерживает гибридные типы данных DATETIME и...
Вообще, к изменению настроек сервера прибегают очень редко. В MySQL программа заранее настроена так, чтобы соответствовать самым распространенным и основным...
Все о MySQL. Использование подзапросов
28-12-2009
<< Предыдущая статья | Следующая статья >> |
Все о MySQL. Группировка результатов выборки | Все о MySQL. Копирование, импорт и экспорт записей |