当前位置: 首页 > news >正文

Oracle-day4:分组查询(带条件)、DDL建表、约束、主从表

一、内容回顾

/*------------------内容回顾------------------------上周内容回顾--1、单表的基础查询--A、select * from emp;--B、列的运算 --数字类型运算 + - * /--函数运算 mod ceil floor round upper lower--C、取别名--列、表达书取别名--*表示所有的列和列同时存在时要写成:表名.*--D、表取别名 用表名的地方要用别名替换--E、条件筛选 where --比较运算符 > >= < <= <> !=--逻辑运算符 not > and > or--between A and B  相当于  >=A and <=B--日期的表示:date'日期格式字符串','两位天数-中文月份-4位年份',--to_date('日期格式字符串','yyyy-mm-dd')--日期的截取to_char(日期,'字符串') yyyy、mm、dd、yyyy-mm-dd--F、in和 not in--G、空值 is null、非空值 is not null--H、条件判断 case when语句--2、子查询查询要用圆括号括起来--A、单行值子查询    比较运算符来连接--B、多行值子查询    in或者not in 来连接--C、from子查询     用查询取替换表  with as语句、rownum--3、分组查询--A、聚合函数  count(*) sum() avg() max() min()--sum()非空求和 --avg() 非空求平均值--count(列名)非空计数*/

二、分组查询

/*----------------一、分组/聚合函数 ------------------分组函数只能从一组的值中计算出一个汇总的信息所以在以上给出的查询例题中,分组函数是将查询所获得满足条件的记录行为作为一组并返回一个统计值如果要想“对多个组分别进行统计汇总”例如:分别计算emp表中每个部门职工的最低工资、最高工资、平均和总工资、则是要在查询命令中使用到【 group by】子句进行分组查询,Oracle会把查询到的行分成多个组,对于每一个组返回一个汇总信息--------------分组查询的基本语法--------------------select 字段名from 表名[where 过滤条件][group by 字段];---------------group by:一致性:在包括 group by 子句的查询中,select子句后面的列名表中,除统计聚合函数以外,均应包含在:group by 子句中即:列名表中除聚合函数外中不能出现 group by 分组子句,不存在的列名,否则出错
*/-- 1、计算出公司支付给每个工种的总工资               
-- 1.1 
select job,sum(sal)
from emp
group by job -- 按照工种来分组
;-- 2、统计各部门的人数、工资总和、平均工资
select deptno,count(deptno),sum(sal),avg(sal) 
from emp
group by deptno
;-- 3、(多列分组)计算每个部门中每个工种各有多少职工数
select deptno,job,count(*),count(emptno)
from emp
group by deptno,job
;-- 3.1 带上排序,也是需要group by后面的列名
select deptno,job,count(*),count(empno)
from emp
group by deptno,job
order by deptno,job
;-- 4、查询员工工资最低为其部门最低工资的员工的编号和姓名及工资
-- 4,1 找出每个部门的最低工资
select deptno,min(sal) minssal
from emp
group by deptno
;-- 4.2 where 多行子查询
select *
from emp
where (deptno,sal) in(select deptno,min(sal) minssalfrom empgroup by deptno
)
;

三、带条件的分组查询

