当前位置 博文首页 > 每日小新:数据库连接查询

    每日小新:数据库连接查询

    作者:[db:作者] 时间:2021-08-05 15:56

    数据库day01

    (1)外连接:左连接、右链接、全连接

    (2)内部连接:凡是A,B表能够匹配上的记录查询出来,无主次之分

    (3)交叉连接:一般用来返回连接表的笛卡尔积。


    一、 LEFT JOIN(左外连接)和 RIGHT JOIN (右连接) 、FULL JOIN(全连接)


    1、创建两个表user和 shop两个表和 数据的插入

    (1)表数据插入

    -- 插入user表数据
    insert into user (username,phone,address)
    values 
    ("小明",11122223333,"北京"),
    ("小红",23243524211,"上海"),
    ("小军",24654754665,"安徽"),
    ("小兰",24654000065,"深圳");
    

    !user表结构
    在这里插入图片描述


    (2)shop表数据插入

    -- 插入shop表数据
    insert into shop (user_id,shop_name,shop_score)
    values
    (1,"球鞋",200),
    (1,"篮球",300),
    (2,"乒乓球",20);
    

    !shop表结构
    在这里插入图片描述


    2、对user表和shop表进行左连接查询
    -- 左连接查询
    select u.id,u.username,u.address,u.phone,s.shop_name,s.shop_score
    from user u left join shop s
    on u.id=s.user_id;
    

    结果:
    在这里插入图片描述


    3、对两个表进行右链接
    -- 右连接查询
    select u.id,u.username,u.address,u.phone,s.shop_name,s.shop_score
    from user u right join shop s
    on u.id=s.user_id;
    

    结果:
    在这里插入图片描述


    4、全连接
    select * from user full join shop on user.id=shop.id
    

    注:多表联查的内连接,左连接,右连接,全连接语法一致


    总结:

    通过两个表的左链接和右连接发现,user表–>shop表(左连接)看出,是以user表为主表,而shop–>user(右链接)看出,则是以shop表为主表,可以从两次结果比较得出右链接和左连接的区别


    二、内部链接

    -- 全连接
    select user.username,shop.id 
    from user
    inner join shop on user.id=shop.id;
    

    结果:
    在这里插入图片描述


    三、交叉连接 略,后期补充


    四、笛卡尔积

    笛卡尔积(Cartesian product)是指两个集合 X 和 Y 的乘积。

    例如,有 A 和 B 两个集合,它们的值如下:
    A = {1,2}
    B = {3,4,5}

    集合 A×B 和 B×A 的结果集分别表示为:
    A×B={(1,3), (1,4), (1,5), (2,3), (2,4), (2,5) };
    B×A={(3,1), (3,2), (4,1), (4,2), (5,1), (5,2) };

    以上 A×B 和 B×A 的结果就叫做两个集合的笛卡尔积。

    并且,从以上结果我们可以看出:
    两个集合相乘,不满足交换率,即 A×B≠B×A。
    A 集合和 B 集合的笛卡尔积是 A 集合的元素个数 × B 集合的元素个数。

    多表查询遵循的算法就是以上提到的笛卡尔积,表与表之间的连接可以看成是在做乘法运算。在实际应用中,应避免使用笛卡尔积,因为笛卡尔积中容易存在大量的不合理数据,简单来说就是容易导致查询结果重复、混乱。


    五、对左连接、右链接、内连接的画图理解

    在这里插入图片描述

    cs
    下一篇:没有了