返回顶部
首页 > 资讯 > 数据库 >MySQL多表联查如何实现
  • 280
分享到

MySQL多表联查如何实现

2023-07-05 04:07:13 280人浏览 八月长安
摘要

本文小编为大家详细介绍“MySQL多表联查如何实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Mysql多表联查如何实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。多表联查场景一对一用户与用户信息表:当用户

本文小编为大家详细介绍“MySQL多表联查如何实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Mysql多表联查如何实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

多表联查场景

一对一

用户与用户信息表:当用户的信息数据过多时,我们可以将其分成两个表分别对应用户基本信息和用户的详情信息。

create table user(    `id` int auto_increment primary key comment'用户id',    `name` varchar(10),    `age` varchar(10),    `gender` char,    `tel` varchar(30),    `school` varchar(20),    `addr` varchar(20),    `degree` varchar(10),    `university` varchar(10));

当用户信息过多时,就可以使用外键进行关联。在任意一方加入外键,关联另一方主键,并且设置外键为唯一的UNIQUE如下实现:

create table user(    `id`   int auto_increment primary key,    `name`   varchar(10),    `age`    varchar(10),    `gender` char);create table user_info(    `id`         int auto_increment primary key ,    `tel`        varchar(30),    `school`     varchar(20),    `addr`       varchar(20),    `degree`     varchar(10),    `university` varchar(10),    `user_id` int unique,    constraint fk_user_info foreign key (user_id) references user(id));

多对一

部门与员工:一个员工对应一个部门,一个部门对应多个员工

员工指向多的一方,部门指向一的一方。此时应该在员工表中创建外键,指向部门表中的主键

# 员工表create table emp(  `emp_id`      int auto_increment primary key,  `emp_name`    varchar(20) not null,  `emp_gender`  char,  `emp_tel`     varchar(30),  `emp_dept_id` int,  constraint fk_emp_dept foreign key (emp_dept_id) references dept (dept_id));# 部门表create table dept(  `dept_id` int auto_increment primary key,  `dept_name` varchar(20) not null);

查询方法:

-- 正常单表查select * from emp;-- 全查 笛卡尔积select * from emp,dept;-- 联查 消除无效的笛卡尔积select * from emp,dept where emp_dept_id = dept.dept_id;

多对多

学生与课程:一个学生可以选修多门课程,一门课程可以被多个学生选择

此时我们应该在学生表与课程表之间建立中间表。中间表包含两个外键,分别对应学生表和课程表的主键

首先我们准备好数据,学生表+课程表+中间信息表

# 学生表CREATE TABLE student(id INT auto_increment PRIMARY KEY COMMENT '主键ID',name VARCHAR(10) COMMENT '姓名',no VARCHAR(10) COMMENT '学号')COMMENT '学生表';INSERT INTO student VALUES(NULL,'小瘪三','2001'),(NULL,'小瘪四','2002'),(NULL,'小瘪五','2003'),(NULL,'小瘪六','2004');# 课程表CREATE TABLE course(id INT auto_increment PRIMARY KEY COMMENT'主键ID',name VARCHAR(10) COMMENT '课程名称')COMMENT '课程表';INSERT INTO course VALUES(NULL,'java'),(NULL,'PHP'),(NULL,'mysql'),(NULL,'hadoop');# 学生课程关系表(中间表)CREATE TABLE student_course(id INT auto_increment COMMENT '主键' PRIMARY KEY,student_id INT NOT NULL COMMENT '学生ID',course_id INT NOT NULL COMMENT '课程ID',CONSTRAINT fk_course_id FOREIGN KEY (course_id) REFERENCES course (id),CONSTRAINT fk_student_id FOREIGN KEY (student_id) REFERENCES student (id))COMMENT '学生——课程关系中间表';INSERT INTO student_course VALUES(null,1,1),(null,1,2),(null,1,3),(null,2,2),(null,2,3),(null,3,4);

我们切换idea打开可以清晰的看到三个表之间的关系,中间信息表中的两个外键:student_id与course_id将学生表和课程表关联了起来

MySQL多表联查如何实现

内连接查询

查询A集合与B集合的交集

-- 方式一select [字段列表] from 表1,表2 where 条件...;-- 方式二select [字段列表] from 表1 inner join 表2 on 条件...;

示例:查询所有员工与其所属部门

