Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Часть 2 - все в одном.doc
Скачиваний:
6
Добавлен:
04.09.2019
Размер:
84.99 Кб
Скачать
  1. Как можно соединить две или более таблицы?

Много таблиц. Если вы задаете список таблиц во фразе 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.

  1. Что собой представляет значение выражения, содержащего значение 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;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]