Оператор BETWEEN

Оператор BETWEEN похож на оператор IN. В отличие от определения по номерам из набора, как это делает IN, BETWEEN определяет диапазон, значения которого должны уменьшаться, что делает предикат верным. Вы должны ввести ключевое слово BETWEEN с начальным значением, ключевое AND и конечное значение. В отличие от IN, BETWEEN чувствителен к порядку, и первое значение в предложении должно быть первым по алфавитному или числовому порядку. ( Обратите Внимание, что в отличие от Английского языка, SQL не говорит, что "значение находится (между)BETWEEN значением и значением", а просто "значение BETWEEN значение". (Это применимо и к оператору LIKE). Следующий пример будет извлекать из таблицы Продавцов всех продавцов с комиссионными между .10 и .12 (вывод показывается в Рисунке 5.4):
SELECT * FROM Salespeople WHERE comm BETWEEN .10 AND .12;

Для включенного оператора BETWEEN, значение, совпадающее с любым из двух значений границы ( в этом случае, .10 и .12 ) заставляет предикат быть верным.

SQL Execution Log

SELECT *
FROM Salespeople WHERE comm BETWEEN .10 AND .12;

snum
sname
city
comm

1001
Peel
London
0.12

1004
Motika
London
0.11

1003
Axelrod
New York
0.10

Рисунок 5.4: SELECT использует BETWEEN
SQL не делает непосредственной поддержки не включения BETWEEN. Вы должны или определить ваши граничные значения так, чтобы включающая интерпретация была приемлема, или сделать что-нибудь типа этого:
SELECT * FROM Salespeople WHERE ( comm BETWEEN .10, AND .12 ) AND NOT comm IN ( .10, .12 );

Вывод для этого запроса показывается в Рисунке 5.5. По общему признанию, это немного неуклюже, но зато показывает, как эти новые операторы могут комбинироваться с операторами Буля, чтобы производить более сложные предикаты. В основном, вы используете IN и BETWEEN также как вы использовали реляционные операторы, чтобы сравнивать значения, которые берутся либо из набора ( для IN ) либо из диапазона ( для BETWEEN ).
Также, подобно реляционным операторам, BETWEEN может работать с символьными полями в терминах эквивалентов ASCII. Это означает, что вы можете использовать BETWEEN, чтобы выбирать ряд значений из упорядоченных по алфавиту значений.

SQL Execution Log

SELECT * FROM Salespeople
WHERE ( comm BETWEEN .10 AND .12 AND NOT
comm IN ( .10 .12;

snum
sname
city
comm

1004
Motika
London
0.11

Рисунок 5.5: Сделать BETWEEN — невключенным. Этот запрос выбирает всех заказчиков, чьи имена попали в определенный алфавитный диапазон:
SELECT * FROM Customers WHERE cname BETWEEN ‘A’ AND ‘G’;

Вывод для этого запроса показывается в Рисунке 5.6.
Обратите Внимание что Grass и Giovanni отсутствуют, даже при включенном BETWEEN. Это происходит из-за того, что BETWEEN сравнивает строки неравной длины. Строка ‘G’ более короткая, чем строка Giovanni, поэтому BETWEEN выводит ‘G’ с пробелами. Пробелы предшествуют символам в алфавитном порядке ( в большинстве реализаций ), поэтому Giovanni не выбирается. То же самое происходит с Grass. Важно помнить это когда вы используете BETWEEN для извлечения значений из алфавитных диапазонов. Обычно вы указываете диапазон с помощью символа начала диапазона и символа конца( вместо которого можно просто поставить z ).

SQL Execution Log

SELECT *
FROM Customers
WHERE cname BETWEEN ‘A’ AND ‘G’;

cnum
cname
city
rating
snum

2006
Clemens
London
100
1001

2008
Cisneros
San Jose
300
1007

Рисунок 5. 6: Использование BETWEEN в алфавитных порядках
 
 
 
 

‹ Работа с нулевыми( NULL ) значениями
Вверх
Оператор IN ›

Айтистанция
Добавить комментарий