数据库开发基础-Oracle-SQL基础-006

Oracle19C入门到熟练001-这是开篇 一篇极其简单与实用的Oracle入门教程,看过都说好 阅读详情

--Oracle开发中常用sql

--子查询
嵌套在其他sql中的一条查询语句,该查询语句就是子查询。
当我们执行的sql语句需要先从数据库中获取一些数据才能
运行时,那么先期执行的这条sql就是子查询,是为了给要
实际执行的sql提供数据的。

查看工资高于CLARK的员工?

select ename, sal
  from emp
 where sal > (select sal from emp where ename = 'CLARK');

查看与ALLEN同职位的员工?

select * from emp where job = (select job from emp where ename = 'ALLEN');


子查询常用于查询语句,但是亦可以在DDL,dml中使用。

DDL中使用,例如:

基于一个查询结果集快速创建一张表。
create table myemp 
as
select e.empno,e.ename,e.sal,e.job,
e.deptno,d.dname,d.loc
from emp e,dept d
where e.deptno =d.deptno;


desc myemp;

select * from myemp;

dml中使用子查询
删除CLARK所在部门的所有员工
delete from myemp
 where deptno = (select deptno from myemp where ename = 'CLARK');

子查询根据查询结果分为:
单行单列子查询,多行单列子查询,
多行多列子查询

其中单列的子查询多用在 where 子句中做过滤条件。
而多行多列子查询通常用于 from 中当做表看待。

select ename,job from emp;


查看谁比公司平均工资高?

select ename, sal from emp where sal > (select avg(sal) from emp);

查看与职位是“SALESMAN”相同部门的
其他职位员工?

select ename, job, deptno
  from emp
 where deptno in (select deptno from emp where job = 'SALESMAN')
   and job <> 'SALESMAN';

查看比20与30号部门工资高的员工信息?

select *
  from emp
 where sal > all (select sal from emp where deptno in (20, 30));

--等价
select *
  from emp
 where sal > (select max(sal) from emp where deptno in (20, 30))



exists关键字
exists是用于where中作为判断条件使用的
其后需要紧跟一个子查询,只要该子查询能查询出
至少一条记录,那么exists表达式就返回真,
也可以使用 not exists 来表达相反的效果。

查看所以员工的部门信息

select deptno, dname
  from dept d
 where exists (select * from emp e where e.deptno = d.deptno);

查看每个部门的最低薪水,前提是
该部门的最低薪水要高于30号部门的最低薪水?

select deptno, min(sal)
  from emp
 group by deptno
having min(sal) > (select min(sal) from emp where deptno = 30);

查看谁比自己所在部门平均工资高?

select e.ename,e.sal,e.deptno
  from emp e, (select avg(sal) avg_sal, deptno from emp group by deptno) s
 where e.deptno = s.deptno
   and e.sal > s.avg_sal;


子查询也可以应用在select子句中
可以实现外连接的效果

查看每个员工以及所在部门名称信息:

select e.ename, (select d.dname from dept d where d.deptno = e.deptno)
  from emp e;

--分页查询
当查询的数据量过度时,会导致一些情况:
1.服务端响应慢
2.系统资源占用多
3.数据过剩

为了解决这些问题,通常我们会分批查询数据
这个过程就是分页查询。
由于分页查询没有标准的sql语法,所以不同
数据库对于分页的机制不一致(方言)

select rownum,ename, sal, job, deptno from emp;

Oracle支持一个关键字rownum
rownum是一个伪列,该列不存在于
任何一张表中,但是每张表都可以查询该列。
而该列在结果集的值是结果集中每条记录的“行号”
rownum给结果集编号是在查询的过程中进行的,只要可以
从表中查询出一条记录,该记录的行号就会作为这条记录
rownum字段的值,rownum从1开始递增。
由于rownum从1开始,所以在第一次查询表中数据进行编号时。
不要使用rownum做大于1以上的数字判断,否则查询不到数据:

select rownum,ename,sal from emp where rownum >1;

select *
  from (select rownum rn, ename, sal from emp)
 where rn between 5 and 10;


查看公司工资排名的第6-10名
select *
  from (select rownum rn, t.*
          from (select ename, sal from emp order by sal desc) t)
 where rn between 6 and 10;


