对于多个表多个字段进行查询、F12查看网页的返回数据帮助开发、数据库的各种查询方式(多对多、多表查询、子查询等)。

对于多个表多个字段进行查询、F12查看网页的返回数据帮助开发、数据库的各种查询方式(多对多、多表查询、子查询等)。

  • [一、 前端界面需要展现多个表的其中几个数据的多表查询。](#一、 前端界面需要展现多个表的其中几个数据的多表查询。)
    • [1. 三个表查询其中字段返回:(用一下sql语句)](#1. 三个表查询其中字段返回:(用一下sql语句))
    • [2. 进行封装实体类,返回前端](#2. 进行封装实体类,返回前端)
    • [3. 如果前端需要在一个表单里面插入或者修改多个表,我们可以这样做:](#3. 如果前端需要在一个表单里面插入或者修改多个表,我们可以这样做:)
  • 二、按F12然后查看cook中的接口
    • [1 查看请求方式](#1 查看请求方式)
    • [2 查看封装的属性、状态值等信息](#2 查看封装的属性、状态值等信息)
  • 三、数据库各种查询(黑马):示例和代码
    • [1 多对多](#1 多对多)
    • [2 一对一](#2 一对一)
    • [3 如果我们直接查询两张表会出现迪卡效应(把两张表进行乘机配对)](#3 如果我们直接查询两张表会出现迪卡效应(把两张表进行乘机配对))
    • [4 通过两个id来查询两个表](#4 通过两个id来查询两个表)
    • [5 多表查询的概述:](#5 多表查询的概述:)
    • [6 内连接(查询公共字段)](#6 内连接(查询公共字段))
    • [7 外连接(左、右连接):(查询左、右边的数据库和公共的部分)](#7 外连接(左、右连接):(查询左、右边的数据库和公共的部分))
    • [8 自连接(把一个表,通过别名弄成两个表,来查询自己表的数据)](#8 自连接(把一个表,通过别名弄成两个表,来查询自己表的数据))
    • [9 自连接+左连接](#9 自连接+左连接)
    • [10 联合查询 union all全部合并,union 去重后合并](#10 联合查询 union all全部合并,union 去重后合并)
    • [11 子查询(嵌套查询)](#11 子查询(嵌套查询))
    • [12 标量子查询(先查询出一个,然后其他表通过这一个作为条件继续查)](#12 标量子查询(先查询出一个,然后其他表通过这一个作为条件继续查))
    • [13 列子查询(先查出一列的数据,然后被用作条件查询)](#13 列子查询(先查出一列的数据,然后被用作条件查询))
    • [14 行子查询(查出一行,作为其他查询的条件)](#14 行子查询(查出一行,作为其他查询的条件))
    • [15 表子查询(查出一个表,作为其他查询的条件)](#15 表子查询(查出一个表,作为其他查询的条件))

一、 前端界面需要展现多个表的其中几个数据的多表查询。

1. 三个表查询其中字段返回:(用一下sql语句)

假设有三张表:table1,table2 和 table3,它们的结构如下:

table1 包含字段:id, name, description, created_at, updated_at

table2 包含字段:id, table1_id, field1, field2, field3

table3 包含字段:id, table2_id, value1, value2, value3

现在我们需要从这三张表中查询:

table1 的 name 和 description 字段

table2 的 field1 和 field2 字段

table3 的 value1 和 value2 字段

csharp 复制代码
SELECT t1.name, t1.description, t2.field1, t2.field2, t3.value1, t3.value2
FROM table1 t1
JOIN table2 t2 ON t1.id = t2.table1_id
JOIN table3 t3 ON t2.id = t3.table2_id;

2. 进行封装实体类,返回前端

老师带我观察页面前端我发现,他们返回的都是一个List列表,然后把需要返回的封装为一个实体类,再返回前端。强烈建议,一定要通义属性的命名,不然当你写这个实体类的时候,超级痛苦!!!

3. 如果前端需要在一个表单里面插入或者修改多个表,我们可以这样做:

如果前端需要将学生和老师的信息一起打包传到后端,你可以扩展现有的Spring Boot 应用程序,使其能够接收包含学生和老师信息的表单数据。以下是如何修改现有的示例代码以支持这种功能:

前端数据结构:前端需要将学生和老师的信息打包成一个结构,并以JSON格式发送到后端。例如:

csharp 复制代码
{
    "student": {
        "id": "123",
        "name": "Alice",
        "age": 20,
        "sex": "Female"
    },
    "teacher": {
        "name": "Mr. Smith",
        "position": "Math Teacher",
        "teachingExperience": 10
    }
}

后端处理:修改后端的控制器,以接收包含学生和老师信息的请求体,并分别处理学生和老师信息的新增或更新操作。

csharp 复制代码
// Endpoint to add or update student and teacher information together
@PostMapping("/addStudentTeacher")
public String addOrUpdateStudentAndTeacher(@RequestBody StudentTeacherForm form) {
    // Update or add student
    Student student = form.getStudent();
    boolean studentExists = students.stream().anyMatch(s -> s.getId().equals(student.getId()));

    if (studentExists) {
        students.stream()
                .filter(s -> s.getId().equals(student.getId()))
                .forEach(s -> {
                    s.setName(student.getName());
                    s.setAge(student.getAge());
                    s.setSex(student.getSex());
                });
    } else {
        students.add(student);
    }

    // Update or add teacher
    Teacher teacher = form.getTeacher();
    boolean teacherExists = teachers.stream().anyMatch(t -> t.getName().equals(teacher.getName()));

    if (teacherExists) {
        teachers.stream()
                .filter(t -> t.getName().equals(teacher.getName()))
                .forEach(t -> {
                    t.setPosition(teacher.getPosition());
                    t.setTeachingExperience(teacher.getTeachingExperience());
                });
    } else {
        teachers.add(teacher);
    }

    return "Student and Teacher information updated or added successfully.";
}

// Form class to wrap student and teacher information
static class StudentTeacherForm {
    private Student student;
    private Teacher teacher;

    // Getters and setters
    public Student getStudent() {
        return student;
    }

    public void setStudent(Student student) {
        this.student = student;
    }

    public Teacher getTeacher() {
        return teacher;
    }

    public void setTeacher(Teacher teacher) {
        this.teacher = teacher;
    }
}

表单处理:在前端,确保表单可以将学生和老师的信息合并成一个JSON对象,并通过POST请求发送到/api/addStudentTeacher端点。

通过这种方式,你可以实现将学生和老师的信息一起更新或新增到后端数据库。记得根据实际情况添加数据验证、异常处理和安全性措施,以确保应用程序的稳定性和安全性。
StudentTeacherForm 类是为了方便处理前端发送的包含学生和老师信息的请求而设计的,它通过两个属性 student 和 teacher 分别表示学生和老师的信息。

二、按F12然后查看cook中的接口

1 查看请求方式

2 查看封装的属性、状态值等信息

三、数据库各种查询(黑马):示例和代码

1 多对多

2 一对一

3 如果我们直接查询两张表会出现迪卡效应(把两张表进行乘机配对)

4 通过两个id来查询两个表

5 多表查询的概述:

6 内连接(查询公共字段)



7 外连接(左、右连接):(查询左、右边的数据库和公共的部分)


8 自连接(把一个表,通过别名弄成两个表,来查询自己表的数据)


9 自连接+左连接

10 联合查询 union all全部合并,union 去重后合并


11 子查询(嵌套查询)

12 标量子查询(先查询出一个,然后其他表通过这一个作为条件继续查)


13 列子查询(先查出一列的数据,然后被用作条件查询)




14 行子查询(查出一行,作为其他查询的条件)

15 表子查询(查出一个表,作为其他查询的条件)


相关推荐
LjQ20401 分钟前
网络爬虫一课一得
开发语言·数据库·python·网络爬虫
烙印6015 分钟前
MyBatis原理剖析(二)
java·数据库·mybatis
RestCloud7 分钟前
如何通过ETLCloud实现跨系统数据同步?
数据库·数据仓库·mysql·etl·数据处理·数据同步·集成平台
你是狒狒吗8 分钟前
TM中,return new TransactionManagerImpl(raf, fc);为什么返回是new了一个新的实例
java·开发语言·数据库
Channing Lewis1 小时前
sql server如何创建表导入excel的数据
数据库·oracle·excel
秃头摸鱼侠1 小时前
MySQL安装与配置
数据库·mysql·adb
UGOTNOSHOT1 小时前
每日八股文6.3
数据库·sql
行云流水行云流水2 小时前
数据库、数据仓库、数据中台、数据湖相关概念
数据库·数据仓库
John Song2 小时前
Redis 集群批量删除key报错 CROSSSLOT Keys in request don‘t hash to the same slot
数据库·redis·哈希算法
IvanCodes2 小时前
七、Sqoop Job:简化与自动化数据迁移任务及免密执行
大数据·数据库·hadoop·sqoop