数据库中多表查询

多表查询包括,等值连接,不等值连接,自然连接。
限制重复的列名
在多表中使用表前缀限制列名
使用表前缀可以提高效率
使用表别别名代替全表名前缀
表别名提供一个较短的名称使sql的代码量更少,使用较少的内存
在表不同的表中具有相同的列名的列可以用别名加以区分。

select e.ename,e.deptno,d.deptno,d.dname
from emp e,dept d
where e.deptno=d.deptno;

在这里插入图片描述
1.自然连接

natural join句子会以两个表中具有相同的名字的类为条件创建等值连接。
在表中查询满足等值条件的数据
如果只是列名相同而数据类型不同,则会产生错误
表自连接
表里有从属关系
在这里插入图片描述
由上图可以看出在empno和mgr列中有相等的编号,说明有人既是员工也是经理,那么这两列就有关系,我们就可以通过自连接来查询某员工的领导或者是某领导下的员工有哪些
例:
在这里插入图片描述
我们通过图上的sql语句可以查询出empno的领导编号和姓名,这里重要的是用到员工编号和经理编号的相同。
2 非等值连接
非等值连接:a个表中的某一列的值在b表中的某一区间。
例:

SQL> select e.ename,e.sal,d.grade
  2  from emp e,salgrade d
  3  where e.sal between d.losal and d.hisal;

ENAME             SAL      GRADE
---------- ---------- ----------
SMITH             800          1
JAMES             950          1
ADAMS            1100          1
WARD             1250          2
MARTIN           1250          2
MILLER           1300          2
TURNER           1500          3
ALLEN            1600          3
CLARK            2450          4
BLAKE            2850          4
JONES            2975          4
SCOTT            3000          4
FORD             3000          4
KING             5000          5

以上命令就是在emp表中的工资列在salgrade有工资的定级标准,以此来输出emp表中的工资等级。
3.内,外,全连接的区别
•两个表在连接过程中只返回匹配的,被称为内连接
• 两个表在连接过程中除了返回满连接条件的以外,还返回左(或右)表中不满⾜条件的,这种连接称为左(或右)外连接
• 两个表在连接过程中除了返回满足连接条件的以外,还返回两个表中不满条件的,这种连接称为全外连接。
例:
外连接
select e.ename,d.deptno
2 from emp e, dept d
3 where e.deptno(+)=d.deptno;

ENAME          DEPTNO
---------- ----------
SMITH              20
ALLEN              30
WARD               30
JONES              20
MARTIN             30
BLAKE              30
CLARK              10
SCOTT              20
KING                10
TURNER            30
ADAMS             20
JAMES             30
FORD               20
MILLER            10
                       40

15 rows selected.

4 笛卡尔积
笛卡尔积产的条件
1.) 连接条件被遗漏
2. )连接条件不全
3. )所有表中所有的互相连接
• 为了避免笛卡尔积,可以在WHERE加有效的连接条件
个人感悟:
多表查询就是用一个表中有相互关联的两列或者多个表中有关系的列相将他们关联,通过基础的sql语句查询出自己想要的结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值