下面的效率好,不需要的数据就不编号了

select * 
from( select rownum rn,t.*
      from (select ename,sal from emp order by sal desc) t
       where rownum <=10
      )    
where rn >= 6;

计算分页公式:
页数:page
每页显示的条数:pageSize

start = (page-1)*pageSize+1--[当前页之前条数+1]
end = pageSize*page


一页显示5条,显示第2页

decode 函数,可以实现类似java中的分支操作:

select ename,
       job,
       sal,
       decode(job,
              'MANAGER',
              sal * 1.2,
              'ANALYST',
              sal * 1.2,
              'SALESMAN',
              sal * 1.05,
              sal) bonus
  from emp;

select count(*), job from emp group by job;

在group by中使用decode可以做到
将字段值不同的记录看做一个大组,只要
将需要看做一组的记录中该字段的值替换为相同的值即可。

select decode(
        job,
        'MANAGER','VIP',
        'ANALYST','VIP',
        'OTHER'
),count(*)

from emp 
group by decode(
        job,
        'MANAGER','VIP',
        'ANALYST','VIP',
        'OTHER'
);

select deptno,dname,loc
from dept
order by decode(
         dname,
         'OPERATIONS',1,
         'ACCOUNTING',2,
         'SALES',3
         );
         
         
排序函数:
排序函数可以按照指定的字段分组,然后再按照
指定的字段排序,最后为记录生成组内的编号。
1:row_number函数,生成组内连续且唯一的数字。--[独立编号]

查看每个部门中工资的排名:

select ename,
       sal,
       deptno,
       row_number() over(partition by deptno order by sal desc) rank

  from emp;

2:rank函数:生成组内不连续不唯一的数字,--[跳跃并列]

select 
    ename,sal,deptno,
    rank() over(
      partition by deptno
      order by sal desc
    ) rank
from emp;

3:dense_rank()生成组内连续但不唯一的数字--[不跳跃并列]

select ename,
       sal,
       deptno,
       dense_rank() over(partition by deptno order by sal desc) rank

  from emp;


--集合运算
select ename,job,sal
from emp where job = 'MANAGER'
--union
--intersect 
minus
select ename,job,sal
 from emp where sal >2500;


--下面的是创建一千行数据的表

CREATE TABLE sales_tab (

  year_id   NUMBER NOT NULL,

  month_id   NUMBER NOT NULL,

  day_id   NUMBER NOT NULL,

  sales_value NUMBER(10,2) NOT NULL

);

INSERT INTO sales_tab

SELECT TRUNC(DBMS_RANDOM.value(2010, 2012)) AS year_id,

       TRUNC(DBMS_RANDOM.value(1, 13)) AS month_id,

       TRUNC(DBMS_RANDOM.value(1, 32)) AS day_id,

       ROUND(DBMS_RANDOM.value(1, 100), 2) AS sales_value

FROM   dual

CONNECT BY level <= 1000;


SELECT * FROM sales_tab
ORDER BY year_id,month_id,day_id


 查看每天的营业额?
 
 select year_id, month_id, day_id, sum(sales_value)
   from sales_tab
  group by year_id, month_id, day_id
  order by year_id, month_id, day_id;

查看每月的营业额?

select year_id, month_id, sum(sales_value)

  from sales_tab
 group by year_id, month_id
 order by year_id, month_id;

查看每年的营业额?

select year_id, sum(sales_value)
  from sales_tab
 group by year_id
 order by year_id;

查看全部的营业额?


select sum(sales_value) from sales_tab;

--高级分组函数

group by rollup (a,b,c)
等价于:

group by a,b,c
union all
group by a,b
union all
group by a
union all
全表

查看每天,每月,每年,以及全部
营业额的统计?

select year_id, month_id, day_id, sum(sales_value)
  from sales_tab
 group by rollup(year_id, month_id, day_id)
 order by year_id, month_id, day_id;


cube函数:
cube会将每个参数的不同组合进行分组
然后将所有分组统计结果并在一起。
分组次数是2的参数个数次方。

group by cube(a,b,c)
abc,
ab,
ac,
bc,
a,
b,
c
全表

