20 RESEARCH 20 SCOTT
20 RESEARCH 20 JONES
30 SALES 30 ALLEN
30 SALES 30 BLAKE
30 SALES 30 MARTIN
30 SALES 30 JAMES
30 SALES 30 TURNER
30 SALES 30 WARD
14 rows selected.
Псевдоним таблицы может содержать до 30 символов. Если в запросе указан псевдоним таблицы, перед именами столбцов следует использовать этот псевдоним вместо имени таблицы во всем предложении SELECT. Псевдоним таблицы действителен только для текущей команды SELECT.
Многотабличный запрос можно использовать для чтения всех столбцов объединяемых таблиц.
SELECT * FROM таблица1, таблица2 WHERE таблица1.столбец= таблица2.столбец
возвращает все столбцы из обеих таблиц
SELECT таблица1.*, таблица2.столбец FROM таблица1, таблица2
WHERE таблица1.столбец= таблица2.столбец
возвращает все столбцы из первой таблицы и заданные столбцы из второй таблицы
SQL> SELECT * FROM dept d, emp e
2 WHERE d.deptno=e.deptno AND d.deptno>=30;
DEPTNO DNAME LOC EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
------- ------- --------- ------ -------- --------- ----- --------- ----- ------ -------
30 SALES CHICAGO 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
30 SALES CHICAGO 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
30 SALES CHICAGO 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
30 SALES CHICAGO 7900 JAMES CLERK 7698 03-DEC-81 950 30
30 SALES CHICAGO 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
30 SALES CHICAGO 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
6 rows selected.
SQL> SELECT d.*, e.ename FROM dept d, emp e
2 WHERE d.deptno=e.deptno AND d.deptno>=30;
DEPTNO DNAME LOC ENAME
--------- -------------- ------------- ----------
30 SALES CHICAGO ALLEN
30 SALES CHICAGO BLAKE
30 SALES CHICAGO MARTIN
30 SALES CHICAGO JAMES
30 SALES CHICAGO TURNER
30 SALES CHICAGO WARD
6 rows selected.
1. Формируется декартово произведение таблиц, перечисленных в предложении FROM.
2. Условие соединения, заданное в предложении WHERE, применяется ко всем строкам декартова произведения таблиц. Строки, для которых условие соединения не выполняется, отбрасываются.
3. Для каждой из оставшихся строк вычисляется каждое значение в списке SELECT.
4. Если задано ключевое слово DISTINCT, удаляются повторяющиеся строки.
5. Если задано предложение ORDER BY, результат запроса сортируется.
Объединение таблиц на основе точного равенства между значениями двух столбцов называется эквисоединением или объединением по равенству. Обычно эти столбцы являются компонентами первичного и внешнего ключа
SELECT таблица1.столбец, …, таблица2.столбец, …
FROM таблица1, таблица2
WHERE таблица1.столбец = таблица2.столбец
SQL> SELECT d.deptno, d.dname, e.ename
2 FROM dept d, emp e
3 WHERE d.deptno=e.deptno;
DEPTNO DNAME ENAME
--------- -------------- ----------
10 ACCOUNTING CLARK
10 ACCOUNTING KING
10 ACCOUNTING MILLER
20 RESEARCH SMITH
20 RESEARCH ADAMS
20 RESEARCH FORD
20 RESEARCH SCOTT
20 RESEARCH JONES
30 SALES ALLEN
30 SALES BLAKE
30 SALES MARTIN
30 SALES JAMES
30 SALES TURNER
30 SALES WARD
14 rows selected.
Многотабличный запрос возвращает все строки, соответствующие условию соединения. Если Вы хотите сузить результаты запроса, необходимо комбинировать условия соединения с другими поисковыми условиями. Дополнительное условие поиска добавляется с помощью оператора AND.
SQL> SELECT d.deptno, d.dname, e.ename
2 FROM dept d, emp e
3 WHERE d.deptno=e.deptno AND d.deptno<30;
DEPTNO DNAME ENAME
--------- -------------- ----------
10 ACCOUNTING CLARK
10 ACCOUNTING KING
10 ACCOUNTING MILLER
20 RESEARCH SMITH
20 RESEARCH ADAMS
20 RESEARCH FORD
20 RESEARCH SCOTT
20 RESEARCH JONES
8 rows selected.
Достаточно часто возникает ситуация, когда необходимо получить информацию из разных таблиц, причем ни один столбец таблицы не соответствует в точности ни одному столбцу другой таблицы. Например (Рисунок 2), таблица EMP содержит столбец SAL, представляющий собой заработную плату сотрудников. Таблица SALGRADE состоит из строк, определяющих нижнюю и верхнюю границы заработной платы для каждого разряда. Чтобы выяснить разряд каждого сотрудника, необходимо составить многотабличный запрос, сравнивающий колонку SAL таблицы EMP с колонками LOSAL и HISAL таблицы SALGRADE. Точного соответствия между значениями этих колонок нет, поэтому условие соединения должно включать операторы сравнения, отличные от оператора равенства (<, <=, >, >=, BETWEEN).
Рисунок 2 Несвязанные таблицы
SQL> SELECT e.ename, e.job, e.sal, s.grade
2 FROM emp e, salgrade s
3 WHERE e.sal>=s.losal AND e.sal<=s.hisal;
ENAME JOB SAL GRADE
---------- --------- --------- ---------
SMITH CLERK 800 1
ADAMS CLERK 1100 1
JAMES CLERK 950 1
WARD SALESMAN 1250 2
MARTIN SALESMAN 1250 2
MILLER CLERK 1300 2
ALLEN SALESMAN 1600 3
TURNER SALESMAN 1500 3
JONES MANAGER 2975 4
BLAKE MANAGER 2850 4
CLARK MANAGER 2450 4
SCOTT ANALYST 3000 4
FORD ANALYST 3000 4
KING PRESIDENT 5000 5
14 rows selected.
§ Если строка из одной таблицы не имеет пары из другой таблицы, она не включается в результирующее множество, возвращаемое многотабличным запросом. Может возникнуть ситуация, когда результат запроса должен включать все строки одной из таблиц, даже если они не имеют подходящей пары во второй таблице. Отсутствующую строку можно включить в результирующее множество запроса, используя оператор внешнего соединения (+). Оператор внешнего соединения можно указать только на одной стороне условия соединения в предложении WHERE - на той стороне, где не хватает информации - после имени таблицы. Стандарт SQL2, также, допускает внешнее соединение только с одной стороны условия соединения, но синтаксис оператора внешнего соединения сильно отличается для разных реализаций языка SQL. Условие внешнего соединения не может включать логический оператор OR.
SELECT таблица1.столбец, таблица2.столбец
FROM таблица1, таблица2
WHERE таблица1.столбец = таблица2.столбец(+)
SELECT таблица1.столбец, таблица2.столбец
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.