两个表的笛卡尔积运算
这种运算没有意义可言。
DEPTNO DNAME LOC ENAME SAL
---------- -------------- ------------- ---------- ----------
40 OPERATIONS BOSTON FORD 3000
40 OPERATIONS BOSTON MILLER 2900
已选择52行。
自然连接(自动查找连接条件)
SQL> select * from emp natural join dept;
DEPTNO EMPNO ENAME JOB MGR HIREDATE SAL COMM DNAME LOC
---------- ---------- ---------- --------- ---------- -------------- ---------- ---------- -------------- -------------
30 7499 ALLEN SALESMAN 7698 20-2月 -81 1604.5 300 SALES CHICAGO
30 7521 WARD SALESMAN 7698 22-2月 -81 3000 500 SALES CHICAGO
20 7566 JONES MANAGER 7839 02-4月 -81 2975 RESEARCH DALLAS
30 7654 MARTIN SALESMAN 7698 28-9月 -81 3000 1400 SALES CHICAGO
30 7698 BLAKE MANAGER 7839 01-5月 -81 3050 SALES CHICAGO
10 7782 CLARK MANAGER 7839 09-6月 -81 3050 ACCOUNTING NEW YORK
20 7788 SCOTT ANALYST 7566 19-4月 -87 3000 RESEARCH DALLAS
10 7839 KING PRESIDENT 17-11月-81 5000 ACCOUNTING NEW YORK
30 7844 TURNER SALESMAN 7698 08-9月 -81 2960 0 SALES CHICAGO
20 7876 ADAMS CLERK 7788 23-5月 -87 2700 RESEARCH DALLAS
DEPTNO EMPNO ENAME JOB MGR HIREDATE SAL COMM DNAME LOC
---------- ---------- ---------- --------- ---------- -------------- ---------- ---------- -------------- -------------
30 7900 JAMES CLERK 7698 03-12月-81 2550 SALES CHICAGO
20 7902 FORD ANALYST 7566 03-12月-81 3000 RESEARCH DALLAS
10 7934 MILLER CLERK 7782 23-1月 -82 2900 ACCOUNTING NEW YORK
已选择13行。
自连接
SQL> select eshang.ename 上司,exia.ename 下属 from emp eshang,emp exia where eshang.empno=exia.mgr;
上司 下属
---------- ----------
JONES SCOTT
JONES FORD
BLAKE MARTIN
join字段连接
(1)内连接:[inner] join
select empno,ename,emp.deptno,dname from emp inner join dept on emp.deptno=dept.deptno;(等价于简单连接查询)
(2)外连接:[outer] join
左外连接:左表 left [outer] join 右表
select empno,ename,dept.deptno,dname from emp left join dept on emp.deptno=dept.deptno;
右外连接: 左表 right [outer] join 右表
select empno,ename,dept.deptno,dname from emp right join dept on emp.deptno=dept.deptno;
完全外连接:左表 full [outer] join 右表
select empno,ename,dept.deptno,dname from emp full join dept on emp.deptno=dept.deptno;
集合运算(交并差)
SQL> select empno,ename,job,sal from emp where sal>2000 union select empno,ename,job,sal from emp where job='MANAGER';
EMPNO ENAME JOB SAL
---------- ---------- --------- ----------
7521 WARD SALESMAN 3000
7566 JONES MANAGER 2975
7654 MARTIN SALESMAN 3000
7698 BLAKE MANAGER 3050
7782 CLARK MANAGER 3050
7788 SCOTT ANALYST 3000
7839 KING PRESIDENT 5000
7844 TURNER SALESMAN 2960
7876 ADAMS CLERK 2700
7900 JAMES CLERK 2550
EMPNO ENAME JOB SAL
---------- ---------- --------- ----------
7902 FORD ANALYST 3000
7934 MILLER CLERK 2900
已选择12行。
SQL> select empno,ename,job,sal from emp where sal>2000 intersect select empno,ename,job,sal from emp where job='MANAGER';
EMPNO ENAME JOB SAL
---------- ---------- --------- ----------
7566 JONES MANAGER 2975
7698 BLAKE MANAGER 3050
7782 CLARK MANAGER 3050
SQL> select empno,ename,job,sal from emp where sal>2000 minus select empno,ename,job,sal from emp where job='MANAGER';
EMPNO ENAME JOB SAL
---------- ---------- --------- ----------
7521 WARD SALESMAN 3000
7654 MARTIN SALESMAN 3000
7788 SCOTT ANALYST 3000
7839 KING PRESIDENT 5000
7844 TURNER SALESMAN 2960
7876 ADAMS CLERK 2700
7900 JAMES CLERK 2550
7902 FORD ANALYST 3000
7934 MILLER CLERK 2900
已选择9行。
来源:CSDN
作者:海棠A
链接:https://blog.csdn.net/weixin_44261821/article/details/103517098