Oracle数据库1

  1. 执行顺序:

FROM > ON > JOIN > WHERE > GROUP BY > HAVING > SELECT > ORDER BY

  1. 模糊查询:

LIKE + %(通配符) 如:LIKE '%A%'

LIKE + (占位符) 如:LIKE 'A_'

IN

NOT IN

JOB IN ('SALESMAN','CLERK')

BETWEEN ... AND ...

NOT BETWEEN... AND ...

5.查询去重 DISTINCT

SELECT DISTINCT DEPTNO,JOB FROM EMP

6.查询排序 ORDER BY

ASC 升序可以省略,默认由小到大排序即升序排列;

DESC 降序

SELECT EMPNO,ENAME,DEPTNO,SAL FROM EMP

ORDER BY DEPTNO,SAL DESC;

  1. 关键词:

SELECT

FROM

WHERE

GROUP BY

HAVING

ORDER BY

VARCHAR2

NUMBER

DATE

SUM()、和

AVG()、平均值

COUNT()、总个数

MAX()、最大值

MIN()、最小值

MEDIAN() 中间值

OVER() 开窗函数:

SELECT EMPNO,ENAME,SAL,SUM(SAL)OVER() FROM EMP;

  1. 去null

NVL(COMM,0)

  1. 约束

PRIMARY KEY 主键约束

NOT NULL 非空约束

DEFAULT 0 无约束,默认为0

DEFAULT SYSDATE 添加系统时间为默认入职时间

①加别名 AS

SELECT SUM(SAL) AS 合计工资,

AVG(SAL) 平均工资, -- 这里省略了 AS

COUNT(*) AS CT, -- 工作中表头和表名尽量用英文表示

MAX(SAL) AS MAX_SAL1, -- 可以使用英文 + 下划线 + 数字表示,注意不能数字开头

FROM EMP;

②虚拟列 AS

CREATE TABLE PRORE(ID NUMBER,

名称 VARCHAR2(20),

数量 NUMBER,

单价 NUMBER,

金额 AS (数量 * 单价), -- 虚拟列:由数量乘以单价得来

其他名称 AS (名称||'国产') -- 虚拟列:由名称拼接国产得来

);

SELECT * FROM PRORE;

  1. ASCII码

  2. 删除语句:

----删除表结构和数据:DORP (DDL)

----删除指定条件数据语句:DELETE (DML)

----删除所有数据语句:TRUNCATE (DDL)不能回滚

① CONSTRAINT 限制

② COMMIT; 提交

( TCL 语句)

③ ROLLBACK; 回滚

④ COMMENT 注释

COMMENT ON TABLE EMP240515 IS '这是一个员工表,用于存储员工的相关信息';--给表添加注释

COMMENT ON COLUMN EMP240515.EMPNO IS '这是一个员工号';--给EMMPNO添加注释

COMMENT ON COLUMN EMP240515.HIREDATE IS '默认获取系统时间为入职时间';--给HIREDATE添加注释

  1. 集合:

UNION ALL(并集),

UNION(并集),

INTERSECT(交集),

MINUS(补集)

SELECT DEPTNO FROM DEPT --4 A

MINUS

SELECT DEPTNO FROM EMP --14 B A-B

  1. 分组拼接明细数据: LISTAGG

SELECT JOB,COUNT(*),SUM(SAL),

LISTAGG(ENAME,' , ')WITHIN GROUP(ORDER BY SAL) AS ENAME,

LISTAGG(SAL,' < ')WITHIN GROUP(ORDER BY SAL) AS SAL

FROM EMP

GROUP BY JOB

-- MYSQL分组拼接明细数据

SELECT JOB,GROUP_CONCAT(ENAME SEPARATOR ',')

FROM EMP

GROUP BY JOB;

ORACLE函数

分为系统函数和自定义函数

--系统函数又分为:单行函数、聚合函数、开窗函数/分析函数

--单行函数又分为:数字函数、字符函数、日期函数

--数字函数

①ABS() --取绝对值

②ROUND(X,Y) --对数字X保留Y位小数,并进行四舍五入

SELECT ROUND(3.146,2) FROM DUAL; --3.15

SELECT ROUND(3.141) FROM DUAL; --3

③TRUNC(X,Y) --对数字X保留Y位小数,但不会进行 四舍五入

SELECT TRUNC(3.146,2) FROM DUAL; --3.14

SELECT TRUNC(3.646) FROM DUAL; --3

④POWER(X,Y) --返回X的Y次方,求幂

SELECT POWER(3,2) FROM DUAL; --9

⑤MOD(X,Y) --对X取Y的余数

SELECT MOD(5,2) FROM DUAL ; --1

--日期函数

--日期-日期=天数

系统时间:SYSDATE

SELECT SYSDATE - TO_DATE('2026-8-1','YYYY-MM-DD') FROM DUAL;
--日期+数字=日期

SELECT SYSDATE + 7 FROM DUAL; --2026/8/31 9:37:12

①ROUND(日期,截取单位)

SELECT ROUND(TO_DATE('20260824133423','YYYYMMDDHH24MISS'),'DD') FROM DUAL; --2026/8/25

SELECT ROUND(TO_DATE('20260813','YYYYMMDD'),'MM') FROM DUAL; --2026/8/01

SELECT ROUND(TO_DATE('20260413','YYYYMMDD'),'YYYY') FROM DUAL;--2026/1/01

