- •Структурированный язык запросов sql. Оператор delete. Структура оператора и примеры использования. Примеры использования delete с вложенными подзапросами.
- •Структурированный язык запросов sql. Оператор insert. Структура оператора и примеры использования. Использование insert с вложенными подзапросами.
- •Структурированный язык запросов sql. Оператор update. Структура оператора и примеры использования. Использование update с вложенными подзапросами.
- •Выборка данных оператором select. Структура оператора и примеры использования. Способы задания отображаемых полей. Использование distinct. Выборка значений с упорядочиванием.
- •Использование фразы where в операторах sql. Способы задания логических выражений в sql. Операторы in, like, between. Использование значения null в логических выражениях.
- •7 Вложенные подзапросы. Типы вложенных подзапросов. Способы включения вложенных подзапросов. Примеры использования вложенных подзапросов с разными способами включения.
- •Создание таблиц
- •Пример создания таблиц
- •Модификация таблиц
- •Удаление таблиц
- •Создание представлений. Правила создания модифицируемых представлений. Достоинства и недостатки представлений. Особенности определения полей представлений. Примеры использования.
- •Хранимые процедуры InterBase. Виды хранимых процедур. Расширения языка sql для использования в хранимых процедурах. Примеры создания хранимых процедур и их вызова.
- •Расширения языка sql для использования в хранимых процедурах и триггерах. Циклы и ветвления. Обработка исключений и ошибок.
- •Генераторы InterBase. Создание генераторов. Установка значений генераторов. Получение значений генераторов из
- •Триггеры InterBase. Типы триггеров. Контекстные переменные. Примеры создания триггеров для автоинкрементных полей и протоколирования изменений.
- •17. Транзакции в InterBase. Механизм транзакций. Параметры транзакций. Уровни изоляции и способы их задания в InterBase. Управление транзакциями. Примеры использования.
- •18. Библиотека доступа InterBase eXpress. Основные компоненты. Подключение к базе данных InterBase и организация просмотра и модификации данных.
- •20.Особенности системы защиты данных в InterBase. Пользователи и роли: создание и удаление. Вида прав. Раздача
Выборка данных оператором select. Структура оператора и примеры использования. Способы задания отображаемых полей. Использование distinct. Выборка значений с упорядочиванием.
SELECT ("селект") — оператор DML языка SQL, возвращающий набор данных (выборку) из базы данных, удовлетворяющих заданному условию. В большинстве случаев, выборка осуществляется из одной или нескольких таблиц. В последнем случае говорят об операции слияния (англ. join). В тех СУБД, где реализованы представления и хранимые процедуры, также возможно получение соответствующих наборов данных. При формировании запроса SELECT пользователь описывает ожидаемый набор данных: его вид (набор столбцов) и его содержимое (критерий попадания записи в набор, группировка значений, порядок вывода записей и т.п.). Запрос выполняется следующим образом: сначала извлекаются все записи из таблицы, а затем для каждой записи набора проверяется её соответствие заданному критерию. Если осуществляется слияние из нескольких таблиц, то сначала составляется произведение таблиц, а уже затем из полученного набора отбираются требуемые записи.
Особую роль играет обработка NULL-значений, когда при слиянии, например, двух таблиц — главной (англ. master) и подчинённой (англ. detail) — имеются или отсутствуют соответствия между записями таблиц, участвующих в слиянии. Для решения этой задачи используются механизмы внутреннего (англ. inner) и внешнего (англ. outer) слияния. Один и тот же набор данных может быть получен при выполнении различных запросов. Поиск оптимального плана выполнения данного запроса является задачей оптимизатора.
Оператор SELECT имеет следующую структуру:
SELECT
[DISTINCT | DISTINCTROW | ALL]
select_expression,...
[FROM table_references]
[WHERE where_definition]
[GROUP BY {unsigned_integer | col_name | formula}]
[HAVING where_definition]
[ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC], ...]
Формат запроса с использованием данного оператора:
SELECT список полей FROM список таблиц WHERE условия…Основные ключевые слова, относящиеся к запросу SELECT:
WHERE — используется для определения, какие строки должны быть выбраны или включены в GROUP BY.
GROUP BY — используется для объединения строк с общими значениями в элементы меньшего набора строк.
HAVING — используется для определения, какие строки после GROUP BY должны быть выбраны.
ORDER BY — используется для определения, какие столбцы используются для сортировки результирующего набора данных.
Примеры:
SELECT * FROM T; Для таблицы T запрос вернёт все столбцы всех строк данной таблицы
SELECT C1 FROM T; вернёт значения столбца C1 всех строк таблицы— в терминах реляционной алгебры можно сказать, что была выполнена проекция.
SELECT * FROM T WHERE C1 = 1; вернёт значения всех столбцов всех строк таблицы, у которых значение поля C1 равно '1'— в терминах реляционной алгебры можно сказать, что была выполнена выборка, так как присутствует ключевое слово WHERE.
Значения по умолчанию можно задавать для полей с типом данных «Текстовый», «Поле МЕМО», «Числовой», «Дата/время», «Денежный», «Логический» и «Гиперссылка». Если значение по умолчанию не определено, поле остается пустым, пока в него не введено значение. После задания значения по умолчанию оно будет применяться ко всем новым записям. При необходимости можно изменить значение в записи, заменив значение по умолчанию другим значением, если это не запрещено правилом проверки.
С помощью “DISTINCT” мы можем получить уникальные строки для практически любого запроса. Простейший пример, показывающий первые три цифры телефонных номеров:
SELECT DISTINCT LEFT(Phone,3) FROM Phones
Про использование “DISTINCT”, в силу его простоты, многого не скажешь. Однако, стоит сказать несколько слов про то, когда его использовать нежелательно. Предположим, нам необходимо получить список всех абонентов, у которых есть хотя бы один телефон. Теоретически, можно это сделать с помощью “DISTINCT”:
SELECT DISTINCT a.PersonID, a.LastName
FROM Persons a JOIN Phones t ON a.PersonID = t.PersonID
Однако в данном случае правильнее использовать конструкцию “WHERE EXISTS”:
SELECT a.PersonID, a.LastName
FROM Persons a
WHERE EXISTS(SELECT * FROM Phones t WHERE a.PersonID = t.PersonID)
В первом случае мы говорим – “соедини две таблицы, а потом исключи дубликаты”, а во втором – “возьми только те строки из первой таблицы, для которых есть соответствие во второй”. Логика подсказывает, что второй вариант экономичнее с точки зрения ресурсов.
Выборка значений с упорядочиванием.
Выдать номера, фамилии и города поставщиков, находящихся в Лондоне, в обратном алфавитном
порядке:
SELECT Номер_поставщика, Фамилия, Город,
FROM Поставщики
WHERE Город = 'Лондон'
ORDER BY Фамилия DESC;
Результат:
Номер_Поставщика Фамилия Город
1 Смит Лондон
4 Кларк Лондон
В общем случае не гарантируется, что результирующая таблица будет упорядочена каким-либо
определенным образом. Здесь, однако, пользователь специфицировал, что результат перед тем,
как он будет показан, должен быть организован в определенной последовательности.
Упорядочение может быть:
имя-столбца [упорядочение] [,имя-столбца [упорядочение]]...,
где "упорядочение", как и ранее, это ASC (возрастание) или DECS (убывание), и по умолчанию
принимается ASC. Каждое "имя-столбца" должно идентифицировать некоторый столбец результирующей
таблицы. Поэтому, например, следующее предложение недопустимо:
SELECT НОМЕР_ПОСТАВЩИКА
FROM Поставщики
ORDER BY ГОРОД;