/*------------二、带条件的分组查询利用"group by"子句将选择到的进行分组时,可以使用 having子句用于限制选择的组(进一步筛选),having子句的作用同where子句相似,都是指定查询条件。不同的是where子句对行进行选择,检查每条记录是否满足条件,而having子句是检查 分组之后的各组 是否满足条件。having子句是配合group by子句使用,在没有"group by"子句时不能用,并且group by和having子句在命令中要出现在where子句之后。--------- 语法 ------------select 字段/表达式    from 表名 where 单条记录的过滤条件group by 字段having 分组函数的比较表达式 对group by 分组后的结果进一步筛选 having后面不能使用别名 不能单独使用order by 排序;------where 和 having 他们的区别是什么? -------
--1. 先筛选再分组,用使用where筛选,速度上更快
--2. where在group by 之前使用的,having是在group by之后使用的 
--3. where不能筛选聚合函数的结果,having可以
--4、当要求的条件是某个具体的单值条件(条件能在表中查询到)先用where条件筛选,如果是需要通过聚合函数计算得出--的条件,先要用group by分组,然后再用having筛选。   
*/
/*-----------注意事项--------
1、分组函数只能出现在select、having、order by 子句中
2、如果在select语句同时含有group by、having、orderby,那么他们的顺序是group by、having、order by
3、group by 有一个原则,就是 select 后面的所有字段(除聚合函数外),必须出现在 group by 后面,否则,有语法错误(重要)
4、有having 一定有group by,having筛选时不能使用该查询的别名            */-- 1、查询各工种组的年平均工资,要求每个工种组至少在3人以上(统计3人以上的工种的年平均工资)
-- 1.1 先分组 group by:年平均工资=平均工资*12
select job,avg(sal),avg(sal)*12 yearsal,count(empno),count(*)
from emp
group by job
;-- 1.2 在分组后进一步筛选:having + 聚合函数
select job,avg(sal),avg(sal)*12 yearsal,count(empno),count(*)
from emp
group by job
having count(empno) >= 3
;-- 2、查询出至少有两名秘书CLERK的所有部门的部门号和人数,并按人数降序排序。
-- 2.1 先找出所有工种是:CLERK的记录
select * from emp where job = 'CLERK';-- 2.2 对第一步结果进行分组
select deptno,count(*),count(empno)
from mep where job = 'CLERK'
group by deptno;-- 2.3 对第二部进行having筛选
select deptno,count(empno) c1,count(*) c2,count(1) c3
from emp
where job = 'CLERK'
group by deptno
having count(empno) >= 2 -- having子句内不能用别名
;-- 2.4 排序
select deptno,count(empno) c1,count(*) c2,count(1) c3
from emp
where job = 'CLERK'
group by deptno
having count(empno) >= 2 -- having子句内不能用别名
order by count(empno)
;-- 3、查询出所有经理和销售人员的年平均工资,并按年平均工资降序排序。
-- 3.1 先找出所有的经理和销售员 where
select * from emp where job = 'MANAGER' or job = 'SALESMAN';-- 3.2 对第一步的结果进行分组 group by
select job,avg(sal),avg(sal)*12 yearavg
from emp
where job in('MANAGER','SALESMAN')
group by job;-- 3.3 排序 -- 排序可以用别名和表达式的select job,avg(sal)*12 yearsal
from emp
where job in('MANAGER','SALESMAN')
group by job
order by yearsal desc
;

四、分组练习题

-- 三、分组强化练习题 ----1. 显示平均工资为>2000的职位
select job,avg(sal)
from emp
group by job
having avg(sal) > 2000
;--2. 计算工资在2000以上,职位平均工资大于3000的职位及平均工资
select job,avg(sal) 
from emp
where sal > 2000
group by job
having avg(sal) > 3000
;--3. 找每个部门的最高和最低的工资
select deptno,max(sal),min(sal)
from emp
group by deptno
;--4. 找每个部门中每种职位的最高和最低的工资
select deptno,job,max(sal),min(sal)
from emp
group by deptno,job
order by deptno,job
;   --5. 显示出工作名称(job)中包含"MAN"的平均工资,最高工资,最低工资及工资总和
select job,avg(sal),max(sal),min(sal)
from emp
where job like '%MAN%' -- 1、先找出包含MAN的记录
group by job
;--6. 显示出20号部门的员工人数
select count(empno)
from emp
where deptno = 20
;   --7. 显示出平均工资大于2000的部门名称(及平均工资)
-- dept表-- deptno 部门编号-- dname 部门名称-- loc 部门所在地
-- 7.1 先从emp表中查询到平均工资
select deptno,avg(sal) from emp
group by deptno having avg(sal) > 2000;-- 7.2 子查询筛选
select * from dept
where deptno in(select deptnofrom empgroup by deptno having avg(sal) > 2000
)
;--8. 显示每个部门每种工种平均工资大于2500的部门及工种
select deptno,job,avg(sal)
from emp
group by deptno,job
having avg(sal) > 2500
;--9. 显示出工种名称job中包含"MAN",并且平均工资大于1000的职位名称及平均工资
select job,avg(sal)
from emp
where job like '%MAN%'
group by job
having avg(sal) > 1000
;--10. 列出最低工资大于1500的各种工种
select deptno,min(sal)
from emp
group by deptno
having min(sal) > 1500
;

