zoukankan      html  css  js  c++  java
  • mysql笔记(7)-多表查询之自然连接、外连接

    本文将简单介绍多表查询的几种类型,包括关键字natural join、outer join等

    一、自然连接

    当我们在from从句中,用逗号连接不同表,且没有添加where子句时
    这样的多表连接被称为是笛卡尔积
    在大部分情况下,多表之间的笛卡尔积是没有意义的
    因此,我们可以通过添加where子句来实现自然连接

    下图是instructor表和teaches表的结构
    7-1.png
    例如,我们想找出有教课的教师名字及其对应的课程ID
    就可以在where子句中利用.操作符连接一个(或多个)公共属性
    从而实现我们需要的自然连接

    select name, course_id
    from instructor, teaches
    where instructor.ID=teaches.ID;
    

    而在from子句中使用关键字natural join来连接两个表
    同样能实现自然连接的效果

    select name,course_id
    from instructor natural join teaches;  
    

    在更复杂的多表查询中,使用关键字natural join可能会出现不可预知的错误
    因此,我们更推荐在where子句中用.操作符连接公共属性,从而实现自然连接的效果

    二、外连接

    外连接的类型有两种,分别是左外连接、右外连接

    1、左外连接

    用关键字 natural left outer join 来表示左外连接
    对于 table1 natural left outer join table2 而言
    返回的新表将会以table1的主码作为主码,并保留table1的所有数据
    例如:
    对 课程信息表和先修课程信息表
    即 course(course_id(主码),title,dept_name,credits) 和
    prereq(course_id,prereq_id(两个属性都是主码)) 进行左外连接
    效果如下:
    7-2.png

    2、右外连接

    用关键字 natural right outer join 来表示右外连接
    对于 table1 natural right outer join table2 而言
    返回的新表将会以table2的主码作为主码 ,并保留table2的所有数据
    例如:
    对 课程信息表和先修课程表 进行右外连接
    效果如下:
    7-3.png

  • 相关阅读:
    4 种高可用 RocketMQ 集群搭建方案!
    Spring @Autowired 注解自动注入流程是怎么样?
    AQS 自定义同步锁,挺难的!
    PyCharm爬虫实例:使用Scrapy抓取网页特定内容、数据采集与数据预处理--biaobiao88
    Ubuntu中安装Hadoop出现的问题
    Win10系统FF新推荐弹窗的卸载方法
    Sublime Text 中文乱码(解决)
    JProfiler的安装
    稀疏数组
    算法基础<一>
  • 原文地址:https://www.cnblogs.com/baebae996/p/12902060.html
Copyright © 2011-2022 走看看