MySQL数据库连接查询 join原理

MySQL数据库连接查询join原理

在MySQL中,我们可以通过JOIN操作实现多个关系表的数据联合查询。JOIN操作是通过将两个或多个表中的列进行比较,从而找到它们的共同数据,并将这些数据进行组合返回给用户。

常见的JOIN操作有 INNER JOIN(内连接)、LEFT JOIN(左连接)、RIGHT JOIN(右连接)、FULL JOIN(全连接)等操作。

INNER JOIN

INNER JOIN(内连接)表示只返回两个表中共同存在的记录,也就是说只有当两个表的相关联的字段相同时,才会将它们查询出来。比如下面的例子:

SELECT *
FROM table1
INNER JOIN table2
ON table1.id = table2.id;

这个语句中,我们将table1和table2两个表联合起来查询。通过ON语句指定了它们共同的字段,即id,只会返回那些在两个表中都存在的id值。

LEFT JOIN

LEFT JOIN(左连接)表示返回左表中所有的记录和右表中的共同记录,如果左表中记录没有和右表中的记录匹配上,则右表中的值为空。比如下面的例子:

SELECT *
FROM table1
LEFT JOIN table2
ON table1.id = table2.id;

这个语句中,我们将table1和table2两个表联合起来查询。LEFT JOIN表示会返回table1中所有的记录,包括那些在table2中没有记录匹配的记录。

RIGHT JOIN

RIGHT JOIN(右连接)表示返回右表中所有的记录和左表中的共同记录,如果右表中记录没有和左表中的记录匹配上,则左表中的值为空。比如下面的例子:

SELECT *
FROM table1
RIGHT JOIN table2
ON table1.id = table2.id;

这个语句中,我们将table1和table2两个表联合起来查询。RIGHT JOIN表示会返回table2中所有的记录,包括那些在table1中没有记录匹配的记录。

FULL JOIN

FULL JOIN(全连接)表示返回左表和右表中的所有记录,如果某一侧没有和另一侧记录匹配,则返回空值NULL。比如下面的例子:

SELECT *
FROM table1
FULL JOIN table2
ON table1.id = table2.id;

这个语句中,我们将table1和table2两个表联合起来查询。FULL JOIN表示会返回table1和table2中所有的记录。

示例说明

我们假设我们有两个表,一个是学生表,一个是课程表,它们之间的关系是学生可以选修多门课程,一门课程可以被多名学生选修。我们可以使用以下语句来创建这两个表:

CREATE TABLE students (
    id INT PRIMARY KEY,
    name VARCHAR(255)
);

CREATE TABLE courses (
    id INT PRIMARY KEY,
    name VARCHAR(255)
);

CREATE TABLE student_courses (
    id INT PRIMARY KEY,
    student_id INT,
    course_id INT,
    FOREIGN KEY(student_id) REFERENCES students(id),
    FOREIGN KEY(course_id) REFERENCES courses(id)
);

现在我们向这两个表中插入一些数据:

INSERT INTO students VALUES (1, 'Tom');
INSERT INTO students VALUES (2, 'Jerry');
INSERT INTO students VALUES (3, 'Mary');

INSERT INTO courses VALUES (1, 'Math');
INSERT INTO courses VALUES (2, 'Physics');
INSERT INTO courses VALUES (3, 'Chemistry');

INSERT INTO student_courses VALUES (1, 1, 1);
INSERT INTO student_courses VALUES (2, 1, 2);
INSERT INTO student_courses VALUES (3, 2, 1);
INSERT INTO student_courses VALUES (4, 3, 3);

现在我们来看一下JOIN操作是如何工作的。

首先,我们来看一下INNER JOIN操作,它可以用下面的语句实现:

SELECT *
FROM students
INNER JOIN student_courses
ON students.id = student_courses.student_id
INNER JOIN courses
ON courses.id = student_courses.course_id;

这个语句的作用是将学生表、学生-课程表和课程表联合起来查询。我们使用ON语句来指定这三个表之间的关系,即学生表和学生-课程表之间是通过学生表的id和学生-课程表的student_id进行关联的,学生-课程表和课程表之间是通过学生-课程表的course_id和课程表的id进行关联的。

接下来,我们来看一下LEFT JOIN操作,它可以用下面的语句实现:

SELECT *
FROM students
LEFT JOIN student_courses
ON students.id = student_courses.student_id
LEFT JOIN courses
ON courses.id = student_courses.course_id;

这个语句的作用是将学生表和学生-课程表进行左连接,再将学生-课程表和课程表进行左连接。LEFT JOIN操作可以保证我们能够得到学生表中的所有记录,不论这些记录在学生-课程表中是否有匹配的记录。

