Лекция 9н Предложение SELECTx

advertisement
Лекция 9. Предложение SELECT
Вопрос 1. Простая выборка
Все запросы на получение практически любого количества данных из одной или нескольких таблиц выполняются с помощью
единственного предложения SELECT. В общем случае результатом реализации предложения SELECT является другая таблица. К этой
новой таблице может быть снова применена операция SELECT и т.д., т.е. такие операции могут быть вложены друг в друга.
Представляет исторический интерес тот факт, что именно возможность включения одного предложения SELECT внутрь другого
послужила мотивировкой использования прилагательного "структуризированный" в названии языка SQL.
Предложение SELECT может использоваться как:
самостоятельная команда на получение и вывод строк таблицы, сформированной из столбцов и строк одной или
нескольких таблиц (представлений); элемент WHERE- или HAVING - условия (сокращенный вариант предложения,
называемый "вложенный запрос");
фраза выбора в командах CREAT VIEW, DECLARE CURSOR или INSERT;
средство присвоения глобальным переменным значений из строк сформированной таблицы (INTO-фраза).
Оператор SELECT состоит из 3 основных элементов: SELECT, FROM, WHERE. Первый элемент оператора определяет столбцы,
которые вы хотите получить. Директива FROM определяет таблицы, из которых извлекаются столбцы, a WHERE - условие, задающее
ограничение на отображение данных. Эти элементы представляют собой основу любого запроса.
Ниже приведен полный синтаксис оператора SELECT:
SELECT [ALL | DISTINCT] список_столбцов
[INTO имя_новой_таблицы]
СИНТАКСИС
[FROM таблицы_источники]
[WHERE условие_поиска]
[GROUP BY [ALL] выражение группирования]
[HAVING условие_поиска]
[ORDER BY имя_столбца [ASC |DESC]]
[COMPUTE {{ AVG|COUNT|MAX|MINISUM} (выражение)} [ , ...n]
[BY выражение [ ,...n ]]]
[FOR BROWSE] [OPTION (параметр_запроса [ ,...n])]
Запрос SELECT * FROM имя_таблицы составляет основу любого запроса. Оператор SELECT со (*) введенной вместо параметра
список_столбцов возвращает все столбцы таблицы
СИНТАКСИС
SELECT имя_столбца [, имя_столбца...] FROM
список_таблиц
СИНТАКСИС
SELECT имя_столбца AS ' заголовок_столбца' FROM
имя_таблицы
Исключение дубликатов
Для исключения дубликатов и одновременного упорядочения перечня необходимо дополнить запрос ключевым словом DISTINCT
(различный, различные), как показано в следующем примере:
Код
SELECT DISTINCT customer FROM Sales;
Вопрос 2. Выборка вычисляемых значений
Из синтаксиса фразы SELECT видно, что в ней может содержаться не только перечень столбцов таблицы или символ *, но и выражения.
Например, если нужно получить стоимость каждой книги с учетом 10% скидки для всех книг по зарубежной прозе из таблицы Books,
то необходимо выдать следующий запрос:
код
SELECT id, publishers, title, author, (price - price*0.1)AS
price, style FROM Books WHERE style='Заруб. проза';
Фраза SELECT может включать не только выражения, но и отдельные числовые или текстовые константы. Следует отметить, что
текстовые константы должны заключаться в апострофы (').
код
SELECT 'Книга', title, 'автора', author, 'с учетом
скидки', (price - price*0.1), 'p' FROM Books;
А что произойдет, если какой-либо член выражения не определен, т.е. имеет значение NULL и каким образом появилось такое
значение? Если при загрузке строк таблицы в какой-либо из вводимых строк отсутствует значение для какого-либо столбца, то СУБД
введет в такое поле NULL-значение. NULL- значение "придумано" для того, чтобы представить единым образом "неизвестные
значения" для любых типов данных. Действительно, так как при вводе данных в столбец или их изменении СУБД запрещает ввод
значений не соответствующих описанию данных этого столбца, то, например, нельзя использовать пробел для отсутствующего
значения числа. Нельзя для этих целей использовать и ноль: нет месяца или дня недели равного нулю, да и для чисел ноль не может
рассматриваться как неизвестное значение в одном месте и как известное - в другом. При выводе же NULL-значения на экран или
печатающее устройство его код воспроизводится каким-либо специально заданным символом или набором символов: например,
пробелом (если его нельзя перепутать с текстовым значением пробела) или сочетанием -0-.
Вопрос 3. Выборка с использованием фразы WHERE
3.1. Использование операторов сравнения>>
Для задания условий поиска используются операторы сравнения, приведенные в нижеследующей таблице:
Оператор
Описание
=
Равно
>
<
>=
<=
<>
Больше
Меньше
Больше или равно
Меньше или равно
Не равно
СИНТАКСИС SELECT имя_столбца [, имя_столбца...]
FROM имя_таблицы
WHERE имя_столбца оператор сравнения выражение
Следующий запрос возвращает названия и цены книг, продающихся в магазине автором которых является Шекспир
код
SELECT id, publishers, title, author, price, style
FROM Books
WHERE author = 'Шекспир';
Возможность использования нескольких условий, соединенных логическими операторами AND, OR, AND NOT и OR NOT, позволяет
осуществить более детальный отбор строк. Так, для получения перечня книг, опубликованными издательствами ACT и
Центрполиграф , можно сформировать запрос:
код
SELECT id, publishers, title, author, price, style
FROM Books
WHERE publishers='ACT' OR publishers='Центрполиграф'
3.2. Использование BETWEEN
Пример рассмотренный выше можно выполнить совершенно по-другому, хотя результат запроса будет одинаков. С помощью
BETWEEN ... AND ... (находится в интервале от ... до ...) можно отобрать строки, в которых значение какого-либо столбца находятся в
заданном диапазоне. Так, для получения перечня книг, со стоимостью от 150 до 300 рублей, можно сформировать запрос:
код
SELECT id, publishers, title, author, price, style
FROM Books
WHERE price BETWEEN 150 AND 300
WHERE
price NOT BETWEEN 150 AND 300
3.3. Использование IN
С помощью ключевого слова IN указываются строки, значения которых совпадают с одним из значений в заданном списке. Даты и
символьные данные необходимо заключать в одинарные кавычки.
СИНТАКСИС
SELECT имя_столбца [, имя_столбца...]
FROM имя_таблицы
WHERE имя_столбца [NOT] IN (список_значений)
Используя оператор NOT, можно прочесть строки не входящие в список. Следующий запрос возвращает данные об остальных книгах
в магазине:
3.4. Использование LIKE
Ключевое слово LIKE позволяет в качестве условия поиска сравнить часть указанной строки с имеющимися в таблице строками.
Директива LIKE используется со следующими типами данных: char, varchar, text, datetime. В сравниваемой строке можно
использовать 4 вида символов.
3.5. Вовлечение неопределенного значения (NULL-значения)
Если при загрузке данных не введено значение в какое-либо поле таблицы, то СУБД поместит в него NULL-значение. Аналогичное
значение можно ввести в поле таблицы, выполняя операцию изменения данных. Значение NULL не равносильно пробелу в
символьной строке или нулю в данных числового типа. Поле данных имеет значение NULL, если ему не было присвоено значение.
Если один из операндов имеет значение NULL, то и результат будет неопределенный. Как же в таком случае найти строки,
содержащие неопределенные значения?
Это можно сделать с помощью ключевых слов IS NULL и IS NOT NULL.
SELECT имя_столбца [, имя_столбца...]
СИНТАКСИС
FROM имя_таблицы
WHERE имя столбца IS [ NOT ] NULL
NULL
3.6. Выборка с использованием фразы ORDER BY
С помощью директивы ORDER BY оператора SELECT сортируются строки в наборе, возвращаемом запросом. Базовый синтаксис
директивы ORDER BY имеет вид:
SELECT имя_столбца [, имя_столбца...]
СИНТАКСИС
FROM список_строк
[ORDER BY имя_столбца | список_номеров_столбцов [ A S C | D E S C ] ]
Список директивы содержит произвольное количество столбцов, однако их общая длина не должна превышать 900 байт. Вместо имен
столбцов можно использовать их порядковые номера в таблице. Следующие два запроса возвращают одинаковые результаты:
код
SELECT id, title
FROM Books
ORDER BY id, title
SELECT id, title
FROM Books
1.
2
В директиве ORDER
ORDER BY BY
имена
и порядковые
номера столбцов используются совместно. Вы можете также указать порядок сортировки
строк: восходящий ASC и нисходящий DESC. Если порядок сортировки не указать то строки выводятся в восходящем порядке. Если в
упорядоченном столбце присутствуют значения NULL и применяется порядок сортировки ASC, то строки с NULL располагаются первыми.
Download