select year_id, month_id, day_id, sum(sales_value)

  from sales_tab
 group by cube(year_id, month_id, day_id)
 order by year_id, month_id, day_id;

grouping sets()
该函数可以按照指定的分组方式进行分组,
然后将结果集并在一起。
其中每一个参数就是一种组合方式。

查看每天以及每月的营业额?

select year_id, month_id, day_id, sum(sales_value)
  from sales_tab
 group by grouping sets((year_id, month_id, day_id),(year_id, month_id))
 order by year_id, month_id, day_id;

macOS在Docker上部署Oracle数据库 在本地使用 Navicat/SQLDevelopper 连接 因为学校的Database Management课环境用的是Oracle+sql developper, 但是我自己是macOS的环境, 无法直接在本地装Oracle数据库, 因为不想装虚拟机所以选择了Docker, 比虚拟机更快而且占用资源少, 只是没想到在配置过程中遇到了不少问题, 花了一个晚上才完成配置, 现在贴上配置过程: 首先上几篇我在安装过程中参考的博客: 在MAC上安装docker并... 阅读详情

相关推荐

【第006篇】通过impdp命令导入dmp文件到Oracle11g数据库中

通过impdp命令导入dmp文件到Oracle11g数据库中

嘉&年华的博客 7078

数据库笔试——查出各部门超出部门平均薪资的员工的姓名,薪资,所在部门名称及部门平均薪水...

  有一段时间没做数据库的题了,前面面试偶然做到这么一题目,觉得不错,凭记忆将题目记下来,然后在数据库中实现了一遍。   题目大概是这样:一张员工表 employee,包含字段 id,name,salary,dep_no; 一张部门信息表 department,包含字段 id,dep_no,name,其中 employee 的 dep_no 关联 department 的 dep_no;写 s...

weixin_34166847的博客 2255

UE5热更新(通过Pak包加载关卡资源,并添加到流关卡)

请先阅读我上一篇文章)**

xialuhui的博客 6456

orcal复习3

一、查询集合运算1、并集:又称为联合运算,两个查询语句的查询出来的列的个数,对应的列的数据类型相符才能合并UNION:将两个查询结果合并输出,查询结果中的重复记录只显示一次UNION ALL:将两个查询结果合并输出,查询结果中的重复记录显示多次SELECT * FROM EMP WHERE deptno=30unionSELECT * FROM emp WHERE upper(job)=...

F8F8F8888的博客 261

Triton推理服务器实战:如何为PaddleOCR的ONNX模型配置动态批处理和并发推理

本文详细介绍了如何使用Triton推理服务器为PaddleOCR的ONNX模型配置动态批处理和并发推理,以提升GPU利用率和推理性能。通过实战案例和参数调优指南,帮助开发者解决高并发场景下的性能瓶颈问题,实现从实验室到生产环境的高效部署。

weixin_42527160的博客 427

MONAI教程<1>-安装

MONAI的安装非常简单,常用的有两种方法: 直接 pip install monai 从GitHub 上安装 monai是通常配合其他库一起使用的,比如pytorch, nibabel, skimage, pillow等等。缺什么直接pip install 就行

Tina姐的博客 1万+

Oracle自带表(EMP)SQL语句练习

0. 查询最高工资及其对应员工 解法一: select ename from (select ename from emp order by sal desc) where rownum=1; 解法二: select ename from emp where sal=(select max(sal) from emp); 解法三: select ename, sal

乐于学习、乐于分享、乐于总结 6081

2026年华为od机试真题题库

OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)

面试高手的博客 19万+

一个SQL实现薪水大于所在部门平均薪水的员工

一个SQL实现薪水大于所在部门平均薪水的员工 id    empName    DeptId    empSalary 1          张三              1            2500 2          李四              1            2400 3          王二              2      

zhangyobdd的专栏 5491

YOLOv11 改进 - 特征融合 | 替换 C3k2 涨点:GELAN 融合 CSP+ELAN 提精度

