Oracle 12c中文版数据库管理、应用与开发实践教程 (清华电脑学堂)
上QQ阅读APP看书,第一时间看更新

5.2 内连接

内连接是最早的一种连接方式,它是指从结果表中删除与其他被连接表中没有匹配行的所有行,因此当匹配条件不满足时内连接可能会丢失信息。内连接的完整格式有以下两种:

        SELECT 列名列表FROM 表名l [INNER] JOIN 表名2  ON 表名1.列名=表名2.列名
        SELECT 列名列表 FROM 表名l,表名2 WHERE 表名1.列名=表名2.列名

第一种格式使用JOIN关键字与ON关键字结合将两个表的字段联系在一起,实现多表数据的连接查询;第二种格式之前使用过,是基本的两个表的连接。

5.2.1 等值连接

所谓的等值连接就是在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列值,包括其中的重复列。简单来说,基表之间的连接是通过相等的列值连接起来的查询就是等值连接查询。

实现等值连接时有两种格式,这里只使用JOIN关键字与ON关键字结合的方式进行介绍。

【范例5】

基于emp表和dept表创建查询,限定查询条件为两个表中的deptno(部门编号)列相等,并要求返回emp表中的员工编号、姓名和职位,dept表中员工所处的部门名称。语句如下。

        SELECT e.empno, e.ename, e.job, d.dname FROM emp e INNER JOIN dept d ON
        e.deptno=d.deptno;

执行上述语句时返回13行结果,部分内容如下。

        EMPNO         ENAME          JOB            DNAME
        ---------  ---------    --------------  --------------
        7369          SMITH         CLERK           RESEARCH
        7499          ALLEN         SALESMAN         SALES
        7521          WARD          SALESMAN         SALES
        7566          JONES         MANAGER          RESEARCH
        7654          MARTIN        SALESMAN        SALES

在上述语句中,INNER关键字可以省略,它们的实现效果是一样的。语句如下。

        SELECT  e.empno, e.ename, e.job, d.dname  FROM  emp  e  JOIN  dept  d  ON
        e.deptno=d.deptno;

注意

连接条件中各连接列的类型必须是可比较的,但没有必要是相同的。例如,可以都是字符型,或都是日期型;也可以一个是整型,另一个是实型,整型和实型都是数值型,因此是可比较的。但若一个是字符型,另一个是整数型就不允许了,因为它们是不可比较的类型。

5.2.2 不等值连接

在等值连接查询的连接条件中不使用等号,而使用其他比较运算符就构成了非等值连接查询。也就是说,非等值连接查询的是在连接条件中使用除了等于运算符以外的其他比较运算符比较被连接列的值。在非等值连接查询中,可以使用的比较运算符有>、>=、<、<=、! =以及BETWEEN AND等。

【范例6】

连接emp表和dept表进行查询,查询条件是两个表的部门编号(deptno)列相等,并且要求部门编号列的值小于30,符合查询条件时返回emp表中的员工编号和员工名称,dept表中的部门编号和部门名称。

        SELECT e.empno, e.ename, d.deptno, d.dname FROM emp e INNER JOIN dept d ON
    e.deptno = d.deptno AND d.deptno<30;

执行上述语句,输出结果如下。

        EMPNO      ENAME      DEPTNO        DNAME
        ------  ----------  ------------  -----------------
        7369       SMITH         20         RESEARCH
        7566       JONES         20         RESEARCH
        7782       CLARK         10         ACCOUNTING
        7839       KING          10         ACCOUNTING
        7902       FORD          20         RESEARCH
        7934       MILLER        10         ACCOUNTING
        7876       ADAMS         20         RESEARCH