- •Iso (международной организацией по
- •2 Понимание sql
- •Что такое - реляционная база данных?
- •Порядок строк произволен
- •4 Понимание sql ___________________________________________________________________
- •Идентификация строк ( первичные ключи )
- •Столбцы именуются и нумеруются
- •8 Понимание sql
- •************** Работа с sql **************
- •Sql : обзор
- •Что делает ansi ?
- •Интерактивный и вложенный sql
- •14 Понимание sql
- •Субподразделения sql
- •16 Понимание sql
- •Sql несогласованности
- •Что такое - пользователь?
- •18 Понимание sql
- •Условия и терминология
- •************** Работа с sql **************
- •24 Понимание sql
- •26 Понимание sql
- •Переупорядочение столбца
- •28 Понимание sql
- •Параметры distinct
- •30 Понимание sql
- •32 Понимание sql
- •************* Работа с sql ***************
- •38 Понимание sql
- •40 Понимание sql
- •42 Понимание sql
- •44 Понимание sql
- •Использование специальных операторов в условиях
- •50 Понимание sql
- •52 Понимание sql
- •54 Понимание sql
- •56 Понимание sql
- •************** Работа с sql **************
- •Обобщение данных с помощью агрегатных функций
- •64 Понимание sql
- •66 Понимание sql
- •Включение дубликатов в агрегатные функции
- •Предложение group by
- •68 Понимание sql
- •Предложение having
- •70 Понимание sql
- •72 Понимание sql
- •************** Работа с sql **************
- •Формирование выводов запросов
- •Помещение текста в вашем выводе запроса
- •78 Понимание sql
- •80 Понимание sql
- •82 Понимание sql
- •Упорядочение вывода по номеру столбца
- •84 Понимание sql
- •************** Работа с sql **************
- •Запрашивание многочисленых таблиц также как одной
- •90 Понимание sql
- •92 Понимание sql
- •94 Понимание sql
- •************** Работа с sql **************
- •Объединение таблицы с собой
- •Псевдонимы
- •100 Понимание sql
- •Устранение избыточности
- •102 Понимание sql
- •Больше псевдонимов
- •104 Понимание sql
- •106 Понимание sql
- •************** Работа с sql **************
- •Вставка одного запроса внутрь другого
- •112 Понимание sql
- •114 Понимание sql
- •116 Понимание sql
- •In определяет набор значений, одно из которых должно совпадать с другим
- •118 Понимание sql
- •In является подходящим, если запрос может ограниченно производить одно
- •120 Понимание sql
- •122 Понимание sql
- •*************** Работа с sql *************
- •Соотнесенные подзапросы
- •130 Понимание sql
- •132 Понимание sql
- •Соотнесенные подзапросы в предложении having
- •134 Понимание sql
- •*************** Работа с sql *************
- •Использование оператора exists
- •140 Понимание sql
- •142 Понимание sql
- •144 Понимание sql
- •146 Понимание sql
- •************** Работа с sql **************
- •Использование оператора exists
- •152 Понимание sql
- •154 Понимание sql _____________________________________________________________________
- •156 Понимание sql
- •158 Понимание sql
- •160 Понимание sql
- •162 Понимание sql
- •Использование count вместо exists
- •166 Понимание sql
- •************** Работа с sql **************
56 Понимание sql
______________________________________________________________________
ГЛ. 5
В примере выше, символ процента начала и символ процента окончания
обрабатываются как групповые символы; только подчеркивание предос-
тавлено само себе.
Как упомянуто выше, символ ESC может также использоваться самосто-
ятельно. Другими словами, если вы будете искать столбец с вашим сим-
волом ESC, вы просто вводите его дважды. Во-первых это будет означать
что символ ESC "берет следующий символ буквально как символ", и
во-вторых что символ ESC самостоятелен.
Имеется предыдущий пример который пересмотрен чтобы искать
местонахождение строки '_/' в sname столбце:
SELECT *
FROM Salespeople
WHERE sname LIKE ' % /_ / / %'ESCAPE'/';
Снова не будет никакого вывода с такими данными.
Строка сравнивается с содержанием любой последовательности символов
(%), сопровождаемых символом подчеркивания ( /_ ), символом ESC
( // ), и любой последовательностью символов в конце строки ( % ).
РАБОТА С НУЛЕВЫМИ( NULL ) ЗНАЧЕНИЯМИ
Часто, будут иметься записи в таблице которые не имеют никаких значе-
ний для каждого поля, например потому что информация не завершена,
или потому что это поле просто не заполнялось. SQL учитывает такой
вариант, позволяя вам вводить значение NULL(ПУСТОЙ) в поле,
вместо значения. Когда значение поля равно NULL, это означает, что
программа базы данных специально промаркировала это поле как не
имеющее никакого значения для этой строки (или записи).
Это отличается от просто назначения полю, значения нуля или пробела,
которые база данных будет обрабатывать также как и любое другое
значение. Точно также, как NULL не является техническим значением,
оно не имеет и типа данных. Оно может помещаться в любой тип поля.
Тем ни менее, NULL в SQL часто упоминается как нуль.
Предположим, что вы получили нового заказчика который еще не был
назначен продавцу. Чем ждать продавца к которому его нужно назначить,
вы можете ввести заказчика в базу данных теперь же, так что он не
потеряется при перестановке.
ИСПОЛЬЗОВАНИЕ СПЕЦИАЛЬНЫХ ОПЕРАТОРОВ В УСЛОВИЯХ 57
______________________________________________________________________
Вы можете ввести строку для заказчика со значением NULL в поле snum
и заполнить это поле значением позже, когда продавец будет назначен.
========== NULL ОПЕРАТОР =========
Так как NULL указывает на отсутствие значения, вы не можете знать
каков будет результат любого сравнения с использованием NULL. Когда
NULL сравнивается с любым значением, даже с другим таким же NULL,
результат будет ни верным ни неверным, он - неизвестен.
Неизвестный Булев, вообще ведет себя также как неверная строка,
которая произведя неизвестное значение в предикате не будет
выбрана запросом - имейте ввиду что в то время как NOT(неверное) -
равняется верно, NOT (неизвестное) - равняется неизвестно.
Следовательно, выражение типа 'city = NULL' или 'city IN (NULL)'
будет неизвестно, независимо от значения city.
Часто вы должны делать различия между неверно и неизвестно
- между строками содержащими значения столбцов которые не
соответствуют условию предиката и которые содержат NULL в
столбцах. По этой причине, SQL предоставляет специальный оператор
IS, который используется с ключевым словом NULL, для размещения
значения NULL.
Найдем все записи в нашей таблице Заказчиков с NULL значениями
в city столбце:
SELECT *
FROM Customers
WHERE city IS NULL;
Здесь не будет никакого вывода, потому что мы не имеем никаких
значений NULL в наших типовых таблицах. Значения NULL - очень
важны, и мы вернемся к ним позже.
ИСПОЛЬЗОВАНИЕ NOT СО
СПЕЦИАЛЬНЫМИ ОПЕРАТОРАМИ
Специальные операторы которые мы изучали в этой главе могут
немедленно предшествовать Булеву NOT.
58 ПОНИМАНИЕ SQL
______________________________________________________________________
ГЛ. 5
Он противоположен реляционным операторам, которые должны иметь опе-
ратор NOT - вводимым выражением. Например, если мы хотим устранить
NULL из нашего вывода, мы будем использовать NOT чтобы изменить на
противоположное значение предиката:
SELECT *
FROM Customers
WHERE city NOT NULL;
При отсутствии значений NULL( как в нашем случае ), будет выведена вся
таблица Заказчиков. Аналогично можно ввести следующее
SELECT *
FROM Customers
WHERE NOT city IS NULL;
- что также приемлемо.
Мы можем также использовать NOT с IN:
SELECT *
FROM Salespeople
WHERE city NOT IN ( 'London', 'San Jose' );
А это - другой способ подобного же выражения
SELECT *
FROM Salespeople
WHERE NOT city IN ( 'London', ' San Jose' );
Вывод для этого запроса показывается в Рисунке 5.9.
Таким же способом Вы можете использовать NOT BETWEEN и
NOT LIKE.
ИСПОЛЬЗОВАНИЕ СПЕЦИАЛЬНЫХ ОПЕРАТОРОВ В УСЛОВИЯХ 59
______________________________________________________________________
=============== SQL Execution Log ============
| |
| SELECT * |
| FROM Salespeople |
| WHERE sity NOT IN ('London', 'San Jose'; |
| ==============================================|
| snum sname city comm |
| ------ ---------- ----------- ------- |
| 1003 Rifkin Barcelona 0.15 |
| 1007 Axelrod New York 0.10 |
| |
===============================================
Рисунок 5. 9: Использование NOT с IN
=============== РЕЗЮМЕ ================
Теперь вы можете создавать предикаты в терминах связей специально
определенных SQL. Вы можете искать значения в определенном диапазоне
(BETWEEN) или в числовом наборе (IN), или вы можете искать
символьные значения которые соответствуют тексту внутри параметров
(LIKE).
Вы также изучили некоторые вещи относительно того как SQL
поступает при отсутствии данных - что реальность мировой базы данных
- используя NULL вместо конкретных значений. Вы можете извлекать или
исключать значения NULL из вашего вывода используя оператор IS NULL.
Теперь, когда вы имеете в вашем распоряжении весь набор стандартных
математических и специальных операторов, вы можете переходить к спе-
циальным функциям SQL которые работают на всех группах значений, а не
просто на одиночном значении, что важно.
Это уже тема Главы 6.
60 ПОНИМАНИЕ SQL
______________________________________________________________________
СH. 5