ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Oracle数据库1

Oracle数据库1 1. 执行顺序:FROM ON JOIN WHERE GROUP BY HAVING SELECT ORDER BY2. 模糊查询:LIKE %(通配符) 如LIKE %A%LIKE _(占位符) 如LIKE A__3.INNOT INJOB IN (SALESMAN,CLERK)4.BETWEEN ... AND ...NOT BETWEEN... AND ...5.查询去重 DISTINCTSELECT DISTINCT DEPTNO,JOB FROM EMP6.查询排序 ORDER BYASC 升序可以省略默认由小到大排序即升序排列DESC 降序SELECT EMPNO,ENAME,DEPTNO,SAL FROM EMPORDER BY DEPTNO,SAL DESC;7. 关键词SELECTFROMWHEREGROUP BYHAVINGORDER BYVARCHAR2NUMBERDATESUM()、和AVG()、平均值COUNT()、总个数MAX()、最大值MIN()、最小值MEDIAN() 中间值OVER() 开窗函数:SELECT EMPNO,ENAME,SAL,SUM(SAL)OVER() FROM EMP;8. 去nullNVL(COMM,0)9. 约束PRIMARY KEY 主键约束NOT NULL 非空约束DEFAULT 0 无约束,默认为0DEFAULT SYSDATE 添加系统时间为默认入职时间10.①加别名 ASSELECT SUM(SAL) AS 合计工资,AVG(SAL) 平均工资, -- 这里省略了 ASCOUNT(*) AS CT, -- 工作中表头和表名尽量用英文表示MAX(SAL) AS MAX_SAL1, -- 可以使用英文 下划线 数字表示注意不能数字开头FROM EMP②虚拟列 ASCREATE TABLE PRORE(ID NUMBER,名称 VARCHAR2(20),数量 NUMBER,单价 NUMBER,金额 AS (数量 * 单价), -- 虚拟列由数量乘以单价得来其他名称 AS (名称||国产) -- 虚拟列由名称拼接国产得来);SELECT * FROM PRORE;11. ASCII码12. 删除语句----删除表结构和数据DORP DDL----删除指定条件数据语句DELETE DML----删除所有数据语句TRUNCATE DDL不能回滚13.① CONSTRAINT 限制② COMMIT; 提交 TCL 语句③ ROLLBACK; 回滚④ COMMENT 注释COMMENT ON TABLE EMP240515 IS 这是一个员工表用于存储员工的相关信息;--给表添加注释COMMENT ON COLUMN EMP240515.EMPNO IS 这是一个员工号;--给EMMPNO添加注释COMMENT ON COLUMN EMP240515.HIREDATE IS 默认获取系统时间为入职时间;--给HIREDATE添加注释14. 集合UNION ALL(并集)UNION(并集)INTERSECT(交集)MINUS(补集)SELECT DEPTNO FROM DEPT --4 AMINUSSELECT DEPTNO FROM EMP --14 B A-B15. 分组拼接明细数据: LISTAGGSELECT JOB,COUNT(*),SUM(SAL),LISTAGG(ENAME, , )WITHIN GROUP(ORDER BY SAL) AS ENAME,LISTAGG(SAL, )WITHIN GROUP(ORDER BY SAL) AS SALFROM EMPGROUP BY JOB-- MYSQL分组拼接明细数据SELECT JOB,GROUP_CONCAT(ENAME SEPARATOR ,)FROM EMPGROUP BY JOB;ORACLE函数分为系统函数和自定义函数--系统函数又分为单行函数、聚合函数、开窗函数/分析函数--单行函数又分为数字函数、字符函数、日期函数--数字函数①ABS() --取绝对值②ROUND(X,Y) --对数字X保留Y位小数并进行四舍五入SELECT ROUND(3.146,2) FROM DUAL; --3.15SELECT ROUND(3.141) FROM DUAL; --3③TRUNC(X,Y) --对数字X保留Y位小数但不会进行 四舍五入SELECT TRUNC(3.146,2) FROM DUAL; --3.14SELECT 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--日期函数--日期-日期天数系统时间:SYSDATESELECT 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/25SELECT ROUND(TO_DATE(20260813,YYYYMMDD),MM) FROM DUAL; --2026/8/01SELECT 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:55SELECT 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; --3SELECT INSTR(ABCDEFCG,C,4,2) FROM DUAL; --0SUBSTR(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;--202608SELECT CONCAT(CONCAT(2026,08),24) FROM DUAL;--20260824⑦|| --管道符也可以拼接多个字符串WM_CONCAT() --拼接整个字段的值默认用逗号拼接SELECT WM_CONCAT(ENAME) FROM EMP;将EMP表的工作用横杠-拼接起来并且不能重复--输出CLERK-SALESMAN-MANAGER-ANALYST-PRESIDENTSELECT REPLACE(WM_CONCAT(DISTINCT JOB),,,-) FROM EMPUPPER() 小写转大写LOWER() 大写转小写TRIM() --去左右空格SELECT TRIM( A B C ) FROM DUAL; --A B CLTRIM() --去左空格SELECT LTRIM( A B C ) FROM DUAL; --A B CRTRIM() --去右空格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 4RANK()OVER([PARTITION BY ...][ORDER BY ...]) --考虑并列并空出排名1 2 2 4DENSE_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 一起使用
返回列表