当前位置: 首页 > news >正文

数据存储:MySQL之多表连接方式

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

用于测试的表:

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会删除重复行。

相关文章:

  • 20篇高质量程序人生文章分享,做开发不仅仅只有代码
  • 连续函数的运算与初等函数的连续性——“高等数学”
  • 沁恒CH32V307单片机入门(01):基础说明与流程体验
  • React源码:diff算法
  • Java 开发环境配置 “JDK”(超详细整理,适合新手入门)
  • Android 实现隐私政策提示弹窗(完整版)
  • 【选择IT培训机构时,我们应该注意的点有哪些?】
  • Java集合使用注意事项
  • windows下zookeeper搭建
  • 【云原生之Docker实战】在Docker环境下部署kanboard项目管理工具
  • 开启前端CSS学习之路-css003
  • 智能驾驶 车牌检测和识别(一)《CCPD车牌数据集》
  • 量能指标套装
  • 自动驾驶感知——图像数据处理数学方法
  • 百度2015年系统工程师笔试题:判断当前机器的大小端
  • linux gui版本控制工具对比
  • 计算机相关专业混体制的解决方案(事业编之学校与医院)
  • 表单标签的使用
  • Opencv调参神器——trackBar控件
  • 【Linux】vim编辑器的使用