MySQL 数据库关联查询全解析:一对一、一对多、多对多 ...

打印 上一主题 下一主题

主题 1731|帖子 1731|积分 5193


前言

在数据库的天下里,数据之间的关系错综复杂,而关联查询就像是毗连这些数据的桥梁,帮助我们从多个表中获取所需的信息。今天,就带各人深入探索 MySQL 数据库中的关联查询,包罗一对一、一对多和多对多这三种常见的关系类型,通过现实代码和案例,让各人轻松把握。
一、关联查询底子

关联查询,顾名思义,就是将两个或多个表中的数据根据一定的条件毗连起来进行查询。在 MySQL 中,常用的关联查询方式有 INNER JOIN(内毗连)、LEFT JOIN(左毗连)、RIGHT JOIN(右毗连)等。它们的区别在于返回的结果集不同,但焦点头脑都是基于表之间的关联关系来获取数据。
二、一对一关联查询

1. 场景先容

一对一关系通常出如今两个表中,一个表的一条记录只能对应另一个表中的一条记录。例如,一个用户表(user)和一个用户详细信息表(user_detail),每个用户对应一条详细信息记录。
2. 数据表布局



  • 用户表(user)
  1. CREATE TABLE user (
  2.     id INT PRIMARY KEY AUTO_INCREMENT,
  3.     username VARCHAR(50) NOT NULL,
  4.     password VARCHAR(50) NOT NULL
  5. );
复制代码


  • 用户详细信息表(user_detail)
  1. CREATE TABLE user_detail (
  2.     id INT PRIMARY KEY AUTO_INCREMENT,
  3.     user_id INT NOT NULL,
  4.     age INT,
  5.     address VARCHAR(100),
  6.     FOREIGN KEY (user_id) REFERENCES user(id)
  7. );
复制代码
3. 查询代码示例

  1. SELECT user.id, user.username, user_detail.age, user_detail.address
  2. FROM user
  3. INNER JOIN user_detail ON user.id = user_detail.user_id
  4. WHERE user.id = 1;
复制代码
这段代码查询了用户 ID 为 1 的用户及其详细信息。通过 INNER JOIN 将 user 表和 user_detail 表毗连起来,根据 user.id 和 user_detail.user_id 的对应关系,获取了用户的基本信息和详细信息。
4. 查询结果示例

user.iduser.usernameuser_detail.ageuser_detail.address1张三25北京市向阳区 三、一对多关联查询

1. 场景先容

一对多关系是指一个表中的一条记录可以对应另一个表中的多条记录。好比,一个班级表(class)和一个学生表(student),一个班级可以有多个学生。
2. 数据表布局



  • 班级表(class)
  1. CREATE TABLE class (
  2.     id INT PRIMARY KEY AUTO_INCREMENT,
  3.     class_name VARCHAR(50) NOT NULL
  4. );
复制代码


  • 学生表(student)
  1. CREATE TABLE student (
  2.     id INT PRIMARY KEY AUTO_INCREMENT,
  3.     student_name VARCHAR(50) NOT NULL,
  4.     class_id INT NOT NULL,
  5.     FOREIGN KEY (class_id) REFERENCES class(id)
  6. );
复制代码
3. 查询代码示例

  1. SELECT class.class_name, student.student_name
  2. FROM class
  3. LEFT JOIN student ON class.id = student.class_id;
复制代码
这里使用了 LEFT JOIN,查询了每个班级及其对应的全部学生。即使某些班级没有学生,也会体现出来,只是学生信息为空。通过 class.id 和 student.class_id 的关联,清楚地展示了班级和学生之间的一对多关系。
4. 查询结果示例

class.class_namestudent.student_name班级A小红班级A小明班级B小刚班级B小华 四、多对多关联查询

1. 场景先容

多对多关系是指一个表中的一条记录可以对应另一个表中的多条记录,同时另一个表中的一条记录也可以对应第一个表中的多条记录。例如,一个学生表(student)和一个课程表(course),一个学生可以选修多门课程,一门课程也可以被多个学生选修。为了实现这种关系,通常必要创建一个中间表来关联这两个表。
2. 数据表布局



  • 学生表(student)
  1. CREATE TABLE student (
  2.     id INT PRIMARY KEY AUTO_INCREMENT,
  3.     student_name VARCHAR(50) NOT NULL
  4. );
复制代码


  • 课程表(course)
  1. CREATE TABLE course (
  2.     id INT PRIMARY KEY AUTO_INCREMENT,
  3.     course_name VARCHAR(50) NOT NULL
  4. );
复制代码


  • 学生课程关联表(student_course)
  1. CREATE TABLE student_course (
  2.     id INT PRIMARY KEY AUTO_INCREMENT,
  3.     student_id INT NOT NULL,
  4.     course_id INT NOT NULL,
  5.     FOREIGN KEY (student_id) REFERENCES student(id),
  6.     FOREIGN KEY (course_id) REFERENCES course(id)
  7. );
复制代码
3. 查询代码示例

  1. SELECT student.student_name, course.course_name
  2. FROM student
  3. INNER JOIN student_course ON student.id = student_course.student_id
  4. INNER JOIN course ON student_course.course_id = course.id;
复制代码
这段代码查询了每个学生所选修的课程。通过 student 表和 student_course 表的关联,以及 student_course 表和 course 表的关联,实现了学生和课程之间的多对多查询。它将三个表毗连起来,获取了学生和课程的对应关系。
4. 查询结果示例

student.student_namecourse.course_name小明数学小明语文小红数学小红英语 五、总结

关联查询是 MySQL 数据库中非常重要的一个功能,它可以或许帮助我们从多个表中获取所需的数据,构建复杂的数据关系。无论是一对一、一对多还是多对多关系,只要把握了它们的基本原理和查询方法,就能在现实开发中机动运用。在使用关联查询时,要留意表之间的关联关系和毗连条件,确保查询结果的准确性和完整性。希望这篇文章能帮助各人更好地明白和使用 MySQL 的关联查询功能,为数据库操作提供有力支持。



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

飞不高

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表