联合查询(多表查询)

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

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.针对列进行精简/聚合查询


相关文章
|
5月前
|
JavaScript 前端开发 安全
Vue 3 + TypeScript 现代前端开发最佳实践(2025版指南)
每日激励:“如果没有天赋,那就一直重复”。我是蒋星熠Jaxonic,一名执着于代码宇宙的星际旅人。用Vue 3与TypeScript构建高效、可维护的前端系统,分享Composition API、状态管理、性能优化等实战经验,助力技术进阶。
Vue 3 + TypeScript 现代前端开发最佳实践(2025版指南)
|
9月前
|
C++ Windows
【Function App】本地通过VS Code调试Function时候遇见无法加载文件错误Microsoft.Extensions.Diagnostics.Abstractions
在使用 VS Code 调试 Azure Functions 时,执行 `func host start` 可能因版本冲突报错。错误信息显示 Rpc Initialization Service 启动失败,可能是由于缺少文件或组件导致。解决方法包括:1) 使用 npm 卸载并重新安装 Azure Functions Core Tools;2) 若问题未解决,重新下载安装包(如 func-cli-x64.msi)修复旧版本工具;3) 退出并重启 VS Code,重新加载项目即可恢复正常运行。参考资料链接提供了更多背景信息。
345 1
|
存储 运维 安全
SaaS多租户和单租户的区别解析
SaaS多租户的系统维护成本低,多租户系统在升级时,只需要更新一次,维护人员不需要对每个用户更新,节省了很大的运维成本,这对于所有客户都在做同样事情的系统来说是很有用的。
683 3
|
Java Maven
Maven配置以及IDEA设置(Cannot resolve plugin org.apache.maven.plugins:报错)
Maven配置以及IDEA设置(Cannot resolve plugin org.apache.maven.plugins:报错)
2709 1
|
开发框架 开发者 UED
ArkUI常用布局:构建响应式和高效的用户界面
本文详细介绍了HarmonyOS应用开发中ArkUI框架的常用布局方式,包括线性布局、层叠布局、弹性布局、相对布局、栅格布局、列表和轮播布局。每种布局方式都配有示例代码,帮助开发者构建响应式和高效的用户界面。通过合理选择和使用这些布局,可以显著提升应用的性能和用户体验。
640 0
|
存储 Python 容器
python函数的返回值、嵌套方式以及函数中的变量(一)
python函数的返回值、嵌套方式以及函数中的变量(一)
959 2
|
存储 Prometheus Kubernetes
在K8S中,如何收集K8S日志?有哪些方案?
在K8S中,如何收集K8S日志?有哪些方案?
|
机器学习/深度学习 自然语言处理 决策智能
8分SCI | 揭示随机森林的解释奥秘:探讨LIME技术如何提高模型的可解释性与可信度!
8分SCI | 揭示随机森林的解释奥秘:探讨LIME技术如何提高模型的可解释性与可信度!
911 1
|
存储 Java 测试技术
阿里巴巴java开发手册
这篇文章是关于阿里巴巴Java开发手册的整理,内容包括编程规约、异常日志、单元测试、安全规约、MySQL数据库使用以及工程结构等方面的详细规范和建议,旨在帮助开发者编写更加规范、高效和安全的代码。
|
算法 安全 网络安全
真实世界的密码学(一)(1)
真实世界的密码学(一)
336 0