SQL多表操作 内连接、外连接、交叉连接,(操作层面)学习笔记

来源:互联网 发布:java物流项目简历 编辑:程序博客网 时间:2024/06/05 19:45
忘记是一件正常的事情,计算机可以保持绝对的记忆力,但是不能保持高度有效的灵活性,大脑却可以保持相对较高的记忆力和绝对的灵活性。所以我们开始复习吧。

以下内容都是操作层面的内容,理论层面的现在书不在身边,如果路过的你有图书资源欢迎留言<周屹 李艳娟.数据库原理及开发应用>
众多知识点:
- 投影
- 等值连接
- 自然连接
- ……

一、预备

  • 数据用表
    • 这里写图片描述
  • 逻辑用图:

    • 公共数据为 test
    • 这里写图片描述
  • ON子句指定两个表的连接条件,WHERE子句来指定条件子句

SELECT * FROM 表连接表连接表…… ON 表连接条件若干 WHERE 条件字句若干

下文诸多不合理的地方ON和WHERE使用的很不恰当,有时间笔者会回来修正的。

二、内连接

内连接:内连接也叫连接,是最早的一种连接。还可以被称为普通连接或者自然连接,内连接是从结果表中删除与其他被连接表中没有匹配行的所有行,所以内连接可能会丢失信息。

  • 内连接: 只连接匹配的行

  • 就MySQL而言:

    • 语法:
SELECT * FROM test_a INNER JOIN test_b ON test_a.test = test_b.test
  • 结果:相同的列 Navicat 自动重命名了:
    • 这里写图片描述

三、外连接

共三种
左外连接(LEFT OUTER JOIN或LEFT JOIN)
右外连接(RIGHT OUTER JOIN或RIGHT JOIN)
全外连接(FULL OUTER JOIN或FULL JOIN)

3.1、左外连接

就公有数据而言
表A中独有的数据和 AB表公有的数据的和,重点是:如果就公共数据列中A包含B不包含的数据,那结果中的这一行对应的B中的数据为NULL。

  • 就MySQL而言:
    • 语法:
SELECT * FROM test_a LEFT JOIN test_b ON test_a.test = test_b.test
  • 语法中:LEFT JOIN 和 LEFT OUTER JOIN 等价
    • 结果:
  • 这里写图片描述

3.2、右外连接

实际上做的事情是:以右表为基准,根据公有数据列到左表中公有数据列寻找相同数据,如果得到相同的数据,就把左表中的这一行通通拿到结果集中以公共数据为基准的对应行,当然如果:右表中的某一行的公有数据在左表中没有相同的数据匹配,在结果集中,这一行的数据在左表区域将全部为NULL

  • 就MySQL而言:
    • 语法:
SELECT * FROM test_a RIGHT JOIN test_b ON test_a.test = test_b.test 
  • 语法中:RIGHT JOIN 和 RIGHT OUTER JOIN 等价
    • 结果:
  • 这里写图片描述

3.3、全外连接

  • 预测结果
    • 这里写图片描述
  • 事实上MySQL不支持 全连接 。

四、交叉连接

实际上做的事情就是把一个表中的每一行数据和另个一表中的所有行都重新组合一次组成新的数据表,结果的数据条数:左表行数 X 右表行数
有一个概念叫做笛卡尔积。

  • 就MySQL而言:
    • 语法:
SELECT * FROM test_a CROSS JOIN test_b
  • 结果:
    • 这里写图片描述

五、连接多个表

上文做的都是使用多表连接语法 连接两个表的例子。
现在展示使用多表连接语法连接三个表,关于内连接三(多)个表,外连接三(多)个表……,更多的就只有举一反三了。

SELECT *FROM    knowledge_point_compose_problemINNER JOIN problem ON knowledge_point_compose_problem.uk_problem_id = problem.idLEFT JOIN problem_type ON problem.uk_problem_type_id = problem_type.idWHERE    knowledge_point_compose_problem.uk_knowledge_point_id = '7bdfed3a1e6c4234a8085b9229db8a8d';

参考:

  1. 自然连接
  2. 内连接
  3. 投影
  4. Mysql中的内连接,外连接实例详解
  5. 内连接,外链接(左连接、右连接、全连接),交叉连接大总结
  6. MySQL内连接&左外连接&右外连接&完全连接和交叉连接
    • ON子句指定两个表的连接条件,WHERE子句来指定条件子句
  7. 事实上MySQL不支持 全连接 FULL JOIN。
  8. 内连接、左外连接、右外连接、全外连接、交叉连接(CROSS JOIN)—–小知识解决大数据攻略
0 0