数据表操作:一对一、一对多、多对多

本文深入解析数据库中表间关系,包括一对多、多对多及一对一的建表原则,并详细阐述了内连接、左连接、右连接及全连接等查询方式的应用场景与语法,帮助读者掌握数据库设计与查询的基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、表之间关系及建表原则

1、表之间的关系
        * 一对多的关系
            -一个学生只能在一个学院,但是一个学院有多个学生
            -一个员工只能在一个部门,一个部门有多个员工
 
        * 多对多的关系
            -一门课程可以被多个学生选择,一个学生也可以选择多门课程
 
        * 一对一的关系
            -在中国,一个男人只能有一个妻子
                     一个女人只能有一个丈夫    
            -一个公司只能有一个注册地址,一个注册地址包含一个公司
 
    2、建表原则
        (1)一对多建表原则(*****)
            * 一个员工只能在一个部门,一个部门有多个员工
            * 首先要确定一对多里面,谁是多的那一边,谁是一的那一边
            * 其次在多的那一边创建一个字段,这个字段指向一的那一边的主键
 
        (2)多对多的建表原则(*****)
            * 一门课程可以被多个学生选择,一个学生也可以选择多门课程
            * 首先确定表之间的关系
            * 其次创建第三张表,在创建两个字段,分别指向那两张表的主键
            用第三张表作为两个表关系表
 
        (3)一对一建表原则
            * 一个公司只能有一个注册地址,一个注册地址包含一个公司

           *在实际开发中,一般都把数据存到一张表里面

二、查询

前提条件:假设有两个表,一个是学生表,一个是学生成绩表。

 

 表的数据有:

 

一、内连接-inner jion :

最常见的连接查询可能是这样,查出学生的名字和成绩:

select s.name,m.mark from student s,mark m where s.id=m.studentid

上面就是我们最常见的inner join,即内连接,把符合student.id=mark.studentid 条件的元组才选出来,也可以写成:

select s.name,m.mark from student s inner join mark m on s.id=m.studentid

符合条件的只有两条结果,查出结果为:

 

二、左连接-left join:

左连接是把左边的表的元组全部选出来:

select s.name,m.mark from student s left join mark m on s.id=m.studentid

上面语句就是把左边的表,即student表中的元组全部选出,尽管有些分数表是没数据的,也选了出来,选出的结果为:

 

三、右连接-right join:

右连接就是把右边表的数据全部取出,不管左边的表是否有匹配的数据:

select s.name,m.mark from student s right join mark m on s.id=m.studentid

上面的语句就是把mark分数表的数据全部取出来,不管student表中是否有数据匹配,如下图所示:

 

四、全连接-full join:

把左右两个表的数据都取出来,不管是否匹配:

select s.name,m.mark from student s full join mark m on s.id=m.studentid

如下图所示,学生表和成绩表的数据都取了出来:

 

 

比较常用的是第一种,内连接,而且是用这种写法:

select s.name,m.mark from student s,mark m where s.id=m.studentid

 

--------------------- 
作者:AYXYJ 
来源:优快云 
原文:https://blog.youkuaiyun.com/weixin_39531549/article/details/82726498 
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值