Виктор Гольцман - MySQL 5.0. Библиотека программиста
- Название:MySQL 5.0. Библиотека программиста
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Виктор Гольцман - MySQL 5.0. Библиотека программиста краткое содержание
Эта книга предназначена для всех, кто желает освоить СУБД MySQL. Для ее чтения вам не нужны никакие специальные знания – достаточно быть пользователем Windows. Вы узнаете, как установить и запустить MySQL, как создать собственную базу данных, как работать с данными при помощи команд SQL, как администрировать базу данных и оптимизировать ее работу. Разработчики веб-приложений на языках PHP, Perl и Java найдут в этой книге полезные сведения по использованию базы данных MySQL в соответствующих приложениях. Для всех операций, которые вам предстоит выполнить, приводятся подробные пошаговые инструкции, все основные действия поясняются на примере учебной базы данных.
MySQL 5.0. Библиотека программиста - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
CONVERT TO CHARACTER SET cp1251 COLLATE cp1251_general_cs;
SELECT name, STRCMP(name,\'крылов\') FROM Customers;В итоге тот же самый запрос вернет уже другой результат (табл. 3.17): Таблица 3.17.Результат выполнения запроса
Различие результатов объясняется тем, что без учета регистра строки «Крылов» и «крылов» эквивалентны, а с учетом регистра – различны.
При использовании сравнения по числовым кодам символов мы получим третий результат, отличающийся от первых двух.ALTER TABLE Customers
CONVERT TO CHARACTER SET cp1251 COLLATE cp1251_bin;
SELECT name, STRCMP(name,\'крылов\') FROM Customers;Результат этого запроса представлен в табл. 3.18. Таблица 3.18.Результат выполнения запроса
Наконец, рассмотрим оператор полнотекстового поиска.
Оператор MATCH (<���Список столбцов>) AGAINST (<���Критерий поиска>)Оператор MATCH… AGAINST… выполняет поиск по заданным ключевым словам в значениях указанных столбцов. При этом для столбцов должен быть создан полнотекстовый индекс (о полнотекстовых индексах вы узнали из главы 2). Для каждой строки таблицы оператор MATCH. AGAINST. возвращает величину релевантности, которая характеризует степень соответствия строки критерию поиска. Если оператор используется в параметре WHERE команды SELECT, то результатом запроса будут строки с отличной от нуля релевантностью, упорядоченные по убыванию релевантности (подобно результату поиска в интернете с помощью поисковых систем).
Например, создадим полнотекстовый индекс для столбца description (наименование) таблицы Products (Товары). Полнотекстовый индекс можно создать только для таблиц с типом MyISAM, который не поддерживает связи между таблицами. Поэтому вначале удалим связь между таблицами Products и Orders (Заказы), удалив внешний ключ из таблицы Orders:ALTER TABLE Orders DROP FOREIGN KEY orders_ibfk_1;
Затем изменим тип таблицы Products на MyISAM:
ALTER TABLE Products ENGINE MyISAM;
И наконец, создадим полнотекстовый индекс для столбца description:
ALTER TABLE Products ADD FULLTEXT (description);
После этого можно выполнять полнотекстовый поиск по столбцу description. Например, запрос
SELECT * FROM Products WHERE MATCH (description) AGAINST (\'Чайник Мосбытприбор\');
возвращает единственную строку (табл. 3.19). Таблица 3.19.Результат выполнения запроса
В других наименованиях товаров также присутствует ключевое слово «Мосбытприбор», однако программа MySQL игнорирует те слова из критерия поиска, которые встречаются более чем в половине строк. Игнорируются также слишком короткие слова (из трех и менее символов) и общеупотребительные слова (список этих слов – стоп-лист – приводится на веб-странице http://dev.mysql.com/doc/ refman/5.0/en/fulltext-stopwords.html).
Если необходимо выполнить поиск по словам, которые могут встречаться более чем в 50 % строк, необходимо использовать поиск в логическом режиме. Для этого необходимо включить в выражение MATCH. AGAINST. параметр IN BOOLEAN MODE. Управлять поиском в логическом режиме можно с помощью следующих спецсимволов:
• + – перед словом означает, что будут найдены только строки, содержащие это слово;
• – – перед словом означает, что будут найдены только строки, не содержащие это слово;
• < – перед словом уменьшает «вес» этого слова при вычислении релевантности;
• > – перед словом увеличивает «вес» этого слова при вычислении релевантности;
• ~ – перед словом делает «вес» слова отрицательным (уменьшающим релевантность);
• * — после слова означает произвольное окончание; например, запрос по слову +чай* выведет строки, содержащие слова «чайник», «чайница», «чайка» и т. п.;
• " – сочетание слов, заключенное в двойные кавычки, рассматривается как единое слово;
• (\' и \') – круглые скобки позволяют создавать вложенные выражения.
Например, запросSELECT * FROM Products
WHERE MATCH (description)
AGAINST (\'-Чайник +Мосбытприбор\' IN BOOLEAN MODE);возвращает строки, содержащие слово «Мосбытприбор», но не имеющие слова «Чайник» (табл. 3.20). Таблица 3.20.Результат выполнения запроса
Результат полнотекстового поиска в логическом режиме не упорядочивается.Еще один режим полнотекстового поиска – расширенный режим. Он отличается от обычного тем, что в результат запроса, помимо строк, отвечающих заданному критерию поиска, включаются строки, найденные по принципу схожести с несколькими первыми строками, наиболее релевантными исходному критерию. Расширенный режим полезен при поиске «наугад», когда заранее неясно, по какому критерию искать нужную строку. Для поиска в логическом режиме необходимо включить в выражение MATCH… AGAINST… параметр WITH QUERY EXPANSION:
SELECT * FROM Products
WHERE MATCH (description)
AGAINST (\'Чайник Мосбытприбор\' WITH QUERY EXPANSION);Итак, мы рассмотрели основные операторы сравнения, на которых базируются условия отбора в запросах и командах изменения и удаления строк. В следующем подразделе мы рассмотрим группу операторов и ключевых слов, которые также используются для сравнения, только одним из операндов служит результат вложенного запроса.
Операторы сравнения с результатами вложенного запроса
В этом разделе вы познакомитесь с операторами и ключевыми словами, используемыми для обработки результатов вложенного запроса. Перечислим их.
EXISTSОператор EXISTS возвращает значение 1 (TRUE), если результат подзапроса содержит хотя бы одну строку, и значение 0 (FALSE), если подзапрос выдает пустой результат.
Например, получить список товаров, заказанных по крайней мере одним клиентом, можно с помощью запросаSELECT * FROM Products
WHERE EXISTS
(SELECT * FROM Orders
WHERE product_id = Products.id
AND customer_id IS NOT NULL);Обратите внимание, что в этом примере мы столкнулись с новой разновидностью вложенного запроса. В примерах, которые мы рассматривали ранее (см. подраздел «Вложенные запросы»), вложенный запрос не использовал данные из внешнего запроса и поэтому выполнялся только один раз, после чего найденные вложенным запросом данные обрабатывались внешним запросом. Однако в текущем примере вложенный запрос связан с внешним: в нем используется значение столбца id (идентификатор) таблицы Products (Заказы) – таблицы, которая участвует во внешнем запросе. Следовательно, вложенный запрос выполняется отдельно для каждой строки таблицы Products, каждый раз с новым значением столбца id.
Таким образом, для каждого товара запускается вложенный запрос, который выбирает заказы с этим товаром, сделанные каким-либо клиентом (то есть в столбце customer_id таблицы Orders должно быть значение, отличное от NULL). Если этот вложенный запрос выдал хотя бы одну строку (то есть заказ с такими параметрами существует), то условие отбора во внешнем запросе выполняется и текущая запись о товаре включается в результат, выводимый внешним запросом. В итоге мы получим следующий список товаров (табл. 3.21).
Таблица 3.21.Результат выполнения запросаДалее мы рассмотрим оператор NOT EXISTS.
Читать дальшеИнтервал:
Закладка: