Sql where примеры. SQL Where: способы применения и примеры. Пример запроса для отбора текстовых значений

Поиск объектов во всех базах данных сервера

У вас бывало, что нужно найти таблицу чтобы посмотреть данные или структуру, а вы не помните точно в какой БД она находится? У меня, периодически, такое случается. Пример - найти таблицы из проекта пятилетней давности, чтобы посмотреть как тогда решал текущую задачу.

К счастью, есть процедура sp_MSforeachdb , которая позволяет написать такой скрипт довольно компактно:

DECLARE @name AS SYSNAME,
@strSQL AS VARCHAR (MAX )
SET @name = "Hierarchy"

SET @strSQL = "
IF EXISTS(SELECT * FROM ?..sysobjects WHERE name LIKE "
"%" +@name+"%" ")
BEGIN
SELECT " "?" " db, name FROM ?..sysobjects WHERE name LIKE " "%" +@name+"%" "
END
"
CREATE TABLE #result (
db SYSNAME,
name SYSNAME,
PRIMARY KEY (db,name))

INSERT #result EXEC sp_MSforeachdb @strSQL
SELECT * FROM #result

DROP TABLE #result

Здесь всё достаточно просто:

  1. Задаём часть названия, по которому будем искать (в данном случае - Hierarchy).
  2. Собираем динамический SQL, который ищет по sysobjects (для некоторых старых версий MS SQL можно вместо VARCHAR(MAX) использовать VARCHAR(2000), например).
    При этом символ "?" заменится на название БД.
  3. С помощью конструкции INSERT ... EXEC сохраняем все результаты во временную таблицу, чтобы отобразить, в итоге, единый результат.

Поиск подстроки в текстах хранимых процедур

Как вы знаете, тексты хранимых процедур, триггеров и представлений можно найти в таблице syscomments .

Чтобы наш предыдущий запрос позволил нам найти упоминание в syscomments некоторой подстроки, его можно переписать следующим образом:

SET @strSQL = "
SELECT DISTINCT " "?" " as db, o.name FROM [?].dbo.syscomments s
JOIN [?].dbo.sysobjects o ON o.id = s.id WHERE s. LIKE "
"%" +@name+"%" ""

Обратите внимание на DISTINCT - может пригодиться, потому что иногда для одного объекта бывает несколько записей в syscomments.

Поиск подстроки во всех строковых полях всех таблиц

Такой скрипт здорово помогает спать спокойно после "чистки" базы перед отправкой клиенту. Естественно, этой областью его применение не ограничивается.

Для этого случая помощник в виде процедуры от MS не нашёлся, поэтому пришлось использовать курсоры:

declare @pattern as nvarchar(MAX )
set @pattern = N"%Test%"
set nocount on
declare @sql as nvarchar(MAX )
declare @table as sysname
declare tables cursor local static read_only for select name from sys.tables t where t.is_ms_shipped = 0
open tables

create table #results(name sysname not null , value nvarchar(MAX ) not null )
while @@FETCH_STATUS = 0
begin
set @sql = ""
select @sql = @sql + "
insert into #results select "
"" + @table + "." + name + "" " as name, [" + name + "] from [" + @table + "] where [" + name + "] like " "" + @pattern + "" ""
from sys.columns c where c.object_id = OBJECT_ID(@table ) and c.system_type_id in
(select system_type_id from sys.types where collation_name is not null )
exec (@sql )
fetch next from tables into @table
end
select * from #results
close tables
drop table #results

Помимо курсоров принципы те же. Есть пара нюансов:

  • Ищем таблицы без флага is_ms_shipped, чтобы просматривать только таблицы, созданные на этапе разработки.
  • Для отбора строковых столбцов вместо списка типов (который поддерживать утомительно) используется фильтр "collation_name is not null".

Резюме

Внимательный читатель наверняка догадался по оформлению, что последний пример написан не в то же время что и два первых. Если быть точнее, последний запрос я написал месяц назад. Это я к тому, что на основе подобного подхода вы можете сами писать полезные скрипты, решающие ваши специфические задачи.

Если такой формат понравится читателям, буду иногда выкладывать полезные скрипты из личной коллекции.

Если у вас есть замечания, пожелания или новые темы – пишите в комментариях,

Одним из самых распространенных языков программирования для работы с базами данных считается SQL. Конструкции языка позволяют не только создать базу, но и проводить с ней разнообразные манипуляции на изменение данных или их выборку.

