При написании запросов к SQL-базе часто бывает удобно работать с полнотекстовыми запросами не как с предикатами в секции WHERE, а как с таблицами, и использовать характерные для таблиц операции, такие как связывание, упорядочивание или группирование. Для решения этой задачи в язык Microsoft Transact-SQL введены две функции CONTAINSTABLE и FREETEXTTABLE.
Результатом выполнения функций CONTAINSTABLE и FREETEXTTABLE являются таблицы. В зависимости от результатов поиска, эти таблицы могут содержать одну или несколько строк. А если подходящей информации найдено не было, то результирующие таблицы оказываются пустыми. Записи в этих таблицах состоят из двух полей. Первое поле называется KEY
и является уникальным ключом в таблице, по которой производится поиск. Второе поле является числовым, называется RANK
и имеет смысл степени соответствия найденной записи поисковому запросу. Такую степень соответствия часто называют рейтингом
или рангом найденной записи. В Microsoft SQL Server рейтинг варьируется от 0 (минимальная степень) до 1000 (максимальная степень соответствия запросу).
Теперь о параметрах этих функций. И CONTAINSTABLE, и FREETEXTTABLE имеют по три параметра. Первый параметр — это имя таблицы, по которой производится поиск. Второй параметр — это список полей, по которым ведется поиск, а третий — текст запроса. Синтаксис второго и третьего параметра в точности соответствует синтаксису соответствующих параметров предикатов CONTAINS или FREETEXT, которые подробно были рассмотрены выше.
Функции CONTAINSTABLE и FREETEXTTABLE редко используют самостоятельно. Чаще всего эти функции входят в состав запросов поиска по соответствующим таблицам. Приведем примеры использования этих функций.
Выше мы рассматривали взвешенный запрос поиска информации о курсе доллара и немецкой марки. Вот как выглядит оператор поиска этой информации с использованием функции CONTAINSTABLE:
SELECT Q.RANK, A.Header
FROM Articles AS A,
CONTAINSTABLE(Articles, Header ,'ISABOUT( "курс*",
RANK |
Header |
258 |
На валютных торгах на ММВБ объявлен технических перерыв при промежуточном курсе 8,253 рублей за 1 доллар США. |
258 |
Е. Гайдар считает реальным курс15 рублей за доллар. |
242 |
Снижение курса акций на Нью-йоркской фондовой бирже привело к значительному падению курса доллара относительно иены. |
242 |
Значительные колебания курса американского доллара в последние дни и наблюдавшаяся тенденция к снижению его курса не связаны с изменением ситуации в Японии. |
238 |
Падение курса рубля привело к снижению курса немецкой марки. |
187 |
Курс немецкой марки к доллару США на американских рынках падает из-за финансового кризиса в России, считает руководитель экономического отдела компании "Bear Sterns International". |
187 |
Утром 2 ноября на торгах в Европе вырос курс йены по отношению к доллару и немецкой марке. |
184 |
Центробанк России установил предел отклонения курса покупки от курса продажи наличной иностранной валюты в размере 15%. |
173 |
ММВБ отказалась от установления единого расчетного курса гривны к доллару США. |
RANK |
Header |
152 |
Комиссия по рынку ценных бумаг Латвии приостановила действие лицензии, выданной Rietumu banka на посреднические операции на рынке ценных бумаг. |
138 |
Правительство не в состоянии обеспечить доходность государственных ценных бумаг на фондовом рынке. |
123 |
Американский фондовый рынок не утратил интерес к российским ценным бумагам. |
118 |
Закон о налогообложении операций с ценными бумагами должен разрабатываться совместно с участниками фондового рынка. |
114 |
Перемены в правительстве России положительно отразились на результатах торгов российскими ценными бумагами на фондовом рынке США. |
114 |
Вторничные торги на ММВБ не оказали существенного влияния на результаты торгов российскими ценными бумагами на фондовом рынке США. |
114 |
Объемы сделок по российским ценным бумагам на фондовом рынке США продолжают расти. |
114 |
Объемы сделок по российским ценным бумагам на фондовом рынке США уменьшились, но остаются довольно высокими. |
114 |
На внебиржевом рынке США цены на российские ценные бумаги упали. |