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

  • 相关阅读:
    IntellJ IDEA快捷键
    【Java基础】Java 增强型的for循环 for each
    Markdown简易入门
    kafka性能调优
    百度地图 libBaiduMapSDK_base_v4_2_1.so" is 32-bit instead of 64-bit错误
    centos7防火墙firewalld拒绝某ip或者某ip段访问服务器任何服务
    华为策略路由配置
    Windows Server 2012 R2 英文版安装中文语言包教程更改为中文版
    linux修改网卡名为eth0
    华为路由配置IPSec
  • 原文地址:https://www.cnblogs.com/baebae996/p/12902060.html
Copyright © 2011-2022 走看看