Реферат Курсовая Конспект
Многотабличные запросы на чтение и объединение таблиц - раздел Программирование, Многотабличные Запросы На Чтение ...
|
Многотабличные запросы
Чтение всех столбцов
Многотабличный запрос можно использовать для чтения всех столбцов соединяемых таблиц.
SELECT * FROM таблица1, таблица2 WHERE таблица1.столбец= таблица2.столбец
возвращает все столбцы из обеих таблиц
SELECT таблица1.*, таблица2.столбец FROM таблица1, таблица2
WHERE таблица1.столбец= таблица2.столбец
возвращает все столбцы из первой таблицы и заданные столбцы из второй таблицы
SQL> SELECT * FROM dept d, emp e 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.
Эквисоединения
Соединение таблиц на основе точного равенства между значениями двух столбцов называется эквисоединением или соединением по равенству. Обычно эти столбцы являются компонентами первичного и внешнего ключа
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.
SELECT таблица1.столбец, таблица2.столбец
FROM таблица1, таблица2
WHERE таблица1.столбец = таблица2.столбец(+)
SELECT таблица1.столбец, таблица2.столбец
FROM таблица1, таблица2
WHERE таблица1.столбец(+) = таблица2.столбец
SQL> SELECT * FROM dept;
DEPTNO DNAME LOC
--------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
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
--------- -------------- ----------
30 SALES ALLEN
30 SALES BLAKE
30 SALES MARTIN
30 SALES JAMES
30 SALES TURNER
30 SALES WARD
6 rows selected.
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
--------- -------------- ----------
30 SALES ALLEN
30 SALES BLAKE
30 SALES MARTIN
30 SALES JAMES
30 SALES TURNER
30 SALES WARD
40 OPERATIONS
7 rows selected.
Операторы множеств
Иногда возникает необходимость объединить строки, возвращаемые несколькими запросами, в одно результирующее множество, не сравнивая содержимое соответствующих столбцов. SQL поддерживает такую возможность с помощью операторов множеств. Операторы множеств комбинируют строки, возвращаемые двумя запросами в одно результирующее множество. Количество и типы данных колонок в объединяемых с помощью операторов множеств запросах должны совпадать. Длины и имена колонок могут быть разными. Если имена колонок отличаются, то имена колонок результирующего множества будут совпадать с именами колонок первой таблицы.
§ UNION – возвращает все строки, выбранные первым и вторым запросами (реляционная операция «Объединение»)
§ UNION ALL – возвращает все строки, включая повторяющиеся, выбранные первым и вторым запросами
§ INTERSECT – возвращает строки, выбранные и первым, и вторым запросами (реляционная операция «Пересечение»)
§ MINUS - возвращает строки, выбранные первым запросом, из которых исключены строки, выбранные вторым запросом (реляционная операция «Вычитание»)
SELECT [ALL | DISTINCT] список_выбора FROM таблица1 [WHERE условие1]
{UNION | UNION ALL | INTERSECT | MINUS}
SELECT [ALL | DISTINCT] список_выбора FROM таблица2 [WHERE условие2]
[ORDER BY {столбец | псевдоним | позиция} [ASC | DESC]];
SQL> SELECT * FROM emp_bonus;
ENAME JOB BONUS
---------- --------- ---------
SCOTT ANALYST 3000
FORD ANALYST 3000
STONE ADVISER 2000
SQL> SELECT ename, job, sal FROM emp
2 WHERE job<='CLERK';
ENAME JOB SAL
---------- --------- ---------
SMITH CLERK 800
SCOTT ANALYST 3000
ADAMS CLERK 1100
JAMES CLERK 950
FORD ANALYST 3000
MILLER CLERK 1300
6 rows selected.
SQL> SELECT * FROM emp_bonus
2 UNION
3 SELECT ename, job, sal FROM emp WHERE job<='CLERK';
ENAME JOB BONUS
---------- --------- ---------
ADAMS CLERK 1100
FORD ANALYST 3000
JAMES CLERK 950
MILLER CLERK 1300
SCOTT ANALYST 3000
SMITH CLERK 800
STONE ADVISER 2000
7 rows selected.
SQL> SELECT * FROM emp_bonus
2 UNION ALL
3 SELECT ename, job, sal FROM emp WHERE job<='CLERK';
ENAME JOB BONUS
---------- --------- ---------
SCOTT ANALYST 3000
FORD ANALYST 3000
STONE ADVISER 2000
SMITH CLERK 800
SCOTT ANALYST 3000
ADAMS CLERK 1100
JAMES CLERK 950
FORD ANALYST 3000
MILLER CLERK 1300
9 rows selected.
SQL> SELECT * FROM emp_bonus
2 INTERSECT
3 SELECT ename, job, sal FROM emp WHERE job<='CLERK';
ENAME JOB BONUS
---------- --------- ---------
FORD ANALYST 3000
SCOTT ANALYST 3000
SQL> SELECT * FROM emp_bonus
2 MINUS
3 SELECT ename, job, sal FROM emp
4 WHERE job<='CLERK';
ENAME JOB BONUS
---------- --------- ---------
STONE ADVISER 2000
SQL> SELECT * FROM emp_bonus
2 UNION
3 SELECT ename, job, sal FROM emp WHERE job<='CLERK'
4 ORDER BY 1;
ENAME JOB BONUS
---------- --------- ---------
ADAMS CLERK 1100
FORD ANALYST 3000
JAMES CLERK 950
MILLER CLERK 1300
SCOTT ANALYST 3000
SMITH CLERK 800
STONE ADVISER 2000
7 rows selected.
Порядок выполнения запроса с использованием операторов множеств
1. Выполняется каждый оператор SELECT, участвующий в объединении.
§ Формируется декартово произведение таблиц, перечисленных в предложении FROM.
§ Условие соединения, заданное в предложении WHERE, применяется ко всем строкам декартова произведения таблиц. Строки, для которых условие соединения не выполняется, отбрасываются.
§ Для каждой из оставшихся строк вычисляется каждое значение в списке SELECT.
§ Если задано ключевое слово DISTINCT, удаляются повторяющиеся строки.
2. Выполняется объединение, заданное оператором множеств.
3. Если задано предложение ORDER BY, результат запроса сортируется.
Литература
1. Мартин Грабер. Справочное руководство по SQL: пер. с англ. – М.: Издательство «Лори», 1997.
2. Джеймс Р. Грофф, Пол Н. Вайнберг SQL: полное руководство: пер. с англ. - -К.: Издательская группа BHV, 1998.
– Конец работы –
Используемые теги: Многотабличные, Запросы, Чтение, Объединение, таблиц0.081
Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Многотабличные запросы на чтение и объединение таблиц
Если этот материал оказался полезным для Вас, Вы можете сохранить его на свою страничку в социальных сетях:
Твитнуть |
Новости и инфо для студентов