Соединение – это SELECT-запрос, который выбирает строки из двух или более таблиц. При этом запрос может извлекать любые столбцы из любой таблицы. Если хотя бы две из этих таблиц имеют одинаково названные столбцы, то имена таких столбцов должны уточняться именами таблиц, записываемых перед именами столбцов через точку. Большинство SELECT-запросов с соединениями содержат условия, в которых сравниваются значения столбцов из разных таблиц. Такие условия называются условиями соединения.
Эквисоединение.Это соединение с использованием в условии соединения операции равенства. Таким образом, эквисоединение извлекает строки с эквивалентными значениями в указанных столбцах.
Декартово произведение.Если в запросе не указано условие соединения, то строится декартово произведение таблиц, т. е. к каждой строке первой таблицы приписывается каждая строка второй таблицы.
Самосоединение.Соединяет таблицу саму с собой. При этом таблица появляется в списке FROM дважды и должна иметь дополнительное имя (псевдоним), чтобы можно было однозначно идентифицировать столбцы в условии соединения.
Внешнее соединение.Выдает все строки, которые удовлетворяют условию соединения, а также строки одной из таблиц, которые не удовлетворяют условию соединения. Чтобы записать запрос, который выполняет внешнее соединение таблиц A и B и выдает все строки из таблицы A, применим операцию внешнего соединения (+) ко всем столбцам из таблицы B в условиях соединения. Тогда для всех строк из таблицы A, для которых нет соответствующих строк в таблице B,
ORACLE предоставит строку, содержащую NULL во всех выражениях в списке столбцов, которые содержат столбцы из таблицы B.
Демонстрационные примеры
1.Выбрать из таблиц KNIGA и KNIGA_POSTAVKA информацию о книгах, поставленных продавцам за период с 24.01.2004 по 12.02.2004, указав для выводимого значения даты специальный формат вывода:
KNIGA.КОД_КНИГИ = KNIGA_POSTAVKA.КОД_КНИГИ AND ДАТА_ПОСТУПЛЕНИЯ BETWEEN '24-JAN-04' AND '12-FEB-04'
ORDER BY ПРОДАВЕЦ, АВТОР;
2.Выбрать из таблиц KNIGA и KNIGA_POSTAVKA по указанному продавцу – перечень издательств и жанров имеющихся у него книг без повторения; для задания фамилии продавца использовать переменную подстановки:
SELECT DISTINCT ПРОДАВЕЦ, ИЗДАТЕЛЬСТВО, ЖАНР
FROM KNIGA, KNIGA_POSTAVKA
WHERE KNIGA_POSTAVKA.КОД_КНИГИ = KNIGA.КОД_КНИГИ AND ПРОДАВЕЦ = '&PRODAVES'
ORDER BY ИЗДАТЕЛЬСТВО, ЖАНР;
3.Выбрать из таблиц KNIGA и KNIGA_POSTAVKA список продав-цов, у которых в наличии более 20 книг, указав данные об общем коли-честве и суммарной стоимости имеющихся у них книг:
SELECT ПРОДАВЕЦ, SUM(КОЛ_ЕДИНИЦ), SUM(ЦЕНА*КОЛ_ЕДИНИЦ) FROM KNIGA, KNIGA_POSTAVKA
WHERE KNIGA_POSTAVKA.КОД_КНИГИ = KNIGA.КОД_КНИГИ
GROUP BY ПРОДАВЕЦ HAVING SUM(КОЛ_ЕДИНИЦ) >= 20;
4.Выбрать из таблиц KNIGA и KNIGA_POSTAVKA по каждому из-дательству информацию об общем количестве и суммарной стоимости поставленных ими книг каждому продавцу:
SELECT ИЗДАТЕЛЬСТВО, ПРОДАВЕЦ, COUNT(КОЛ_ЕДИНИЦ), SUM(ЦЕНА*КОЛ_ЕДИНИЦ) FROM KNIGA, KNIGA_POSTAVKA
WHERE KNIGA.КОД_КНИГИ = KNIGA_POSTAVKA.КОД_КНИГИ
GROUP BY ИЗДАТЕЛЬСТВО, ПРОДАВЕЦ;
5.Выбрать из таблиц KNIGA и KNIGA_POSTAVKA по каждой кни-ге, сведения о которой имеются в таблице KNIGA, информацию о коли-честве продавцов, которым она была поставлена:
SELECT KNIGA.КОД_КНИГИ, COUNT(ПРОДАВЕЦ) FROM KNIGA, KNIGA_POSTAVKA WHERE KNIGA_POSTAVKA.КОД_КНИГИ
(+)= KNIGA.КОД_КНИГИ GROUP BY KNIGA.КОД_КНИГИ;
6.Выбрать из таблиц KNIGA и KNIGA_POSTAVKA по каждому продавцу информацию об отсутствующих у них книгах, общий перечень которых находится в таблице KNIGA:
SELECT ПРОДАВЕЦ, НАЗВАНИЕ, ЦЕНА FROM KNIGA, KNIGA_POSTAVKA
MINUS
SELECT ПРОДАВЕЦ, НАЗВАНИЕ, ЦЕНА FROM KNIGA, KNIGA_POSTAVKА WHERE KNIGA_POSTAVKA.КОД_КНИГИ = KNIGA.КОД_КНИГИ;
7.Выбрать из таблицы KNIGA информацию (название, цена) о трех самых дешевых книгах; предполагается, что в перечне книг не более трех различных книг с минимальной ценой:
SELECT А.НАЗВАНИЕ, А.ЦЕНА FROM KNIGA А, KNIGA В WHERE А.ЦЕНА >= В.ЦЕНА
GROUP BY А.НАЗВАНИЕ, А.ЦЕНА HAVING COUNT(В.НАЗВАНИЕ) <= 3 ORDER BY А.НАЗВАНИЕ;
8.Выбрать из таблиц KNIGA и KNIGA_POSTAVKA информацию (название и фамилию автора) о книгах, которые не были поставлены в магазин для продажи:
SELECT НАЗВАНИЕ, АВТОР FROM KNIGA WHERE
NOT EXISTS
(SELECT * FROM KNIGA_POSTAVKA WHERE KNIGA_POSTAVKA.КОД_КНИГИ
Пример работы с базой данных с использованием утилиты SQLplus СУБД Oracle.
Утилита SQLplus является клиентским приложением, которое может осуществить доступ к базе данных Oracle Express через локальную или глобальную сеть. Ее можно установить на компьютер клиента без установки сервера Oracle Express. При установке сервера она устанавливается автоматически.
Для работы с этой утилитой, добавим нового пользователя с именем Stud. Для этого выполним команды:
Запустите домашнюю страницу Oracle Express, выполняя команду Пуск\Все программы\ Oracle Database 10g Express Edition\Go To Database Home Page.
В появившемся приглашении введите логин system и пароль oracle. В первой вкладке администрирования выберите раздел DateBase Users\Create Users и добавьте нового пользователя с именем test, пароль – test.
Выполните подсоединение к базе данных пользователя test с помощьюSQLplus, для этого:
Откройте меню Пуск системы Windows и нажмите «Выполнить».В появившемся окне введите команду cmd для запуска командного интерпретатора DOS.
Наберите команду SQLplus, клавиша <Enter>.
Введите имя пользователя test, затем пароль test. Должно появиться приглашение SQL>
При работе в командной строке DOS предыдущие команды можно выбрать с помощью кнопок стрелочек вверх-вниз.
· Добавьте новый столбец Название товара: (Name_Tovar)
Alter table Orders add (Name_Tovar varchar2 (40) not null); клавиша <Enter>.
· Добавьте строку данных.
Insert into Orders values (
1, ‘Ivanov’,’25.10.2008’,’Bred’);
· Добавьте еще несколько строк данных.
Выполните просмотр данных из таблицы Orders
SELECT * FROM Orders; клавиша <Enter>.
· Выполните просмотр количества записей:
SELECT count(*) FROM Orders; клавиша <Enter>.
Выполните команду отсоединения:
Disconnect клавиша <Enter>.
Снова откройте домашнюю страницу, войдя под именем test, пароль – test и посмотрите созданную таблицу через раздел Object Brower.
Литература:
1. К. Дж. Дейт Введение в системы баз данных = An Introduction to Database Systems. — 7-е изд. — «Вильямс», 2001. — ISBN 5-8459-0138-3 (рус.)
2. Джонатан Сакс Система управления реляционной базой данных ORACLE. - Oracle Белмонт, 1987. – 195с.
3. Том Кайт Oracle для профессионалов: архитектура, методики программирования и особенности версий 9i, 10g и 11g, 2-е издание = Expert Oracle Database Architecture: Oracle Database Programming 9i, 10g, and 11g Techniques and Solutions, Second Edition. — М.: «Вильямс», 2011. — 848 с. — ISBN 978-5-8459-1703-4
4. Базы данных: модели реализация / Т. С. Карпова. - СПб.: Питер, 2001. - 304 с.: ил.
6. Бондаренко С.П. Практикум по курсу «Модели данных и СУБД». Учебное пособие // Бондаренко С.П, Исаченко А.Н – Минск: БГУ, 2005.-103с.
7. Маслова Н.А. Методические рекомендации и контрольные задания для работы со стандартными приложениями среды Microsoft Windows. Часть третья – Access for Windows ./ Маслова Н.А., Павлыш В.Н., Шамаев - Донецк: ДГТУ, 1998.- 82с.