-- 方式一select emp_name,dept_name from emp inner join dept d on emp.emp_dept_id = d.dept_id;-- 方式二select emp_name,dept_name from emp,dept where emp.emp_dept_id = dept.dept_id;

外连接

右外连接:查询右表所有数据以及两表交集部分数据

select 字段列表 from 表1 right outer join 表2 on 条件...;

左外连接:查询左表所有数据以及两表交集部分数据

select 字段列表 from 表1 left outer join 表2 on 条件...;

示例:

-- 2. 查询员工全部信息及其对应的部门信息 左外连接select  e.*,dept_name from emp e left join dept d on d.dept_id = e.emp_dept_id;-- 3. 查询全部部门和其对应的所有员工信息 右外连接select d.*,e.emp_name from emp e right join dept d on e.emp_dept_id = d.dept_id;

自连接

当前表与自身的连接查询,自连接必须使用别名

格式:

select 字段列表 from 表A 别名 join 表A 别名 on 条件...;

在员工表中,所有的普通员工、管理者都是员工。查询每个员工归属哪个管理者管理就需要用到自连接

select a.name,b.name from emp a join emp b on a.emp_id = b.manager_id;

联合查询

关键字 uNIOn [all] 将两条sql语句查询的结果拼接起来

-- 查询年龄大于50的员工  和薪资小于10000的员工select * from emp where emp.emp_age > 50union allselect * from emp where emp.emp_salary < 10000;

加上all表示不会去重,不加all表示去重复(即同时满足两条sql语句的只出现一次即可)

多张表的列数必须保持一致,字段类型也需要一致

子查询

子查询是指在SQL语句中嵌套select语句进行嵌套查询

select * from t1 where column1 =(select column1 from t2);

子查询的外部语句可以是insert、uodate、delete、select的任何一个

标量子查询示例:查询&lsquo; 开发部 &rsquo;的全部员工信息

首先你可以利用正常的两条sql去查询:

-- 查询“开发部”的所有员工-- 1. 两条语句查询select dept_id from dept where dept_name = '开发部';select emp_name from emp where emp_dept_id = 1;

或者你可以使用内连接方式进行联查:

-- 内连接select e.emp_name,d.dept_name from emp e inner join dept d on e.emp_dept_id = d.dept_id where dept_name = '开发部';

或者使用子查询:

-- 使用子查询select * from emp where emp_dept_id = (select dept_id from dept where dept_name = '开发部');

读到这里,这篇“MySQL多表联查如何实现”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: MySQL多表联查如何实现

