联合查询(多表查询)

简介: 联合查询(多表查询)

20231110

数据库

约束

提高数据的正确性,但是减少了效率


1.开发中,两个效率

执行效率


开发效率

通常情况下,我们认为开发效率更重要  

主要就是在软件开发过程中,人力成本远远大于硬件成本


数据库设计

1.实体

2.梳理清楚实体之间的关系

一对一

一对多

多对多

 

新增

(新增和查询操作组合在一起,以查询结果作为插入的值)

insert into表2 select * from  表1

将表2的数据插入到表1  

把查询的临时数据 ---> 永久数据

要求列相互对应  列名不以言也无所谓

将多个sql套娃

varchar(n)中的n不要求一致,只要都是字符串即可



聚合查询

查询带表达式

select name ,chinese+math+english from ......

带着三个列进行运算的


聚合查询就是行和行之间的关系,有一定的限制,不像列和列那么方便

可以理解为库函数


count(expr)  查询到数据的数量

select count(*) from exam;

先执行select * from exam

再算 count(*)

如果查询结果带有空值,空值是没有记录的(使用count(*)的时候,即使都是null的行也是计算在内的)

下面的函数都得结合数据进行运算

sum  

select sum(chinese) from result; 将这一列的值相加,但是null会忽略掉

show warnings

sql很多时候都会尝试将字符串转成数字

avg

max

min


使用聚合函数的时候列和列之间都已经被打散了,如果查询中包含聚合函数和非聚合的列,各自是各自的

有一个情况例外

group by


我们可以用降序排列再limit


我们这个时候可以使用group by


有的时候要按照岗位进行查询或者统计,就可以使用group by

1.查询每个岗位的平均薪资

select role,avg(salary) from emp group by role;

由于是按照role来group by ,所以列名可以写role,不能写 id 和name


分组查询也有条件

1.分组之前的使用where表示(不必分组就能得到)

select role,avg(salary) from emp where name != '张三' group by role;

2.分组之后使用having表示(分组之后才知道)

select role,avg(salary) from emp group by role having avg(salary) < 20000;

分组操作,往往是和聚合操作配合使用的


联合查询(多表查询)


笛卡尔积是两张表运算


student(id ,name,classid)

1 张三  1

2 李四  1

3 王五  2

4 赵六  2


class (classId name)

1      java100

2      java101


拼接

1    张三 1 1 java100

1    张三 1 2 java101


笛卡尔积得到的是一张更大的表

列数是之前的表的列数之和.行数是表的行数之积

实际开发中多表查询一定要慎重使用

使用之前一定要评估好笛卡尔成绩的规模


笛卡尔积有有意义的也有没意义的

也不是随便两个表都能进行笛卡尔乘积,至少有一列是有关联的

根据上述讨论,只要在笛卡尔积过程中,把classid相同这个事件使用where 条件筛选出来


在SQL中进行笛卡尔积非常简单,只用select 即可

select * from student,class;

保证有效(这种条件称之为连接条件)

select * from student,class where student.classId = class.classId;


多表查询步骤:

1.笛卡尔积

2.连接条件

3.根据需求指定其他条件

4.针对列进行精简/聚合查询


相关文章
|
11月前
|
JavaScript 前端开发 安全
Vue 3 + TypeScript 现代前端开发最佳实践(2025版指南)
每日激励:“如果没有天赋,那就一直重复”。我是蒋星熠Jaxonic,一名执着于代码宇宙的星际旅人。用Vue 3与TypeScript构建高效、可维护的前端系统,分享Composition API、状态管理、性能优化等实战经验,助力技术进阶。
1341 1
Vue 3 + TypeScript 现代前端开发最佳实践(2025版指南)
|
存储 运维 安全
SaaS多租户和单租户的区别解析
SaaS多租户的系统维护成本低,多租户系统在升级时,只需要更新一次,维护人员不需要对每个用户更新,节省了很大的运维成本,这对于所有客户都在做同样事情的系统来说是很有用的。
1055 3
|
传感器 机器学习/深度学习 人工智能
智能照明系统:技术、应用与未来趋势###
【10月更文挑战第15天】 智能照明,正以前所未有的速度革新着我们的世界。它不仅仅是灯泡亮度的简单调节,更是一种融合了先进科技与人性化设计的未来之光。本文将深入浅出地剖析智能照明系统的核心技术,探讨其在不同领域的广泛应用,并展望这一领域的未来发展蓝图。 ###
1177 2
|
安全 测试技术 Linux
浅谈黑客赚钱黑产
浅谈黑客赚钱黑产
|
开发框架 开发者 UED
ArkUI常用布局:构建响应式和高效的用户界面
本文详细介绍了HarmonyOS应用开发中ArkUI框架的常用布局方式,包括线性布局、层叠布局、弹性布局、相对布局、栅格布局、列表和轮播布局。每种布局方式都配有示例代码,帮助开发者构建响应式和高效的用户界面。通过合理选择和使用这些布局,可以显著提升应用的性能和用户体验。
807 0
|
存储 Java 测试技术
阿里巴巴java开发手册
这篇文章是关于阿里巴巴Java开发手册的整理,内容包括编程规约、异常日志、单元测试、安全规约、MySQL数据库使用以及工程结构等方面的详细规范和建议,旨在帮助开发者编写更加规范、高效和安全的代码。
如何把多个文件(夹)向上移动1层(或多层)(在批量复制前或后进行)
该文介绍了如何使用一个工具将四个文件夹内的所有文件合并到另一个文件夹中。工具可以从百度网盘或蓝奏云下载,提取码分别为qwu2和2r1z。操作步骤包括:打开工具,选择文件批量复制,设置源路径上移,确定设置后将文件夹拖入,导入文件,移除不需要的文件夹路径,最后执行移动操作。移动过程中会删除空文件夹,并在回收站中可见。
1289 1
PCB相关知识-元器件+原理图
这里说的元器件指的是在原理图中使用的元器件符号。一个电阻,电容,电感,连接器,IC等都是一个元器件。元器件在原理图中只是一个电气符号,形状不定,比如可以用任意的形状(矩形,三角形,圆形)表示元器件,但是引脚必须一致。因为形状只是方便看图的人容易分辨,知道这是什么元件就行。当然一般我们会按照某一个标准,也不会随便画。但是引脚是和实际的元器件是一一对应的,实际的元器件是多少,那么我们在设计原理图元器件的时候就是多少。
587 0
|
安全 前端开发 小程序
微信商户平台转账到零钱功能接入实战
近期营销活动中需要商户转账到微信用户零钱,实战角度说下接入过程,期间用的时间也比较多,把遇到的问题以及如何处理问题过程记录一下,希望对有同样需求的同学有所帮助,尽量少用一些时间,更专注业务处理.本文仅以发起商家转账( /v3/transfer/batches)功能进行讲解.
微信商户平台转账到零钱功能接入实战
|
Web App开发 人工智能 IDE
「RPA技术」RPA和Selenium有何异同?
「RPA技术」RPA和Selenium有何异同?