数据存储:MySQL之多表连接方式
创始人
2024-05-20 21:53:51
0

        在我们走出新手村,开始编写系统时,总会遇到各种复杂的场景需要多个数据库表的联查,这时我们就需要掌握多表查询有几种方式,以便我们在各种复杂的应用场景使用适宜的连接方式。

用于测试的表:

student表

 grade表

 system表

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

        不带有WHERE条件子句,将返回两张表的笛卡尔积,也就是两张表行数的乘积。

SELECT * FROM student, grade;

SELECT * FROM student CROSS JOIN grade;

内连接(等值连接)

内连接

        从结果表中删除与其他被连接表中没有匹配行的所有行,所以内连接可能会丢失信息,因为他只显示两个表满足条件的交集。

SELECT * FROM student INNER JOIN grade ON student.id = grade.sid;

等值连接

SELECT * FROM student, grade WHERE student.id = grade.sid;

自然连接

        自然连接是一种特殊的等值连接。(自然连接无需指定连接列,SQL会检查两个表中是否相同名称的列,且假设他们在连接条件中使用,并且在连接条件中仅包含一个连接列。不允许使用ON语句,不允许指定显示列,显示列只能用*表示)

SELECT * FROM grade NATURAL JOIN `system`;

外连接

左外连接(左连接、LEFT JOIN、LEFT OUTER JOIN)

        将返回左表的所有行。如果左表的某行在右表中没有匹配行,则右表将返回空值

SELECT * FROM student LEFT JOIN grade ON student.id = grade.sid;

右外连接(右连接、RIGHT JOIN、RIGHT OUTER JOIN)

        将返回右表的所有行。如果右表的某行在左表中没有匹配行,则左表将返回空值

SELECT * FROM student RIGHT JOIN grade ON student.id = grade.sid;

全连接(UNION)

        Mysql并不直接支持全连接:可以通过LEFT JOIN+RIGHT JOIN+UNION

(SELECT * FROM student RIGHT JOIN grade ON student.id = grade.sid) UNION (SELECT * FROM student LEFT JOIN grade ON student.id = grade.sid);

UNION与UNION ALL的区别:UNION与UNION ALL都会合并结果集,但UNION会删除重复行。

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...