Запрос с полнотекстовым поиском — SQL Server
- Статья
- Чтение занимает 12 мин
Область применения: SQL Server (все поддерживаемые версии) База данных SQL Azure Управляемый экземпляр SQL Azure
Пишите полнотекстовые запросы с помощью предикатов CONTAINS и FREETEXT и функций CONTAINSTABLE и FREETEXTTABLE, возвращающих наборы строк, с инструкцией SELECT. В этой статье приведены примеры предикатов и функций, из которых вы сможете выбрать самые подходящие.
- Для сопоставления слов и фраз используйте функции CONTAINS
- Для поиска совпадений по смыслу, а не буквального совпадения, используйте функции FREETEXT и FREETEXTTABLE.
Примеры предикатов и функций
Ниже приводятся примеры базы данных AdventureWorks. Окончательный выпуск AdventureWorks см. в разделе Базы данных и сценарии AdventureWorks для SQL Server 2016 CTP3. Чтобы запустить примеры запросов, нужно также настроить полнотекстовый поиск. Дополнительные сведения см. в разделе Начало работы с полнотекстовым поиском.
Пример CONTAINS
В следующем примере выполняется поиск всех продуктов с ценой $80.99
, которые содержат слово "Mountain"
:
USE AdventureWorks2012 GO SELECT Name, ListPrice FROM Production.Product WHERE ListPrice = 80.99 AND CONTAINS(Name, 'Mountain') GO
Пример FREETEXT
В следующем примере выполняется поиск всех документов, содержащих слова, связанные с vital safety components
:
USE AdventureWorks2012 GO SELECT Title FROM Production. Document WHERE FREETEXT (Document, 'vital safety components') GO
Пример CONTAINSTABLE
В следующем примере возвращается идентификатор описания и описание всех продуктов, для которых столбец Description содержит слово «алюминиевая» рядом с словом «light» или словом «упрощенный». Возвращаются только строки с рангом 2 или выше.
USE AdventureWorks2012 GO SELECT FT_TBL.ProductDescriptionID, FT_TBL.Description, KEY_TBL.RANK FROM Production.ProductDescription AS FT_TBL INNER JOIN CONTAINSTABLE (Production.ProductDescription, Description, '(light NEAR aluminum) OR (lightweight NEAR aluminum)' ) AS KEY_TBL ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY] WHERE KEY_TBL.RANK > 2 ORDER BY KEY_TBL.RANK DESC; GO
Пример FREETEXTTABLE
В следующем примере запрос FREETEXTTABLE расширяется таким образом, чтобы он возвратил первыми строки с самыми высокими ранжирующими значениями и добавил ранг каждой строки к списку выбора. Чтобы написать аналогичный запрос, необходимо знать, что столбец
USE AdventureWorks2012 GO SELECT KEY_TBL.RANK, FT_TBL.Description FROM Production.ProductDescription AS FT_TBL INNER JOIN FREETEXTTABLE(Production.ProductDescription, Description, 'perfect all-around bike') AS KEY_TBL ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY] ORDER BY KEY_TBL.RANK DESC GO
Ниже приведено расширение того же запроса, которое возвращает только строки с рангом 10 или выше.
USE AdventureWorks2012 GO SELECT KEY_TBL.RANK, FT_TBL.Description FROM Production.ProductDescription AS FT_TBL INNER JOIN FREETEXTTABLE(Production.ProductDescription, Description, 'perfect all-around bike') AS KEY_TBL ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY] WHERE KEY_TBL. RANK >= 10 ORDER BY KEY_TBL.RANK DESC GO
Сопоставление слов или смысла
CONTAINS
/CONTAINSTABLE
и FREETEXT
/FREETEXTTABLE
полезны для различных типов сопоставления. Следующая информация поможет выбрать самый подходящий предикат или функцию для запроса:
CONTAINS/CONTAINSTABLE
- Поиск точных и неточных соответствий отдельных слов и фраз.
- Вы сможете также делать следующее:
- указывать уровень сходства похожих слов;
- возвращать взвешенные совпадения;
- объединять условия поиска с логическими операторами. Дополнительные сведения см. в разделе Использование логических операторов (AND, OR и NOT) далее в этой статье.
FREETEXT/FREETEXTTABLE
- Поиск совпадений по смыслу, а не по буквальному совпадению задаваемых слов, фраз или предложений (текст в свободной форме).
- Соответствие регистрируется, если в полнотекстовом индексе указанного столбца найден любой из терминов в любой форме.
Сравнение предикатов и функций
Синтаксис и параметры предикатов CONTAINS
/FREETEXT
, а также функций, возвращающих наборы строк, CONTAINSTABLE
/FREETEXTTABLE
отличаются. Следующая информация поможет выбрать самый подходящий предикат или функцию для запроса:
Предикаты CONTAINS и FREETEXT
Использование. Полнотекстовые предикаты CONTAINS и FREETEXT используются в предложении WHERE или HAVING инструкции SELECT.
Результаты. Предикаты CONTAINS и FREETEXT возвращают значение TRUE или FALSE, которое указывает, соответствует ли данная строка полнотекстовому запросу. Совпадающие строки возвращаются в результирующем наборе.
Дополнительные параметры. Вы можете объединить предикаты с любым из других предикатов Transact-SQL, таких как LIKE и BETWEEN.
Вы можете указать, следует ли искать один столбец, список столбцов или все столбцы в таблице.
Вы также можете указать язык, ресурсы на котором используются данным полнотекстовым запросом для разбиения на слова и выделения корней, поиска в тезаурусе и удаления пропускаемых слов.
Четырехкомпонентное имя может использоваться в предикате CONTAINS или FREETEXT для запроса по столбцам полнотекстового индекса целевых таблиц на связанном сервере. Чтобы подготовить удаленный сервер к приему полнотекстовых запросов, сначала необходимо создать полнотекстовые индексы для целевых таблиц и столбцов на удаленном сервере, а затем добавить удаленный сервер в качестве связанного сервера.
Дополнительные сведения. Дополнительные сведения о синтаксисе и аргументах этих предикатов см. в статьях о CONTAINS и FREETEXT.
Функции со значениями набора строк CONTAINSTABLE и FREETEXTTABLE
Использование
Вам нужно указать базовую таблицу для поиска при использовании любой из этих функций. Как и для предикатов, в таблице, где выполняется поиск, можно задавать один столбец, список столбцов или все столбцы, а также при необходимости язык, ресурсы которого будут использоваться данным полнотекстовым запросом.
Обычно результат функций CONTAINSTABLE или FREETEXTTABLE необходимо соединять с базовой таблицей. Для присоединения таблиц необходимо знать уникальное имя ключевого столбца. Этот столбец, имеющийся в каждой таблице с поддержкой полнотекстового поиска, используется для принудительного применения уникальных строк в таблице (уникальный**ключевой столбец). Дополнительные сведения о ключевом столбце см. в статье Создание полнотекстовых индексов и управление ими.
Результаты. Эти функции возвращают пустую таблицу, либо таблицу с одной или несколькими строками, соответствующими полнотекстовому запросу. Возвращаемая таблица содержит только строки базовой таблицы, которые соответствуют критерию выбора, задаваемому в условии полнотекстового поиска функции.
Запросы, использующие одну из этих функций, также возвращают ранжирующие по релевантности значения (RANK) и полнотекстовый ключ (KEY) для каждой строки:
- Столбец KEY. Столбец KEY возвращает уникальные значения возвращаемых строк. С помощью столбца KEY можно задавать критерии выбора.
- Столбец RANK. Столбец RANK содержит ранжирующее значение для каждой строки, указывающее степень соответствия этой строки критериям выбора. Чем выше ранжирующее значение текста или документа в строке, тем больше она релевантна данному полнотекстовому запросу. Разные строки могут ранжироваться одинаково. Можно ограничить число возвращаемых совпадений. Для этого нужно задать необязательный параметр
top_n_by_rank . Дополнительные сведения см. в разделе Ограничение количества результатов поиска с использованием функции RANK.
Дополнительные сведения. Дополнительные сведения о синтаксисе и аргументах этих функций см. в статьях о CONTAINSTABLE и FREETEXTTABLE.
Определенные типы поиска
Поиск конкретного слова или фразы (простое выражение)
Для поиска конкретного слова или фразы в таблице можно использовать запросы CONTAINS, CONTAINSTABLE, FREETEXT или FREETEXTTABLE. Например, для поиска в таблице ProductReview базы данных AdventureWorks2019
всех комментариев о продукции, содержащих фразу «learning curve», можно использовать предикат CONTAINS следующим образом:
USE AdventureWorks2012 GO SELECT Comments FROM Production.ProductReview WHERE CONTAINS(Comments, '"learning curve"') GO
Условие поиска (в этом случае «learning curve») может быть сложным и включать одно выражение или несколько.
Дополнительные сведения о простых условиях поиска
В полнотекстовом поиске слово (или токен) представляет собой строку, границы которой определяются соответствующими словами согласно лингвистическим правилам указанного языка. Допустимая фраза состоит из нескольких слов со знаками препинания между ними или без них.
Например, «круассан» — это слово, а «кофе с молоком» — фраза. Такие слова и фразы называются простыми выражениями.
ФункцииCONTAINS и CONTAINSTABLE выполняют поиск точного соответствия для фразы. ФункцииFREETEXT и FREETEXTTABLE разбивают фразу на отдельные слова.
Поиск слова по префиксу (префиксное выражение)
Для поиска слов и фраз с указанным префиксом можно использовать функции CONTAINS или CONTAINSTABLE . Будут возвращены все записи в столбце, содержащие текст, который начинается с заданного префикса. Например, чтобы найти все строки, содержащие префикс top
-, как в top``ple
, top``ping
и top
. Запрос выглядит следующим образом:
USE AdventureWorks2012 GO SELECT Description, ProductDescriptionID FROM Production.ProductDescription WHERE CONTAINS (Description, '"top*"' ) GO
При выполнении этого запроса будут возвращены все фрагменты текста, соответствующие тексту, указанному перед звездочкой (*).
CONTAINS (DESCRIPTION, 'top*')
), звездочка не считается символом-шаблоном.Если префиксный терм является фразой, каждый токен, составляющий фразу, считается отдельным префиксным термом. При выполнении такого запроса будут возвращены все строки со словами, начинающимися на префиксные термы. Например, если запрос включает префиксное выражение «белый хлеб*», будут возвращены строки с текстом «белый хлебец», «белый хлебный» и «белый хлеб», но не «белый поджаренный хлеб».
Дополнительные сведения о поиске префиксов
Для создания производного слова или словоформ префиксное выражение обращается к строке, прикрепленной к началу слова.
Для единственного префиксного выражения частью результирующего набора будет любое слово, начинающееся с указанного выражения. Например, для префиксного выражения «авто *» совпадениями будут «автоматический», «автомобиль» и т. д.
Внутри фразы каждое слово считается префиксным выражением. Например, термин «auto tran*» соответствует «автоматическая передача» и «автомобильный трансдукатор», но не соответствует «автоматической передачи двигателя».
Поиск префиксов поддерживается CONTAINS и CONTAINSTABLE.
Поиск словоформ конкретного слова (производное выражение)
С помощью функций CONTAINS, CONTAINSTABLE, FREETEXTили FREETEXTTABLE можно найти все грамматические формы глаголов и существительных (поиск словоформ) или синонимы указанного слова (поиск по тезаурусу).
В следующем примере выполняется поиск любых форм слова «foot» («foot», «feet» и т. д.) в столбце Comments
таблицы ProductReview
в базе данных AdventureWorks
.
USE AdventureWorks2012 GO SELECT Comments, ReviewerName FROM Production.ProductReview WHERE CONTAINS (Comments, 'FORMSOF(INFLECTIONAL, "foot")') GO
В полнотекстовом поиске используются парадигматические модули, которые позволяют найти глагол в различных временах и лицах или существительное в формах единственного или множественного числа. Дополнительные сведения о парадигматических модулях см. в разделе Настройка и управление средством разбиения на слова и парадигматические модули для поиска.
Дополнительные сведения о создании условий поиска
Словоформы — это глаголы в различных временах и лицах или существительные в формах единственного или множественного числа.
Например, найдите инлекционную форму слова «диск». Если различные строки в таблице содержат слова «диск», «диски», «поехали», «вождение» и «управляемый», все они будут находиться в результирующем наборе, так как каждый из них может быть перегибом из диска слов.
ЗапросыFREETEXT и FREETEXTTABLE по умолчанию ищут словоформы всех указанных слов. Запросы CONTAINS и CONTAINSTABLE поддерживают необязательный аргумент INFLECTIONAL
.
Поиск синонимов конкретного слова
В тезаурусе определяются пользовательские синонимы терминов. Дополнительные сведения о файлах тезауруса см. в статье Настройка файлов тезауруса для полнотекстового поиска и управление ими.
Например, если запись «{автомобиль, автомобиль, грузовик, ван}», добавляется в тезаурус, можно найти форму тезауруса слова «автомобиль». Все строки в таблице, запрашиваемые, включая слова «автомобиль», «грузовик», «ван» или «автомобиль», отображаются в результирующем наборе, поскольку каждое из этих слов относится к набору расширения синонимов, содержащего слово «автомобиль».
По умолчанию тезаурус используется в запросахFREETEXT и FREETEXTTABLE . Запросы CONTAINS и CONTAINSTABLE поддерживают необязательный аргумент THESAURUS
.
Поиск слова ОКОЛО другого слова
Выражение с учетом расположения означает слова или фразы, которые находятся рядом друг с другом. Также можно указать максимальное количество слов, которые не включаются в поиск и разделяют первое и последнее из искомых слов. Кроме того, можно искать два слова или две фразы в любом порядке или в порядке, в котором они указаны.
Примером может служить поиск строк, в которых слово «лед» находится рядом со словом «хоккей» или фраза «хоккей на льду» — рядом с фразой «катание на коньках».
CONTAINS и CONTAINSTABLE
Дополнительные сведения о поиске похожих слов см. в разделе Поиск слов близких к другим с использованием оператора NEAR.
Поиск слов или фраз с использованием взвешенных величин (взвешенное выражение)
Для поиска слов и фраз можно использовать функцию CONTAINSTABLE с взвешенными значениями. Вес, измеряемый числом от 0,0 до 1,0, обозначает степень важности каждого слова и фразы в наборе слов или фраз. Значение веса 0,0 является самым низким, значение 1,0 — самым высоким.
В следующем примере показан запрос, выполняющий поиск всех адресов клиентов с использованием весовых коэффициентов, в которых любой текст, начинающийся со строки «Bay», имеет значение «Street» или «View». Результаты дают более высокий ранг тем строкам, которые содержат больше указанных слов.
USE AdventureWorks2012 GO SELECT AddressLine1, KEY_TBL.RANK FROM Person.Address AS Address INNER JOIN CONTAINSTABLE(Person.Address, AddressLine1, 'ISABOUT ("Bay*", Street WEIGHT(0. 9), View WEIGHT(0.1) ) ' ) AS KEY_TBL ON Address.AddressID = KEY_TBL.[KEY] ORDER BY KEY_TBL.RANK DESC GO
Взвешенное выражение можно использовать в сочетании с любым простым выражением, префиксным выражением, производным выражением или выражением с учетом расположения.
Дополнительные сведения о взвешенных условиях поиска
Во взвешенных условиях поиска взвешенное значение показывает уровень важности каждого слова и фразы в наборе слов и фраз. Значение веса 0,0 является самым низким, значение 1,0 — самым высоким.
Например, в запросе для поиска нескольких выражений можно задать вес для каждого искомого слова, обозначающий его значимость по сравнению с другими словами в условии поиска. Результат выполнения такого типа запроса будет в начале содержать наиболее релевантные строки, исходя из соответствующего веса, присвоенного искомым словам. В результирующих наборах содержатся документы или строки с любыми из указанных выражений (или содержимым, которое находится между ними), однако некоторые из результатов будут считаться важнее остальных ввиду разницы во взвешенных значениях, связанных с различными выражениями, по которым выполнялся поиск.
Поиск взвешенных условий поиска поддерживается CONTAINSTABLE.
Использование операторов AND, OR и NOT (логические операторы)
Функция CONTAINSTABLE и предикат CONTAINS используют одинаковые условия поиска. Они поддерживают объединение нескольких искомых терминов (с помощью логических операторов AND, OR и NOT) для выполнения логических операций. Вы можете использовать AND, например, для поиска строк, содержащих как латте, так и «бублик в стиле Нью-Йорка». Вы можете использовать AND NOT, например, чтобы найти строки, содержащие «бублок», но не содержат «сливочный сыр».
Предикаты FREETEXT и FREETEXTTABLE, напротив, обрабатывают логические термины как слова, которые следует искать.
Сведения об объединении CONTAINS с другими предикатами, которые используют логические операторы AND, OR и NOT, см. в разделе «Условие поиска» (Transact-SQL).
Пример
В следующем примере используется предикат CONTAINS для поиска описаний, в которых идентификатор описания не равен 5, а описание содержит слово «Алюминия» и слово «spindle». Условие поиска использует логический оператор AND. В следующем примере используется таблица ProductDescription базы данных AdventureWorks2019
.
USE AdventureWorks2012 GO SELECT Description FROM Production.ProductDescription WHERE ProductDescriptionID <> 5 AND CONTAINS(Description, 'aluminum AND spindle') GO
Регистр, стоп-слова, язык и тезаурус
При написании полнотекстовых запросов можно также указать следующие параметры.
Учет регистра букв. В запросах полнотекстового поиска не учитывается регистр букв. Однако в японском языке есть несколько фонетических орфографий, в которых концепция орфографической нормализации аналогична нечувствительности к регистру (например, японская азбука = нечувствительность). Этот тип орфографической нормализации не поддерживается.
Стоп-слова. При определении полнотекстового запроса следует иметь в виду, что средство полнотекстового поиска не учитывает стоп-слова (также известные как пропускаемые слова), указанные в критерии поиска. Стоп-слова — это часто встречающиеся слова, которые не повышают эффективность поиска конкретного текста. Примерами могут служить слова «и», «или», «о» и «в». Стоп-слова перечислены в списке стоп-слов. Каждый полнотекстовый индекс связан с конкретным списком стоп-слов, который определяет, какие стоп-слова не указываются в запросе или в индексе во время индексирования. Дополнительные сведения см. в статье Настройка стоп -слов и списков стоп-слов для полнотекстового поиска и управление ими.
Язык с помощью параметра LANGUAGE. Многие выражения запроса в значительной степени зависят от поведения средства разбиения по словам. Чтобы гарантировать использование правильного средства разбиения по словам (и парадигматического модуля) и файла тезауруса, рекомендуется указывать параметр LANGUAGE. Дополнительные сведения см. в разделе Выбор языка при создании полнотекстового индекса.
Тезаурус. По умолчанию тезаурус используется в запросах FREETEXT и FREETEXTTABLE. Предикат CONTAINS и функция CONTAINSTABLE поддерживают необязательный аргумент THESAURUS. Дополнительные сведения см. в статье Настройка файлов тезауруса для полнотекстового поиска и управление ими.
Проверка результатов разметки
После применения сочетания заданного средства разбивки текста на слова, тезауруса и списка стоп-слов в запросе итоговый результат разметки полнотекстового поиска можно просмотреть с помощью динамического административного представления sys.dm_fts_parser. Дополнительные сведения см. в разделе sys.dm_fts_parser (Transact-SQL).
См. также
CONTAINS (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
FREETEXT (Transact-SQL)
FREETEXTTABLE (Transact-SQL)
Создание запросов полнотекстового поиска (визуальные инструменты для баз данных)
Улучшение производительности полнотекстовых запросов
Автоматизация выполнения запросов в SQL с помощью Python — Разработка на vc.ru
Основная идея работы скрипта – генерация запросов с учетом различных параметров и последовательное их выполнение для вставки данных в существующую таблицу или выгрузка данных в файл. Сама программа состоит из 3 частей:
2580 просмотров
- Соединение c базой данных.
- Определение варьируемых параметров.
- Выполнение запросов к базе (структура построения запросов позволяет выполнять запросы последовательно или параллельно, что позволяет управлять скоростью загрузки/выгрузки данных с сервера).
Соединение с БД определяется фабрикой, в которой содержатся параметры соединения с определенным сервером и определены ссылки на классы для работы с БД.
db = DatabaseFactory().build(‘*наименование сервера*’)
Сами объекты для работы с БД содержат 3 метода:
- collect– запускает запрос с помощью метода read_sql библиотеки pandas и возвращает DataFrame, содержащий результат выполненного запроса;
- execute– запускает запросы типа CREATE, UPDATE, DELETE\TRUNCATE\DROP;
- execute_many – используется в основном для загрузки данных внутрь БД. Сама загрузка производится с помощью BULK вставки.
db.collect(‘select top 100 * from table’) db.execute(‘insert into table select * from another_table’) db. execute_many (‘insert into from table (id, name, age) values (?,?,?)’, [1,’Jhon’, 25])
Далее пользователь может задать параметры запроса с помощью метода add_var класса SqlContext. Данный метод принимает 4 параметра: наименование колонки, значения данной переменной, условие (=, <=, >=, between и т.п.) и разделитель (под разделителем понимаются команды AND и OR).
context = SqlContext() context.add_var(‘col_name’, [1,2,3,4,5], separator=’AND’, condition=’=’) context.add_var(‘col_name_1’, [[‘a’,’b’,’v’], [‘a1’,’b2’,’v3’],] , separator=’AND’, condition=’in’)
В случае определения нескольких параметров одновременно, в запросе они будут варьироваться по следующему правилу: сначала варьируются те параметры, которые были заданы в последнюю очередь. Если все вариации последнего параметра будут пройдены, то берутся следующее значения параметра выше и вновь перебираются все вариации последнего параметра. Так продолжается до тех пор, пока не переберутся все возможные комбинации заданных параметров.
После того, как мы определили варьируемые параметры необходимо задать сам sql запрос. Для этого создаем объект SqlBuilder и вызываем метод custom_sql внутрь которого помещаем сам запрос:
builder = SqlBuilder() builder.custom_sql(»’ INSERT INTO insertable_table SELECT * FROM table WHERE 1=1 AND col1 in (1, 2,10,98,34) AND col2 = 9 AND col3 between ‘20200101’ and ‘20200201’ »’)
или можно воспользоваться встроенными в объект методами для генерации sql (select, insert_into, create_table и т.д.):
builder = SqlBuilder() builder.select([‘col1’, ‘col2’, ‘col3’]).from(‘table’)
Для запуска скрипта необходимо создать объект класса SqlGenerator, объекты SqlBuilder и SqlContext и с помощью цикла запустить обработку запроса (в качестве примера был взят вариант последовательного исполнения запроса):
generator = SqlGenerator(builder, context) for sql in tqdm(generator. generate()): t = time.time() db.execute(sql) print(‘Итоговое время работы запроса: ‘ + str(time.time()-t))
В итоге данный скрипт позволяет значительно сократить трудозатраты и время на выполнение рутинных запросов, чем я неоднократно пользовался в своей работе.
Весь исходный код опубликован на github.
запросов — SQL Server | Microsoft Узнайте
Редактировать
Твиттер LinkedIn Фейсбук Эл. адрес
- Статья
- 2 минуты на чтение
Применимо к: SQL Server (все поддерживаемые версии) База данных SQL Azure Управляемый экземпляр Azure SQL Аналитика синапсов Azure Система аналитической платформы (PDW)
Язык манипулирования данными (DML) — это словарь, используемый для извлечения и работы с данными в SQL Server и базе данных SQL. Большинство из них также работают в [!INCLUDEssazuresynapse-md(../../includes/ssazuresynapse-md.md)] и Analytics Platform System (PDW) (подробности см. в каждом отдельном заявлении). Используйте эти операторы для добавления, изменения, запроса или удаления данных из базы данных SQL Server.
В следующей таблице перечислены операторы DML, используемые SQL Server.
МАССОВАЯ ВСТАВКА (Transact-SQL)
ВЫБОР (Transact-SQL)
УДАЛИТЬ (Transact-SQL)
ОБНОВЛЕНИЕ(Transact-SQL)
ВСТАВКА (Transact-SQL)
ОБНОВЛЕНИЕТЕКСТ (Transact-SQL)
СЛИЯНИЕ (Transact-SQL)
ЗАПИСАТЬТЕКСТ (Transact-SQL)
READTEXT (транзакт-SQL)
В следующей таблице перечислены предложения, которые используются в нескольких операторах или предложениях DML.
Пункт | Может использоваться в этих заявлениях |
---|---|
ОТ (Transact-SQL) | УДАЛИТЬ, ВЫБРАТЬ, ОБНОВИТЬ |
Подсказки (Transact-SQL) | УДАЛИТЬ, ВСТАВИТЬ, ВЫБРАТЬ, ОБНОВИТЬ |
Предложение OPTION (Transact-SQL) | УДАЛИТЬ, ВЫБРАТЬ, ОБНОВИТЬ |
Пункт OUTPUT (Transact-SQL) | УДАЛИТЬ, ВСТАВИТЬ, ОБЪЕДИНИТЬ, ОБНОВИТЬ |
Условие поиска (Transact-SQL) | УДАЛИТЬ, ОБЪЕДИНИТЬ, ВЫБРАТЬ, ОБНОВИТЬ |
Конструктор табличных значений (Transact-SQL) | ИЗ, ВСТАВКА, ОБЪЕДИНЕНИЕ |
ВЕРХ (Transact-SQL) | УДАЛИТЬ, ВСТАВИТЬ, ОБЪЕДИНИТЬ, ВЫБРАТЬ, ОБНОВИТЬ |
ГДЕ (Transact-SQL) | УДАЛИТЬ, ВЫБРАТЬ, ОБНОВИТЬ, СОВПАДАТЬ |
С выражением common_table_expression (Transact-SQL) | УДАЛИТЬ, ВСТАВИТЬ, ОБЪЕДИНИТЬ, ВЫБРАТЬ, ОБНОВИТЬ |
sql:запрос — Друш
Выполнить запрос к базе данных.
Примеры
-
drush sql:query "SELECT * FROM users WHERE uid=1"
. Просмотр записи пользователя. Префиксы таблиц, если они используются, должны добавляться к именам таблиц вручную. -
drush sql:query --db-prefix "SELECT * FROM {users}"
. Просмотр записи пользователя. Префиксы таблиц учитываются. Внимание: все фигурные скобки будут удалены. -
$(drush sql:connect) < пример.sql
. Импорт операторов SQL из файла в текущую базу данных. -
drush sql:query --file=example.sql
. Альтернативный способ импорта операторов SQL из файла. -
drush ev "return db_query('SELECT * FROM users')->fetchAll()" --format=json
. Получить данные обратно в формате JSON. См. https://github.com/drush-ops/drush/issues/3071#issuecomment-347929777. -
drush sql:connect
-e "выбрать * из лимита пользователей 5;"
Аргументы
- [запрос] . SQL-запрос. Игнорируется, если указан --file.
Опции
- --файл-результата[=ФАЙЛ-РЕЗУЛЬТАТА] . Сохранить в файл. Файл должен относиться к корню Drupal.
- --file=ФАЙЛ . Путь к файлу, содержащему SQL для запуска. Файлы Gzip принимаются.
- --файл-удалить . Удалите --file после его запуска.
- --extra=ДОПОЛНИТЕЛЬНО . Добавьте пользовательские параметры в строку подключения (например, --extra=--skip-column-names)
- --дб-префикс . Включите замену фигурных скобок в вашем запросе.
- --база данных[=БАЗА ДАННЫХ] . Ключ подключения к БД при использовании нескольких подключений в settings.php. [по умолчанию: по умолчанию ]
- --цель[=ЦЕЛЬ] . Имя цели в указанном соединении с базой данных. [по умолчанию: по умолчанию ]
- --db-url=БД-URL . URL-адрес базы данных в стиле Drupal 6. Например, mysql://root:pass@localhost:port/dbname
- --показать-пароли . Показать пароль в CLI. Полезно для отладки.
Общие параметры
- -v|vv|vvv, --verbose . Увеличьте уровень детализации сообщений: 1 для обычного вывода, 2 для более подробного вывода и 3 для отладки
- -у, --да . Автоматически принимать значения по умолчанию для всех пользовательских подсказок. Эквивалент --no-interaction.
- -l, --uri=URI . Базовый URL для создания ссылок и выбора мультисайта. По умолчанию https://по умолчанию .
- Чтобы увидеть все глобальные параметры, запустите
тему
и выберите первый вариант.
Псевдонимы
- sqlq
- sql-запрос
Легенда
- Аргумент или параметр в квадратных скобках необязателен.
- Любое значение по умолчанию указано в конце описания аргумента/параметра.