-----------------------------------------

一、DDL创建普通表

/*-- 1、创建一个新的表格create table 表名(列名1 数据类型 约束条件,列名2 数据类型 约束条件,...列名n 数据类型 约束条件);-- 1.1 常用的数据类型:number、varchar2、char、date
*/-- 1、创建一个表
create table user_info(user_name varchar2(30),user_sex char(3),height number(5,2),user_time date
);-- 2、PLSQL用菜单信息创建一个表
-- 导航栏table --> 右键 新建 -- > 创建表格窗口 输入表名
-- --> 列 选项页 -- 填入列名 数据类型 等
-- --> 点击 应用报存按钮 生成表 
select t.*,t.rowid from user_info t;

二、约束

/*二、约束条件--1、唯一约束 unique值不能重复,值唯一,但可以为空null--2、非空约束 not null值不能为空null,但是一个列的值的默认值是可以为空的--3、主键 primary key常用于唯一标识,一个表中只需要有一个主键key--4、检查约束 check检查值是否满足某个条件,属于表对象,必须要有名字--5、外键 references也属于表对象,必须要有名字 主从表--6、默认值 default当暮云给列指定一个值的时候,该列的值默认为default定义的值,若没有default指定默认值,则是null--7、添加注释-- 7.1 表注释comment on table 表名 is '注释内容'-- 7.2 列注释               comment on column 表名.字段 is '用户名'-- 7.3 删除其注释信息,只需要在 is后设置空字符串即可*/
-- 2.1 创建一个有约束的表
create table user_info3(user_id number(8) primary key, -- id 主键约束user_name varchar2(30) not null,  -- 非空约束user_sex char(3) default '男' check(user_sex='男' or user_sex = '女'), -- 默认值,检查约束height number(5,2) check(height>0), user_time date default sysdate -- 默认为系统时间
);-- 2.2 给info3的表添加注释信息
comment on table user_info3 is '用户信息表user_info3';-- 2.3 给列添加注释信息
comment on column user_info3.user_id is '用户编号';-- 2.4 删除表注释信息-- 2.5 数据字典表
select * from user_col_comments; -- 列的注释信息
select * from user_tab_comments; -- 表的注释信息
select * from user_tables; -- 表在系统中存储的信息

三、外键约束 主从表

/*三、外键约束 主从表作用:保持主从表的数据一致性
*/
-- 3.1 新建主表 班级表
create table class1(clsno varchar2(20) primary key,clsname varchar2(30) not null unique,bz varchar2(20)
);-- 3.2 新建从表 学生表
create table student1(sno varchar2(20) primary key,sname varchar2(30) not null,ssex char(3) default '男' check(ssex='男' or ssex='女'),sage number(3) check(sage>=6),bir date,clsno varchar2(20) references class1(clsno) -- 每个学生都有一个班级,外键连接的是主表的class1(clsno)列
);-- 3.3 往class1和student填数据
select c.*,c.rowid from class1 c;
select t.*,t.rowid from student1 t;

四、表练习


