Начнем с элементарных запросов. А как же без них? Самая лаконичная форма SQL запроса переводится как "Хочу получить все данные из этой таблицы". Результат следующего запроса – все записи со всеми полями из таблицы D_STAFF.
SELECT * FROM D_STAFF
Ввод SQL запроса в обучающей программе.
Выбираем [раздел SQL] в проводнике слева, нажимаем [кнопку SQL] над списком справа, вводим запрос и снова нажимаем [кнопку SQL]. После подтверждения выполнения запроса список справа будет выглядеть следующим образом. В случае все проще: просто вводите SQL запрос в соответствующем поле и жмите [Выполнить].
Результат выполнения простейшего SQL запроса.
Использовать (*) после оператора SELECT, безусловно, удобно, особенно если неизвестно, какие поля в таблице вообще есть, но и затратно – структуры, хранящие результат запроса расходуют достаточно много “лишней” памяти, да и время на выполнение самого запроса от этого только увеличивается. Следующий вариант куда как предпочтительней, если вам нужна информация только о Ф.И.О. сотрудника и его стаже. Перевод примерно такой: "Хочу знать только это и это обо всех из таблицы..."
SELECT S_NAME, S_EXPERIENCE FROM D_STAFF
Результат последнего SQL запроса занимает заметно меньше места "по ширине".
Выбор значений конкретных полей таблицы.
Простейшие запросы практически не применимы на практике, поскольку “вытаскивают” абсолютно все записи из указанной таблицы, а таковых может быть сотни тысяч. СУБД может просто отказаться выполнять такой запрос, да и оперативной памяти на машине клиента может элементарно не хватить. Что делать с результатами таких запросов, даже если они выполняются корректно, не всегда понятно, хотя, для некоторых пойдет. Для того чтобы наложить ограничения на отбор нужных вам записей, в SQL используется ключевое слово WHERE. Приведенный ниже запрос отбирает только сотрудников со стажем работы менее 5 лет.
SELECT S_NAME, S_EXPERIENCE FROM D_STAFF WHERE S_EXPERIENCE
Использование простого критерия
отбора записей.
Для чего нужны составные критерии отбора записей, объяснять, я думаю, не нужно. Для того же, для чего и запросы с простыми критериями. Условия объединяются с использованием логических операций конъюнкции и дизъюнкции (операторы “И” (AND) и “ИЛИ” (OR)), а группируются с помощью скобок. Следующий запрос вернет записи о сотрудниках со стажем менее 5 лет и с дополнительным ограничением на занимаемую ими должность.
SELECT S_NAME, S_EXPERIENCE, S_POSITION FROM D_STAFF WHERE (D_STAFF.S_POSITION 20) AND D_STAFF.S_EXPERIENCE
Использование сложного критерия
отбора записей.
Оператор BETWEEN упрощает синтаксис описания критериев, задающих интервал допустимых значений. Вместо приведенного ниже BETWEEN 3 AND 7 можно было бы написать D_STAFF.S_EXPERIENCE >=3 AND D_STAFF.S_EXPERIENCE <=7 . Первый вариант способствует наглядности запроса – это раз, поиск на стороне СУБД может выполняться по отдельному алгоритму, специально оптимизированному для подобного вида ограничений – это два.
SELECT S_NAME, S_EXPERIENCE, S_POSITION FROM D_STAFF WHERE (D_STAFF.S_POSITION 20) AND D_STAFF.S_EXPERIENCE BETWEEN 3 AND 7
Использование оператора BETWEEN.
Этот замечательный оператор позволяет накладывать ограничения на значения текстовых полей с использованием шаблонов. Синтаксис пояснять не буду, думаю, что из примера и так все ясно. Осуществляем поиск сотрудников, с Ф.И.О. начинающегося на “С” , в середине должно встречаться “Вал” и заканчиваться все должно на “ич” . В некоторых СУБД ключевое слово LIKE можно также использовать со значениями даты и времени.
SELECT S_NAME FROM D_STAFF WHERE S_NAME LIKE "С%" AND S_NAME LIKE "%Вал%" AND S_NAME LIKE "%ич"
SELECT S_NAME FROM D_STAFF WHERE S_NAME LIKE "С%Вал%ич"
Использование оператора LIKE.
Используемым в запросе именам таблиц и полей можно определить псевдонимы . Как это делается - продемонстрировано ниже. Зачем это делается – будет показано на следующих шагах, в том числе и на шаге 7, а этот пример иллюстрирует самое очевидно использование псевдонимов в SQL – оформление результата запроса в соответствии с требованиями к удобству восприятия его человеком. Для определения псевдонима таблицы или поля в SQL используется ключевое слово AS. Результат запроса (заголовок таблицы) в данном варианте выглядит более пригодно для того, чтобы на его основе сделать отчет.
SELECT S_NAME AS Сотрудник, S_EXPERIENCE AS [Опыт работы], S_POSITION AS Должность FROM D_STAFF AS STAFF
Применение псевдонимов таблиц и полей.
Этот пример завершает “первые шаги” изучения SQL запросов наиболее сложным из них. Здесь мы "программируем" выдачу списка сотрудников вместе с их непосредственным руководством. Сложность в том, что записи и о тех и других хранятся в одной и той же таблице, и здесь без псевдонимов не обойтись. СУБД, в ходе обработки запроса, будет обращаться к таблице D_STAFF, как будто к двум разным таблицам (под псевдонимами STAFF и CHIEF), с тем, чтобы объединить записи в единый кортеж на основе отношения “начальник - подчиненный”. Отношение моделируется следующим образом: значение поля S_CHIEF_ID у подчиненного соответствует значению поля XD_IID его начальника.
SELECT STAFF.S_NAME AS Подчиненный, STAFF.S_POSITION AS [Должность подчиненного], CHIEF.S_NAME AS Начальник, CHIEF.S_POSITION AS [Должность начальника] FROM D_STAFF AS STAFF, D_STAFF AS CHIEF WHERE STAFF.S_CHIEF_ID=CHIEF.XD_IID
Получение иерархии "начальник - подчиненный" с использованием в SQL запросе псевдонима таблицы.
Каждый веб-разработчик должен знать SQL, чтобы писать запросы к базам данных. И, хотя, phpMyAdmin никто не отменял, зачастую необходимо испачкать руки, чтобы написать низкоуровневый SQL.
Именно поэтому мы подготовили краткий экскурс по основам SQL. Начнем же!
Для создания таблиц предназначена инструкция CREATE TABLE . В качестве аргументов должно быть задано название столбцов, а также их типы данных.
Создадим простую таблицу по имени month . Она состоит из 3 колонок:
Вот как будет выглядеть соответствующий SQL запрос:
CREATE TABLE months (id int, name varchar(10), days int);
Также при создании таблиц целесообразно добавить первичный ключ для одной из колонок. Это позволит держать записи уникальными и ускорит запросы на выборку. Пусть в нашем случае уникальным будет название месяца (столбец name )
CREATE TABLE months (id int, name varchar(10), days int, PRIMARY KEY (name));
Тип данных | Описание |
---|---|
DATE | Значения даты |
DATETIME | Значения даты и времени с точностью до минты |
TIME | Значения времени |
Теперь давайте заполнять нашу таблицу months полезной информацией. Добавление записей в таблицу производится через инструкцию INSERT . Есть два способа записи этой инструкции.
Первый способ не указать имена столбцов, куда будут вставлены данные, а указать только значения.
Этот способ записи прост, но небезопасен, поскольку нет гарантии, что по мере расширения проекта и редактировании таблицы, столбцы будут располагаться в том же порядке, что и ранее. Безопасный (и в тоже время более громоздкий) способ записи инструкции INSERT требует указания как значений, так и порядка следования столбцов:
Здесь первое значение в списке VALUES соответствует первому указанному имени столбца и т.д.
Инструкция SELECT - наш лучший друг, когда мы хотим получить данные из базы данных. Она используется очень часто, так что отнеситесь к этому разделу очень внимательно.
Самый простое использование инструкции SELECT - запрос, который возвращает все столбцы и строки из таблицы (например, таблицы по имени characters ):
SELECT * FROM "characters"
Символ звездочка (*) означает, что мы хотим получить данные из всех столбцов. Так базы данных SQL обычно состоят из более чем одной таблицы, то требуется обязательно указывать ключевое слово FROM , следом за которым через пробел должно следовать название таблицы.
Иногда мы не хотим получить данные не из всех столбцов в таблице. Для этого, вместо звездочки (*) мы должны через запятую записать имена желаемых столбцов.
SELECT id, name FROM month
Кроме того, во многих случаях мы хотим, чтобы полученные результаты были отсортированы в определенном порядке. В SQL мы делаем это с помощью ORDER BY . Он может принимать опциональный модификатор – ASC (по-умолчанию) сортирующий по возрастанию или DESC , сортирующий по убыванию:
SELECT id, name FROM month ORDER BY name DESC
При использовании ORDER BY убедитесь, что оно будет последним в инструкции SELECT . В противном случае будет выдано сообщение об ошибке.
Вы узнали, как выбрать из базы данных с помощью SQL запроса строго определенные столбцы, но что если нам нужно получить еще и определенные строки? На помощь здесь приходит условие WHERE , позволяющее нам фильтровать данные в зависимости от условия.
В этом запросе мы выбираем только те месяцы из таблицы month , в которых больше 30 дней с помощью оператора больше (>).
SELECT id, name FROM month WHERE days > 30
Ранее мы использовали фильтрацию данных с использованием одного критерия. Для более сложной фильтрации данных можно использовать операторы AND и OR и операторов сравнения (=,<,>,<=,>=,<>).
Здесь мы имеем таблицу, содержащую четыре самых продаваемых альбомов всех времен. Давайте выберем те из них, которые классифицируются как рок и у которых менее 50 миллионов проданных копий. Это можно легко сделать путем размещения оператора AND между этими двумя условиями.
WHERE также поддерживает несколько специальных команд, позволяя быстро проверять наиболее часто используемые запросы. Вот они:
Например, если мы хотим выбрать альбомы с поп и соул музыкой, мы можем использовать IN("value1","value2") .
SELECT * FROM albums WHERE genre IN ("pop","soul");
Если мы хотим получить все альбомы, изданные между 1975 и 1985годами, мы должны записать:
SELECT * FROM albums WHERE released BETWEEN 1975 AND 1985;
SQL напичкан с функциями, которые делают разные полезные вещи. Вот некоторые из наиболее часто используемых:
Чтобы получить самый последний год в нашей таблице мы должны записать такой SQL запрос:
SELECT MAX(released) FROM albums;
В предыдущем пункте мы научились делать простые расчеты с данными. Если мы хотим использовать результат от этих расчетов, нам не обойтись без вложенных запросов. Допустим, мы хотим вывести artist , album и release year для старейшего альбома в таблице.
Мы знаем, как получить эти конкретные столбцы:
SELECT artist, album, released FROM albums;
Мы также знаем, как получить самый ранний год:
SELECT MIN(released) FROM album;
Все, что нужно сейчас, - это объединить два запроса с помощью WHERE:
SELECT artist,album,released FROM albums WHERE released = (SELECT MIN(released) FROM albums);
В более сложных базах данных существует несколько таблиц, связанных друг с другом. Например, ниже представлены две таблицы о видеоиграх (video_games ) и разработчиков видеоигр (game_developers ).
В таблице video_games есть колонка разработчик (developer_id ), но в ней содержится целое число, а не имя разработчика. Это число представляет собой идентификатор (id ) соответствующего разработчика из таблицы разработчиков игр (game_developers ), связывая логически два списка, что позволяет нам использовать информацию, хранящуюся в них обоих одновременно.
Если мы хотим создать запрос, который возвращает все, что нужно знать об играх, мы можем использовать INNER JOIN для связи колонок из обеих таблиц.
SELECT video_games.name, video_games.genre, game_developers.name, game_developers.country FROM video_games INNER JOIN game_developers ON video_games.developer_id = game_developers.id;
Это самый простой и наиболее распространенный тип JOIN . Есть несколько других вариантов, но они применимы к менее частым случаям.
Если вы посмотрите на предыдущий пример, то вы заметите, что существуют две колонки называемые name . Это сбивает с толку, так что давайте установим псевдоним одного из повторяющихся столбцов, например, name из таблицы game_developers будет называться developer .
Мы также можем сократить запрос задав псевдонимы имен таблиц: video_games назовем games , game_developers - devs :
SELECT games.name, games.genre, devs.name AS developer, devs.country FROM video_games AS games INNER JOIN game_developers AS devs ON games.developer_id = devs.id;
Часто мы должны изменить данные в некоторых строках. В SQL это делается с помощью инструкции UPDATE . Инструкция UPDATE состоит из:
Ниже приведена таблица tv_series с сериалами с их рейтингом. Однако, в таблицу закралась маленькая ошибка: хотя сериал Игра престолов и описывается как комедия, он на самом деле ей не является. Давайте исправим это!
Данные таблицы tv_series UPDATE tv_series SET genre = "драма" WHERE id = 2;Удаление строки таблицы с помощью SQL - это очень простой процесс. Все, что вам нужно, - это выбрать таблицу и строку, которую нужно удалить. Давайте удалим из предыдущего примера последнюю строку в таблице tv_series . Делается это с помощью инструкции >DELETE
DELETE FROM tv_series WHERE id = 4
Будьте осторожными при написании инструкции DELETE и убедитесь, что условие WHERE присутствует, иначе все строки таблицы будут удалены!
Если мы хотим, чтобы удалить все строки, но оставить саму таблицу, то воспользуйтесь командой TRUNCATE:
TRUNCATE TABLE table_name;
В случае, когда мы на самом деле хотим, чтобы удалить и данные, и саму таблицу, то нам пригодится команда DROP:
DROP TABLE table_name;
Будьте очень осторожны с этими командами. Их нельзя отменить!/p>
На этом мы завершаем наш учебник по SQL! Мы многое о чем не рассказали, но то, что вы уже знаете, должно быть достаточно, чтобы дать вам несколько практических навыков в вашей веб-карьере.
Запросы написаны без экранирующих кавычек, так как у MySQL , MS SQL и PostGree они разные.
Получаем список записей: ВСЕ страны и их население. Название нужных полей указываются через запятую.
SELECT * FROM table_name
* обозначает все поля. То есть, будут показы АБСОЛЮТНО ВСЕ поля данных.
Получаем список записей: страны, где находятся наши пользователи. Пользователей может быть много из одной страны. В этом случае это ваш запрос.
Получаем список записей: страны, где количество людей больше 100 000 000.
Получаем список записей: города в алфавитном порядке. В начале А, в конце Я.
SELECT id, city_title FROM table_name ORDER BY city_title DESC
Получаем список записей: города в обратном (DESC ) порядке. В начале Я, в конце А.
Получаем число (количество) записей в таблице. В данном случае НЕТ списка записей.
Получаем 2 (вторую) и 3 (третью) запись из таблицы. Запрос полезен при создании навигации на WEB страницах.
Вывод записей из таблицы по заданному условию с использованием логических операторов.
Получаем список записей: города из России И имеют доступ к нефти. Когда используется оператор AND , то должны совпадать оба условия.
Получаем список записей: все города из России ИЛИ США. Когда используется оператор OR , то должно совпадать ХОТЯ БЫ одно условие.
Получаем список записей: все пользователи из России И сделавших НЕ МЕНЬШЕ 7 комментариев.
Получаем список записей: все пользователи, которые проживают в (IN ) (России, или Болгарии, или Китая)
Получаем список записей: все пользователи, которые проживают не в (NOT IN ) (России или Китае).
Получаем список записей: все пользователи, где status не определен. NULL это отдельная тема и поэтому она проверяется отдельно.
SELECT id, user_login FROM table_name WHERE state IS NOT NULL
Получаем список записей: все пользователи, где status определен (НЕ НОЛЬ).
Получаем список записей: пользователи, у которых фамилия начинается с комбинации «Иван». Знак % означает ЛЮБОЕ количество ЛЮБЫХ символов. Чтобы найти знак % требуется использовать экранирование «Иван\%».
Получаем список записей: пользователи, которые получает зарплату от 25000 до 50000 включительно.
Логических операторов ОЧЕНЬ много, поэтому детально изучите документацию по SQL серверу.
Получаем список записей: пользователи, которые зарегистрированы в системе, а также те пользователи, которые зарегистрированы на форуме отдельно. Оператором UNION можно объединить несколько запросов. UNION действует как SELECT DISTINCT, то есть отбрасывает повторяющиеся значения. Чтобы получить абсолютно все записи, нужно использовать оператор UNION ALL.
Это самые популярные команды. Рекомендуется, где это возможно, использовать для подсчета именно SQL запросы такого рода, так как ни одна среда программирования не сравнится в скорости обработки данных, чем сам SQL сервер при обработке своих же данных.
Получаем список записей: с названием континента и с суммой площадей всех их стран. То есть, если есть справочник стран, где у каждой страны записана ее площадь, то с помощью конструкции GROUP BY можно узнать размер каждого континента (на основе группировки по континентам).
Получаем список записей: заказы от покупателей, которые проживают только в Тюмени.
На самом деле, при правильном запроектированной базе данных данного вида запрос является самым частым, поэтому в MySQL был введен специальный оператор, который работает в разы быстрее, чем выше написанный код.
SELECT o.order_no, o.amount_paid, z.company FROM orders AS o LEFT JOIN customer AS z ON (z.custno=o.custno)
Получаем одну запись: информацию о пользователе с максимальным окладом.
Внимание! Вложенные подзапросы являются одним из самых узких мест в SQL серверах. Совместно со своей гибкостью и мощностью, они также существенно увеличивают нагрузку на сервер. Что приводит к катастрофическому замедлению работы других пользователей. Очень часты случаи рекурсивных вызовов при вложенных запросах. Поэтому настоятельно рекомендую НЕ использовать вложенные запросы, а разбивать их на более мелкие. Либо использовать вышеописанную комбинацию LEFT JOIN. Помимо этого данного вида запросы являются повышенным очагом нарушения безопасности. Если решили использовать вложенные подзапросы, то проектировать их нужно очень внимательно и первоначальные запуски сделать на копиях баз (тестовые базы).
Инструкция INSERT позволяют вставлять записи в таблицу. Простыми словами, создать строчку с данными в таблице.
В таблицу «table_name » будет вставлено 2 (два) пользователя сразу.
В этом есть свои преимущества и недостатки.
В таблице «table_name » в записи с номером id=1, будет изменены значения полей user_login и user_surname на указанные значения.
В таблице table_name будет удалена запись с id номером 3.
Данный материал является короткой справкой для повседневной работы и не претендует на супер мега авторитетный источник, коим является первоисточник SQL запросов той или иной базы данных.
Продолжаем изучать возможности SQL Server от компании Microsoft и на очереди у нас компонент Full-Text Search , в русском варианте — это «Полнотекстовый поиск », и сейчас мы узнаем, для чего он нужен, и как же реализовать этот самый полнотекстовый поиск в SQL сервере, используя этот компонент.
И начнем мы, конечно же, с рассмотрения основ полнотекстового поиска, т.е. что это такое и для чего он вообще нужен.
Полнотекстовый поиск – это поиск слов или фраз в текстовых данных. Обычно такой вид поиска используется для поиска текста в большом объёме данных, например, таблица с миллионом и более строк, так как он значительно быстрей обычного поиска, который можно осуществить, используя конструкцию LIKE.
Полнотекстовый поиск подразумевает создание специального индекса (он отличается от обычных индексов ) текстовых данных, который представляет собой некий словарь слов, которые встречаются в этих данных.
С помощью полнотекстового поиска можно реализовать своего рода поисковую систему документов (т.е. строк ), по словам или фразам в базе данных своего предприятия. Так как помимо своей быстрой работы он обладает еще и возможностью ранжировать найденные документы, т.е. выставлять ранг каждой найденной строке, другими словами, можно найти самые релевантные записи, т.е. самые подходящие под Ваш запрос.
Перед тем как приступать к созданию полнотекстового поиска, необходимо знать несколько важных моментов:
Примечание! Реализовывать полнотекстовый поиск я буду на примере версии SQL Server 2008 R2. Также подразумевается, что компонент Full-Text Search у Вас уже установлен, если нет, то установите его путем добавления соответствующего компонента через «Центр установки SQL Server», т.е. поставьте соответствующую галочку.
В примерах ниже в качестве инструмента создания и управления полнотекстовыми каталогами и индексами я буду использовать SQL Server Management Studio.
Допустим, что у нас есть база данных TestBase, а в ней есть таблица TestTable, в которой всего два поля, первое (id) — это первичный ключ, а второе (textdata) — это текстовые данные, по которым мы и будем осуществлять полнотекстовый поиск.
CREATE TABLE TestTable(id int IDENTITY(1,1) NOT NULL, textdata varchar(500) NULL, CONSTRAINT PK_TestTable PRIMARY KEY CLUSTERED (id ASC))
Для примера она будет содержать следующие данные
Для создания полнотекстового каталога как впрочем, и индекса можно использовать или графический интерфейс SSMS, или инструкций T-SQL , мы с Вами разберем оба способа.
Создание полнотекстового каталога на T-SQL
CREATE FULLTEXT CATALOG TestCatalog WITH ACCENT_SENSITIVITY = ON AS DEFAULT AUTHORIZATION dbo GO
Создание полнотекстового каталога в графическом интерфейсе Management Studio
Точно такой же полнотекстовый каталог можно создать и в графическом интерфейсе Management Studio. Для этого открываем базу данных, переходим в папку Хранилище ->Полнотекстовые каталоги , щелкаем правой кнопкой мыши по данному пункту и выбираем «Создать полнотекстовый каталог ».
Откроется окно создания каталога, где мы указываем название каталога и его опции.
Для изменения опций каталога можно использовать инструкцию ALTER FULLTEXT CATALOG, например, давайте сделаем так, чтобы наш каталог перестал учитывать диакритические знаки, для этого пишем SQL инструкцию, которая перестроит наш каталог с новой опцией.
ALTER FULLTEXT CATALOG TestCatalog REBUILD WITH ACCENT_SENSITIVITY=OFF GO
Для того чтобы удалить каталог можно использовать инструкцию T-SQL, например
DROP FULLTEXT CATALOG TestCatalog
Все это можно было сделать и в графическом интерфейсе Management Studio (для изменения параметров каталога «Свойства», для удаления «Удалить» )
После создания полнотекстового каталога можно начинать создавать в нем полнотекстовые индекса. В нашем случае мы хотим создать полнотекстовый индекс, в котором участвует поле textdata таблицы TestTable.
Создание полнотекстового индекса на T-SQL
Для того чтобы создать полнотекстовый индекс можно написать следующую SQL инструкцию
CREATE FULLTEXT INDEX ON TestTable(textdata) KEY INDEX PK_TestTable ON (TestCatalog) WITH (CHANGE_TRACKING AUTO) GO
Создание полнотекстового индекса в графическом интерфейсе Management Studio
Полнотекстовый индекс можно создать, используя и графические инструменты, для этого открываем свойства полнотекстового каталога и переходим в пункт «Таблицы или представления », выбираем нужную таблицу, поле, уникальный индекс и способ отслеживания изменений. В нашем случае у нас всего одна доступная таблица и одно поле.
В случае необходимости можно изменить параметры полнотекстового индекса. Давайте в качестве примера, изменим способ отслеживания изменений с автоматического на ручной. Для изменения в графическом интерфейсе можно использовать окно «Свойства полнотекстового каталога -> Таблицы или представления », которое мы использовали при создании полнотекстового индекса.
Или можно написать следующий код
ALTER FULLTEXT INDEX ON TestTable SET CHANGE_TRACKING = MANUAL
Для того чтобы удалить полнотекстовый индекс достаточно просто удалить таблицу из списка объектов связанных с полнотекстовым каталогом в том же окне «Свойства полнотекстового каталога -> Таблицы или представления »
Или написать код T-SQL
DROP FULLTEXT INDEX ON TestTable
Как я уже упоминал ранее полнотекстовый каталог и индекс можно создать, используя мастер, т.е. по шагам, для этого щелкаем правой кнопкой мыши по таблице, которую мы хотим включить в полнотекстовый поиск, и выбираем «Полнотекстовый индекс ->Определить полнотекстовый индекс ».
Примечание! Перед этим я удалил и каталог, и индекс, которые мы создавали в предыдущих примерах.
В итоге запустится мастер полнотекстового индексирования SQL Server.
Затем столбец, который будет включен в полнотекстовый индекс.
Потом необходимо выбрать способ отслеживания изменений.
Указываем название каталога и его опции, для того чтобы его создать, так как предполагается, что у нас каталога нет, если бы он был, то мы могли бы его выбрать.
Здесь мы можем настроить расписание заполнения полнотекстового каталога.
Для создания каталога и индекса осталось нажать «Готово ».
В следующем окне мы увидим результат выполнения операций по созданию полнотекстового каталога и индекса. В моем случае все прошло успешно.
Таким образом, мы выполнили создание полнотекстового каталога и индекса одновременно с помощью мастера.
Сразу скажу, что более подробно полнотекстовые запросы мы будем рассматривать в следующих материалах, а пока, в качестве примера и подтверждения того, что наш полнотекстовый поиск работает, давайте напишем пару простых полнотекстовых запросов.
Если помните, наша таблица TestTable содержит определения технологий, языков программирования, в общем, определений связанных со сферой IT. Допустим, что мы хотим получить все записи, где есть упоминание о компании Microsoft, для этого мы пишем полнотекстовый запрос с ключевым словом CONTAINS, например:
SELECT * FROM TestTable WHERE CONTAINS (textdata, ""Microsoft"")
Мы получили результат, но допустим, нам также необходимо отсортировать его по релевантности, другими словами, какие строки больше соответствуют нашему запросу. Для этого мы будем использовать функцию CONTAINSTABLE, которая проставляет ранг для каждой найденной записи.
SELECT Table1.id AS ID, RowRank.Rank as , Table1.textdata as FROM TestTable Table1 INNER JOIN CONTAINSTABLE(TestTable, textdata, ""Microsoft"") as RowRank on Table1.id=RowRank. ORDER BY RowRank.RANK DESC
Как видим, ранг проставлен и по нему отсортированы строки. Сам алгоритм ранжирования, как и более подробную информацию о полнотекстовом поиске можно найти в электронной документации по SQL Server.
На этом предлагаю заканчивать, надеюсь, все было понятно, удачи!