SQL и флаги / Хабр
Конечно же речь пойдёт не о режиме игры Capture The Flag на сервере SQL, а об использования bit флагов. Битовые операции знакомы, наверное, всем, кто занимается панорамированием, независимо от среды и языка разработки. Однако использование флагов, на мой взгляд, для многих является экзотикой нежели повседневным инструментом. На Хабре не раз упоминали возможность удобную возможность .NET работать с флагами через enum, но ведь и SQL даёт нам отличные возможности для использования флагов!И так, рассмотрим простой пример — в некой аппликации должна быть некая система оповещения пользователей. Допустим вы строите форум и хотите дать возможность пользователю получать оповещения по почте: новый ответ в избранной теме, новое личное сообщение, новости форума.Беглый взгляд на задачу даст тривиальный дизайн таблиц:
tblUsers {userID (PK) as int, name as nvarchar(50), password as nvarchar(50)}
tblUserAlerts {userID (FK) as int, alertID (FK) as int}
То есть существует таблица пользователей, таблица оповещений и связь между ними реализуется через вспомогательную таблицу дабы дать возможность каждому пользователю выбрать больше чем одно оповещение. Данные будут выглядеть примерно так:
tblUsers
1, «Вася», «хитрыйп4р0ль»
tblUserAlerts
1, 1
tblAlerts
1, «Вам пришло новое личное сообщение»
А теперь рассмотрим пример с пользованием флага:
tblUsers {userID (PK) as int, name as nvarchar(50), password as nvarchar(50), alerts as int},
tblAlerts{alertID (PK) as int, message as nvarchar(50)}
В данном варианте мы получаем ту же функциональность и при этом обходимся без дополнительной таблицы. В таблице tblAlerts мы задаём alertID как бит флаг с помощью то го же int (размер зависит от количества вариантов оповещений), а в таблице tblUsers поле alerts отображает бит маску оповещений. Допустим мы создаём 3 вида оповещений, значит в таблице tblAlerts будет 4 (нет оповещений + упомянутые 3 вида) строки флагами в поле alertID. Первым ID будет 0 — в битах будет выглядеть как 0000, значение, соответственно — нет оповещений. Затем мы добавляем наши оповещения зажигая каждый раз другой бит (каждый идентификатор будет степенью двойки ): 0001 = 1, 0010 = 2, 0100 = 4:
0, NULL
1, «Новый ответ в избранной теме»
2, «Вам пришло новое личное сообщение»
4, «У нас новость!»
Теперь нам надо подписать пользователя, допустим, на новости и на оповещения о личных сообщения. Для этого мы суммируем идентификаторы этих оповещений и получаем 0110 = 6:
tblUsers
1, «Вася», «хитрыйп4р0ль», 6
Теперь построим запрос в таблицу tblUsers, чтобы узнать кто из пользователей подписан на новости:
SELECT * FROM tblUsers WHERE (tblUsers.alert & 4) > 0
Смысл данной операции прост:
0110 — наша маска
0100 — флаг новостей
0100 — результат ( то есть есть есть пересечение маски и флага, то результат будет больше нуля )
Приятный аспект — можно сравнивать и маски. Допустим мы хотим получить список пользователей подписанных на все виды оповещений 1+2+4 = 7:SELECT * FROM tblUsers WHERE (tblUsers.alert & 7) = 7
Заметьте, что между маской 6 и 7 есть пересечение, но результат будет отличным от 7
0110 — маска пользователя
0111 — маска проверки
0110 — результат (пересечение или минимум из 7 и 6 = 6)
С той же лёгкостью можно сделать запрос на список пользователей подписанных либо на оповещение об ответах либо на уведомление о личных сообщениях 1+2 = 3:
SELECT * FROM tblUsers WHERE (tblUsers. alert & 3) > 0
Положительным результатом будет считаться проверка маски пользователя со значениями и 1, и 2, и 3 (то есть либо одно из двух оповещений, либо оба).
Вот таким нехитрым образом можно избавиться от связующей таблицы и даже упростить запросы. Однако минусом может стать не возможность сделать некоторые действия ( допустим JOIN ) через стандартный визуальный редактор запросов, так как стандарт будет сравнивать идентификаторы. Надо будет в ручную заменять сравнение на битовую операцию:SELECT tblUsers.*, tblAlerts.*
FROM tblUsers INNER JOIN tblAlerts ON (tblUsers.alerts & tblAlerts.alertID) = tblAlerts.alertID
Язык sql FoxPro 5.0
СУБД FoxPro, за многие годы своей эволюции, накопила колоссальное количество стандартных операций, функций и условий (предикатов), с которыми программист знакомится по мере освоения системы. В принципе, все эти возможности можно использовать во вложенном SQL (при соблюдении некоторых мер осторожности, что особенно относится к использованию пользовательских функций).
С другой стороны, SQL образует вполне изолированный подъязык FoxPro, отличный от него по духу и синтаксису: в отличие от «базового» FoxPro, SQL является декларативным языком преобразований таблиц в целом, а не процедурным языком обработки их записей; синтаксис команд SQL замкнут и не содержит ссылок на текущее состояние окружение, столь многочисленных в командах FoxPro.
Щадя читателя и следуя принципу «разумной достаточности», мы далее немного упрощаем синтаксис — в основном, за счет исключения синонимии и редко используемых опций. Наиболее полный синтаксис FoxPro SQL, как всегда, можно найти в справочной системе FoxPro, на которую мы в дальнейшем будем ссылаться как на “документацию”. Расширения языка, отсутствующие в стандарте (и, возможно — в используемой читателем версии) SQL отмечены символом *
Очевидно, что, если программист использует SQL FoxPro «по прямому назначению» — именно, в качестве средства связи с другими СУБД в рамках технологии «клиент-сервер», то он должен отказаться от многочисленных дополнительных возможностей FoxPro и обязан использовать исключительно описываем ниже набор функций, предикатов и команд стандартного SQL.
SQL FoxPro образуют замкнутый язык СУБД, достаточный для выполнения основных задач обработки локальных данных, а также обработки удаленных данных в рамках технологии удаленных представлений. Главное достоинство последней — простота; от программиста скрыты все детали реализации обработки данных на удаленном источнике (сервере) в терминах его собственной версии SQL.
Поддерживаемый также FoxPro аппарат «сквозного SQL» , или технологии SPT (SQL-pass-through) более эффективен, но и более изощрен — кроме знания достаточно обширного дополнительного набора функций SQL, он предполагает и знание версии SQL, «работающей» на сервере. Любознательный читатель, как всегда, может найти отсутствующую в настоящем пособии информацию о “сквозном SQL”в справочной системе FoxPro.
Выражения и предикаты в SQL.
Итак, в рамках данного пособия достаточно знания лишь «классического набора” выражений SQL, а именно — ариметических выражений и предикатов следующего вида:
а) Сравнения
Аргумент1 Знак_сравнения Аргумент2
где знак сравнения — один из символов отношений = (равенство), <>, !=, # (неравенство) и >, >=,<,<=, а также, для символьных строк, == (точное равенство) и [NOT] LIKE (сравнение по маске),
Заметьте, что, если для числовых типов и типа «дата» такие сравнения имеют обычный смысл, то для символьных строк имеется ввиду лексикографическое (словарное) сравнение, а равенство = несимметрично и понимается в FoxPro как вхождение второго аргумента в первый как начального подслова (см. документацию о зависимости такого сравнения от установок системных переменных ANSI и EXACT).
Предикат сравнения по маске имеет вид
Аргумент [NOT] LIKE Маска
где Маска — произвольная символьная строка, (возможно) содержащая специальные символы кратной замены % и одиночной замены _. Предикат [NOT] LIKE считается истинным, если маску можно превратить в стоящий слева аргумент подстановкой некоторых слов вместо символа % и одиночных символов — вместо символов _.
б) Булевские формулы, как обычно, образуются с помощью операций конъюнкции AND, дизъюнкции OR и отрицания NOT
в) «Синтаксический сахар» — группа предикатов, выразимых через булевские комбинации сравнений, но более кратких и привычных по форме (для англоязычного пользователя)
Аргумент1 [NOT] BETWEEN Аргумент2 AND Аргумент3
— краткая форма записи предиката
[NOT] (Аргумент2 Аргумент1 AND Аргумент1Аргумент3)
Аргумент [NOT] IN (список_значений)
— краткая форма записи предиката
[NOT] (Аргумент=Аргумент1 OR АргументАргумент2 OR … Аргумент=АргументN)
г) Предикаты, использующие выборку
Имя_поля Знак_сравнения ALL (команда SELECT)
истинно, если сравнение выполняется для стоящего слева значения поля и всех значений, выбранных командой SELECT — при этом предполагается, что последняя выдает список значений — таблицу с единственным полем, совместиммым по типу со значением поля, стояшим слева.
Условие считается истинным также, если подвыборка пуста.Имя_поля Знак_сравнения ANY | SOME (команда SELECT)
истинно, если сравнение выполняется для стоящего слева значения поля и хотя бы одного из значений, выбранных командой SELECT — снова предполагается, что последняя выдает список значений, соместимых по типу со значением поля. Если подвыборка пуста, условие считается ложным.
[NOT] EXISTS (команда_SELECT)
истинно, если подвыборка (не) пуста, т.е. (не) содержит по крайней мере одну строку.
Имя_поля [NOT] IN (команда_SELECT)
[ ] Подстановочный знак для соответствия символам — SQL Server (Transact-SQL)
Редактировать Твиттер LinkedIn Фейсбук Электронная почта- Статья
Применяется к: SQL Server База данных SQL Azure Azure SQL Управляемый экземпляр Azure Synapse Analytics Analytics Platform System (PDW) Конечная точка SQL в Microsoft Fabric Warehouse в Microsoft Fabric
Соответствует любому одиночному символу в указанном диапазоне или наборе, указанном в квадратных скобках [ ]
. Эти подстановочные знаки можно использовать при сравнении строк, включающем сопоставление с образцом, например LIKE
и PATINDEX
.
Примеры
A: Простой пример
В следующем примере возвращаются имена, начинающиеся с буквы m
. [n-z]
указывает, что вторая буква должна быть где-то в диапазоне от n
до z
. Подстановочный знак процента %
допускает использование любых символов или их отсутствие, начиная с символа 3. Базы данных model
и msdb
соответствуют этому критерию. База данных master
не соответствует критериям и исключена из набора результатов.
ВЫБЕРИТЕ имя ИЗ sys.databases ГДЕ имя LIKE 'm[n-z]%';
Вот набор результатов.
имя ----- модель msdb
Возможно, у вас установлены дополнительные подходящие базы данных.
B: Более сложный пример
В следующем примере используется оператор [] для поиска идентификаторов и имен всех сотрудников Adventure Works, чьи адреса имеют четырехзначный почтовый индекс.
-- Использует AdventureWorks ВЫБЕРИТЕ e.BusinessEntityID, p.FirstName, p.LastName, a.PostalCode ОТ HumanResources.Employee AS e ВНУТРЕННЕЕ СОЕДИНЕНИЕ Person.Person AS p ON e.BusinessEntityID = p.BusinessEntityID ВНУТРЕННЕЕ СОЕДИНЕНИЕ Person.BusinessEntityAddress AS ea ON e.BusinessEntityID = ea.BusinessEntityID ВНУТРЕННЕЕ СОЕДИНЕНИЕ Person.Address AS a.AddressID = ea.AddressID ГДЕ a.PostalCode LIKE '[0-9][0-9][0-9][0-9]';
Вот набор результатов.
ID сотрудника Имя Фамилия Почтовый индекс ---------- --------- --------- ---------- 290 Линн Цофлиас 3000
C: Использование набора, объединяющего диапазоны и отдельные символы
Набор подстановочных знаков может включать как отдельные символы, так и диапазоны. В следующем примере оператор [] используется для поиска строки, начинающейся с числа или набора специальных символов.
ВЫБРАТЬ [object_id], OBJECT_NAME(object_id) AS [object_name], name, column_id ИЗ sys.columns ГДЕ имя LIKE '[0-9!@#$.,;_]%';
Вот набор результатов.
object_id object_name имя column_id --------- ----------- ---- --------- 615673241 vSalesPersonSalesByFiscalYears 2002 5 615673241 vSalesPersonSalesByFiscalYears 2003 6 615673241 vSalesPersonSalesByFiscalYears 2004 7 15718 JunkTable _xyz 1 9] (Подстановочный знак — несоответствие символов) (Transact-SQL)
_ (Подстановочный знак — соответствие одному символу) (Transact-SQL)подстановочных знаков SQL
❮ Предыдущий Далее ❯
Подстановочные знаки SQL
Подстановочный знак используется для замены одного или нескольких символов в строке.
Символы подстановки используются с
НРАВИТСЯ
оператор. ОператорLIKE
используется вПредложение WHERE
для поиска указанного шаблона в столбце.Подстановочные знаки в MS Access
Символ Описание Пример * Представляет ноль или более символов bl* находит bl, black, blue и blob ? Представляет один символ h?t находит горячее, шляпу и хит [] Представляет любой одиночный символ в квадратных скобках h[o]t находит горячее и шляпу, но не попадает ! Представляет любой символ, не указанный в квадратных скобках h[!oa]t находит попадание, но не горячее и шляпу - Представляет любой одиночный символ в указанном диапазоне c[a-b]t находит кошку и cbt # Представляет любой одиночный цифровой символ 2#5 находит 205, 215, 225, 235, 245, 255, 265, 275, 285 и 295 Подстановочные знаки в SQL Server
Символ Описание Пример % Представляет ноль или более символов bl% находит bl, black, blue и blob _ Представляет один символ h_t находит горячее, шляпу и нажимает 9oa]t находит хит, но не горячий и шляпа- Представляет любой одиночный символ в указанном диапазоне c[a-b]t находит кошку и cbt Все подстановочные знаки также можно использовать в комбинациях!
Вот несколько примеров, показывающих различные операторы
LIKE
с подстановочными знаками «%» и «_»:
Оператор LIKE Описание ГДЕ CustomerName LIKE 'a%' Находит все значения, начинающиеся с "а" ГДЕ CustomerName LIKE '%a' Находит все значения, оканчивающиеся на "а" ГДЕ CustomerName LIKE '%or%' Находит все значения, которые имеют "или" в любой позиции ГДЕ CustomerName LIKE '_r%' Находит любые значения, которые содержат "r" во второй позиции ГДЕ CustomerName LIKE 'a__%' Находит любые значения, начинающиеся с "а" и имеющие длину не менее 3 символов ГДЕ ContactName LIKE 'a%o' Находит все значения, начинающиеся с "а" и заканчивающиеся на "о" Демонстрационная база данных
В таблице ниже показана полная таблица «Клиенты» из демонстрационной базы данных «Борей»:
CustomerID CustomerName ContactName 901 08 Адрес Город Почтовый индекс Страна 1 Альфред Футтеркисте Мария Андерс ул. 57 Берлин 12209 Германия 2 Ана Трухильо Emparedados y helados Ана Трухильо Avda. de la Constitución 2222 México D.F. 05021 Мексика 3 Антонио Морено Такерия Антонио Морено Матадерос 2312 Мексика Д.Ф. 05023 Мексика 4 Вокруг Рога Томас Харди 120 Hanover Sq. Лондон WA1 1DP Великобритания 5 Berglunds snabbköp Christina Berglund Berguvsvägen 8 Luleå S-958 22 Швеция 6 Blauer See Delikatessen Hanna Moos Forsterstr. 57 Мангейм 68306 Германия 7 Блондель отец и сын Фредерик Сито 24, площадь Клебер Страсбург 67000 9 0116 Франция 8 Bólido Comidas preparadas Martin Sommer C/ Araquil, 67 Madrid 28023 Испания 9 Bon app' Laurence Lebihans 12, rue des Bouchers Марсель 13008 Франция 10 Нижний рынок доллара Элизабет Линкольн 23 Tsawassen Blvd. Тсавассен T2F 8M4 Канада 11 B's Beverages Victoria Ashworth Цирк Фаунтлерой Лондон EC2 5NT Великобритания 12 Cactus Comidas para llevar Patricio Simpson Cerrito 333 Buenos Aires 1010 Аргентина 13 Торговый центр Моктесума Франсиско Чанг Сьеррас-де-Гранада 9993 Мексика Д.Ф. 05022 Мексика 14 Чоп-суэй Китайский Ян Ван Hauptstr. 29 Берн 3012 Швейцария 15 Comércio Mineiro Pedro Afonso Av. dos Lusíadas, 23 Сан-Паулу 05432-043 Бразилия 16 Consolidated Holdings Элизабет Браун Berkeley Gardens 12 Brewery Лондон WX1 6LT Великобритания 17 Драхенблют Деликатессенд Свен Отлиб Вальзервег 21 Ахен 52066 90 115 Германия18 Du monde entier Жанин Лабрюн 67, rue des Cinquante Otages Нант 44000 901 16 Франция 19 Eastern Connection Энн Девон 35 Кинг Джордж Лондон WX3 6FW Великобритания 20 Эрнст Гендель Роланд Мендель Кирхгассе 6 Грац 8010 Австрия 21 Семья Аркибальдо Ария Круз Руа Орос, 92 Сан-Паулу 05442-030 Бразилия 22 FISSA Fabrica Inter. Салчичас С.А. Диего Роэль С/ Моралзарзал, 86 Мадрид 28034 Испания 23 Фоли для гурманов Мартин Рансе 184, шоссе де Турне Лилль 59000 Франция 24 Фольклорная и фольклорная HB Мария Ларссон Окергатан 24 Браке С-844 67 Швеция 25 Франкенверсанд Питер Франкен Берлинер Платц 43 Мюнхен 80805 Германия 26 Франция реставрация Карин Шмитт 54, улица Рояль Нант 44000 Франция 27 Франки С.п.А. Паоло Аккорти Виа Монте Бьянко 34 Турин 10100 Италия 28 Furia Bacalhau e Frutos do Mar Лино Родригес Jardim das rosas n. 32 Лиссабон 1675 Португалия 29 Галерея гастрономии Эдуардо Сааведра Rambla de Cataluña, 23 Барселона 08022 Испания 30 Godos Cocina Типика Хосе Педро Фрейре С/ Ромеро, 33 Севилья 41101 Испания 31 Ланчонетес для гурманов Андре Фонсека пр. Бразилия, 442 Кампинас 04876-786 Бразилия 32 Продовольственный рынок Великих озер Говард Снайдер 2732 Бейкер бул. Юджин 97403 США 33 GROSELLA-Ресторан Мануэль Перейра 5ª Авеню Лос Палос Грандес Каракас 1081 Венесуэла 34 Ханари Карнес Марио Понтес Руа-ду-Пасу, 67 Рио-де-Жанейро 05454-876 Бразилия 35 ИЛАРИОН-Абастос Карлос Эрнандес Carrera 22 con Ave. Carlos Soublette #8-35 Сан-Кристобаль 5022 Венесуэла 36 Магазин импорта голодных койотов Йоши Латимер City Center Plaza 516 Main St. Элгин 97827 США 37 Ночные бакалейщики Hungry Owl Патрисия МакКенна 8 Джонстаун Роуд Пробка Ирландия 38 Островная торговля Хелен Беннет Садовый домик Кроутер Уэй Коус ПО31 7ПЖ Великобритания 39 Кениглих Эссен Филип Крамер Мобельштрассе. 90 Бранденбург 14776 Германия 40 Улица изобилия Даниэль Тонини 67, проспект Европы Версаль 78000 Франция 41 Дом Азии Аннет Руле 1 улица Эльзас-Лотарингия Тулуза 31000 Франция 42 Винные погреба Смеющегося Вакха Йоши Таннамури 1900 Дубовая ул. Ванкувер В3Ф 2К1 Канада 43 Загородный магазин Lazy K Джон Стил 12 Оркестровая терраса Уолла Уолла 99362 США 44 Рыночная площадь Леманнс Ренате Месснер Магазинвег 7 Франкфурт-на-Майне 60528 Германия 45 Давайте остановимся в магазине Хайме Йоррес 87 Полк Стрит Люкс 5 Сан-Франциско 94117 США 46 ЛИЛА-Супермаркет Карлос Гонсалес Carrera 52 con Ave. Bolívar #65-98 Llano Largo Баркизимето 3508 Венесуэла 47 ЛИНО-Деликатесы Фелипе Искьердо Авеню 5 де Майо Порламар И. де Маргарита 4980 Венесуэла 48 Ресторан «Одинокая сосна» Фрэн Уилсон 89 Chiaroscuro Rd. Портленд 97219 США 49 Магазин Алиментари Риунити Джованни Ровелли Виа Людовико иль Моро 22 Бергамо 24100 Италия 50 Дом Дьюи Кэтрин Дьюи Рю Жозеф-Бенс 532 Брюссель Б-1180 Бельгия 51 Мама Пайярд Жан Френьер 43 улица Сен-Лоран Монреаль h2J 1C3 Канада 52 Моргенштерн Гезундкость Александр Фойер Херстр. 22 Лейпциг 04179 Германия 53 Север/Юг Саймон Кроутер Южный дом 300 Квинсбридж Лондон СВ7 1РЗ Великобритания 54 Океано Атлантико Лтд. Ивонн Монкада Инж. Густаво Монкада 8585 Писо 20-А Буэнос-Айрес 1010 Аргентина 55 Деликатесы Старого Света Рене Филлипс 2743 ул. Беринга Анкоридж 99508 США 56 Оттилис Каселаден Генриетта Пфальцхайм Мерхаймерштрассе. 369 Кёльн 50739 Германия 57 Специальные предложения Парижа Мари Бертран 265, бульвар Шарон Париж 75012 Франция 58 Перикл Классические товарищи Гильермо Фернандес Calle Dr. Jorge Cash 321 Мексика Д.Ф. 05033 Мексика 59 Пикколо и больше Георг Пиппс Гейсльвег 14 Зальцбург 5020 Австрия 60 Принцесса Изабель Винхос Изабель де Кастро Estrada da saúde n. 58 Лиссабон 1756 Португалия 61 Кве Делисия Бернардо Батиста Руа да Панификадора, 12 Рио-де-Жанейро 02389-673 Бразилия 62 Королева Козинья Лусия Карвалью Аламеда-дус-Канариос, 891 Сан-Паулу 05487-020 Бразилия 63 БЫСТРАЯ ОСТАНОВКА Хорст Клосс Таухерштрассе 10 Куневальде 01307 Германия 64 Ранчо Гранде Серхио Гутьеррес пр. дель Либертадор 900 Буэнос-Айрес 1010 Аргентина 65 Продуктовый магазин «Каньон гремучей змеи» Пола Уилсон 2817 Милтон Доктор Альбукерке 87110 США 66 Реджани Казеичи Маурицио Морони Страда Провинциале 124 Реджо-Эмилия 42100 Италия 67 Рикардо Адосикадос Джанет Лимейра пр. Копакабана, 267 Рио-де-Жанейро 02389-890 Бразилия 68 Рихтер Супермаркет Майкл Хольц Гренцахервег 237 Женева 1203 Швейцария 69 Ромеро и Томилло Алехандра Камино Гран Виа, 1 Мадрид 28001 Испания 70 Санте Гурмэ Йонас Бергульфсен Ворота Эрлинг Скаккес 78 Ставерн 4110 Норвегия 71 Рынки, где можно сэкономить Хосе Паваротти 187 Саффолк Лн. Бойсе 83720 США 72 Импорт семи морей Хари Кумар 90 Уодхерст Роуд. Лондон ОХ15 4НБ Великобритания 73 Саймонс бистро Джитте Петерсен Винбелтет 34 Копенгаген 1734 Дания 74 Особые заведения мира Доминик Перрье 25, улица Лористон Париж 75016 Франция 75 Пиво и эль Split Rail Арт Брауншвайгер Почтовый индекс Ящик 555 Посадочный модуль 82520 США 76 Высшие деликатесы Тележка Паскаля Бульвар Тиру, 255 Шарлеруа Б-6000 Бельгия 77 Большой сыр Лиз Никсон 89 Джефферсон Уэй Люкс 2 Портленд 97201 США 78 Коробка с крекерами Лю Вонг 55 Гризли Пик Роуд. Бьютт 59801 США 79 Toms Spezialitäten Карин Джозефс Луизенштрассе. 48 Мюнстер 44087 Германия 80 Ресторан Тортуга Мигель Анхель Паолино Авда. Ацтека 123 Мексика Д.Ф. 05033 Мексика 81 Традиционный гипермаркет Анабела Домингес пр. Инес де Кастро, 414 Сан-Паулу 05634-030 Бразилия 82 Припасы для гурманов Trail's Head Гельвеций Надь Бульвар Да Винчи, 722 Киркланд 98034 США 83 Ваффельджернет Палле Ибсен Смагслёгет 45 Орхус 8200 Дания 84 Виктуаль на складе Мэри Савели 2, улица Коммерс Лион 69004 Франция 85 Винные и спиртные напитки Chevalier Поль Энрио 59 улица де л'Аббай Реймс 51100 Франция 86 Die Wandernde Kuh Рита Мюллер Аденауэралле 900 Штутгарт 70563 Германия 87 Вартиан Херкку Пиркко Коскитало Торикату 38 Оулу Финляндия 88 Веллингтон Импортадора Паула Паренте Руа-ду-Меркадо, 12 Резенде 08737-363 Бразилия 89 Рынки белого клевера Карл Яблонски 305 - 14-я авеню С. Люкс 3B Сиэтл 98128 США 90 Уилман Кала Матти Карттунен Кескускату 45 Хельсинки 21240 Финляндия 91 Вольский Збышек ул. Фильтрова 68 Валла 01-012 Польша Использование подстановочного знака %
Следующая инструкция SQL выбирает всех клиентов с городом, начинающимся с "ber":
Пример
SELECT * FROM Customers
Попробуйте сами »
WHERE City LIKE 'ber%';Следующая инструкция SQL выбирает всех клиентов с городом, содержащим шаблон "es":
Пример
SELECT * FROM Customers
Попробуйте сами »
WHERE City LIKE '%es%';Использование подстановочного знака _
Следующий оператор SQL выбирает всех клиентов с городом, начинающимся с любой символ, за которым следует "ondon":
Пример
SELECT * FROM Customers
Попробуйте сами »
WHERE City LIKE '_ondon';Следующая инструкция SQL выбирает всех клиентов с городом, начинающимся с "L", за которым следует любой символ, за которым следует "n", за которым следует любой символ, затем "on":
Пример
SELECT * FROM Customers
Попробуйте сами »
WHERE City LIKE 'L_n_on';Использование подстановочного знака [charlist]
Следующая инструкция SQL выбирает всех клиентов с городом, начинающимся с "b", "s" или "p":
Пример
SELECT * FROM Customers
Попробуйте сами »
WHERE City LIKE '[bsp]%';Следующая инструкция SQL выбирает всех клиентов с городом, начинающимся с "a", "b" или "c":
Пример
SELECT * FROM Customers
Попробуйте сами »
WHERE City LIKE '[a-c]%';Использование подстановочного знака [!charlist]
Два следующих SQL-оператора выбирают всех клиентов, у которых город НЕ начинается.
Оставить комментарий