当前位置:   article > 正文

数据库基础-12-多表查询(内连接、外连接、自连接、联合查询、子查询)_多表连接查询

多表连接查询

一、多表关系

项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种:

一对多(One-to-Many):

表示一个表中的每一行记录都可以在另一个表中关联到多行。通俗来讲,就是一个实体(表)在另一个实体(表)中可以有多个关联实体(表)。

举个例子,一个学校有多个班级,而每个班级又有多个学生。这里的学校和班级构成了一对多的关系,即一个学校可以拥有多个班级,而每个班级又可以有多个学生。在数据库中,可以将学校、班级和学生分别建立成独立的表,并通过外键约束建立起关联。

实现:在多的一方建立外键,指向一的一方的主键。

  1. CREATE TABLE school (
  2. id INT PRIMARY KEY,
  3. name VARCHAR(50) NOT NULL
  4. );
  5. CREATE TABLE class (
  6. id INT PRIMARY KEY,
  7. name VARCHAR(50) NOT NULL,
  8. school_id INT NOT NULL,
  9. FOREIGN KEY (school_id) REFERENCES school(id)
  10. );
  11. CREATE TABLE student (
  12. id INT PRIMARY KEY,
  13. name VARCHAR(50) NOT NULL,
  14. class_id INT NOT NULL,
  15. FOREIGN KEY (class_id) REFERENCES class(id)
  16. );

多对多(Many-to-Many):

表示一个表中的每一行记录都可以关联到另一个表中的多行,而另一个表中的每一行记录也可以关联到第一个表中的多行。通俗来讲,就是两个实体(表)之间存在多对多的关系,即两个实体互相关联。

举个例子,一个学生可以选修多门课程,而一门课程也可以被多个学生选修。这里的学生和课程构成了多对多的关系,即一个学生可以选修多门课程,一门课程也可以被多个学生选修。在数据库中,需要使用一个中间表来存储两个实体之间的关联关系。

  1. CREATE TABLE student (
  2. id INT PRIMARY KEY,
  3. name VARCHAR(50) NOT NULL
  4. );
  5. CREATE TABLE course (
  6. id INT PRIMARY KEY,
  7. name VARCHAR(50) NOT NULL
  8. );
  9. CREATE TABLE student_course (
  10. student_id INT NOT NULL,
  11. course_id INT NOT NULL,
  12. PRIMARY KEY (student_id, course_id),
  13. FOREIGN KEY (student_id) REFERENCES student(id),
  14. FOREIGN KEY (course_id) REFERENCES course(id)
  15. );

student 表和 course 表之间建立了多对多的关系,即一个学生可以选修多门课程,一门课程也可以被多学生选修。通过创建一个名为 student_course 的中间表来存储学生和课程之间的关联关系。该表包含两个外键,分别引用了 student 表和 course 表,用于建立学生和课程之间的关联。

一对一(One-to-One):

表示一个表中的每一行仅能关联到另一个表中的一行记录,而另一个表中的每一行记录也只能关联到第一个表中的一行。通俗来讲,就是两个实体(表)之间存在一对一的关系,即两个实体相互关联且每个实体只跟另一个实体关联一次。

举个例子,一个人只有一个身份证号码,而一个身份证号码也只属于一个人。这里的人和身份证构成了一对一的关系,即一个人只有一个身份证号码,一个身份证号码也只属于一个人。在数据库中,可以使用外键来实现一对一关系。

  1. CREATE TABLE person (
  2.   id INT PRIMARY KEY,
  3.   name VARCHAR(50) NOT NULL
  4. );
  5. CREATE TABLE id_card (
  6.   id INT PRIMARY KEY,
  7.   number VARCHAR(20) UNIQUE NOT NULL,
  8.   person_id INT UNI
本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号