15天学习MySQL计划-多表联查(基础篇)第四天

news/2024/5/20 12:28:48/文章来源:https://blog.csdn.net/weixin_53678904/article/details/130305492

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

1.多表查询

1.1概述

​ 指从多张表中查询数据

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

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

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

1.2多表查询分类

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

在这里插入图片描述

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=‘李四’);


##  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_479080.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

记录-JavaScript常规加密技术

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 当今Web开发中&#xff0c;数据安全是一个至关重要的问题&#xff0c;为了确保数据的安全性&#xff0c;我们需要使用加密技术。JavaScript作为一种客户端编程语言&#xff0c;可以很好地为数据进行加…

sggJava基础第四天

1 分支结构 分支结构 根据条件&#xff0c;选择性地执行某段代码。 有if…else和switch-case两种分支语句。 概述 顺序结构的程序虽然能解决计算、输出等问题 但不能做判断再选择。对于要先做判断再选择的问题就要使用分支结构 if…else形式 单分支结构 代码实现 …

JWT 实现登录认证 + Token 自动续期方案

前言 过去这段时间主要负责了项目中的用户管理模块&#xff0c;用户管理模块会涉及到加密及认证流程。今天就来讲讲认证功能的技术选型及实现。技术上没啥难度当然也没啥挑战&#xff0c;但是对一个原先没写过认证功能的菜鸡来说也是一种锻炼吧。 技术选型 要实现认证功能&a…

JavaScript(JS)-1.JS基础知识

1.JavaScript概念 (1)JavaScript是一门跨平台&#xff0c;面向对象的脚本语言&#xff0c;来控制网页行为的&#xff0c;它能使网页可交互 (2)W3C标准&#xff1a;网页主要由三部分组成 ①结构&#xff1a;HTML负责网页的基本结构&#xff08;页面元素和内容&#xff09;。 …

Git从远程仓库克隆仓库后推送到指定分支

git克隆到本地仓库 在得到一个git仓库地址后&#xff0c;首先要配置本地仓库&#xff0c;配置远程仓库地址才可以远程拉取项目。 本地配置的一般流程&#xff1a; git init初始化一个空白git仓库 2. 配置在自己额用户名和邮箱 配置个人信息时方便再团队合作时能知道是谁再何…

适应大、中、小型医院的手术麻醉临床信息管理系统源码

手术麻醉管理系统是一款专门用于医院手术麻醉管理的软件系统&#xff0c;它可以帮助医院和医生更好地管理手术麻醉过程&#xff0c;提高手术麻醉的质量和安全性。本文将介绍手术麻醉管理系统的实现、功能概述、主要功能、系统设置、麻醉管理、术中记录、苏醒室记录、PCA实施及管…

番外12:ADS导出到AD变为PCB文件

番外12&#xff1a;ADS导出到AD变为PCB文件并嘉立创制板 番外12&#xff1a;ADS导出到AD变为PCB文件&#xff0c;此处的示例为功率放大器&#xff01; STEP 1: 从ADS导出dxf文件 打开制作好的版图文件&#xff0c;在原有基础上打好散热孔和固定孔&#xff0c;散热孔半径0.63…

基于禅道二开领导报表

上周开会的时候公司项目总监说感觉最近开发人员很轻松&#xff0c;工作量不饱和。支付力度不够。 做为开发负责人&#xff0c;对项目总监这个说法我肯定需要给予响应&#xff0c;不然老板也在场&#xff0c;后续项目想要加资源啥的都无法解释。 关注我的人知道&#xff0c;之前…

简单介绍十几款常用的画架构图流程图的软件

简单介绍十几款常用的画架构图流程图的软件 draw.io draw.io是开源免费的在线画图工具&#xff0c;还提供桌面版本。 特性&#xff1a; 实时协作&#xff1b;支持在线离线版本&#xff1b;存储支持多种方式&#xff1a;Google Drive, OneDrive, GitHub, GitLab, Dropbox等&…

StarRC的妙用

在整个R2G的流程里边&#xff0c;寄生参数抽取&#xff08;StarRC&#xff09;是比较没有存在感的。大部分的时间&#xff0c;工程师们只是用这个工具来刷SPEF。并不会关注太多。这本身其实是一个好事情&#xff0c;反向证明了参数抽取工具的高度稳定性&#xff01; 但是&#…

