- •II) Вопросы по языку sql
- •Как можно специфицировать вывод всех столбцов таблицы?
- •Зачем необходимы алиасы имена столбцов? Как это делается?
- •Содержит ли результат запроса повторяющиеся строки? Как можно удалить повторяющиеся строки?
- •Зачем нужны алиасы столбцов? Как они задаются?
- •Зачем нужна квалификация столбцов именами таблиц?
- •Что такое внешнее соединение? Сформулируйте и запишите запрос с внешним соединением.
- •Как можно соединить две или более таблицы?
- •Что собой представляет значение выражения, содержащего значение null? Как проверить, что значение столбца равно null.
- •Назначение оператора like. Примеры
- •Назначение операторов in и between. Примеры.
- •Агрегатные функции. Какая область действия агрегатных функций при наличии и отсутствии фразы group by. Примеры.
- •Назначение фраз group by и having
- •Что можно использовать во фразе select при наличии и отсутствии фразы group by?
- •Что такое независимые и связанные подзапросы. Примеры.
- •Подзапросы в условии сравнения групп. Примеры
- •Подзапросы в условии проверки вхождения элемента во множество. Примеры.
- •Подзапрос в условии exists
- •Простые и связанные подзапросы во фразе having
Как можно соединить две или более таблицы?
Много таблиц. Если вы задаете список таблиц во фразе FROM, то все строки первой таблицы конкатенируются со всеми строками второй таблицы. Например, запрос:
SELECT *
FROM FACULTY, DEPARTMENT;
производит конкатенацию всех строк таблицы FACULTY со всеми строками таблицы DEPARTMENT. Этот запрос эквивалентен операции декартова произведения реляционной алгебры.
Соединение двух таблиц. Чтобы получить семантически осмысленный результат, следует соединить строки факультетов со теми строками кафедр, которые принадлежат этим факультетам.
Используя столбец FacNo, который присутствует в обоих таблицах, вы может соединить факультеты только с их кафедрами с помощью условия фразы WHERE, как это показано в следующем запросе:
SELECT *
FROM FACULTY, DEPARTMENT
WHERE FACULTY.FacNo = DEPARTMENT.FacNo;
Такое соединение называется экви-соединением, так как оно производится по равенству значений двух столбцов из различных таблиц.
Соединение многих таблиц. Вы можете соединять столько таблиц, сколько необходимо, например, в следующем запросе выводятся факультеты с их преподавателями:
SELECT FACULTY.Name, TEACHER.Name
FROM FACULTY, DEPARTMENT, TEACHER
WHERE FACULTY.FacNo = DEPARTMENT.FacNo AND DEPARTMENT.DepNo = TEACHER.DepNo;
Обратим внимание, что столбцы таблицы DEPARTMENT не выводятся, она используется только для соединения факультетов с преподавателями. (Логические операторы будут обсуждены далее).
Указание необходимых столбцов. Когда используется более, чем одна таблица, вы можете указать в качестве выходных столбцы из различных таблиц. В случае необходимости имена столбцов могут быть уточнены именами таблиц. Имена столбцов также могут быть переименованы с помощью алиасов, как это сделано в следующем запросе:
SELECT FACULTY.Name AS Faculty_name,
DEPARTMENT.Name AS Department_name,
DEPARTMENT.Fund AS Department_fund
FROM FACULTY, DEPARTMENT
WHERE FACULTY.FacNo = DEPARTMENT.FacNo;
Соединение по условию, отличающемуся от равенства. Экви-соединение использует оператор равенства (=) во фразе WHERE для соединения таблиц, в не экви-соединениях используются другие операторы отношений. Например, в следующем примере выводятся кафедры, которые имеют фонд финансирования, превышающий фонд финансирования его факультета:
SELECT DEPARTMENT.Name, DEPARTMENT.Fund
FROM FACULTY, DEPARTMENT
WHERE FACULTY.Fund < DEPARTMENT.Fund;
Обратите внимание, что хотя для получения необходимого ответа мы соединяем две таблицы, однако в результат попадают столбцы только из таблицы DEPARTMENT.
Что собой представляет значение выражения, содержащего значение null? Как проверить, что значение столбца равно null.
Значение NULL указывает на то, что это выражение не оприделино, иными словами, вырежние не имеет данных.
Оператор IS NULL. Оператор IS NULL позволяет проверить значение столбца на null-значение. Он дает TRUE, если значение столбца NULL, и FALSE, если значение столбца не null.
Пример14 – Проверка на значение NULL: Выдать преподавателей, у которых не определены значения столбцов Salary или Commission:
SELECT Name
FROM TEACHER
WHERE Salary IS NULL OR Commission IS NULL;
Оператор IS NOT NULL. Является отрицание к оператору IS NULL.
Функция NVL. Она имеет синтаксис NVL(expr1, expr2). Если expr1 равно null, то возвращает expr2; если же не null, то возвращаетexpr1. Она позволяет вывести специальное значение, если значение столца равно null.
Пример15. Функция NVL: Вывести факультеты и их фондами. Если фонд не определен, то вывести строку “Fund not defined”
SELECT Name, NVL(TO_CHAR(Fund), 'Fund not defined')
FROM FACULTY;