尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Oracle的sql语句3
1.exists关键字 存在与之对应的: no exists 不存在看如下案例-- 和SMITH在同一个岗位,同一个部门的员工 select ENAME, DEPTNO, JOB from EMP where (DEPTNO, JOB) in (select DEPTNO, JOB from EMP where ENAME SMITH); -- 查询和smith在同一个岗位的员工 select m.ENAME, m.JOB from EMP m where exists( select X from EMP c where c.ENAME SMITH and c.JOB m.JOB ); exists和in的区别: in适合外表大而内表小的情况 exists适合外表小而内表大的情况2.普通函数-- lower()小写 select lower(HelloWord) from dual; -- upper()大写 select upper(HelloWord) from dual; -- length() 字符长度个数 select length(你好啊?) from dual; -- substr(,startIndex,length) 从1开始算,从哪开始,要几个 select substr(你好啊?, 1, 2) from dual; -- 从1开始要,要2个 -- instr()获取字符串位置,找哪个字符,从第几个位置开始找 select instr(helloword, o, 6) from dual; -- replace()替换文本,将什么替换成什么,全部替换 select replace(helloword, o, 我是老虎) from dual; -- round()四舍五入,保留几位小数 select round(22.222, 2) from dual; -- trunc()截取数字或者日期(去掉时分秒),不改变数据类型 select trunc(sysdate), trunc(123.19344, 1) from dual; -- mod()取余数 select mod(12, 3) from dual; -- floor() 向下取整 select floor(12.9) from dual; -- ceil() 向上取整 select ceil(12.1) from dual; -- abs()取绝对值 select abs(-12.1) from dual; -- power() x的y次方 select power(2, 4) from dual; -- 获取当前日期:sysdate,systimestamp select sysdate, systimestamp from dual; --添加月份 SELECT add_months(SYSDATE, 2) FROM dual; --获取月的最后一天的日期 SELECT last_day(SYSDATE) FROM dual;练习案例:-- 查找已经入职8个多月的员工 select * from EMP where sysdate add_months(HIREDATE, 8); -- 当前时间入职时间8个月 -- 显示满10年服务年限的员工的姓名和受雇日期 select ENAME, HIREDATE from EMP where sysdate add_months(HIREDATE, 12 * 10); -- 对于每个员工,显示其加入公司的天数 select floor(sysdate - HIREDATE) 入职天数, ENAME from EMP; -- 找出各月倒数第三天受雇的所有员工 select HIREDATE, ENAME from EMP -- last_day(hiredate)获取当前日期的最后一个月的最后一天 where last_day(HIREDATE) - 2 HIREDATE; -- 查看language(oracle数据库的编码格式) select sys_context(USERENV, language) from dual;3.序列序列sequence:就是一组数字的集合,有序数字,不重复,适合做表的主键的值创建序列:create sequence sq_deptstart with 50 --开始值50increment by 10; – 每次递增10nextval– 第一次使用时必须sequence.nextval获取序列化初始值50– 第二次第n次 上次值基础上递增值返回select sq_dept.nextvalfrom dual;currval查询当前序列的值生成到几了– sequence.currval 查询序列最后一次生成的值,它只能起查询作用,不会创建值select sq_dept.currvalfrom dual;补充:后续使用UUID 生成随机的32位字符,不重复,用来做主键列的值4.视图视图:就是一张虚表,降低sql查询的复杂度细节:创建视图需要DBA权限扩展如何让用户获取DBA权限优点:1.将复杂的查询保存视图,可以对最终用户屏蔽一定sql复杂度2.可以通过视图查询数据的时候,可以对最终用户屏蔽底层表的结构和数据,安全性高常问的问题:视图会占用表空间?不占用,视图不是直接存储数据,数据还是保存在原来的表中视图可以加快查询吗?不能,因为每次使用相当于重新执行一次创建视图:create view v_result asselect d.DEPTNO, d.DNAME, d.LOC, e.ENAMEfrom DEPT d,EMP ewhere d.DEPTNO e.DEPTNO;5.数据库的索引, ! ,is not null , or 都不走索引oracle3类索引:唯一索引:效率最高,应用在主键和唯一键上位图索引:应用在有一定重复规则的数据字段上b-tree:应用在不规则的数据的普通字段上作用:优点是提升查询效率缺点是降低存储的效率索引本身也占空间,需要控制数量,一般不超过3-5个人索引:–创建索引create [BITMAP][UNIQUE] index 索引名称 on 表(字段);–删除索引drop index 索引名称;6.行转列有3种方法:现在讲的是静态行转列通过:case when条件 then 结果1else 结果2 end准备数据-- 创建临时成绩表 create table temp_score ( id number primary key, -- 设置主键 sname varchar2(10), --学生名字 cname varchar2(10), -- 课程名 score number -- 成绩 ); select * from temp_score; insert into temp_score (id, sname, cname, score) VALUES (1, 赵云, 语文, 90); insert into temp_score (id, sname, cname, score) VALUES (2, 赵云, 数学, 80); insert into temp_score (id, sname, cname, score) VALUES (3, 赵云, 英语, 70); insert into temp_score (id, sname, cname, score) VALUES (4, 刘备, 语文, 90); insert into temp_score (id, sname, cname, score) VALUES (5, 刘备, 数学, 90); insert into temp_score (id, sname, cname, score) VALUES (6, 刘备, 英语, 90); insert into temp_score (id, sname, cname, score) VALUES (7, 诸葛亮, 语文, 100); insert into temp_score (id, sname, cname, score) VALUES (8, 诸葛亮, 数学, 100); insert into temp_score (id, sname, cname, score) VALUES (9, 诸葛亮, 英语, 100); insert into temp_score (id, sname, cname, score) VALUES (10, 张飞, 语文, 60); insert into temp_score (id, sname, cname, score) VALUES (11, 张飞, 数学, 50); insert into temp_score (id, sname, cname, score) VALUES (12, 张飞, 英语, 40); insert into temp_score (id, sname, cname, score) VALUES (13, 关羽, 语文, 70); insert into temp_score (id, sname, cname, score) VALUES (14, 关羽, 数学, 80); insert into temp_score (id, sname, cname, score) VALUES (15, 关羽, 英语, 50);开始测试:-- 1.查询出每个人的语文,数学,英语成绩 -- case when... then... else... end select sname, max(case when cname 语文 then score else 0 end) 语文, max(case when cname 数学 then score else 0 end) 数学, max(case when cname 英语 then score else 0 end) 英语 from temp_score group by sname;ps: 实现了行转列案例扩展,找个单科成绩的最高的那个人-- 思路1:找到了最高成绩,学科,再去成绩表找该条记录 select * from temp_score sco, ( -- 找到单科成绩最高,学科名 select cname, max(score) scoreMax from temp_score group by cname) sco_max -- 再去成绩表找该条记录 where sco.cname sco_max.cname and sco.score sco_max.scoreMax order by id asc; -- 思路2:先找到单科的最高分,再查询成绩表,找到最高分数的记录 select * from temp_score sco where score ( -- 外部的成绩表的名字传入进来,然后内部的成绩表通过该名字找到该学科成绩的最大值 select max(score) from temp_score scoInner where scoInner.cname sco.cname); -- 思路3:成绩表中,当学科一样的时候,不存在一条记录的 分数小于其他记录的分数 select * from temp_score sco where -- 当学科一样时,不存在外部的成绩表的成绩内部表的成绩 也就是外部表的这个成绩最大(至多它等于内部表最大成绩) not exists(select * from temp_score scoInner where sco.cname scoInner.cname and sco.score scoInner.score) order by id asc;继续讲解case when…then… eles… end,可以传入多个when,也就是多个条件-- 2.创建视图 create VIEW v_temp_score AS select sname, max(case when cname 语文 then score else 0 end) 语文, max(case when cname 数学 then score else 0 end) 数学, max(case when cname 英语 then score else 0 end) 英语 from temp_score group by sname; -- 3.虚拟表测试 select case when 100 1 then pig1 when b b1 then pig2 when c3 c then pig3 else pig4 end case from dual; -- 3.2 select case a when a then pig1 when b then pig2 when c then pig3 else pig4 end case from dual;todo decode(条件1,值,返回值,…) 函数传入3的倍数个参数-- todo decode(条件1,值,返回值,...) 函数传入3的倍数个参数 select decode(e, b, is a, d, is d, e, is e, not all) from dual; select decode(a, is a, not a) from dual;
RELATED