Android 对View 进行旋转、缩放、平移的属性变换后,获取外矩形顶点

文章目录 前言改变 View 的属性&#xff0c;进行旋转、缩放、平移输出 View 的属性 使用 matrix 映射 view 变换后的外矩形前(左)乘(preXxx)、后(右)乘(postXxx) 对映射结果的影响前(左)乘(preXxx) 的意义后(右)乘(postXxx) 结论 来张图 前言 Android View 通过平移、旋转、…

为什么APP也需要SSL证书?

通常我们会想到对网站使用SSL证书&#xff0c;来加密数据传输过程&#xff0c;确保信息不被篡改、泄露。对APP这类应用程序则选择软件签名证书&#xff0c;来进行数字签名和防止代码被恶意篡改。然而APP很容易获取到个人敏感信息&#xff0c;为了防止这些信息在传输过程中被有心…

Android ProtoLog动态开启相关wm logging源码分析补充

Android ProtoLog动态开启相关wm logging源码分析补充 针对上一节已经清楚了相关的代码中怎么可以打印到logcat中&#xff0c;其实本质上还就是protologtool这个工具对代码中的所有ProtoLog进行了相关的替换成了具体实现&#xff0c;最后会条件判断输出到Slog中 本文就重点来看…

IP协议头

IP 4位版本号&#xff08;version&#xff09;4位头部长度&#xff08;header length&#xff09;8位服务类型&#xff08;Type Of Service&#xff09;16位总长度&#xff08;total length&#xff09;16位标识&#xff08;id&#xff09;3位标志字段13位分片偏移&#xff08;…

PEIS源码 体检源码 医院体检系统源码

PEIS体检管理系统源码 PEIS源码 体检源码 医院体检系统源码 本套PEIS医院体检管理系统源码&#xff0c;采用C#语言开发&#xff0c;C/S架构&#xff0c;前台开发工具为Vs2012&#xff0c;后台数据库采用oracle大型数据库。有演示。 文末获取联系 PEIS体检管理系统适用于大中型…

03-Mybatis的基本使用-注解配置文件+xml配置文件

目录 1、环境准备 2、注解配置文件 基础操作01-通过ID删除数据 基础操作02-插入数据 基础操作03-更新数据 基础操作04-根据ID查询数据 基础操作05-条件查询数据 3、xml配置文件 1、环境准备 1. 创建数据库数据表 -- 部门管理 create table dept(id int unsigned prim…

继续学c++

由于c里面有很多和c语言很像的东西&#xff0c;这里就来总结一点不像的或者要注意的&#xff0c;或者是我已经快忘记的&#xff1b; 先来一个浮点型也就是实型类型的总结&#xff1b; 知道浮点型有这两个类型&#xff1a;float和double型&#xff1b; 然后float型占四个字节…

儿童用灯哪个品牌好?分享五款儿童护眼台灯品牌

家中有小朋友上了幼儿园就已经戴上了眼镜&#xff0c;太让人心疼了 近视已经成为世界难题&#xff0c;而我国儿童近视形式尤为严峻 据官方数据显示&#xff0c;我国儿童青少年总体近视率竟高达52.7% 如何保护孩子眼睛&#xff0c;儿童用灯哪个品牌好&#xff1f; 那今天&am…

代码随想录之动态规划(力扣题号)

62 不同路径 很简单的dp class Solution {public int uniquePaths(int m, int n) {//58-02int[][] dp new int[m][n];//初始化for(int i 0;i<m;i){dp[i][0] 1;}for(int i 0;i<n;i){dp[0][i] 1;}for(int i1;i<m;i){for(int j 1;j<n;j){dp[i][j] dp[i-1][j]d…

基于LS1028 TSN 交换机软件系统设计与实现(三)

NXP 推出 OpenIL 作为用于工业领域的 Linux 发行版&#xff0c; OpenIL 新增的部分中 含有&#xff1a;支持实时的操作系统的扩展和支持工业厂房中自动化 OEM 的 Time-Sensitive 网络。 OpenIL 作为开放型的工业 Linux 系统最大的优势便是将实时计算在网络中 的…