本文介绍了可编程梯度信息(PGI)和广义高效层聚合网络(GELAN)与 YOLOv11 的结合,以解决深度网络数据传输时的信息丢失问题。PGI 能为目标任务提供完整输入信息,计算目标函数以更新网络权重。GELAN 作为轻量级网络架构,由 SPPELAN、ELAN1、RepNCSPELAN4 等模块组成。我们将 GELAN 代码集成进 YOLOv11, 实验脚本显示,结合 GELAN 的 YOLOv11 在 MS COCO 数据集目标检测任务中或有良好表现。

魔改工程师的博客 1243

30、优化算法在芯片布局与药物设计中的应用

本文探讨了优化算法在芯片布局与药物设计中的关键应用。针对芯片布局问题,提出了一种改进的粒子群优化(PSO)方法,通过引入转向因子、重叠检测与消除机制以及优先处理约束模块,有效优化了芯片面积、线长和运行时间,并在有无布局约束条件下均优于传统方法。在药物设计领域,介绍了基于蚁群优化(ACO)的PLANTS算法,用于解决蛋白质-配体对接问题,通过离散化连续变量、信息素更新、局部搜索和聚类处理,提高了构象预测的准确性。文章还总结了两种算法的操作流程,并展望了未来在多约束集成与算法融合方向的发展潜力。

egg99的博客 95

数据库学习总结(六)——查询练习题(1)

这篇博客是我再学习数据库过程中所练习的查询操作题 供大家学习参考用 查询所使用的数据库是teach.sql,已上传资源,下载后导入在数据库中即可,具体步骤文末贴图 练习题可在导入的数据库中运行 建议先自己做再看答案,答案是我自己做的,不是唯一的,如果有问题也欢迎指出~ 1、列出XSB表中所有记录的XM、XB和ZY列。 select xm,xb,zy form xsb; 2、显示所有的专业名称即不重...

qq_43501509的博客 1万+

华为OD机试真题 新系统2026-04-01 Python&JS【计算数列位置N的值】

如果其前面的M个元素中,存在值相同的元素,则该位置上的数值等于前面M个数中最大的数值与最小的数值之如果其前面的M个元素中,不存在值相同的元素,则该位置上的数值等于前面M个数中最大的数值与最小的数值之差;1、输入M、N两个数,则按照以下规则形成一个数列;两个整数,用逗号分割,分别表示M和N。一个整数,表示数列第N个位置上的数值。2、数列的前M个元素的值为1到M;请计算该数列第N个位置上的数值。N取值范围:1<= N<=50。M取值范围:3<=M<=10。

MISAYAONE的博客 3253

【Oracle数据库进阶】006.SQL基础查询_运算

1. DUAL表是Oracle提供的最小的工作表,是sys用户下的一张内部表,所有用户都可以使用DUAL名称访问,无论什么时候这个表总是存在。 2. DUAL表是一个单行单列的虚拟表,这个表只有1列DUMMY,数据类型为VARCHAR2(1),不论执行什么操作(不要删除记录),它都只有一条记录——“X”,Oracle有内部逻辑保证DUAL表中只有一条数据 3. DUAL表主要用来选择系统变量或求一个表达式的值 4. 最常见的一个简单的例子SELECT sysdate FROM dau

weixin_50296259的博客 1149

LIS2DH三轴加速度传感器原理图设计,已量产(加速度传感器)

最近在做一款可穿戴设备原型时,选了 LIS2DH 这款加速度计 —— 比起之前常用的 ADXL345,它在低功耗和稳定性上的优化刚好戳中了可穿戴设备 “续航 + 可靠” 的核心需求。下面结合这次画的原理图,聊聊这个小模块的硬件设计细节。

不脱发的程序猿 391

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

oracle和sql数据库,SQL与ORACLE异同

001、SQL与ORACLE的内存分配ORACLE的内存分配大部分是由INIT.ORA来决定的,一个数据库实例可以有N种分配方案,不同的应用(OLTP、OLAP)它的配置是有侧重的。SQL概括起来说,只有两种内存分配方式:动态内存分配与静态内存分配,动态内存分配充许SQL自己调整需要的内存,静态内存分配限制了SQL对内存的使用。002、SQL与ORACLE的物理结构总得讲,它们的物理结构很相似,S...

weixin_39560657的博客 612

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Oracle/MySQL数据库 SQL语句基础知识学习及整理

