⑧多表关系、内连接外连接自连接

多表关系

数据库中多表之间的关系有三种
一对一:如:每个人只有一个身份证号
解决:可以在第一张表上建一个外键连接上第二张表的主键上,也可以在第二张表上建一个外键连接上第一张表的主键上。但是这个一般不考虑,因为可以直接在一张表上进行,何必建两张表呢。

1对多(或多对一):公司的员工只属于一个部门,但一个部门可以有多个员工
解决:在“少”的一方建立主键,在“多”的一方建立一个外键去连接“少”的一方的主键。

多对多:一个学生可以选择多门选修课,选修课也可以被多个学生选择
解决:因为是多对多的关系,所以要引用第三张表。在第三张表中建立两个外键去分别连接其他两张表的主键

ps:外键所在的表是从表, 主键所在的表是主表。

内连接与外连接

内连接:查询的是两张表之间的交集数据;内连接的语法分为两种:隐式内连接、显示内连接

外连接:连接结果不仅包含符合连接条件的行同时也包含自身不符合条件的行。包括左外连接、右外连接和全外连接

1、内连接

  • 隐式内连接
SELECT 字段列表 FROM 表1 , 表2 WHERE 条件 ... ;
  • 显式内连接
SELECT 字段列表 FROM 表1 [ INNER ] JOIN 表2 ON 连接条件 ... ;

(案例)

1.查询每一个员工的姓名 , 及关联的部门的名称 (隐式内连接实现)
表结构: emp , dept
连接条件: emp.dept_id = dept.id

select emp.name,dept.name from emp,dept where emp.dept_id = dept.id;

如果字段前面的表名较长,可以给表起别名:

①. tablea as 别名1 , tableb as 别名2 ;
②. tablea 别名1 , tableb 别名2 ;

select e.name,p.name from emp e,dept p where e.dept_id = p.id;

注:一旦给表起了别名,就不能再使用表名来指定对应的字段了,此时只能够使用别名来指定字段。

2.查询每一个员工的姓名 , 及关联的部门的名称 (显式内连接实现)

select e.name,d.name from emp e inner join dept d on e.dept_id = d.id;

2、外连接

外连接分为左外连接右外连接全外连接

左外连接 left outer join 或者 left join

1.左外连接

SELECT 字段列表 FROM 表1 LEFT [ OUTER ] JOIN 表2 ON 条件 … ;
相当于查询左表的所有数据和左右表交集部分的数据

2.右外连接

SELECT 字段列表 FROM 表1 RIGHT [ OUTER ] JOIN 表2 ON 条件 … ;
相当于查询右表的所有数据,和左右表交集部分的数据

扩展资料:
全外连接 full outer join 或者 full join
在等值连接的基础上将左表和右表的未匹配数据都加上。

SELECT * FROM TESTA FULL OUTER JOIN TESTBON TESTA.A=TESTB.A

自连接

即自己连接自己,也就是把一张表连接查询多次

语法:

SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件 … ;
自连接查询,也可以是内连接查询,也可以是外连接

案例
1.查询员工 及其 所属领导的名字
表结构: emp

select a.name,b.name from emp a,emp b where a. managerid= b.id;
相当于两张一样的表进行内连接

2.查询所有员工 emp 及其领导的名字 emp , 如果员工 没有领导, 也需要查询 出来//需要使用外连接
表结构 : emp a , emp b

select a.name ‘员工’,b.name ‘领导’ from emp a left join emp b on a. managerid= b.id;

注:在自连接查询中,必须要为表取别名。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值