文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

**MySQL关联查询七种方式详解与应用实例**,你的掌握了吗

2023-09-25 12:47

关注

当我们需要从多个表中查询数据时,就需要使用关联查询了。MySQL支持七种不同类型的关联查询:内连接、左连接、右连接、全外连接、交叉连接、自连接和自然连接。本文将讲解这七种关联查询的SQL语句、示例以及应用场景。

一、 前言

关联查询是数据库操作中非常重要的一部分,通过关联查询可以将多个表中的数据进行联合查询,从而方便我们对数据进行统计和分析。在本文中,我们将会讲解MySQL中的七种关联查询,帮助读者更好地了解和掌握这七种查询方式。

二、 SQL解析

下面我们来介绍每一种关联查询的SQL语句和解析。

  1. INNER JOIN(内连接)
    INNER JOIN是关联查询中最常见的一种方式,它在两个表中查找匹配的行,并且只返回符合条件的记录。
    在使用INNER JOIN进行查询时,需要让MySQL知道连接条件。一般使用ON关键字显式指定连接条件。
SELECT a.column1, b.column2FROM table1 AS aINNER JOIN table2 AS bON a.id = b.id;
  1. LEFT JOIN(左连接)
    LEFT JOIN返回左表中所有的行,以及右表中匹配的行。如果没有匹配的行,则右表中对应的字段值为NULL。
SELECT a.column1, b.column2FROM table1 AS aLEFT JOIN table2 AS bON a.id = b.id;
  1. RIGHT JOIN(右连接)
    RIGHT JOIN与LEFT JOIN正好相反,返回右表中所有的行,以及左表中匹配的行。如果没有匹配的行,则左表中对应的字段值为NULL。
SELECT a.column1, b.column2FROM table1 AS aRIGHT JOIN table2 AS bON a.id = b.id;
  1. FULL OUTER JOIN(全外连接)
    FULL OUTER JOIN返回左表和右表中的所有行,如果没有匹配的行,则对应的字段值为NULL。
SELECT a.column1, b.column2FROM table1 AS aFULL OUTER JOIN table2 AS bON a.id = b.id;
  1. CROSS JOIN(交叉连接)
    CROSS JOIN返回两个表中所有可能的行组合,结果集的行数等于左表的行数乘以右表的行数。
SELECT a.column1, b.column2FROM table1 AS aCROSS JOIN table2 AS b;
  1. SELF JOIN(自连接)
    SELF JOIN是指在同一表中进行连接操作的过程,它主要用于解决表中字段之间的关联问题。
SELECT a.column1, b.column2FROM table AS aJOIN table AS bON a.parent_id = b.id;
  1. NATURAL JOIN(自然连接)
    NATURAL JOIN会自动匹配两个表中相同的字段,并返回它们的交集。
SELECT a.column1, b.column2FROM table1 AS aNATURAL JOIN table2 AS b;

三、示例

下面我们通过一个示例来看看这七种关联查询的具体应用。
假设我们有两个表,一个是学生表students,一个是课程表courses。它们的结构如下:
students表:

 +----+-------+-------+| id | name  | class |+----+-------+-------+| 1  | Alice | 1     || 2  | Bob   | 2     || 3  | Carol | 1     |+----+-------+-------+

courses表:

 +----+------------+| id | course     |+----+------------+| 1  | Math       || 2  | English    || 3  | Chemistry  |+----+------------+

现在我们来看一下,如何使用这七种关联查询方式来查询学生和对应的课程信息。

  1. INNER JOIN查询
SELECT students.name, courses.courseFROM studentsINNER JOIN coursesON students.id = courses.id;

该查询会返回这样的结果:

| name  | course    |+-------+-----------+| Alice | Math      || Bob   | English   |+-------+-----------+
  1. LEFT JOIN查询
SELECT students.name, courses.courseFROM studentsLEFT JOIN coursesON students.id = courses.id;

该查询会返回这样的结果:

| name  | course     |+-------+------------+| Alice | Math       || Bob   | English    || Carol | NULL       |+-------+------------+
  1. RIGHT JOIN查询
SELECT students.name, courses.courseFROM studentsRIGHT JOIN coursesON students.id = courses.id;

该查询会返回这样的结果:

| name   | course    |+--------+-----------+| Alice  | Math      || Bob    | English   || NULL   | Chemistry |+--------+-----------+
  1. FULL OUTER JOIN查询
SELECT students.name, courses.courseFROM studentsFULL OUTER JOIN coursesON students.id = courses.id;

该查询会返回这样的结果:

| name  | course    |+-------+-----------+| Alice | Math      || Bob   | English   || Carol | NULL      || NULL  | Chemistry |+-------+-----------+
  1. CROSS JOIN查询
SELECT students.name, courses.courseFROM studentsCROSS JOIN courses;

该查询会返回这样的结果:

| name  | course    |+-------+-----------+| Alice | Math      || Alice | English   || Alice | Chemistry || Bob   | Math      || Bob   | English   || Bob   | Chemistry || Carol | Math      || Carol | English   || Carol | Chemistry |+-------+-----------+
  1. SELF JOIN查询
SELECT a.name, b.nameFROM students AS aJOIN students AS bON a.class = b.classWHERE a.id <> b.id;

该查询会返回这样的结果:

| name | name  |+------+-------+| Alice| Carol || Carol| Alice |+------+-------+
  1. NATURAL JOIN查询
SELECT students.name, courses.courseFROM studentsNATURAL JOIN courses;

该查询会返回这样的结果:

| name  | course    |+-------+-----------+| Alice | Math      || Bob   | English   |+-------+-----------+

四、总结

关联查询是数据库操作中非常常用的一种方式,MySQL支持七种不同类型的关联查询:内连接、左连接、右连接、全外连接、交叉连接、自连接和自然连接。每种查询方式都有自己的特点和应用场景,我们需要根据实际情况选择最合适的查询方式来获取需要的数据。
更多经典内容:
在这里插入图片描述

来源地址:https://blog.csdn.net/qq_28245087/article/details/130423995

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