②TRUNC(日期,截取单位) --用法跟ROUND一致,唯一区别是TRUNC不会四舍五入

③ADD_MONTHS(日期,数字) --返回几个月之后的当前时间

SELECT ADD_MONTHS(SYSDATE,2) FROM DUAL; --2026/10/24 9:45:55

SELECT ADD_MONTHS(SYSDATE,-2) FROM DUAL; --2026/6/24 9:46:10

④LAST_DAY(日期) --返回日期对应月份的最后一天

SELECT LAST_DAY(SYSDATE) FROM DUAL;

⑤MONTHS_BETWEEN(日期,日期) --返回两个日期相差的月份数

SELECT MONTHS_BETWEEN(SYSDATE,TO_DATE('20260521','YYYYMMDD')) FROM DUAL; --3.11084826762246

--字符函数

LENGTH() --返回字符串的长度

SELECT LENGTH('SCOTT') FROM DUAL; --5

--去空值时好用

REPLACE(X,Y,Z) --将字符串X中的Y替换成Z,Z不写默认替换成空值

SELECT REPLACE('SCOTT','S','T') FROM DUAL;

INSTR(X,Y,Z,M) --查找字符串X中字符Y的位置,从第Z为开始找,找第M次出现Y的位置

--示例:查找字符串'ABCDEFCG'中第一次出现C的位置

SELECT INSTR('ABCDEFCG','C',1,1) FROM DUAL; --3

SELECT INSTR('ABCDEFCG','C',4,2) FROM DUAL; --0

SUBSTR(X,Y,Z)

--截取函数,对字符串X进行截取,从第Y为开始截

--截取Z为长度,Y为负数时表示从右往左数,Z不写表示截取第Y为之后的所有字符

SELECT SUBSTR('20260824',1,4) FROM DUAL;

--2026

⑥CONCAT(X,Y) --拼接字符串X和Y,一次只能拼接两个参数

SELECT CONCAT('2026','08') FROM DUAL;

--202608

SELECT CONCAT(CONCAT('2026','08'),'24') FROM DUAL;

--20260824

⑦|| --管道符,也可以拼接多个字符串

WM_CONCAT() --拼接整个字段的值,默认用逗号拼接:

SELECT WM_CONCAT(ENAME) FROM EMP;

将EMP表的工作用横杠"-"拼接起来,并且不能重复

--输出:CLERK-SALESMAN-MANAGER-ANALYST-PRESIDENT

SELECT REPLACE(WM_CONCAT(DISTINCT JOB),',','-') FROM EMP

UPPER() 小写转大写

LOWER() 大写转小写

TRIM() --去左右空格

SELECT TRIM(' A B C ') FROM DUAL; --A B C
LTRIM() --去左空格

SELECT LTRIM(' A B C ') FROM DUAL; --A B C
RTRIM() --去右空格

SELECT RTRIM(' A B C ') FROM DUAL; -- A B C
--函数总结:

分析函数/开窗函数:可以同时输出明细数据和聚合值

主要有聚合型和非聚合型

--聚合型

SUM/AVG/MAX/MIN/COUNT()OVER(PARTITION BY ...ORDER BY ...)

--加了ORDER BY 有累计效果

--非聚合型

RATIO_TO_REPORT()OVER(PARTITION BY ...) --占比函数

FIRST_VALUE()OVER(PARTITION BY ...ORDER BY ...) --取第一个值

NTILE()OVER(PARTITION BY ...ORDER BY ...) --切片函数

WM_CONCAT()OVER(PARTITION BY ...ORDER BY ...) --拼接函数

--排名

ROW_NUMBER()OVER(PARTITION BY ...ORDER BY ...) --不考虑并列,1 2 3 4

RANK()OVER(PARTITION BY ...ORDER BY ...) --考虑并列,并空出排名,1 2 2 4

DENSE_RANK()OVER(PARTITION BY ...ORDER BY ...) --考虑并列,不会空出排名,1 2 2 3

--偏移

LAG()OVER(PARTITION BY ...ORDER BY ...) --向上偏移

LEAD()OVER(PARTITION BY ...ORDER BY ...) --向下偏移

--注意:分析函数不能直接用在WHERE之后,一般分析函数不会跟GROUP BY 一起使用

相关推荐
acrel712 分钟前
医院用电隐患治理与节能降耗及智慧能源平台应用
网络·数据库
snow@li36 分钟前
PowerDesigner 全景教程:从业务建模、表结构设计、关系管理到正向/逆向、文档输出
数据库
ss27339 分钟前
PostgreSQL表级锁、行级锁、轻量级锁
数据库·postgresql·区块链
RacentCLM1 小时前
证书即服务CaaS:从申请、续期到部署的自动化链路拆解
运维·数据库·自动化·ssl
SelectDB1 小时前
安全评审卡了三周,我把部署形态的四种选项重新排了一遍
大数据·数据库·云原生
Random Glow3 小时前
二级索引与回表:一次回表到底多贵
数据库·mysql·性能优化·innodb·索引
CarIise3 小时前
JDBC 与数据库事务核心
数据库·笔记
见闻小天地3 小时前
新手入门:印刷包装设备的伺服和PLC运动控制方案各管什么?七步选型讲清楚
运维·网络·数据库·人工智能
海鸥-w4 小时前
Redis 配置与排错说明
java·数据库·redis·bootstrap