/*四、表练习
*/
-- 练习一、
-- 1、创建 student001表 学生表
create table student001(sno varchar2(3) not null primary key,sname varchar2(4) not null,ssex varchar(2) not null,sbirthday date,class varchar2(5) not null+2
);-- 2、创建course表
create table course001(cno varchar2(5) not null primary key,cname varchar2(10) not null,tno varchar(10) not null references student001(sno)
);-- 3、创建teacher教师表
create table teacher001(tnp varchar(10) primary key,tname varchar2(20)
);-- 4、创建 score表
create table score001(sno varchar2(3) not null references teacher001(tnp),cno varchar2(5) not null references course001(cno),degree number(10,1) not null
);-- 练习二
---主表:create table sxb0828(ssno char(6) primary key,stel number(7) not null check(stel between 6330000 and 6339999));---从表:create table stu0828(sno char(6) primary key,sname varchar2(30) not null,ssex char(3) check(ssex='男' or ssex='女'),sage number(3) check(sage >0),mz varchar2(30) default '汉族' not null ,cardid varchar2(18) not null unique,ssno char(6) not null references sxb0828(ssno) );--建表先建主表再建从表,删除表时先删除从表再删主表 

相关文章:

Oracle-day4:分组查询(带条件)、DDL建表、约束、主从表

