Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BD / Labs / Russian / Russian / Lab4R-SELECTBasicFeatures.doc
Скачиваний:
19
Добавлен:
20.02.2016
Размер:
346.62 Кб
Скачать

Фраза from

Фраза FROM содержит имя таблицы или список имен таблиц, которые используются для выбора данных.

Одна таблица. В простейшем случае используется одна таблица. Все предыдущие примеры использовали одну таблицу.

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

Имена-синонимы (алиасы) для таблиц. Во фразе FROM с именем таблицы может быть связано другое имя, которое выступает в качестве ее синонима (алиаса). Такие имена могут использоваться в любом месте запроса для ссылки на таблицу. Синтаксис определения алиаса таблицы следующий:

table_name table_alias_name

Например, предыдущий запрос может быть представлен следующим образом:

SELECT d.Name, d.Fund

FROM FACULTY f, DEPARTMENT d

WHERE f.Fund < d.Fund;

В этом примере использование алисов таблиц является факультативным, однако имеются такие запросы, в которых нельзя обойтись без алиаслов таблиц.

Соединение таблицы с самой собой.Таблица может быть соединена с самой собой. В этом случае алиасы таблиц являются обязательными, так как необходимо различать две различных копии таблицы. В следующем запросе мы получаем пары групп, которые имеют одинаковый рейтинг:

SELECT G1.Num, G2.Num, G1.Rating

FROM SGROUP G1, SGROUP G2

WHERE G1.GrpNo = G2.GrpNo;

Внешнее соединение (оuter join). Внешнее соединение расширяет возможности обычного соединения. Внешнее соединение возвращает все строки, которые удовлетворяют условию соединения, а также строки одной из таблиц, для которых не нашлось строки из другой таблицы, которые бы удовлетворили условию соединения. Такие строки не возвращаются обычным соединением. Для того, чтобы произвести внешнее соединение таблиц A и B с получением в результате ВСЕХ строк таблицы A, следует применить оператор внешнего соединения (+) ко всем столбцам таблицы В. Для всех тех строк таблицы А, для которых не нашлось совпадающих строк из таблицы В, Oracle возвращает значение NULL для всех тех выражений из списка SELECT, которые используют столбцы из В. В следующем примере мы получаем список факультетов и их кафедр, причем имена кафедр присутствуют даже в том случае, когда у них нет факультетов – в этом случае вместо имени факультета выводится значение NULL:

SELECT FACULTY.Name AS FacName, DEPARTMENT.Name AS DepName, DEPARTMENT.Fund AS DepFund

FROM FACULTY, DEPARTMENT

WHERE FACULTY.FacNo = DEPARTMENT.FacNo (+);

Таблица DUAL. Oracle имеет в своем составе таблицу DUAL, которая не содержит ни строк ни столбцов. Она доступна всем пользователям. Она используется в том случае, когда вы хотите вывести какие-либо значения, которые не выбираются (или не вычисляются) из значений какой-либо таблицы. Например, в следующем запросе выводится текущая системная дата:

SELECT SYSDATE FROM DUAL;

Естественно, что для получения этой даты вы можете воспользоваться любой существующей таблицей, например:

SELECT SYSDATE FROM LECTURE;

однако в этом случае количество выводимых значений системной даты будет равно количеству сток в таблице LECTURE.

Соседние файлы в папке Russian