SQL的多表查询

打印 上一主题 下一主题

主题 813|帖子 813|积分 2439

SQL的多表查询


  • 多表查询的概述

    • 指从多张表中查询数据;
    • 各个表格之间相互关联,基本分为:一对多(多对一)、多对多、一对一;

  • 语法
    1. select * from 表1,表2;
    复制代码
  • 查询分类

    • 连接查询:

      • 内连接:相当于查询A、B表的交集部分数据;
      • 外连接:

        • 左外连接:查询左表所以数据,以及两张表交集部分数据;
        • 右外连接:查询右表所以数据,以及两张表交集部分数据;

      • 自连接:当前表与自身的连接查询,自连接必须使用表别名;

    • 子查询:

      • 标量子查询:子查询结果为单个值;
      • 列子查询:子查询结果为一列;
      • 行子查询:子查询结果为一行;
      • 表子查询:子查询结果为多行多列;


多表查询  - 一对多(多对一)


  • 实现

    • 在多的一方建立外键,指向一的一方的主键;

多表查询  - 多对多


  • 实现

    • 建立第三张中间表,中间表至少包含两个外键,分别关联两方主键;

多表查询  - 一对一


  • 实现

    • 在任意一方加入外键,关联另外一方的主键,并设置外键为唯一的(unique);

多表查询 - 消除无效的笛卡尔积


  • 笛卡尔积

    • 笛卡尔乘积是指在数字中,两个集合 A集合、B集合的所有组合情况;
    • 在多表查询时,需要消除无效的笛卡尔积;

  • 消除无效的笛卡尔积
    1. select * from 表1,表2 where 表1外键 = 表2.主键
    复制代码
多表查询 - 连接查询 - 内连接


  • 语法

    • 隐式内连接:
      1. select 查询列表 from 表1,表2 where 条件;
      复制代码
    • 显示内连接:
      1. select 字段列表 from 表1 [inner] join 表2 on 连接条件;
      复制代码
      (PS:方括号("[]")内的为可选项;)
      (注意:如果已经为表设置别名,则不能直接通过表名限定字段;)

多表查询 - 连接查询 - 外连接


  • 语法

    • 左外连接:
      1. select 字段列表 from 表1 left [outer] join 表2 on 条件;
      复制代码
      (PS:方括号("[]")内的为可选项;)
    • 右外连接:
      1. select 字段列表 from 表1 right [outer] join 表2 on 条件;
      复制代码
      (PS:方括号("[]")内的为可选项;)

多表查询 - 连接查询 - 自连接


  • 语法
    1. select 字段列表 from 表1 别名1 join 表1 别名2 on 条件;
    复制代码
多表查询 - 联合查询


  • 语法
    1. select 字段列表 from 表1
    2. union [all]
    3. select 字段列表 from 表2;
    复制代码
    (PS:方括号("[]")内的为可选项;)
    (注意:
    union是对查询的结果合并;
    union all是对查询的结果合并后去重复;
    联合查询的多张表的列数必须保持一致,字段类型也需要保持一致;

多表查询 - 子查询


  • 语法
    1. select * from t1 where column1 = (select column1 from t2);
    复制代码
    (注意:子查询的外部语句可以是insert、update、delete、select的任何一个)
  • 子查询结果分类

    • 标量子查询(子查询结果为单个值)
    • 列子查询(子查询结果为一列)
    • 行子查询(子查询结果为一行)
    • 表子查询(子查询结果为多行多列)

  • 子查询位置分类

    • where之后
    • from之后
    • select之后

多表查询 - 子查询 - 标量子查询

<ul>概述

子查询的返回值是单个值(数字、字符串、日期等);
常用的操作符号


=、、>、>=、
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

石小疯

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表