Для выбора данных с базы используется конструкция Select [набор данных] from [имя таблицы]. Как показывает опыт, в 80 % случаев использования запросов на выборку данных нужно применять разнообразные условия — параметры. Для этого в язык, как дополнение к запросу, его усложнение, введено условие SQL-Where.

Способы применения условия Where

Довольно часто программисту необходимо отобрать, в основном для предоставления отчета, данные, хранимые в базе. Для этого может быть недостаточно построить простой запрос на выборку. Как правило, необходимо еще учитывать разнообразные условия, параметры выборки, которых может быть довольно много, или проверять. входят ли данные в очерченный диапазон или находятся в определенной таблице.

Конструкция SQL-Where может быть использована для задания условий выборки данных или для проверки вхождения данных в выборку или стороннюю таблицу.

Использование Where для задания параметров выборки

Если нужно задать определенные параметры для выбора с базы отчетных данных, синтаксис конструкции SQL-Where можно организовать довольно просто. Для этого можно пользоваться следующими правилами:

    Нужно простроить стандартный запрос, с помощью конструкции Select * from.

    Определить с помощью ключевой конструкции Join, с каких таблиц будет делаться выбор.

    С помощью конструкции Where задать перечень параметров для выборки.

Такого рода запросы довольно просты в построении и не вызывают трудностей даже у новичков.

Использование конструкции для проверки вхождения

Если программисту поставлена задача не только выбрать из таблицы данные по условию, но и проверить их вхождение в одну или несколько таблиц другого плана, конструкция SQL-Where будет незаменима.

С помощью синтаксиса этой конструкции можно построить те же условия, но с вложенными запросами, которые будут проверять вхождение выбираемых строк в набор сторонних таблиц базы данных.

Как правило, для таких целей формируется временная таблица, в которую записывается весь необходимый, для проверки вхождения набор данных.

Примеры использования Where

Сейчас будут приведены примеры Для начал представим, что есть две таблицы с данными — Tovar и TovarAmount. В первой имеются названия продаваемого товара, цена, дата продажи и клиент, который приобрел товар. Во второй указано наличие товара, а если точнее, какой есть в наличии.

Примером запроса с параметром, который укажет все товары, проданные за определенное количество дней, будет конструкция следующего характера:

Select * from Tovar

Where T_Date >= ‘12/01/2016’ and T_Date<= ‘’12/07/1016 and T_PriceOut >0

Такого плана запрос вернет список товаров, данных с таблицы, которые были проданы за первые семь дней декабря, на что указывает одно из условий выборки: T_PriceOut >0.

Если же рассмотреть условие вывода товаров, которые есть в наличии, то конструкция будет такого плана:

Select * from Tovar

Where T_Tovar in (select TA_Tovar where TA_ Amount >0)

Вложенных условий в Where может быть много, но стоит упомянуть, что чем больше условий накладывается, тем дольше будет работать запрос. Именно это стало причиной использования временных таблиц. Намного быстрее сформировать несколько таких, а потом сравнить данные в них, чем строить условие с несколькими уровнями проверки данных.

При выборке записей из таблицы практически всегда требуется задавать определённые условия, по которым мы определяем, какие записи нам нужны, а какие - нет. И именно эти условия можно задавать с помощью конструкции WHERE в SQL . Я уже знакомил Вас с ней, но в этой статье решил познакомить с WHERE немного поближе.

Начну с простого примера выборки с использованием конструции WHERE в SQL :

SELECT * FROM table WHERE count=5

Вернутся записи, в которых поле "count " имеет значение 5 . Теперь усложним запрос:

SELECT * FROM table WHERE count=5 AND id < 100

Таким образом, вернутся записи, у которых поле "count " имеет значение 5 И поле "id " имеет значение меньше 100 .

Разумеется, Вы можете использовать и другие логические операции. Их полный список:

  • ! (отрицание )
  • AND (И )
  • OR (ИЛИ )
  • XOR (ИСКЛЮЧАЮЩЕЕ ИЛИ , иногда ещё называют МОНТАЖНОЕ ИЛИ , но такое название встречается в основном в микропроцессорной литературе)

Пример с использованием нескольких логических операторов:

SELECT * FROM table WHERE !(id <= 120 AND (count=10 OR date > "10/11/1980"))

