
- •Язык запросов sql
- •Введение в sql(0-0)
- •Аннотация к лекции
- •Краткая история развития sql
- •Возможности языка
- •Основы sql
- •Типы данных sql
- •Литералы
- •Операторы и выражения
- •Именование объектов
- •Комментарии
- •Итоги лекции
- •Простейшие запросы (0-0)
- •Аннотация к лекции
- •О предложении select
- •Основные фразы – select и from
- •Фраза select
- •Синтаксис фразы select
- •Указание выводимых столбцов
- •Исключение повторяющихся строк
- •Использование вычисляемых выражений
- •Переопределение имен результирующих столбцов
- •Включение литералов в результат запроса
- •Вывод результатов в файл
- •Фраза from
- •Синтаксис фразы from
- •Синонимы таблиц
- •Запрос в качестве имени таблицы
- •Итоги лекции
- •Отбор строк по условию (0-0)
- •Аннотация к лекции
- •Простейшие условия
- •Операторы сравнения
- •Логические операторы
- •Использование выражений над столбцами
- •Специальные операторы
- •Проверка на принадлежность множеству
- •Проверка на принадлежность диапазону значений
- •Проверка на соответствие шаблону
- •Проверка на неопределенное значение
- •Итоги лекции
- •Многотабличные запросы (0-0)
- •Аннотация к лекции
- •Декартово произведение таблиц
- •Условие соединения
- •Соединение таблиц по равенству
- •Соединение таблиц по неравенству
- •Самосоединение таблицы
- •Внешнее соединение таблиц
- •Соединение с использованием фразы from
- •Итоги лекции
- •Использование функций (0)
- •Аннотация к лекции
- •Агрегатные функции
- •Однострочныефункции
- •Строковые функции
- •Числовые функции
- •Временные функции
- •Функции преобразования
- •Итогилекции(урока)
- •Группировка и сортировка (0)
- •Аннотация к лекции
- •Запросы с группировкой строк
- •Понятие группировки строк
- •Группировка по одному столбцу
- •Группировка по нескольким столбцам
- •Использование выражений
- •Условиеотборагрупп
- •Сортировка строк
- •Сортировка по столбцу или выражению
- •Сортировка по нескольким столбцам или выражениям
- •Итоги лекции
- •Множественные операции над таблицами (0-0)
- •Аннотация к лекции
- •Множественные операции в стандарте sql
- •Объединение таблиц
- •Пересечение таблиц
- •Разность таблиц
- •Дополнительные аспекты использования множественных операций
- •Множественные операции и группировка
- •Множественные операции и сортировка
- •Итоги лекции
- •Определение таблиц и представлений (0-0)
- •Аннотация к лекции
- •Создание таблицы
- •Изменениетаблицы
- •Возможности изменения таблиц
- •Добавление столбца
- •Изменение определения столбца
- •Удаление столбца
- •Переименование таблицы
- •Удаление таблицы
- •Определение индексов
- •Представления
- •Итоги лекции
- •Манипулирование данными (0-0)
- •Аннотация к лекции
- •Добавление новых строк
- •Варианты добавления строк
- •Вставка отдельных строк
- •Использование запроса при вставке строк
- •Вставка значений по умолчанию
- •Обновление существующих данных
- •Удаление существующих строк
- •Импорт и экспорт данных
- •Итоги лекции
- •Определение ограничений целостности, ключей, задание прав доступа к данным (0-18)
- •Аннотация к лекции
- •Виды ограничений целостности
- •Ограничение на отсутствие значения
- •Ограничениеуникальности
- •Ограничение первичного ключа
- •Ограничение ссылочной целостности
- •Изменение ограничений целостности
- •Итоги лекции
- •Программирование бд (19)
Запрос в качестве имени таблицы
Стандарт ANSI и многие СУБД, в частности Oracle, допускают возможность использования запроса во фразе FROM в качестве имени таблицы. Ведь результатом запроса является промежуточная таблица, которая может быть исходной для другого запроса. Для этого нужно только вместо имени таблицы указать во фразе FROM подзапрос, заключив его в круглые скобки.
Таблица, получаемая в результате вычисления подзапроса, не имеет имени. Поэтому, если к ее столбцам необходимо будет обращаться из самого запроса, обязательно нужно приписать подзапросу синоним. Например, в следующем выражении указано, что результирующие таблицы подзапросов именуются как FDиDH:
FROM (SELECT Dean FROM FACULTY) FD,
(SELECTHeadFROMDEPARTMENT)DH
Мы вернемся к использованию подзапросов в подразделе 1.7.
Итоги лекции
На лекции студенты научились:
указывать столбцы, отбирающиеся в результирующую таблицу;
уточнять имена столбцов;
исключать повторяющиеся строки в результирующей таблице;
использовать во фразе SELECT выражения;
переопределять имена результирующих столбцов;
помещать в результирующую таблицу константы;
указывать синонимы таблиц;
использовать во фразе FROM запросы в качестве источника данных.
Отбор строк по условию (0-0)
Аннотация к лекции
Таблицы базы данных имеют тенденцию становиться очень большими, поскольку с течением времени в них добавляется все большее и большее количество строк. Поэтому выборка всех строк таблиц используется довольно редко, в основном при последовательном просмотре базы данных и для создания полных отчетов. Обычно пользователей интересуют только определенные строки таблиц.
SQL дает возможность определить критерии отбора необходимых строк во фразе WHERE предложения SELECT. В этом случае строки исходных таблиц будут включены в результирующую только если строка соответствует указанным критериям.
Условие – это выражение, которое может быть истинным или ложным (логическое выражение или предикат), то есть принимать логические значения TRUE или FALSE соответственно. В результирующую таблицу включаются только те строки, для которых указанное во фразе WHERE условие равно TRUE (иными словами, которые удовлетворяют заданному условию).
В случае одной таблицы механизм работы предложения SELECT с фразой WHERE следующий:
Из таблицы, указанной во фразе FROM, выбирается очередная строка.
Она проверяется на соответствие условию во фразе WHERE.
Если результат равен TRUE, строка включается в результирующую таблицу и форматируется в соответствии с фразойSELECT, а если он равенFALSE, строка пропускается.
Далее будут рассмотрены основные выражения, допустимые для условия во фразе WHERE.
Простейшие условия
Простейшими считаются условия, в которых используются операторы сравнения и логические операторы. Первые иногда также называются операторами отношений, а вторые — логическими связками.
Хотя такие условия являются простейшими в смысле семантики конструкций, они могут иметь довольно сложную структуру из многих операторов сравнений и вложенных друг в друга логических связок.
Операторы сравнения
Особенностью операторов сравнения является то, что независимо от типов
операндов их результатом являются логические значения. Предположим, вы хотите получить список всех профессоров.
Запрос.Вывести фамилии профессоров.
SELECTNameASСписок_профессоров
FROM TEACHER
WHERE Post = 'профессор';
СПИСОК ПРОФЕССОРОВ |
Сидоров |
Резван |
Ахромеев |
Это первый пример использования предиката над строковым типом данных. Здесь столбец строкового типа сравнивается со строковой константой. Запрос выполнен правильно, однако нужно всегда помнить о том, что предикаты над строками являются чувствительными к регистру букв. Например, предикат 'ИВАНОВ' = 'Иванов' будет ложным. Поэтому, если для некоторого профессора его должность была введена в таблицу TEACHER как 'Профессор', он не будет найден по условию WHERE Post = 'профессор'. Чтобы на предикаты над строками не влиял регистр букв, нужно использовать обычно имеющиеся в СУБД функции преобразования букв в прописные и строчные. В стандарте SQL, например, указаны функции UPPER и LOWER, выполняющие такие преобразования. Следовательно, для предыдущего запроса правильней будет записать условие фразы WHERE одним из следующих способов:
WHERE LOWER(Post) = 'профессор'
WHERE UPPER(Post) = 'ПРОФЕССОР'
Запрос.Найти названия кафедр с фондом финансирования, превышающим 15 000.
SELECT Name
FROM DEPARTMENT
WHERE Fund > 15000;
NAME |
Прикладной математики |
Экономики |
В двух приведенных выше примерах для формулировки условия мы использовали операторы сравнения. Для числовых и временных значений порядок имеет обычный смысл. Для строковых значений используется алфавитный порядок.
Примечание.Точнее, порядок символов определяется их кодировкой.
Приведем несколько примеров использования операторов сравнения для столбцов строкового и временного типа. Обратите внимание, что сравнивать можно не только значение столбца с константой, но и значения столбцов между собой.
Запрос.Вывести фамилии и должности преподавателей, принятых на работу после 01.01.2002.
SELECT Name AS Фамилия. Post AS Должность
FROM TEACHER
WHERE HireDate > TO_DATE(01/01/2001', 'DD/MM/YYYY');
ФАМИЛИЯ |
ДОЛЖНОСТЬ |
Хоренко |
преподаватель |
Вибровский |
ассистент |
Воропаев |
ассистент |
Козлутин |
ассистент |
Мартынов |
ассистент |
Запрос.Вывести фамилии и должности преподавателей, фамилии которых в алфавитном порядке располагаются после фамилии Резван.
SELECT Name. Post
FROM TEACHER
WHERE UPPER(Name) > 'PEЗBAH';
ФАМИЛИЯ |
ДОЛЖНОСТЬ |
Сидоров |
профессор |
Хоренко |
преподаватель |
Запрос.Вывести фамилии преподавателей, у которых надбавка меньше ставки в 2,5 и более раз.