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

news/2024/5/12 5:57:04

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://wed.xjx100/news/113014.html

相关文章

光纤网卡传输速率和它的应用领域有哪些呢?通常会用到哪些型号网络变压器呢?

Hqst盈盛&#xff08;华强盛&#xff09;电子导读&#xff1a;常有客户问起光纤网卡该如何选用到合适的产品&#xff0c;选用时要注意到哪些事项&#xff0c;这节将结合配合到的网络变压器和大家一起探讨&#xff0c;希望对大家有些帮助。 1&#xff0e;光纤网卡传输速率与网络…

Cannot find module ‘@/store/index‘ or its corresponding type declarations.

近期使用vue3tsvite项目打包的时候&#xff0c;遇到一个问题&#xff0c;截图如下&#xff1a; 错误翻译 Cannot find module /store/index or its corresponding type declarations. 找不到xxx模块或者声明文件 An import declaration can only be used at the top level of …

大数据实战 --- 美团外卖平台数据分析

目录 开发环境 数据描述 功能需求 数据准备 数据分析 RDD操作 Spark SQL操作 创建Hbase数据表 创建外部表 统计查询 开发环境 HadoopHiveSparkHBase 启动Hadoop&#xff1a;start-all.sh 启动zookeeper&#xff1a;zkServer.sh start 启动Hive&#xff1a; nohup …

零基础,零成本,部署一个属于你的大模型

前言 看了那么多chatGPT的文章&#xff0c;作为一名不精通算法的开发&#xff0c;也对大模型心痒痒。但想要部署自己的大模型&#xff0c;且不说没有算法相关的经验了&#xff0c;光是大模型占用的算力资源&#xff0c;手头的个人电脑其实也很难独立部署。就算使用算法压缩后的…

C++的类和对象(2)

类和对象 1.类对象模型1.1. 如何计算类对象的大小1.2. 类的存储模式讨论1.3. 类对象的空间符合结构体对齐规则 2. this指针2.1. this指针的引出2.2. this指针的特性2.3.面试题2.4. C语言和C实现栈的对比 1.类对象模型 1.1. 如何计算类对象的大小 class A { public: void Prin…

Impala VS Spark

Impala vs spark性能测试 impala版本chd2.3&#xff1b;4个server节点 spark版本1.6.2&#xff1b;5个 Executors&#xff0c;每个10cores&#xff0c;20G memory 1.8亿的表 sqlsparkSql(取三次平均)impala(取三次平均)select * from dadddcb8179f4345a53819a7f75abdfb whe…

java_集合统计

1.代码实现: import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.</

从永远到永远-电吉他综合效果器

电吉他综合效果器 1.名词释义1.GLOBAL全局菜单1.左侧窗口1.PAGE 12.PAGE 2 2.中间窗口PAGE 1PAGE 2 3.右侧窗口1.USB AUDIO2.VERSION 2.PATCH&#xff08;效果&#xff09;1.窗口释义2.调整PATCH1.三级目录 1.名词释义 参考 SIG:信号PATCH&#xff1a;补丁&#xff0c;音色补…