NS BOSTON
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30 40 OPERATIONS BOSTON
7782 CLARK MANAGER 7839 09-6月 -81 2450 10 40 OPERATIONS BOSTON
7788 SCOTT ANALYST 7566 24-1月 -87 3000 20 40 OPERATIONS BOSTON
7839 KING PRESIDENT 17-11月-81 5000 10 40 OPERATIONS BOSTON
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30 40 OPERATIONS BOSTON
7876 ADAMS CLERK 7788 02-4月 -87 1100 20 40 OPERATIONS BOSTON
7900 JAMES CLERK 7698 03-12月-81 1800 30 40 OPERATIONS BOSTON
7902 FORD ANALYST 7566 03-12月-81 3000 20 40 OPERATIONS BOSTON
7934 MILLER CLERK 7782 23-1月 -82 1300 10 40 OPERATIONS BOSTON
7935 XIAOXUE MANAGER 7839 01-3月 -98 5000 500 20 40 OPERATIONS BOSTON
已选择 60 行。
以上得到60行数据,但是上面所得到的数据中冗余的数据很多,我们可以用where子句中消除部分冗余数据:
SQL> select * from emp,dept where emp.deptno=dept.deptno;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO DEPTNO DNAME LOC
------ --------- --------- ----- ---------- ------ ----- ------ ------ ------------ -------------
7369 SMITH CLERK 7902 17-12月-80 800 20 20 RESEARCH DALLAS
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30 30 SALES CHICAGO
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30 30 SALES CHICAGO
7566 JONES MANAGER 7839 02-4月 -81 2975 20 20 RESEARCH DALLAS
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30 30 SALES CHICAGO
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30 30 SALES CHICAGO
7782 CLARK MANAGER 7839 09-6月 -81 2450 10 10 ACCOUNTING NEW YORK
7788 SCOTT ANALYST 7566 24-1月 -87 3000 20 20 RESEARCH DALLAS
7839 KING PRESIDENT 17-11月-81 5000 10 10 ACCOUNTING NEW YORK
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30 30 SALES CHICAGO
7876 ADAMS CLERK 7788 02-4月 -87 1100 20 20 RESEARCH DALLAS
7900 JAMES CLERK 7698 03-12月-81 1800 30 30 SALES CHICAGO
7902 FORD ANALYST 7566 03-12月-81 3000 20 20 RESEARCH DALLAS
7934 MILLER CLERK 7782 23-1月 -82 1300 10 10 ACCOUNTING NEW YORK
7935 XIAOXUE MANAGER 7839 01-3月 -98 5000 500 20 20 RESEARCH DALLAS
已选择 15 行。
SQL>
结果比上面的简洁得多。
在连接查询的from子句中,多个表之间可以使用英文逗号进行分割。除了这种形式外,sql还支持使用关键字join进行连接。
在from子句中,使用join连接的语法形式如下:
from join_table1 join_type join_table2 [on(join_condition)]
[join_type...on join_condition,...]
join_table1,join_table2表示参与连接操作的表名。
join_type连接类型,连接类型有inner join(内连接),outer join(外连接)和cross join(交叉连接)
join_condition连接条件,由被连接表中的列和比较运算符,逻辑运算符等构成。还可以使用多组的join_type...on join_condition...子句,实现多个表的连接。
内连接
内连接时最常用的连接查询方式,使用inner join关键字进行指定。如果知识使用join关键字,默认表示内连接。
内连接使用比较运算符,在连接表的某些列之间进行比较操作,并列出表中与连接条件相匹配的数据行。
根据使用的比较方式不同,内连接又分为等值连接,自然连接和不等连接。
1.等值连接
所谓的等值连接,是指在连接条件中使用等号运算符比较被连接的值,也就是通过相等的列值连接起来的查询。
例:使用inner join连接两个不同的表emp和dept,on用来设置连接条件,使用where子句限制查询范围。检索accounting部门的员工信息,如下:
SQL> select empno,ename,sal,d.deptno,dname from emp e inner join dept d on e.deptno=d.deptno where dname='ACCOUNTING';
EMPNO ENAME SAL DEPTNO DNAME
---------- ---------- ---------- ---------- --------------
7782 CLARK 2450 10 ACCOUNTING
7839 KING 5000 10 ACCOUNTING
7934 MILLER 1300 10 ACCOUNTING
确实从上面可以看出
数据库中只用三条dname为accounding的记录。
同样的,我们也可以选择部门编号大于20的记录。
SQL> select empno,ename,sal,d.deptno,dname from emp e inner join dept d on e.deptno=d.deptno where d.deptno>20;
EMPNO ENAME SAL DEPTNO DNAME
---------- ---------- ---------- ---------- --------------
7499 ALLEN 1600 30 SALES
7521 WARD 1250 30 SALES
7654 MARTIN 1250 30 SALES
7698 BLAKE 2850 30 SALES
7844 TURNER 1500 30 SALES
7900 JAMES 950 30 SALES
已选择 6 行。
2.不等连接
所谓的不等连接,就是在连接条件中使用除了等号之外的其他比较运算符,构成非等值连接查询。可以使用的