0100 MySQL03
1.distinct关键字
把查询结果去除重复记录,原表数据不会被修改,只能出现在字段的最前端
select distinct job from emp;
select distinct job,deptno from emp;//表示两个字段联合起来 去重
2.连接查询
从一张表中单独查询,称为单表查询
两张表联合起来查询数据,如从emp表中取员工名字,从dept表中取部门名字,这样的跨表查询,称为连接查询
连接查询的分类:
1.根据语法年代分类
SQL92:19992年出现的语法
SQL99:1999年出现的语法(重点学习)
2.根据表连接方式分类
内连接:
等值连接
非等值连接
自连接
外连接
左外连接(左连接)
右外连接(右连接)
全连接(两张表都是主表的连接,了解)
3.当两张表进行连接查询时,没有任何条件限制会发生什么?
如:查询每个员工所在部门的名称
select ename,dname from emp,dept;
发生笛卡尔积现象,最终查询结果条数=两张表条数的乘积
4.如何避免笛卡尔积现象?
加入条件限制,尽量降低表的连接次数
select ename,dname from emp,dept where emp.deptno = dept.deptno;
注:最终查询结果条数减少,但匹配过程中匹配次数不变,还是两张表条数的乘积
表起别名,提高效率
select e.ename,d.dname from emp e,dept d where e.deptno = d.deptno;//SQL92语法
3.内连接之等值连接
条件是等量关系,称为等值连接
1.查询每个员工所在部门名称,显示员工名和部门名?
select e.ename,d.dname from emp e,dept d where e.deptno = d.deptno;//SQL92语法
缺点:结构不清晰,表的连接条件和 后期进一步筛选的条件 都放在了where之后
select e.ename,d.dname from emp e join dept d on e.deptno = d.deptno;//SQL99语法
优点:表连接的条件独立。 from a join b on 连接条件 where 进一步筛选条件
select e.ename,d.dname from emp e (inner) join dept d on e.deptno = d.deptno;//省略inner
4.内连接之非等值连接
条件不是等量关系,称为等值连接
1.找出每个员工的薪资等级,要求显示员工名,薪资和薪资等级?
select e.ename,e.sal,s.grade from emp e (inner) join salgrade s on e.sal between s.losal and s.hisal;
5.内连接之自连接
一张表之间的连接,称为自连接
1.查询员工的上级领导,要求显示员工名和领导名?
技巧:把一张表看成两张表。emp a 员工表,emp b 领导表
a.mgr = b.empno//员工的领导编号 = 领导的员工编号
select a.ename as '员工名',b.ename as '领导名' from emp a join emp b on a.mgr = b.empno;
6.外连接
内连接特点:把完全能够匹配限制条件的数据查询出来,两张表没有主次关系
外连接特点:两张表连接产生了主次关系
1.查询每个员工所在部门名称,显示员工名和部门名?
select e.ename,d.dname from emp e (inner) join dept d on e.deptno = d.deptno;//内连接
select e.ename,d.dname from emp e right (outer) join dept d on e.deptno = d.deptno;//右外连接
select e.ename,d.dname from dept d left (outer) join emp e on e.deptno = d.deptno;//左外连接
//right表示将join关键字右边的这张表看成主表,为了将这张表的数据全部查询出来,捎带关联查询左边的表,若左表没有与右表相匹配,用null代替。outer可省略
//外连接的查询结果条数一定 大于等于 内连接的查询结果条数
2.查询员工的上级领导,要求显示所有员工名和领导名?(所有:无领导的员工也要显示)
select a.ename as '员工名',b.ename as '领导名' from emp a left join emp b on a.mgr = b.empno;
//员工表为主表,左连接
7.多张表的连接
语法:select...from a join b on a和b的连接条件 join c on a和c的连接条件 join d on a和d的连接条件...
1.找出每个员工的部门名称以及薪资等级,要求显示员工名,部门名,薪资和薪资等级?
emp e :取出员工名和薪资
dept d:取出部门名
salgrade s:取出薪资等级
e与d连接条件:部门编号
e与s连接条件:薪资区间
select e.ename,e.sal,d.dname,s.grade from emp e join dept d on e.deptno = d.deptno join salgrade s on e.sal between s.losal and s.hisal;
2.找出每个员工的部门名称、薪资等级和上级领导,要求显示员工名,领导名,部门名,薪资和薪资等级?
select e.ename,e.sal,d.dname,s.grade from emp e join dept d on e.deptno = d.deptno join salgrade s on e.sal between s.losal and s.hisal left join emp l on e.mgr = l.empno;
//内连接与外连接在一条语句中可组合使用
8.子查询
select语句中嵌套select语句,被嵌套的select语句称为子查询。
子查询可出现的位置?
select ...(select)...from...(select)...where...(select)...//可出现在select,from,where之后
9.where中的子查询
1.找出比最低薪资高的员工姓名和薪资
第一步:查询最低工资是多少?
select min(sal) from emp;//800
第二步:找出大于800的员工姓名和薪资?
select ename,sal from emp where sal > 800;
第三步:合并
select ename,sal from emp where sal > select min(sal) from emp;//先执行子查询
10.from中的子查询
技巧:from中的子查询,可将子查询的查询结果当作一张临时表
1.找出每个岗位的平均工资的薪资等级?
第一步:找出每个岗位的平均工资(岗位分组求平均值)
select job,avg(sal) from emp group by job;
第二步:把以上查询结果当作一张临时表t,与薪资等级表s连接
条件:t.avg(sal) between s.losal and s.hisal;
select t.*,s.grade from t join salgrade s on t.avg(sal) between s.losal and s.hisal;
//从t表中查所有,s表中查薪资等级
第三步:合并
select t.*,s.grade from (select job,avg(sal) as avgsal from emp group by job) t join salgrade s on t.avgsal between s.losal and s.hisal;
//as avgsal 把列名当做函数,起别名
11.select中的子查询(了解)
1.找出每个员工的部门名,要求显示员工名,部门名
select e.ename,(select d.dname from dept d where e.deptno = d.deptno) as dname from emp e;
注意:select中的子查询只能返回一条结果,否则报错
12.union合并查询结果集
1.查询工作岗位是manager或salesman的员工?
select ename,job from emp where job = 'manager' or job = 'salesman';
select ename,job from emp where job in ('manager','salesman');
select ename,job from emp where job = 'manager' union select ename,job from emp where job = 'salesman';
//union效率更高一些,对于表连接来说,每连接一次新表,匹配的次数满足笛卡尔积
但union可减少匹配次数,完成两个结果集的拼接
如:假设a,b,c都有10条记录。a 连接 b 连接 c 匹配次数10*10*10=1000
a连接b的结果:10*10=100,a连接c的结果:10*10=100
使用union:100+100=200(把乘法变加法)
2.使用注意事项
1.在进行结果集合并时,要求两个结果集的列数相同
select ename,job from emp where job = 'manager' union select ename from emp where job = 'salesman';//错误
2.结果集合并时,列和列的数据类型也要相同(MySQL不相同也可,Oracle不行)
select ename,job from emp where job = 'manager' union select ename,sal from emp where job = 'salesman';
13.limit
limit将查询结果集的一部分取出来,通常使用在分页查询当中
如:百度默认一页显示10条记录
分页的作用:提高用户体验,一页一页翻页看
使用:limit 起始下标,长度
1.按照薪资降序,取出排名前五的员工?
select ename,sal from emp order by sal desc limit 0,5;//完整用法,起始下标从0开始
select ename,sal from emp order by sal desc limit 5;//缺省用法
注:MySQL中limit在order by之后执行
2.取出工资排名在(3,5)名的员工
select ename,sal from emp order by sal desc limt 2,3;//起始位置2,长度3
14.通用分页
每页显示3条记录
第一页:limit 0,3
第二页:limit 3,3
第三页:limit 6,3
第四页:limit 9,3
每页显示pageSize条记录
第pageNo页:limit (pageNo-1)*pageSize,pageSize
相关文章:
0100 MySQL03
1.distinct关键字 把查询结果去除重复记录,原表数据不会被修改,只能出现在字段的最前端 select distinct job from emp; select distinct job,deptno from emp;//表示两个字段联合起来 去重 2.连接查询 从一张表中单独查询,称为单表查询 两张表联合…...
32- PyTorch基础 (PyTorch系列) (深度学习)
知识要点 PyTorch可以说是现阶段主流的深度学习框架 . 1 PyTorch入门 1.1 PyTorch概述 Torch是什么?一个火炬!其实跟Tensorflow中Tensor是一个意思,可以当做是能在GPU中计算的矩阵.,也可以当做是ndarray的GPU版! PyT…...
用gdb.attach()在gdb下断点但没停下的情况及解决办法
在python中,如果导入了pwntools,就可以使用里面的gdb.attach(io)的命令来下断点。 但是这一次鼠鼠遇到了一个情况就是下了断点,但是仍然无法在断点处开始运行,奇奇怪怪。 这是我的攻击脚本 我们运行一下。 可以看到其实已经运行起…...
Linux入门篇-作业(jobs)调度(本质仍然是进程)
简介 之所以叫做作业调度,作业是以shell为单位的,一个shell建立的作业,不会被另外一个shell看到(包 括root),但是仍然可以看到作业对应的进程。①前台进程(front process) 运行在用户…...
vue 监听 取消监听
vue 的 watch 除了可以使用声明式的配置项以外,还可以通过命令式 this.$watch 方法。 如下是我们比较少用的命令式(想要初始只监听一次,必须命令式写法): 监听只运行一次 声明式 export default{data: {showType: fa…...
0103深度优先搜索和单点连通-无向图-数据结构和算法(Java)
文章目录1.1 走迷宫1.2 图的深度优先搜索实现1.3 算法分析及性能1. 4 单点连通性后记1.1 走迷宫 简单的迷宫,如下图1.1-1所示: 探索迷宫而不迷路,我们需要: 选择一条没有标记过的通道,在你走过的路上铺一条绳子&…...
进销存管理系统
技术:Java等摘要:进销存管理系统是为了实现企业仓库商品管理的系统化、规范化和自动化,从而提高企业管理效率而设计开发的管理信息系统。它完全取代了过去一直用人工管理的工作方式,避免了由于管理人员手工操作上的疏忽以及管理质…...
Sonar:VSCode配置SonarLint/SonarLint连接SonarQube
需求描述 公司为项目代码配置了Sonar检测,希望在VSCode中开发项目时能够同步检测结果。 注意事项 SonarQube版本必须为7.9,否则SonarLint无法连接(GitHub-SonarLint-Wiki第一行就有说明)!!!S…...
陀螺仪小车(Forerake-Car)
项目简介:搭建一辆有arduino UNO 与rnf24l01组成的小车;手部安装由arduino nano开发板、nrf24l01、imu构成的手势控制器,利用手势控制器检测手部状态、发送信号对小车进行前进,实现基于卡尔曼滤波的MPU6050姿态结算。 准备工作&am…...
Leetcode Day5 含有重复元素集合的组合+
1、含有重复元素集合的组合 给定一个可能有重复数字的整数数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用一次,解集不能包含重复的组合。 【题目传送门】 思…...
Mac Book pro(M1)使用总结
1、拿到电脑激活的时候,一定要记住账号密码及安全问题的答案。 2、显示隐藏文件夹: 3、显示.git或者gitignore等隐藏后缀的文件: 打开终端 defaults write com.apple.finder AppleShowAllFiles TRUE重启Finder在终端输入 killall Finder …...
QML集成JavaScript
在QML中可以使用现有的QML元素来创建页面,但QML紧密的集成了必要的JavaScript。 但QML中使用JavaScript比较严格,在QML中不可以添加或修改JavaScript全局对象成员,这样可能会使用一个未经声明的变量。 内联JavaScript 一些小型的JavaScript函…...
学习周报3.5
文章目录前言文献阅读摘要介绍方法总结相关性总结前言 本周阅读文献《Multi-step ahead probabilistic forecasting of multiple hydrological》,文献主要提出一种基于三维卷积神经网络、卷积最小门记忆神经网络和变分贝叶斯神经网络的混合深度学习模型(…...
java基础学习篇
java学习 多写(代码、笔记、文章),多练(交流、思维、技能),多分享,多提问、多思考 什么是计算机 由硬件和软件组成,广泛应用在科学计算、数据处理、自动控制,计算机辅…...
Go 语言基础语法及应用实践
Go语言是一门由Google开发的静态类型、编译型的开源编程语言,被设计成简单、高效、安全的语言。作为一门相对年轻的语言,Go语言的使用范围正在不断扩大,特别是在Web开发、云计算、容器化和分布式系统等领域越来越受到欢迎。 在本篇文章中,我们将探讨Go语言的基础语法及应用…...
C语言自定义类型---进阶
之前的文章中有结构体初阶知识的讲解,对结构体不是很了解的小伙伴可以先去去看一下结构体初阶 结构体,枚举,联合结构体结构体类型的声明特殊的声明结构的自引用结构体变量的定义和初始化结构体内存对齐 <3 <3 <3(重点)那为什么存在内…...
85.链表总结
链表总结 链表总结与进阶 抽象数据类型(ADT abstract data type)与抽象数据接口(ADI abstract data Interface) 链表实际上就是对于结构体、结构体指针和结构体内可以包含指向同类型的结构体指针不可以包含指向同类型的结构体的应…...
【博学谷学习记录】超强总结,用心分享|狂野大数据课程【DataFrame的相关API】的总结分析
操作dataFrame一般有二种操作的方式, 一种为SQL方式, 另一种为DSL方式 SQL方式: 通过编写SQL语句完成统计分析操作DSL方式: 领域特定语言 指的通过DF的特有API完成计算操作(通过代码形式)从使用角度来说: SQL可能更加的方便一些, 当适应了DSL写法后, 你会发现DSL要比SQL更加…...
粒子群优化最小二乘支持向量机SVM回归分析,pso-lssvm回归预测
目录 支持向量机SVM的详细原理 SVM的定义 SVM理论 SVM应用实例,粒子群优化最小二乘支持向量机SVM回归分析 代码 结果分析 展望 支持向量机SVM的详细原理 SVM的定义 支持向量机(support vector machines, SVM)是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大…...
lavis多模态开源框架学习--安装
安装lavis安装lavis测试安装问题过程中的其他操作安装lavis 因为lavis已经发布在pypi中,所以可以直接利用pip安装 pip install salesforce-lavis测试安装 from lavis.models import model_zoo print(model_zoo) # # Architectures Types # # …...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...
C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...
给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...
OD 算法题 B卷【正整数到Excel编号之间的转换】
文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的:a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...
永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器
一、原理介绍 传统滑模观测器采用如下结构: 传统SMO中LPF会带来相位延迟和幅值衰减,并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF),可以去除高次谐波,并且不用相位补偿就可以获得一个误差较小的转子位…...
华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)
题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...
