• 带你了解数据库中JOIN的用法


    前言

    欢迎关注公众号:Coder编程
    获取最新原创技术文章和相关免费学习资料,随时随地学习技术知识!

    本章主要介绍数据库中Join的的用法,也是我们在使用数据库时非常基础的一个知识点。本次会介绍数据库中的inner joinleft joinright join 的用法以及它们之间的区别。 文章如有错误还请大家及时指出~

    以下都是采用mysql数据库

    Join

    相信大家在学习数据库的使用时,都有使用过Join,对数据库中的两张或两张以上表进行连接操作。
    Join 分为:

    • 内连接(inner join)
    • 外连接(outer join)

    其中外连接分为:

    • 左外连接(left outer join)
    • 右外连接(right outer join)
    • 全外连接(full outer join)

    说明:

    1.其中外连接的“OUTER”关键字可以省略不写。
    2.内连接用于返回满足连接条件的记录;而外连接则是内连接的扩展,它不仅会满足连接条件的记录,而且还会返回不满足连接条件的记录。

    笛卡尔积

    在我们进行多表联合查询的时候会出现的一种情况——笛卡尔积现象

    我们以下面两张表举例:

    学生表(Student)

    ID StudentName StudentClassID
    1 小明 1
    2 小红 2
    3 小兰 3
    4 小吕 2
    5 小梓 1

    班级表(Class)

    ClassID ClassName
    1 软件一班
    2 软件二班
    3 软件三班

    当我们进行查询操作的时候:

    select * from Student,Class;


    查询

    就会出现上面的情况,也就是笛卡尔现象,表Student中有5条记录,表Class中有3条记录,那么对于表Student而言有5种选择,对于表Class来说有3种选择。所以一共有 5 * 3 = 15种选择了,也就是笛卡尔积


    内连接——inner join

    内连接查询返回满足条件的所有记录,默认情况下没有指定任何连接则为内连接。
    例如:查询xx学生在xx班级 沿用上面的数据表

    select stu.StudentName,cl.ClassName from Student stu inner join Class cl on stu.StudentClassID=cl.ClassID;


    查询结果

    inner join

    左外连接——left join

    左外连接查询不仅返回满足条件的所有记录,而且还会返回不满足连接条件的连接操作符左边表的其他行。
    我们在原Student 表中新增学生:小美
    新增学生-小美
    例如: 查询xx学生在xx班级 沿用上面的数据表

    select stu.StudentName,cl.ClassName from Student stu left join Class cl on stu.StudentClassID=cl.ClassID;


    查询结果

    左外连接

    右外连接——right join

    右外连接查询不仅返回满足条件的所有记录,而且还会返回不满足连接条件的连接操作符右边表的其他行。
    我们在原Class表中新增班级:软件四班

    新增班级_软件四班

    例如: 查询xx学生在xx班级 沿用上面的数据表

    select stu.StudentName,cl.ClassName from Student stu right join Class cl on stu.StudentClassID=cl.ClassID;


    查询结果

    查询结果

    全连接——full join

    全连接查询不仅返回满足条件的所有记录,而且还会返回不满足连接条件的其他行。

    注:mysql默认不支持full join。

    这里我们就不做介绍了。


    文末

    欢迎关注个人微信公众号:Coder编程
    获取最新原创技术文章和免费学习资料,更有大量精品思维导图、面试资料、PMP备考资料等你来领,方便你随时随地学习技术知识!
    新建了一个qq群:315211365,欢迎大家进群交流一起学习。谢谢了!也可以介绍给身边有需要的朋友。

    文章收录至
    Github: https://github.com/CoderMerlin/coder-programming
    Gitee: https://gitee.com/573059382/coder-programming
    欢迎关注并star~
    微信公众号

    推荐阅读

    一篇让你理解进程与线程的区别与联系

    通过“表白”的方式,让我们快速了解网络协议

    一篇带你读懂TCP之“滑动窗口”协议

    参考文章:

    https://www.cnblogs.com/jackson-zhangjiang/p/7819634.html

    http://www.360doc.com/content/14/1229/21/7635_436727229.shtml

  • 相关阅读:
    Python中with用法详解
    SVM-支持向量机总结
    shell 脚本总结
    pycharm git 用法总结
    python小实例——tkinter实战(计算器)
    PyCharm 使用技巧
    博客园博文生成章节目录
    Chrome安装crx文件的插件时出现“程序包无效”
    Matplotlib pyplot中title() xlabel() ylabel()无法显示中文(即显示方框乱码)的解决办法
    Pandas-高级部分及其实验
  • 原文地址:https://www.cnblogs.com/coder-programming/p/10668123.html
Copyright © 2020-2023  润新知