MySQL的多表查询问题

本文详细介绍了MySQL中的多表查询,包括连接查询(交叉连接、内连接、外连接)、嵌套查询、联合查询、报表查询以及数据库的备份和恢复。通过具体的例子和SQL语句,展示了如何进行导师与研究生之间的关系查询,以及在多表操作中的各种查询技巧。并给出了多个习题以巩固学习成果。

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

多表查询

为了消除数据的冗余,我们存数据的时候,会把完整的数据信息,分散到多张表来存储。
但是,用户通常需要的是一个完整的全面的信息,那么在查询的时候,就需要把这些分散的信息 拼接 。——多表查询

“拼接” 《=》 连接

连接查询

    交叉连接:(笛卡尔积)

         cross join
        将两张表的信息结合在一起(表1 | 表2 ):
            select * from 表1 cross join 表2(on );
            或者隐式的写法select * from 表1,表2;
        笛卡尔积:
            实现两张表的拼接,并不确保数据的正确性。
            拼接过程:
                1.对于两张表中的数据,不管有没有关系, 全部 两两组合。
            

            
            

    内连接:

        概述:
            返回连接表中  符合连接条件  及 查询条件的  数据行
            比之于交叉连接,更加关注参与连接的数据的内容。

        
        显式内连接: inner join + on
            select * from + 表1重命名 + inner join关键字 + 表2重命名 + on 判断条件
            
            select * from customer c inner join orders o on c.id=o.customer_id;
                customer c : 给customer 表重命名 / orders o :给orders 表重命名为o
                inner join : 内连接方式拼接左右两表。
                on : 判断连接条件 (重命名的 c 表的id属性,是否等于 重命名的o表的customer_id)
                    这里的 on 的判断条件需要在两个表中对应好。
                (这里重命名的 c 和 o 可以看成是对表的引用)    
                

        
        隐式内连接: inner join + where
            select * from customer c,orders o where c.id=o.customer_id;
            
            

    外链接:

        概述:
             会将  所有人的 情况  都会显式出来,如果不满足条件,就会以null的形式显式
        比之于内连接:内连接只返回符合条件的数据行,而外链接,就会将以基准表的所有信息都显示出来

        左外链接:
            left outer join 关键字,在 on 子句中设定连接条件。
            
            select * from customer c left outer join orders o on c.id=o.customer_id;
            效果:以左边为基准表,左表的每一行数据都必须出现在结果集当中,
                1.如果满足连接条件,就正常拼接;
                2.如果不满足连接条件,那么左边的不满足连接条件的数据记录就会放在结果集的最后,并且左表数据放入其中,右表数据全为NULL;
                
        右外链接:
            right outer join 关键字(连接两表),在 on 子句中设定连接条件。
            效果:以右表为基准表,右表的每一行数据都必须出现在结果集中。
                与左外连接只是表的基准不一样。
                
        在连接之后还可以 + where 来进行新表的条件过滤。
            eg. select * from customer c left outer join orders o on c.id=o.customer_id where price>200;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值