Вот такой, на первый взгляд, сложный SQL-запрос . Постарайтесь в нём разобраться самостоятельно.

Также конструкция WHERE в SQL может содержать LIKE . LIKE позволяет определить, совпадает ли указанная строка с определённым шаблоном. Чтобы стало немного понятнее, приведу пример:

SELECT * FROM table WHERE text LIKE "%some text%"

Данный SQL-запрос вернёт result_set , содержащий записи, в которых поле "text " имеет такой текст: "some text ". Обратите внимание, что это не проверка на равенство. Текст может быть огромным, но если в нём содержитася строка: "some text ", то LIKE вернёт true .

Давайте напишу, как задаётся шаблон для LIKE :

  • % - это то, что мы с Вами использовали. Используется он чаще всего и означает он любую строку любой длины . Фактически, строкой "%some text% " мы говорим, что сначала идёт любая строка любой длины, затем "some text ", а затем вновь любая строка любой длины. Если текст удовлетворяет этому шаблону, то вернуть true , иначе false .
  • - это одиночный символ. Чтобы использовать этот шаблон необходимо задавать диапазоны, например, так: "some% ". Данный шаблон будет означать, что сначала идёт 1 символ (любой символ от a до z ), далее "some " и потом любая строка любой длины.
  • _ - это любой одиночный символ.
  • [^] - это противоположность . Например, можно привести такой пример: "[^az]some_ ". Данный шаблон означает, что вначале идёт любой символ, но только НЕ "a " и НЕ "z ". Далее должна идти строка "some ", а после только один одиночный символ.

Знание и умение использования LIKE очень важно, поверьте моему опыту. Самый простой пример использования LIKE - это поиск по сайту . Ведь контент находится в базе данных, и необходимо вытащить только те записи, в которых содержится строка, заданная в строке поиска. И тут приходит на помощь LIKE . Именно так реализован поиск мною на этом сайте.

It is difficult to explain the syntax for the SQL Server WHERE clause, so let"s look at some examples.

We"ll start by looking at how to use the WHERE clause with only a single condition.

SELECT * FROM employees WHERE first_name = "Jane";

In this SQL Server WHERE clause example, we"ve used the WHERE clause to filter our results from the employees table. The SELECT statement above would return all rows from the employees table where the first_name is "Jane". Because the * is used in the SELECT, all fields from the employees table would appear in the result set.

Example - Using AND condition

Let"s look at how to use the WHERE clause with the AND condition.

SELECT * FROM employees WHERE last_name = "Anderson" AND employee_id >= 3000;

This SQL Server WHERE clause example uses the WHERE clause to define multiple conditions. In this case, this SELECT statement uses the AND condition to return all employees that have a last_name of "Anderson" and the employee_id is greater than or equal to 3000.

Example - Using OR condition

Let"s look at how to use the WHERE clause with the OR condition.

SELECT employee_id, last_name, first_name FROM employees WHERE last_name = "Johnson" OR first_name = "Danielle";

This SQL Server WHERE clause example uses the WHERE clause to define multiple conditions, but instead of using the AND condition , it uses the OR condition . In this case, this SELECT statement would return all employee_id , last_name , and first_name values from the employees table where the last_name is "Johnson" or the first_name is "Danielle".

Example - Combining AND & OR conditions

Let"s look at how to use the WHERE clause when we combine the AND & OR conditions in a single SQL statement.

SELECT * FROM employees WHERE (state = "California" AND last_name = "Smith") OR (employee_id = 82);

This SQL Server WHERE clause example uses the WHERE clause to define multiple conditions, but it combines the AND condition and the OR condition . This example would return all employees that reside in the state of "California" and whose last_name is "Smith" as well as all employees whose employee_id is equal to 82.

The parentheses determine the order that the AND and OR conditions are evaluated. Just like you learned in the order of operations in Math class!

Example - Joining Tables

Let"s look at how to use the WHERE clause when we join multiple tables together.

SELECT employees.employee_id, contacts.last_name FROM employees INNER JOIN contacts ON employees.employee_id = contacts.contact_id WHERE employees.first_name = "Sarah";

This SQL Server WHERE clause example uses the WHERE clause to join multiple tables together in a single SELECT statement. This SELECT statement would return all rows where the first_name in the employees table is "Sarah". And the employee s and contacts tables are joined on the employee_id from the employees table and the contact_id from the contacts table.