由于学习需要,从今天起开始学习数据库的基础知识以及SQL语句的编写及使用,因此在这里记录我的学习历程,以此来督促自己,巩固已学过的知识,并且也希望能够帮助到更多入门的同学。 1、建立数据库 create database db_name;//db_name为数据库的名称。 由于我已经打开了数据库,再次创建数据库会提示“失败,数据库已装载”。 2、显示数据库 show databases; 3、创建数据表 //创建学生表 学号、姓名、年龄、性别 create table ...

qq_38498224的博客 2568

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

SQL与ORACLE的对比

function StorePage(){d=document;t=d.selection?(d.selection.type!=None?d.selection.createRange().text:):(d.getSelection?d.getSelection():);void(keyit=window.open(http://www.365key.com/storeit.as

MaoMao_1983的专栏 2823

【转】SQL与Oracle对比

【转】SQL与Oracle对比 网上已经有很多SQL与ORACLE的对比 ,但本人要讲的即不是单纯的SQL,也不是单纯的ORACLE,更不是评价谁好谁坏(意思不大),而是两种数据库之相同和异同,本人曾讲授过SQL与ORACLE的课程,讲SQL时说SQL好,讲ORACLE时又说ORACLE棒,现在终于可以平心而评啦。估计有人现在会嘿嘿冷笑(又一个误人子弟的骗子),老实说,当初每次讲完课,就有这种感觉

我心编程 1629

SQL与Oracle对比

网上已经有很多SQL与ORACLE的对比 ,但本人要讲的即不是单纯的SQL,也不是单纯的ORACLE,更不是评价谁好谁坏(意思不大),而是两种数据库之相同和异同,本人曾讲授过SQL与ORACLE的课程,讲SQL时说SQL好,讲ORACLE时又说ORACLE棒,现在终于可以平心而评啦。估计有人现在会嘿嘿冷笑(又一个误人子弟的骗子),老实说,当初每次讲完课,就有这种感觉—教的人不得其法,学的人不得其道

昊的专栏 1522

oracle与sql比较,SQL 与 ORACLE 的比较 (转)

01、SQL与ORACLE的内存分配ORACLE的内存分配大部分是由INIT.ORA来决定的,一个数据库实例可以有N种分配方案,不同的应用(OLTP、OLAP)它的配置是有侧重的。 SQL概括起来说,只有两种内存分配方式:动态内存分配与静态内存分配,动态内存分配充许SQL自己调整需要的内存,静态内存分配限制了SQL对内存的使 用。002、SQL与ORACLE的物理结构总得讲,它们的物理结构很相似,...

weixin_42358409的博客 690

使用 DBeaver 连接 OB Oracle 数据库

使用 DBeaver 连接 OB Oracle 数据库

dengfuping0123的博客 5315

oracle数据库经典练习题及答案

最近下载了一套oracle数据库习题(无答案),本人自己在oracle上练习得到的答案,如果不对的地方,请不要见怪。保存到博客方便自己以后查阅。 相关表: /*学生表*/ create table student ( sno varchar2(10) primary key not null, sname varchar2(20), sage number(2),

YuZongTao 2万+

SQL 与 ORACLE 的比较

最近参加了一个ORACLE的培训,ORACLE与平日惯用的SQL SERVER果然有很大不同,在网上搜索了一下转了这篇比较SQL与ORACLE的帖子,总体上感觉SQL SERVER使用更加便捷,人性化,在网上的资料支持很丰富ORACLE更加专家一些,性能可能也强一些,很多东西可以由管理员来配置,管理员手段更加丰富 001、SQL与ORACLE的内存分配 ORACLE的内存分配...

weixin_30784141的博客 291

Oracle19C入门到熟练006-SQL理论与数据准备

学习要求 有一定关系型数据的操作功底,会SQL语句 教学目标 学习SQL理论 SQL概述 结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。 SQL分类 分类 概述 SQL命令 DQL 数据查询语言(Data Query Language) select DML 数据操作语言(Data Manipulation Langu

langfeiyes的博客 1672
上一篇: 数据库开发基础-Oracle-SQL基础-005
下一篇: 数据库开发基础-Oracle-SQL基础-007
Coder_Boy_
博客等级 码龄10年 2804粉丝 819原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coder_Boy_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值