Мартин Грубер - Понимание SQL
- Название:Понимание SQL
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Мартин Грубер - Понимание SQL краткое содержание
Данная книга является очень хорошим введением в теорию реляционных БД для пользователей-новичков, а также хорошим началом в освоении SQL, грамотном построение запросов, понимании того как эти запросы работают. Безусловно рекомендуется к прочтению для начинающих пользователей.
Понимание SQL - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
0.15
Таблица 5.1 Нахождение продавцов в Барселоне и Лондоне
SELECT * FROM Salespeople WHERE city IN
('Barcelona', 'London');
snum |
sname |
city |
comm |
1001 |
Peel |
London |
0.12 |
1004 |
Motika |
London |
0.11 |
1007 |
Rifkin |
Barcelona |
0.15 |
Таблица 5.2 SELECT использует IN
SELECT * FROM Customers WHERE snum IN (1001, 1007, 1004 );
snum |
cname |
city |
rating |
snum |
2001 |
Hoffman |
London |
100 |
1001 |
2006 |
Clemens |
London |
100 |
1001 |
2008 |
Cisneros |
San Jose |
300 |
1007 |
2007 |
Pereira |
Rome |
100 |
1004 |
Таблица 5.3: SELECT использует IN с номерами
Оператор 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 ) заставляет предикат быть верным.
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 чтобы выбирать ряд значений из упорядоченных по алфавиту значений.
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 ).
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 в алфавитных порядках
LIKE применим только к полям типа CHAR или VARCHAR, с которыми он используется чтобы находить подстроки. Т.е. он ищет поле символа чтобы видеть, совпадает ли с условием часть его строки. В качестве условия он использует групповые символы(wildkards) - специальные символы которые могут соответствовать чему-нибудь.
* Имеются два типа групповых символов используемых с LIKE:
символ подчеркивания (_ ) замещает любой одиночный символ. Например, 'b_t' будет соответствовать словам 'bat' или 'bit', но не будет
* соответствовать 'brat'.
знак процента (%) замещает последовательность любого числа символов
(включая символы нуля). Например '%p%t' будет соответствовать словам
'put', 'posit', или 'opt', но не 'spite'.
Давайте найдем всех заказчиков чьи имена начинаются с G (вывод показывается в Таблице 5.7 ):
SELECT
FROM Customers
WHERE cname LIKE 'G%';
SELECT * FROM Customers WHERE cname LIKE 'G';
cnum |
cname |
city |
rating |
snum |
2002 |
Giovanni |
Rome |
200 |
1003 |
2004 |
Grass |
Berlin |
300 |
1002 |
Таблица 5. 7: SELECT использует LIKE с %
LIKE может быть удобен если вы ищете имя или другое значение, и если вы не помните как они точно пишутся. Предположим что вы неуверены как записано по буквам имя одного из ваших продавцов Peal или Peel. Вы можете просто использовать ту часть которую вы знаете и групповые символы чтобы находить все возможные пары (вывод этого запроса показывается в Таблице 5.8 ):
SELECT *
FROM Salespeople
WHERE sname LIKE 'P _ _ l %';
Групповые символы подчеркивания, каждый из которых представляет один символ, добавят только два символа к уже существующим 'P' и 'l', поэтому имя наподобии Prettel не может быть показано. Групповой символ ' % ' - в конце строки необходим в большинстве реализаций если длина поля sname больше чем число символов в имени Peel (потому что некоторые другие значения sname - длиннее чем четыре символа). В таком случае, значение поля sname, фактически сохраняемое как имя Peel, сопровождается рядом пробелов. Следовательно, символ 'l' не будет рассматриваться концом строки. Групповой символ ' % ' - просто соответствует этим пробелам. Это необязательно, если поля sname имеет тип - VARCHAR.
Читать дальшеИнтервал:
Закладка: