15天学习MySQL计划(多表联查)第四天

这篇具有很好参考价值的文章主要介绍了15天学习MySQL计划(多表联查)第四天。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

15天学习MySQL计划(多表联查)第四天

1.多表查询

1.1概述

​ 指从多张表中查询数据

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

  • 一对多(多对一):在多的一方设置外键,关联一的一方的主键
  • 多对多:建立中间表,中间表包含两个外键,关联两张表的主键
  • 一对一:用于表结构拆分,在其中任何一方设置外键(unique),关联另一方的主键

笛卡尔积:笛卡尔积乘积是指在数学中,两个集合A集合金和B集合的所有组合情况。(在多表查询时,需要消除无效的笛卡尔积)

1.2多表查询分类

  • 连接查询
    • 内连接:相当于查询A,B交集部分数据
    • 外连接:
      • 左外连接:查询左表所有数据,以及两张表交集部分数据
      • 右外连接:查询右表所有数据,以及两张表交集部分数据
    • 自连接:当前表与自身的连接查询,自连接必须使用表别名
  • 子查询

15天学习MySQL计划(多表联查)第四天

1.3内连接

  • 隐式内连接
select 字段列表 from1,表2 where 条件;
  • 显式内连接
select 字段列表 from1 [inner] join2 on 连接条件;

1.4连接查询-外连接

  • 左外连接
select 字段列表 from1 left [outer] join2 on 条件;

相当于查询表1(左表)的所有数据包含表1和表2交集部分的数据

  • 右外连接
select 字段列表 from1 right [outer] jion 表2 on 条件;

相当于查询表1(右表)的所有数据包含表1和表2交集部分的数据

1.5自连接

自连接查询语法:

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

自连接查询,可以是内连接查询,也可以是外连接查询

对一张表起不同的别名,当作两张表处理即可

1.6联合查询

对于union查询,就是把多次查询的结构合并起来,形成一个新的查询结构集

select 字段列表 from 表A
union [all]
select 字段列表 from 表B;

注意

  • 对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致。
  • union all会将全部的数据之间合并在一起,union会对合并之后的数据去重。

1.7子查询

  • 概念:sql语句中嵌套select语句,称为嵌套查询,又称为子查询。
select * from 表名 where 字段 = (select 表名 from 字段);
  • 子查询外部的语句可以是insert/update/delete/select的任何一个。
  • 根据子查询结构不同,分为:
    • 标量子查询(子查询结构为单个值)
    • 列子查询(子查询结构为一列)
    • 行子查询(子查询结果为一行)
    • 表子查询(子查询结果为多行多列)
  • 根据子查询位置,分为:where之后,from之后,select之后
1.标量子查询

子查询返回的结果是单个值(数字,字符串,日期等),最简单的形式,这种子查询成为标量子查询

--获取张三的id号,通过id在第二章表中获取张三的年龄
select id from tb1 where name='zhangsan';
select age from tb2 where id = 4;

标量子查询
select age from tb2 where id = (select id from tb1 where name='zhangsan');
2.列子查询

子查询返回的结果是一列(可以是多行),这种子查询称为列子查询

常用的操作符:in,not in,any,some,all

操作符 描述
in 在指定的集合范围内,多选一
not in 不在指定的集合范围之内
any 子查询返回列表中,有任意一个满足即可
some 与any等同,使用some的地方都可以使用any
all 子查询返回列表的所有值都是必须满足

例子:

--获取比研发部工资高的人员
1.获取研发部人员
select 名字 from tb1 where 部门='研发部';
2.获取人员的工资
select 工资 from tb2 where 名字=(select 名字 from tb1 where 部门='研发部');
3.获取比研发部工资高的员工
select 姓名,工资 from tb1 where 工资 > all (select 工资 from tb2 where 名字=(select 名字 from tb1 where 部门='研发部'));

--获取比研发部工资高的任意一个人员
1.获取研发部人员
select 名字 from tb1 where 部门='研发部';
2.获取人员的工资
select 工资 from tb2 where 名字=(select 名字 from tb1 where 部门='研发部');
3.获取比研发部工资高的员工
select 姓名,工资 from tb1 where 工资 > any (select 工资 from tb2 where 名字=(select 名字 from tb1 where 部门='研发部'));
3.行子查询

子查询返回的结果是一行(可以是多列),这种子查询称为行子查询。

常用的操作符:=,<>,in,not in

例子:

--查询与张三的薪资及直属领导相同的员工信息
1.查询张三的薪资及直属领导
select 薪资,领导 from tb1 where name='张三';
2.查询与张三的薪资及直属领导相同的员工信息
select * from 表名 where (工资,领导) = (select 薪资,领导 from tb1 where name='张三');
4.表子查询

子查询返回的结果是多行多列,这种子查询称为表子查询

常用的操作符:in

例子:

--查询与张三和李四相同职位和薪资的员工信息
1.查询张三,李四的职位和薪资
select 职位,薪资 from tb1 where name='张三' or name='李四';
2.查询与张三和李四相同职位和薪资的员工信息
select * from tb2 where (职位,薪资) in (select 职位,薪资 from tb1 where name='张三' or name='李四');

