多表查询(连接查询)

多表查询: 数据来源是多个表,这时注意一定要书写连接条件。当n个表连接,至少需要n-1个连接条件。

注意:

   (1)如何判断两个表之间有公共列?  类型一致、宽度一致。(列名不能作为判断标准,列名不同也能是公共列 如:emp的empno和emp的mgr)

      (2)如何避免二义性问题?给每个属性加归属。    

      (3)注意使用表别名。表别名一经定义,在该查询中只能使用该别名,原名不可再用。

 列别名 vs 表别名: (列别名只能用在select和排序中)

(1)等值连接: 连接条件用=号,满足连接条件的记录输出,不满足的不输出。

     查询每个员工的姓名和其所在部门名称。

  select emp.deptno,emp.ename,dept.dname from emp,dept where emp.deptno=dept.deptno;
                                         from emp inner join dept on emp.deptno=dept.deptno 

(2) 自连接: 数据来源于自身,这时要使用表别名。

    查询每个员工的姓名和其经理的姓名。

             select e.ename,m.ename from emp e,emp m  where e.mgr=m.empno;

(3)外连接:满足连接条件的记录输出,不满足的也输出。在oracle中,外连接运算符:(+),当其出现在等号的左边,为右外连接,反之为左外连接。

    select e.ename,m.ename from emp e,emp m  where e.mgr=m.empno(+);  //左外连接
   select e.ename,m.ename from emp e,emp m   where m.empno(+)=e.mgr;  //右外连接

(4) 不等连接:连接条件用除等号以外的运算符。这时,表与表之间通常没有公共列。

      查询每个员工的工资等级。    salgrade 

  select emp.ename,emp.sal,r.grade from emp,salgrade r where emp.sal between r.losal and r.hisal;

如何提升连接查询的效率? 
SQL99连接方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值