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;
Rebuild started: Project: Project *** Using Compiler 'V6.22', folder: 'E:\Keil_v5\ARM\ARMCLANG\Bin' Rebuild target 'Target 1' assembling startup_stm32f10x_md.s... Start/core_cm3.c(445): error: non-ASM statement in naked function is not supported 445 | uint32_t result=0; | ^ Start/core_cm3.c(442): note: attribute is here 442 | uint32_t __get_PSP(void) __attribute__( ( naked ) ); | ^ Start/core_cm3.c(465): error: parameter references not allowed in naked functions 465 | "BX lr \n\t" : : "r" (topOfProcStack) ); | ^ Start/core_cm3.c(461): note: attribute is here 461 | void __set_PSP(uint32_t topOfProcStack) __attribute__( ( naked ) ); | ^ Start/core_cm3.c(479): error: non-ASM statement in naked function is not supported 479 | uint32_t result=0; | ^ Start/core_cm3.c(476): note: attribute is here 476 | uint32_t __get_MSP(void) __attribute__( ( naked ) ); | ^ Start/core_cm3.c(499): error: parameter references not allowed in naked functions 499 | "BX lr \n\t" : : "r" (topOfMainStack) ); | ^ Start/core_cm3.c(495): note: attribute is here 495 | void __set_MSP(uint32_t topOfMainStack) __attribute__( ( naked ) ); | ^ 4 errors generated. compiling core_cm3.c... compiling misc.c... compiling system_stm32f10x.c... compiling stm32f10x_adc.c... compiling stm32f10x_dac.c... compiling stm32f10x_exti.c... compiling stm32f10x_dbgmcu.c... compiling stm32f10x_dma.c... compiling stm32f10x_crc.c... compiling stm32f10x_cec.c... compiling stm32f10x_bkp.c... compiling stm32f10x_can.c... compiling stm32f10x_flash.c... compiling stm32f10x_pwr.c... compiling stm32f10x_fsmc.c... compiling stm32f10x_
03-31
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值