张三,李四的职位和薪资
select 职位,薪资 from tb1 where name=‘张三’ or name=‘李四’;
2.查询与张三和李四相同职位和薪资的员工信息
select * from tb2 where (职位,薪资) in (select 职位,薪资 from tb1 where name=‘张三’ or name=‘李四’);文章来源地址https://www.toymoban.com/news/detail-421909.html


##  

到了这里,关于15天学习MySQL计划(多表联查)第四天的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 15天学习MySQL计划-SQL优化/视图(进阶篇)-第八天

    1.插入数据(insert) 1.批量插入 2.手动提交事务 3.主键顺序插入 4.大批量插入数据 如果一次性需要插入大批量数据,使用insert语句插入性能较低,此时可以使用MySQL数据库提供的load指令来进插入 方法如下。 2.主键优化 1.数据组织方式 2.页分裂 页可以为空,也可以填充一半,

    2023年04月26日
    浏览(45)
  • Mybatis-多表联查

    在数据库查询中,很多时候不只是查询一张表,而是需要将多张表结合起来才能获得需要的数据,下面介绍在mybatis中怎么实现多表联查(前提是所有的依赖均已配置完成) 将需要用到的表全部创建成java的实体类,导入lombok依赖(自动生成get、set等方法) User 用户表 Order 订单

    2024年02月15日
    浏览(37)
  • MyBatis-Plus实现多表联查

    收获大佬封装的一个jar包,可以支持MyBatis-Plus多表联查,特此分享。 注意: mybatis plus version = 3.4.0 mapper继承MPJBaseMapper (必选) service继承MPJBaseService (可选) serviceImpl继承MPJBaseServiceImpl (可选) 对应查询语句 参数说明 1、select:表示查询的指定字段,一个select只能查一个表的 2、le

    2024年02月15日
    浏览(28)
  • spring boot集成mybatis-plus——Mybatis Plus 多表联查(包含分页关联查询,图文讲解)...

     更新时间 2023-01-03 21:41:38 大家好,我是小哈。 本小节中,我们将学习如何通过 Mybatis Plus 实现 多表关联查询 ,以及 分页关联查询 。 本文以 查询用户所下订单 ,来演示 Mybatis Plus 的关联查询,数据库表除了前面小节中已经定义好的用户表外,再额外创建一张订单表,然后

    2024年02月01日
    浏览(72)
  • 【MySQL】多表关系的基本学习

    🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​ 💫个人格言:“没有罗马,那就自己创造罗马~” 多表关系含义: 项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,并设计表结构,由于业务之间相互关联,

    2024年02月21日
    浏览(21)
  • java解决mysql大数据联查问题

    java解决mysql大数据联查问题 近期有一个需求是联查两张表比对三个字段 一般用mysql就可以解决 但是表a和表b的数据量都很不小,大概在10w左右,由于并不是以固定的id去关联,加了索引也没有效果,使用navicate根本就查不出来。 这时候想到了使用java去查,一开始采用的是双重

    2024年02月12日
    浏览(68)
  • 【MySQL】学习多表查询和笛卡尔积

    🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​ 💫个人格言:“没有罗马,那就自己创造罗马~” 指的是从多张表中查询数据 首先准备好需要查询的数据表 - dept表 和 emp表 笛卡尔积:笛卡尔乘积是指在数学中,两个集合 A 集合和 B集合的所

    2024年02月19日
    浏览(27)
  • 【MySQL系列】MySQL复合查询的学习 _ 多表查询 | 自连接 | 子查询 | 合并查询

    「前言」文章内容大致是对MySQL复合查询的学习。 「归属专栏」MySQL 「主页链接」个人主页 「笔者」枫叶先生(fy) 前面篇章讲解的mysql表的查询都是对一张表进行查询,在实际开发中这远远不够,下面将讲解复合查询,首先回顾一下基本的查询。 使用的数据库是之前篇章的雇

    2024年02月11日
    浏览(38)
  • 十五天MySQL学习计划(运维篇-完结)读写分离-第十五天

    1.读写分离 ​ 读写分离,简单的说是把对数据库的读和写操作分开,以对应不同的数据库服务器。主服务器提供写操作,从数据库提供读操作,这样能有效的减轻单台数据库的压力。 ​ 通过mycat即可轻易实现上述功能,不仅可以支持mysql,也可以支持oracle和sql server。 2.一主

    2024年02月05日
    浏览(29)
  • 软考A计划-系统架构师-官方考试指定教程-(6/15)

    点击跳转专栏=Unity3D特效百例 点击跳转专栏=案例项目实战源码 点击跳转专栏=游戏脚本-辅助自动化 点击跳转专栏=Android控件全解手册 点击跳转专栏=Scratch编程案例 专注于 Android/Unity 和各种游戏开发技巧,以及 各种资源分享 (网站、工具、素材、源码、游戏等) 有什么需要

    2024年02月08日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包