当前位置: 首页 > 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…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接&#xff1a;3403. 从盒子中找出字典序最大的字符串 I 代码如下&#xff1a; class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码&#xff0c;而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库&#xff0c;可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画&#xff0c;可以包含在你的网页或应用项目中。 3.An…...

scikit-learn机器学习

# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...