-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathLIKE.txt
170 lines (127 loc) · 9.98 KB
/
LIKE.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
****** SQL условие LIKE ******
SQL условие LIKE позволяет использовать подстановочные символы для сопоставления
с шаблоном в запросе. Условие LIKE используется в предложении WHERE оператора
SELECT, INSERT, UPDATE или DELETE.
Синтаксис для условия LIKE в SQL.
*********************************************************************************
expression LIKE pattern [ ESCAPE 'escapecharacter' ]
*********************************************************************************
Параметры:
- expression - cимвольное выражение, такое как поле или столбец.
- pattern - cимвольное выражение, которое содержит сопоставление
с шаблоном. Подстановочные символы, которые мы можем
выбрать:
- ESCAPE 'escapecharacter' - необязательный. Это позволяет вам
сопоставлять шаблоны с литеральными
подстановочными символами, такими
как % или _
где % - позволяет сопоставить любую строку любой длины
(включая нулевую длину)
_ - позволяет сопоставить одиночный символ
****** Использование подстановочного символа % в условии LIKE ******
Как подстановочный символ % работает в SQL условии LIKE. Подстановочный символ %
соответствует любой строке любой длины (включая нулевую длину).
Допустим мы хотим найти все записи в таблице customers, где last_name клиента
начинается с 'C'. В этом примере у нас есть таблица customers со следующими
полями: customer_id, first_name, last_name, favorite_website
Используем следующий SQL запрос:
*********************************************************************************
SELECT *
FROM customers
WHERE last_name LIKE 'C%'
ORDER BY last_name;
*********************************************************************************
В этом примере возвращаются записи таблицы customers, где last_name начинается с 'C'.
Поскольку условие LIKE не чувствительно к регистру, следующий SQL оператор вернет те
же результаты.
*********************************************************************************
SELECT *
FROM customers
WHERE last_name LIKE 'c%'
ORDER BY last_name;
*********************************************************************************
****** Использование нескольких подстановочных символов % в условии LIKE ******
Мы можем использовать подстановочный символ % несколько раз с условием LIKE.
Берем ту же таблицу customers со следующими полями: customer_id, first_name,
last_name, favorite_website
Попробуем найти все значения last_name из таблицы customers, где last_name
содержит букву 'e'. Формируем следующий запрос в PgSQL:
*********************************************************************************
SELECT last_name
FROM customers
WHERE last_name LIKE '%e%'
ORDER BY last_name;
*********************************************************************************
Будут выбраны все записи которые содержат 'е' в поле last_name в любом месте.
****** Использование подстановочного символа _ в условии LIKE ******
Подстановочный символ _ (символ подчеркивания) так же используется в условии LIKE.
Помните, что подстановочный символ _ ищет ровно один символ, в отличие от подстановочного
символа %, который ищет любой НАБОР символов.
Используем таблицу categories со следующими полями: category_id, category_name
Сделаем запрос чтобы найти все записи из таблицы categories, где category_id
имеет длину 2 цифры и заканчивается на '5'.
Формируем SQL запрос в PgSQL:
*********************************************************************************
SELECT *
FROM categories
WHERE category_id LIKE '_5';
*********************************************************************************
Будут выбраны в соответствии с шаблоном все category_id со значениями из двух цифр
на первом месте которого находится строго одна любая цифра (0, 1, 2, 3, 4, 5, 6, 7, 8, 9),
а на втором строго 5. Обратите внимание, знчение category_id равное, например 125
не попадет в выборку, потому что символ _ соответствует только одному символу.
****** Использование нескольких подстановочных символов _ в условии LIKE ******
Если мы хотим сопоставить трехзначное значение, заканчивающееся на «5», нам нужно будет
использовать подстановочный символ _ два раза. Запрос примет вид:
*********************************************************************************
SELECT *
FROM categories
WHERE category_id LIKE '__5';
*********************************************************************************
Теперь мы получим значение category_id равное, например 125.
****** Использование оператора NOT с условием LIKE ******
Далее давайте рассмотрим пример использования оператора NOT с условием LIKE.
Например у нас есть таблица suppliers со следующими данными: supplier_id, supplier_name,
city, state.
Найдем все записи в таблице suppliers, где supplier_name не содержит литеру 'o'.
Формируем следующий SQL запрос в PgSQL:
*********************************************************************************
SELECT *
FROM suppliers
WHERE supplier_name NOT LIKE '%o%';
*********************************************************************************
Если в нашей таблице suppliers есть записи, в которых supplier_name не содержит
литеру 'o', мы увидим их на экране.
****** Использование escape-символов с условием LIKE ******
Важно понимать, как использовать «escape-символ» когда он соответствует шаблону.
Мы можем экранировать % или _ и искать литеральные версии. Допустим, мы хотим найти
% как литерал в условии LIKE.
Мы можем сделать это с помощью escape-символа.
В нашем примере мы будем использовать ! как escape-символ в условии LIKE.
!!! ВНИМАНИЕ !!!
Мы можем определить только escape-символ как один символ.
Лучше всего выбрать такой символ, который не будет появляться в наших
данных очень часто, например ! или же #.
!!! ВНИМАНИЕ !!!
У нас есть таблица test со следующими полями: test_id, test_value.
Мы хотим вернуть все записи из таблицы test, где test_value содержит литерал %, т.е.
знак процента, например 120%.
Формируем следующий SQL запрос в PgSQL:
*********************************************************************************
SELECT *
FROM test
WHERE test_value LIKE '%!%%' escape '!';
*********************************************************************************
В этом примере символ ! определяется как escape-символ. Первое и последнее значения %
в условии LIKE рассматриваются как обычные подстановочные символы. !% является
экранированным %, поэтому он рассматривается как литеральное значение %.
Мы можем дополнительно изменить приведенный выше пример и вернуть только те test_values,
которые начинаются с 1 и содержат литерал %.
Например так:
*********************************************************************************
SELECT *
FROM test
WHERE test_value LIKE '1%!%%' escape '!';
*********************************************************************************
Такой запрос вернет только записи с полем test_value, которые начинаются на 1 и
содержит литерал %. Например 10%, 124%.