相关推荐

154、感知质量度量:LPIPS与NIQE在AI影像中的调优实践

154、感知质量度量:LPIPS与NIQE在AI影像中的调优实践

154、感知质量度量:LPIPS与NIQE在AI影像中的调优实践 上个月产线反馈,某款旗舰机夜景模式在DXO评测中“锐化过度”扣分。我拉了一版AI降噪模型,PSNR涨了0.8dB,SSIM也漂亮,结果盲测时用户说“这照片看着假”。后来发现,PSNR和SSIM对纹理细节的感知能力太弱——它们只盯着像…

📅 2026/9/21 7:38:04
Windows风扇控制终极指南:3个关键策略让你的电脑实现完美静音散热

Windows风扇控制终极指南:3个关键策略让你的电脑实现完美静音散热

Windows风扇控制终极指南:3个关键策略让你的电脑实现完美静音散热 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_…

📅 2026/9/9 17:08:19
Spring配置MySQL连接代码

Spring配置MySQL连接代码

spring:datasource:url: jdbc:mysql://localhost:3306/stumanage?characterEncodingutf-8username: rootpassword: rootdriver-class-name: com.mysql.jdbc.Driver

📅 2026/8/21 1:07:32
MORE NEWS

更多资讯

📰

swagger-codegen 生成的 Android Volley 客户端中 Pet 模型完整解析