本文链接: https://lsjlt.com/news/349508.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MySQL多表联查如何实现
    本文小编为大家详细介绍“MySQL多表联查如何实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“MySQL多表联查如何实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。多表联查场景一对一用户与用户信息表:当用户...
    99+
    2023-07-05
  • MongoDB中如何实现多表联查
    今天小编给大家分享一下MongoDB中如何实现多表联查的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。前些天遇到一个需求,不复...
    99+
    2023-07-02
  • mysql中如何实现多表联合查询操作
    这篇文章将为大家详细讲解有关mysql中如何实现多表联合查询操作,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。MySQL多表联合查询语法:复制代码 代码如下...
    99+
    2024-04-02
  • MySQL多表联查的实现思路
    目录多表联查场景一对一多对一多对多内连接查询外连接自连接联合查询子查询多表联查场景 一对一 用户与用户信息表:当用户的信息数据过多时,我们可以将其分成两个表分别对应用户基本信息和用户的详情信息。 create table...
    99+
    2023-02-21
    MySQL多表联查有几种方法 MySQL多表联查语句
  • oracle多表关联查询如何实现
    在Oracle数据库中,可以使用SQL语句实现多表关联查询。以下是一个示例: 假设有两个表:表A和表B,它们有一个共同的字段ID可以...
    99+
    2024-04-09
    oracle
  • 如何在MySQL中实现联表查询
    这篇文章将为大家详细讲解有关如何在MySQL中实现联表查询,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。MySQL 中 JOIN, CROSS JOIN 和...
    99+
    2024-04-02
  • MyBatis-Plus实现多表联查
    MyBatis-Plus多表联查写法 前言一、引依赖二、使用方法三、(实战)多表查询参数说明 四、(实战)多表分页查询 前言 收获大佬封装的一个jar包,可以支持MyBatis-...
    99+
    2023-09-03
    mybatis java sql
  • mysql 多表关联查询如何改进
    mysql 多表关联查询怎么优化好呢 🚨 使用正确的连接类型优化 WHERE 子句为关联字段创建索引减少查询的字段考虑使用分布式查询尽量避免子查询优化连接顺序利用 EXPLAIN 分析查询分解复杂查询使用视图...
    99+
    2023-08-28
    mysql 数据库 sql 多表 优化
  • MySQL多表联查如何建立索引?
    在 MySQL 数据库中,设计索引主要是为了提高查询的效率,降低数据库的压力。当我们进行多表查询时,正确设计索引非常重要。 具体方法与建议: 为连接列创建索引:在多表查询中,连接列通常是性能瓶颈。为这些列创建索引可以显著提高查询性能。考虑表...
    99+
    2023-10-24
    mysql 数据库
  • Mysql 多表关联查询
    文章目录 1. Mysql中表之间的关系1.1 多表关系1.2 外键约束 2. 多表联合查询2.1 交叉连接查询:笛卡尔积2.2 内连接查询:inner join2.3 外连接查询2.3.1 左连接:2.3.2 右连接:2.3....
    99+
    2023-08-21
    mysql 数据库 sql
  • 【MySQL】MySQL表之联合查询(多表查询)
    📌前言:本篇博客介绍MySQL数据库的MySQL表之联合查询(多表查询),学习MySQL之前要先安装好MySQL,如果还没有安装的小伙伴可以看看博主前面的博客,里面有详细的安装教程。 那我们废话不多说,直接进入主体!...
    99+
    2023-08-16
    mysql 数据库 java
  • Mysql 如何实现多张无关联表查询数据并分页
    Mysql 多张无关联表查询数据并分页 功能需求 在三张没有主外键关联的表中取出自己想要的数据,并且分页。 数据库表结构 水果表: 坚果表:   饮料表: 数据库随便建的,重在方法。 主要使用UNIO&...
    99+
    2022-06-01
    Mysql 多表查询数据 数据分页
  • MySQL联合查询(多表查询)
    一、内连接 select *from 表1 [ inner | cross ] join 表2 [ on过滤条件 ] [ where查询条件 ] ; [ inner | cross ]: join 内连接关键字(必须要有...
    99+
    2023-09-14
    mysql 数据库 database
  • mysql如何实现多表连接查询
    这篇文章给大家分享的是有关mysql如何实现多表连接查询的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。实际的项目,存在多张表的关联关系。不可能在一张表里面就能检索出所有数据。如果...
    99+
    2024-04-02
  • MyBatis-Plus怎么实现多表联查
    这篇文章主要介绍“MyBatis-Plus怎么实现多表联查”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MyBatis-Plus怎么实现多表联查”文章能帮助大家解决问题。建库建表DROP&n...
    99+
    2023-06-29
  • mybatis-plus多表联查join的实现
    目录1、安装依赖2、定义三个基本实体类3、定义三个mapper4、定义返回值dto5、开发业务层6、假如进行分页查询的话7、注意:8、其他9、如果针对条件进行动态查询1、安装依赖 &...
    99+
    2023-01-11
    mybatis-plus多表联查 mybatis-plus多表联查join
  • MySQL多表关联查询实例分析
    本篇内容介绍了“MySQL多表关联查询实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!数据库设计范式目前数据库设计有五种范式 , 一般...
    99+
    2023-06-30
  • MySQL的多表关联查询
    一、多表关联查询 多表关联查询是使用一条SQL语句,将关联的多张表的数据查询出来。 1.1 交叉查询 交叉查询就是将多张表的数据没有条件地连接在一起进行展示。 1.1.1 语法 使用交叉查询类别和商品 -- 目标:查询所有分类,以及每个分类...
    99+
    2023-08-22
    mysql 数据库 java
  • MySQL联合查询如何实现
    这篇文章主要介绍“MySQL联合查询如何实现”,在日常操作中,相信很多人在MySQL联合查询如何实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL联合查询如何实现”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-07-04
  • 如何对MYSQL多表实现连接查询
    下面一起来了解下如何对MYSQL多表实现连接查询,相信大家看完肯定会受益匪浅,文字在精不在多,希望如何对MYSQL多表实现连接查询这篇短内容是你想要的。3种连接方式的区别:INNER JOIN(内连接,或等...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作