您当前的位置: 首页 >  sql

衣舞晨风

暂无认证

  • 0浏览

    0关注

    1156博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Oracle 连接查询(mysql、 sql server一样)

衣舞晨风 发布时间:2014-02-08 16:34:15 ,浏览量:0

背景:

emp表中有14条记录:

dept表中4条记录:

salgrade表中有5条记录:

一、交叉连接(CROSS JOIN)

       交叉连接(CROSS JOIN):有两种,显式的和隐式的,不带ON子句,返回的是两表的乘积,也叫笛卡尔积。

       例如:下面的语句1和语句2的结果是相同的(均为56条记录)。

       语句1:隐式的交叉连接,没有CROSS JOIN。

select empno,ename,sal,dname,loc from emp,dept

    语句2:显式的交叉连接,使用CROSS JOIN

select empno,ename,sal,dname,loc from emp CROSS JOIN dept

二、内连接

          内连接是根据指定的连接条件进行连接查询,只有满足连接条件的数据才会出现在结果集中。

       当执行两个表内连接查询的时,首先在第一个表中查找到第一个记录,然后从头开始扫描第二个表,逐一查找满足条件的记录,找到后将其与第一个表中的的第一个记录拼接形成结果集中的第一个记录。当第二个表被扫描一遍后,再从第一个表中查询第二个记录,然后再从头扫描第二个表,逐一查找满足条件的记录,找到后将其与第一个表中的第二个记录拼接形成结果集中的一个记录。重复执行,知道第一个表中的全部记录都处理完毕为止。

1. 相等连接

          通过两个表具有相同意义的列,可以建立相等连接条件。只有连接列上在两个表中都出现且值相等的行才会出现在查询结果中。

       例如,查询10号部门员工的员工号、员工名、工资、部门号和部门名:

SELECT empno,ename,sal,emp.deptno FROM EMP
join DEPT on EMP.DEPTNO = DEPT.DEPTNO and EMP.DEPTNO=10
        结果如下图:

小注:

如果左边与右表的关系是一对多的关系,在选出的任一记录中,假若右表有多个记录与其对应,那么,连接后的左表,主键将不再唯一。 典型应用:将存在多关系的引用表放在左表,将存在一关系的被引用表放在右表,通过=号将主外键进行连接,通过对右表设定过滤条件,选出相应的且主键唯一的左表记录。 备注:inner join 是默认的连接方式,可缩写为join。

比如下面两种方式效果是一样的:

SELECT * FROM emp,dept 
WHERE emp.deptno=dept.deptno;

SELECT * FROM emp
INNER JOIN dept ON dept.deptno=emp.deptno;

2、不相等连接

    如果连接条件中的运算符不是等号而是其他关系的运算符,这成为不相等连接。

   例如,查询10号部门员工的工资等级:

select empno,ename,sal,grade 
from emp 
join salgrade 
on sal>losal and sal            
关注
打赏
1647422595
查看更多评论
0.1120s