开发工具代码生成API设计 【免费下载链接】swagger-codegen swagger-codegen contains a template-driven engine to generate documentation, API clients and server stubs in different languages by parsing your OpenAPI / Swagger definition. 项目地址: http…

📰

Edict SOUL.md实战:如何自定义AI官员人格与权限矩阵,打造专属多Agent团队

Edict SOUL.md实战:如何自定义AI官员人格与权限矩阵,打造专属多Agent团队 【免费下载链接】edict 🏛️ 三省六部制 OpenClaw Multi-Agent Orchestration System — 9 specialized AI agents with real-time dashboard, model config, and fu…

📰

Pandoc `--strip-comments` 选项深度解析:从命令行测试用例到源码实现

文档开发工具CLI 【免费下载链接】pandoc Universal markup converter 项目地址: https://gitcode.com/gh_mirrors/pa/pandoc 点击查看 免费下载 导读 本文以 pandoc 命令测试套件中的 test/command/7521.md 为切入点,系统讲解 --strip-comments 选项的…

📰

Vitess 配置管理实战:viperutil 统一封装与 Viper 配置体系深度指南

Vitess 配置管理实战:viperutil 统一封装与 Viper 配置体系深度指南 【免费下载链接】vitess Vitess is a database clustering system for horizontal scaling of MySQL. 项目地址: https://gitcode.com/gh_mirrors/vi/vitess 导读 本文以 Vitess 官方配置…

📰

使用 MXNet C++ API 加载预训练模型完成图像分类推理:从模型文件到端到端预测的完整实战

使用 MXNet C API 加载预训练模型完成图像分类推理:从模型文件到端到端预测的完整实战 【免费下载链接】mxnet Lightweight, Portable, Flexible Distributed/Mobile Deep Learning with Dynamic, Mutation-aware Dataflow Dep Scheduler; for Python, R, Julia, Sc…

📰

面向 AI Agent 的 node-redis 仓库开发指南:monorepo 结构、命令模式与测试体系

后端数据库客户端缓存 【免费下载链接】node-redis Redis Node.js client 项目地址: https://gitcode.com/gh_mirrors/no/node-redis 点击查看 免费下载 node-redis 是 Redis 官方的 Node.js 客户端,本仓库以 npm workspaces 组织成多包(mon…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