码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • hi mate, lets recall the bloody “JOIN“


    补补数据库基础

    上图中,表A的记录是123,表B的记录是ABC,颜色表示匹配关系。返回结果中,如果另一张表没有匹配的记录,则用null填充。

    注意:多表连接查询会比直接使用自带的API查询表中的一个属性,再根据属性查询另一个表,一个一个查询来得快。所以,我们要善用多表连接查询。

    举个例子:

    学生表:


    s_id:学生学号
    s_name:学生名称
    s_class:学生班级

    老师表:


    t_id:老师id
    t_class:老师管理的班级
    t_name:老师名称

    内连接(INNER JOIN)

    内连接:,,JOIN,INNER JOIN
    如果输入JOIN,那么默认就是INNER JOIN内连接

    1. /* 内连接 */
    2. SELECT * FROM student INNER JOIN teacher ON s_class=t_class
    3. /* 我比较喜欢这种,但是上面那种效率会更高,因为 JOIN 的优先级高于 逗号,,所以如果可以的话,尽量使用上面的 */
    4. SELECT * FROM student,teacher WHERE s_class=t_class

    补充:
    在使用 join 时,on 和 where 条件的区别如下:
    1、on 条件是在生成临时表时使用的条件,它不管 on 上的条件是否为真都会返回 left 或 right 表中的记录,full 则具有 left 和 right 的特性的并集。
    2、where 条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有 left join 的含义(必须返回左边或者右边表的记录)了,条件不为真的就全部过滤掉。

    而 inner jion 没这个特殊性,则条件放在 on 中和 where 中,返回的结果集是相同的。

     外连接(OUTERJOIN)

            左外连接(LEFT JOIN)

    左外连接:LEFT JOIN,LEFT OUTER JOIN
    
    1. /* 左连接 */
    2. SELECT * FROM student LEFT JOIN teacher ON s_class=t_class

             右外连接(RIGHT JOIN)

    右外连接:RIGHT JOIN,RIGHT OUTER JOIN
    
    1. /* 右连接 */
    2. SELECT * FROM student RIGHT JOIN teacher ON s_class=t_class

     全外连接(FULL JOIN) 

    全外连接:FULL JOIN,FULL OUTER JOIN

    注意:Oracle数据库支持full join,mysql是不支持full join的,但仍然可以同过左外连接+union+右外连接实现。 

    1. /* 全连接(不适用于MYSQL) */
    2. SELECT * FROM student FULL JOIN teacher ON s_class=t_class
    3. /* 全连接 */
    4. SELECT * FROM student LEFT JOIN teacher ON s_class=t_class
    5. UNION
    6. SELECT * FROM student RIGHT JOIN teacher ON s_class=t_class

     交叉连接(笛卡尔积)(CROSS JOIN)

    笛卡尔积:对所有元素一一映射,排列组合

    1. /* 交叉连接 */
    2. SELECT * FROM student CROSS JOIN teacher

    自链接 

     

    自连接作为一种特例,可以将一个表与它自身进行连接,称为自连接。
    若要在一个表中查找具有相同列值的行,则可以使用自连接。
    使用自连接时需为表指定两个别名,且对所有列的引用均要用别名限定。

    1. SELECT a.学号, a.课程号, b.课程号, a.成绩
    2. FROM student a JOIN student b
    3. ON a.成绩=b.成绩 AND a.学号=b.学号 AND a.课程号!=b.课程号

     

    REFERENCE:

    【SQL】JOIN 连接:内连接、外连接、交叉连接、自连接、等值连接、自然连接 - Nemo& - 博客园

  • 相关阅读:
    Linux下进程地址空间初步理解
    明明是旅游小程序却做起了内容电商?
    基于ssm的校园二手物品交易平台(idea+spring+springmvc+mybatis+jsp)
    基于深度学习的三维重建从入门实战教程 原理讲解 源码解析 实操教程课件下载
    Java设计模式 | 七大原则之开闭原则
    Day17-购物车页面-商品列表-实现滑动删除功能
    QT实战项目1——无边框窗口拖拽和阴影
    【SpringCloud微服务--Eureka服务注册中心】
    Spring Boot 3 整合 xxl-job 实现分布式定时任务调度,结合 Docker 容器化部署(图文指南)
    你必须知道的4种 Redis 集群方案及优缺点对比
  • 原文地址:https://blog.csdn.net/dongnihao/article/details/127981960
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号