最后,我们来看一下RIGHT JOIN操作,它可以用下面的语句实现:

SELECT *
FROM students
RIGHT JOIN student_courses
ON students.id = student_courses.student_id
RIGHT JOIN courses
ON courses.id = student_courses.course_id;

这个语句的作用是将学生表和学生-课程表进行右连接,再将学生-课程表和课程表进行右连接。RIGHT JOIN操作可以保证我们能够得到课程表中的所有记录,不论这些记录在学生-课程表中是否有匹配的记录。

以上就是MySQL数据库连接查询join原理的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL数据库连接查询 join原理 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • mysql mycat 中间件安装与使用

    关于“mysql mycat 中间件安装与使用”的完整攻略,我将按照以下步骤进行介绍,并附上两个示例说明: 一、安装MyCat 下载并解压 MyCat中间件 配置MyCat以连接MySQL数据库,在conf目录下,修改schema.xml文件,按下面示例配置: <schema name="TESTDB" checkSQLschema…

    database 2023年5月22日
    00
  • ORACLE学习笔记-添加更新数据函数篇

    你好,下面是关于“ORACLE学习笔记-添加更新数据函数篇”的完整攻略: 函数简介 函数是一种可重复使用的代码块,可以接受参数,执行特定任务,并且通常返回一个值。在Oracle中,函数可以用于返回表达式的值、计算表达式的值等。常见的函数包括 AVG、COUNT、SUM、MAX、MIN等。 创建函数 使用 CREATE FUNCTION 语句可以创建函数。语法…

    database 2023年5月21日
    00
  • Clash Linux服务器安装详细教程

    Clash Linux服务器安装详细教程 本文将介绍在Linux服务器上安装Clash的详细步骤,以及一些常见问题的解决方案。 步骤一:安装Clash 方法一:使用二进制文件 访问Clash Github Release页面,下载最新版本的Clash二进制文件。 上传二进制文件到服务器的指定目录中。 运行以下命令启动Clash: chmod +x /path…

    database 2023年5月22日
    00
  • DBMS 分层模型

    DBMS分层模型是一种将数据库管理系统分层的方法,可以使DBMS的设计更加清晰和快速的开发。下面我将从三个层次来详细讲解DBMS分层模型,同时给出相应的实例说明。 1. 外模式层 外模式层也叫用户视图层,是用户与DBMS交互的接口层,提供给用户一种方便使用的方式,使用户能够通过一些简单的操作完成各种数据库相关的应用任务。外模式是对整个数据库的一个子集,对于每…

    database 2023年3月27日
    00
  • Linux中允许远程用户登录访问mysql的方法

    需要手动增加可以远程访问数据库的用户。 方法一、本地登入mysql,更改 “mysql” 数据库里的 “user” 表里的 “host” 项,将”localhost”改为”%” #mysql -u root -prootmysql>use mysql;mysql>update user set host = ‘%’ where user = ‘r…

    MySQL 2023年4月13日
    00
  • .bat批处理启动redis

    背景:   最近,公司的项目开发,需要用到Redis,然而每天都需要到d盘下面的去启动redis很烦, 我是我就想写一个.bat启动文件放在桌面上,这样每天只要在桌面上点以下redis的bat文件就可以启动redis。   步骤: 先写一个redis_startup.bat脚本放到桌面上: ::启动redis的命令 @echo off ::这是简单的输出,相…

    Redis 2023年4月13日
    00
  • MySQL实例讲解子查询的使用

    MySQL实例讲解子查询的使用 什么是子查询? 子查询是指出现在其他 SQL 语句内部的 SELECT 语句,也叫内层查询。一般来说,子查询是指嵌套在其他 SQL 语句内部的 SELECT 语句。子查询可以作为查询条件的一部分或每行的计算的一部分。 子查询的语法 子查询所在的 SELECT 语句可以是 SELECT、UPDATE、DELETE 或 INSER…

    database 2023年5月22日
    00
  • SQL 插入默认值

    当我们向数据库表中插入新记录时,有时候可能只想指定一些字段的具体值,而其它字段的值可以使用默认值。在SQL中,可以通过 INSERT INTO 语句中的 VALUES 关键字或者 INSERT INTO … SET 语句中的 DEFAULT 关键字来设置默认值。 下面,我将为大家提供详细的SQL插入默认值的攻略,包括两个实例。 表格结构 users 表格…

    database 2023年3月27日
    00
合作推广
合作推广
分享本页
返回顶部