一、内容回顾 /*------------------内容回顾------------------------上周内容回顾--1、单表的基础查询--A、select * from emp;--B、列的运算 --数字类型运算 - * /--函数运算 mod ceil floor round upper lower--C、取别名--列、表达书取别名--*表示所有的列和列同时存在时…...

(详解)数据结构-----------栈与队列 c语言实现

本章将会详细讲解以下知识点&#xff1a; 目录 一&#xff1a;栈 1&#xff1a;栈的定义&#xff0c;栈的特点 2&#xff1a;用什么结构来实现栈与原因的分析? 3: (超详解)栈的常用接口并且附上测试用例 二:队列 1:队列的定义&#xff0c;队列的特点 2&#xff1a;用什么结…...

前端文件、图片直传OOS、分片上传、el-upload上传(vue+elementUI)

前言&#xff1a;基于天翼云的面相对象存储(Object-Oriented Storage&#xff0c;OOS),实现小文件的直接上传&#xff0c;大文件的分片上传。 开发文档地址&#xff1a;网址 上传之前的相关操作&#xff1a;注册账户&#xff0c;创建 AccessKeyId 和 AccessSecretKey之后&…...

java自动登录 selenium 自动登录并获取cookie

选择操作网页 我用的edge&#xff0c;谷歌我的版本太高没有对应的驱动… 下载Edge的驱动程序&#xff0c;直接解压就好里面只有一个.exe文件 https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/ 复制即用&#xff0c;看注释 import com.alibaba.fastjs…...

vue中 computed()方法详解

在Vue中&#xff0c;computed是一种计算属性&#xff0c;它用于定义一个属性&#xff0c;该属性的值是根据其他属性的值计算而来的。computed属性的值会被缓存&#xff0c;只有当依赖的属性发生变化时&#xff0c;才会重新计算。 computed属性可以在Vue实例的computed选项中定…...

在服务器上搭建Jenkins

目录 1.服务器要求 2.官方文档 3.在服务器上下载Jenkins 3.1 下载war包 3.2 将war包上传到服务器的一个目录下 3.3 启动jenkins 3.3.1 jdk版本升级 1&#xff09;下载jdk17 2&#xff09;解压到当前文件夹 3&#xff09;配置路径 4.jenkins配置 4.1 填写初始密码&a…...

全面解析MES系统中的报工操作

一、报工操作的定义&#xff1a; 报工操作是指在生产过程中&#xff0c;操作员通过MES系统记录和提交生产工序的相关信息&#xff0c;如工时、产量、质量等。报工操作将生产过程中的实际情况反馈给MES系统&#xff0c;实现生产数据的实时采集和记录。 二、报工操作的流程&…...

Harbor 私有仓库迁移

文章目录 一.私有仓库迁移的介绍1.为何要对Harbor 私有仓库的迁移2.Harbor 私有仓库的迁移特点3. Harbor 私有仓库的迁移注意要点 二.私有仓库迁移配置1.源Harbor配置&#xff08;192.168.198.11&#xff09;&#xff08;1&#xff09;接着以下操作查看容器状况及是否可以登录 …...

制造业物联网革命:智慧工厂数据采集与远程监控管理

智慧工厂是指运用现代信息技术和物联网技术&#xff0c;实现制造业生产过程的智能数字化。智慧工厂的工业设备不仅能够自动化运行&#xff0c;还可以通过网络技术帮助企业实现数据采集、远程监控与管理。4G工业网关便成为了智慧工厂通讯的重要组成部分&#xff0c;起到了连接工…...

软考A计划-网络工程师-复习背熟-网络管理和计算机基础知识

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…...

springBoot打印精美logo

文章目录 &#x1f412;个人主页&#x1f3c5;JavaEE系列专栏&#x1f4d6;前言&#xff1a;&#x1f380;文本logo &#x1f412;个人主页 &#x1f3c5;JavaEE系列专栏 &#x1f4d6;前言&#xff1a; 本篇博客主要以提供springBoot打印精美logo &#x1f380;文本logo ??…...

kali开启SSH服务(简单无比)

我会一直陪着你 1.切换到管理员用户&#xff1a;2.启动SSH服务3.要在Kali Linux上启用SSH服务并修改配置文件&#xff0c;你可以按照以下步骤进行操作&#xff1a;4.查看SSH服务状态是否正常运行&#xff0c;命令为&#xff1a;注意&#xff1a;配置文件有些地方不同&#xff0…...

Ubuntu20.04如何更换国内源-阿里云源

1.备份源文件 cp /etc/apt/sources.list /etc/apt/sources.list.bak 2.打开源文件&#xff0c;注释默认的源 vim /etc/apt/sources.list ## 注释原本内容 # deb http://mirrors.ivolces.com/ubuntu/ focal main restricted universe multiverse # deb-src http://mirrors.ivolc…...

goland设置

1、go file设置 file->setting->Editor->File and Code Templates->Go File package ${GO_PACKAGE_NAME} /** * description: * author:${USER} * date:${YEAR}/${MONTH}/${DAY} ${HOUR}:${MINUTE} * Versio…...

2023年Java核心技术第十篇(篇篇万字精讲)

目录 十九 . 一个线程两次调用start&#xff08;&#xff09;方法会出现什么情况&#xff1f;线程的生命周期和状态转移。 19.1 典型回答 19.1.1 线程生命周期&#xff1a; 19.1.2 计时等待详细解释&#xff1a; 19.2 深入扩展考察 19.2.1 线程是什么&#xff1f; 19.2.2 Green…...

分享一篇关于如何使用BootstrapVue的入门指南

你想轻松地创建令人惊叹且响应式的在线应用程序吗&#xff1f;使用BootstrapVue&#xff0c;您可以快速创建美观且用户友好的界面。这个开源工具包是基于Vue.js和Bootstrap构建的&#xff0c;非常适合开发现代Web应用程序。本文将介绍其基础知识&#xff0c;让您可以开始使用这…...

【1day】复现Cellular Router命令执行漏洞

目录 一、漏洞描述 二、影响版本 三、资产测绘 四、漏洞复现 一、漏洞描述 移动路由器(Cellular Router)是一种利用移动网络提供无线互联网连接的设备。它们类似于传统路由器,但不同于使用有线连接(如以太网或DSL)...

【Torch API】pytorch 中repeat_interleave函数详解

torch.repeat_interleave(input, repeats, dimNone) → Tensor Repeat elements of a tensor. Parameters input (Tensor) – the input tensor. repeats (Tensor or int) – The number of repetitions for each element. repeats is broadcasted to fit the shape of the …...

TDesign表单rules通过函数 实现复杂逻辑验证输入内容

Element ui 中 我们可以通过validator 绑定函数来验证一些不在表单model中的值 又或者处理一下比较复杂的判断逻辑 TDesign也有validator 但比较直观的说 没有Element那么好用 这里 我们给validator绑定了我们自己的checkAge函数 这个函数中 只有一个参数 value 而且 如果你的…...

springgateway网关修改响应后,部分中文乱码问题

原因 是因为响应体过大&#xff0c;开启了压缩&#xff0c;数据分段进行响应得&#xff0c;导致处理返回体得时候乱码 解决方式 Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {ServerHttpRequest request exchange.getR…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝

目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为&#xff1a;一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...