Oracle学习
文章平均质量分 54
oracle学习示例
姜小白-
Java开发,项目管理,打杂,啥都做
展开
-
Oracle中count函数
SELECT count(*) from test;SELECT count(1) from test;SELECT count(column1) from test;SELECT count(distinct column1) from test;count(*)count(1) 上两个方法执行结果相同,但是效率会有轻微的差别 count(*)走的是标原创 2013-10-24 12:24:56 · 6010 阅读 · 0 评论 -
delete删除数据
语法格式: 删除全部:DELETEFROM 表名称 删除局部:DELETE FROM 表名称 WHERE 删除条件原创 2015-12-06 21:00:35 · 966 阅读 · 0 评论 -
update修改数据
语法格式:修改全部记录:UPDATE 表名 SET 待修改字段1=表达式1, 待修改字段2=表达式2,...修改部分记录:UPDATE 表名 SET 待修改字段1=表达式1, 待修改字段2=表达式2,... where 条件1=条件表达式1...原创 2015-12-06 20:21:19 · 3426 阅读 · 0 评论 -
列出薪金高于公司平均薪金所有员工,所在部门,上级领导,公司的工资等级
如题:列出薪金高于公司平均薪金所有员工,所在部门,上级领导,公司的工资等级表:emp,dept, salgrade第一步:求出公司平均薪金;第二步:求薪金高于公司平均薪金的所有员工;第三步:求员工所在部门,上级领导;第四步:求员工工资等级;第五步:综合上述各步,得到最终SQL原创 2015-12-07 22:53:01 · 15839 阅读 · 4 评论 -
查询SQL强化练习
-- 1 列出至少有一个员工的所有部门select * from dept where deptno in (select deptno from emp group by deptno having count(empno) >= 1);-- 2 列出薪金比“SMITH”多的所有员工select * from emp where sal > (select sal from emp where ename = 'SMITH');-- 3 列出所有员工姓名及其直接上级的姓名原创 2015-12-08 00:40:11 · 1969 阅读 · 0 评论 -
ORA-01789:query block has incorrect number of result columns
在写一个8张表一起union all 的SQL时,遇到了ORA-01789:query block has incorrect number of result columns顾名思义,查询块的列数目不相等。下面的SQL,查询时就会报ORA-01789错误select empno, ename, job, sal from emp t where t.deptn原创 2016-02-16 20:23:45 · 25433 阅读 · 0 评论 -
oracle函数之NULLIF
如果两个指定的表达式相等,则返回空值。语法NULLIF ( expression1 , expression2 )参数expression1, expression2常量、列名、函数、子查询或算术运算符、按位运算符以及字符串运算符的任意组合。返回类型与第一个 expression1 相同。输出结果:如果两个表达式不相等,NULLIF 返回原创 2016-02-16 21:06:45 · 24114 阅读 · 1 评论 -
匿名存储过程块学习
declare -- 定义变量 a1 number; a2 number; re number; -- 定义过程块 procedure pro_add(param1 in number, param2 in number, res out number) is begin res := param1 + param2; end;begin -原创 2016-04-07 21:07:54 · 1444 阅读 · 0 评论 -
oracle游标简单demo
declare -- 定义变量 row_info varchar2(200); -- 定义游标 cursor cur_dept is select * from emp where deptno = 10; --定义一个游标变量cur_dept_row cur_dept%rowtype,该类型为游标cur_dept中的一行数据类型 cur_dept_row c原创 2016-04-07 21:59:47 · 826 阅读 · 0 评论 -
游标传参
declare -- 定义变量 row_info varchar2(200); -- 定义游标,并指定参数类型 cursor cur_dept(dept_no number) is select * from emp where deptno = dept_no; --定义一个游标变量cur_dept_row cur_dept%rowtype,该类型为游标cur_原创 2016-04-07 22:04:31 · 1393 阅读 · 0 评论 -
显式游标
declare -- 定义变量 row_info varchar2(200); -- 定义游标,并指定参数类型 cursor cur_dept(dept_no number) is select * from emp where deptno = dept_no; --定义一个游标变量cur_dept_row cur_dept%rowtype,该类型为游标cur_原创 2016-04-08 23:13:21 · 562 阅读 · 0 评论 -
一个简单的触发器示例
-- 创建备份表 create table emp_his as (select * from emp where 1=2);创建触发器内容-- 创建触发器 create or replace trigger tr_emp_del-- 对scott.emp表在delete操作之前 before delete on scott.emp-- 对每一行进行触发动作原创 2016-04-09 20:06:04 · 4507 阅读 · 0 评论 -
触发器限制对表修改
-- 创建触发器create or replace trigger tr_emp_update -- 在做update,delete,或insert操作之前触发 before update or delete or insert on scott.emp -- 缺少 for each row,为表级触发器begin -- 触发动作,如果周六日,或不在到八点半到晚六点之间,禁止修原创 2016-04-09 20:36:27 · 5516 阅读 · 0 评论 -
触发器记录对表记录操作
这里记录满足一定条件的操作,并将操作记录下来。创建记录日志表create table emp_trace_log( empno number, -- 主键 column_name varchar2(20), -- 被修改列名 old_value varchar2(200), -- 修改前旧值 new_value varchar2(200), -- 修改后新值原创 2016-04-10 00:07:03 · 4437 阅读 · 0 评论 -
同义词与授权访问表
oracle中访问别的用户下面的表时,首先需要别的用户的授权,这样便可以通过user.table 的方式进行访问,如果别的用户再在授权的基础上创建同义词,那么便可以通过同义词名称直接访问了。下面以oracle 中scott用户下的emp表为示例,简述下同义词访问和授权访问的操作。-- 登录 system/manager as sysdba 用户-- 创建用户create user原创 2017-07-09 20:08:30 · 2119 阅读 · 0 评论 -
insert 插入数据
语法格式:insert into 表名称[(字段名称1,字段名称2……)]values[(值1,值2,……)];标准语法:对于没有数据的列就不写进字段列表;简略语法:如果插入时没有明确的写出字段,则没有值得字段用null来代替;两种写法比较:推荐使用标准写法,不推荐使用简略写法。简略写法再添加表字段的时候容易出问题。原创 2015-12-06 19:57:57 · 3989 阅读 · 0 评论 -
rownum浅析
ROWNUM是一个序列,是oracle数据库从数据文件或缓冲区中读取数据的顺序。它取得第一条记录则rownum值为1,第二条为2,依次类推。如果你用>、>=、=、between...and这些条件,因为从缓冲区或数据文件中得到的第一条记录的rownum为1,则被删除,接着取下条,可是它的rownum还是1,又被删除,依次类推,便没有了数据。原创 2015-08-02 18:46:13 · 1102 阅读 · 0 评论 -
按工资降序排列,若工资相同,则按照雇佣日期尚需排列,获取6~10 条记录
select a.* from (select t.*, rownum rn from (select * from emp order by sal desc, hiredate asc) t) a where a.rn between 6 and 10;原创 2015-08-02 18:38:50 · 7794 阅读 · 0 评论 -
Oracle那些不常用的SQL
获取主键的SQL语句select col.column_name from user_constraints con, user_cons_columns col where con.constraint_name=col.constraint_name and con.constraint_type='P' and col.table_name='MM_PUB_OFFER原创 2014-11-29 22:55:22 · 730 阅读 · 0 评论 -
oracle 简单查询,限定查询及排序
SQL(structured Query Language 结构化查询语言)是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。简单的SQL查询语句的语法格式是:Select *|字段列表 别名 From 表名称;限定查询的语法格式为Select{distinct}*|具体的列名 别名 From 表名称 {Where 条件语句};排序的语法格式为Select {distinct} *|具体的列 别名 From 表名称 {Where 条件} {Order By 排序原创 2015-05-31 23:27:44 · 1811 阅读 · 0 评论 -
oracle单行函数
单行函数的语法Function_name(column|expression, [arg1, arg2, ...])参数说明:Function_name 函数名称column 列名expression 表达式arg1,arg2,... 参数单行函数分类: 字符函数:接收字符输入并返回字符或数值 数值函数:接受数据输入并返回数值 日期函数:对日期型数据进行操作 转换函数:从一种数据类型转换为另外一种数据类型 通原创 2015-06-02 23:58:38 · 1217 阅读 · 0 评论 -
oracle多表查询
多表查询基本语法笛卡尔积在SQL中的实现方式既是交叉连接(Cross Join)。所有连接方式都会先生成临时笛卡尔积表,笛卡尔积是关系代数里的一个概念,表示两个表中的每一行数据任意组合。-- 笛卡尔积 select * from emp, dept;-- 使用公共字段,去掉笛卡尔积select * from emp, dept where emp.deptno = de原创 2015-06-22 18:19:27 · 4129 阅读 · 0 评论 -
组函数及分组统计
1. 如果程序中使用了分组函数,则在以下两种情况下可以正常查询结果: 程序中存在了GROUP BY,并指定了分组条件,这样可以将分组条件一起查询出来 如果不使用GROUP BY,则只能单独地使用分组函数2.使用分组函数时,查询结果列不能出现分组函数和分组条件之外的字段综上所述,我们在进行分组统计查询时有遵循这样一条规律:出现在字段列表中的字段,如果没有出现在组函数中,就必定出现在GROUP BY 语句的后面原创 2015-06-22 22:57:55 · 3706 阅读 · 0 评论 -
简单sql部分强化练习题
-- 找出在(任何年份)2月受聘的所有员工select * from emp where to_number(to_char(hiredate, 'mm'))= 2;-- 对每个员工,显示其加入公司的天数select ename, round(sysdate - hiredate) Days from emp;-- 显示姓名中任意位置包含“A”的所有员工姓名select * from emp where upper(ename) like '%A%';-- 以年月日方式显示所有员工的服务年原创 2015-06-03 23:53:27 · 2517 阅读 · 0 评论 -
查询每个部门最低工资的雇员信息
如题:查询每个部门最低工资的雇员信息关联子查询方法1 查询每个部门的最低工资 2 同最低工资关联人员信息in关键字方法in关键字是这种场景容易想到的一个方法,先查询出部门的最低工资,然后匹配最低工资的雇员信息。原创 2015-06-28 20:02:39 · 14039 阅读 · 1 评论 -
查询出部门名称、部门的员工数、部门的平均工资、部门的最低收入雇员姓名和最高收入雇员的姓名
如题:查询出部门名称、部门的员工数、部门的平均工资、部门的最低收入雇员姓名和最高收入雇员的姓名分析:要查询出部门的员工数,平均工资,最低收入雇员姓名和最高收入雇员姓名,必须先知道部门的最高收入和最低收入第一步:查询出部门名称,部门员工数,部门平均工资,部门最低收入和最高收入第二步:查询最低收入者的姓名第三步:给第一次查询出来的部门最高收入和最低收入同时关联两张emp 表,分别获取最高收入者和最高收入者的姓名原创 2015-06-28 18:01:41 · 35216 阅读 · 0 评论 -
oracle子查询
子查询:在一个查询的内部包括另外一个查询。any:表示任意的。< any 比子查询返回的任意一个结果小即可,即小于返回结果的最大值;= any 和子查询中任意一个结果相等即可,相当于in;> any 比子查询返回的任意一个结果大即可,即大于返回结果的最小值。all:表示所有的。< all 比子查询返回的所有的结果都小,即小于返回结果的最小值;> all 比子查询返回的所有的结果都大,即大于返回结果的最大值;= all 无意义,逻辑上也不成立原创 2015-06-28 21:57:33 · 1323 阅读 · 1 评论 -
查询出每个雇员的姓名,工资,部门名称,工资在公司的等级及其领导的姓名,领导的工资,以及领导所对应的等级
如题:查询出每个雇员的姓名,工资,部门名称,工资在公司的等级及其领导的姓名,领导的工资,以及领导所对应的等级这是oracle的默认Scott用户下面的emp,dept 和 salgrade 表间的一道思考题。分析:先明确工资等级表(salgrade)中的内容;再查询查询出每个雇员的姓名,工资,部门名称,工资在公司的等级(salgrade);在此上基础上增加查找上司姓名;最后确定雇员的经理姓名,经理的工资,以及经理工资所对应的等级。从这个例子可以看出,对于复杂的多表查询,要一步一步地实现,不要急于求成。原创 2015-06-05 23:55:31 · 37692 阅读 · 1 评论 -
Oracle集合操作
在Oracle中提供了三种类型的集合操作: 并(UNION)、交(INTERSECT)、差(MINUS)UNION:将多个查询的结果组合到一个查询结果之中,并去掉重复值UNION ALL:将多个查询结果组合到一个查询结果中,但是包含重复值INTERSECT:返回多个查询结果相同的部分MINUS:返回两个查询结果的差集首先,创建另一个表 emp10原创 2015-08-09 11:24:11 · 4038 阅读 · 0 评论 -
不用聚合函数求最高工资
如果不使用聚合函数的话,该从哪个方向出发呢?可以排序,然后从排序后的结果中取工资最高的;可以取出除最高工资之外的所有工资,然后再排除,剩下最高工资。select a.sal from (select * from emp order by sal desc) a where rownum = 1;select e.sal from emp e where e.sal not in(select e2.sal from emp e1,emp e2 where e1.sal>e2.sal);select原创 2015-08-09 20:00:39 · 4497 阅读 · 1 评论 -
求薪水在部门的平均薪水之上的雇员姓名和及薪水
如题:求薪水在部门的平均薪水之上的雇员姓名和及薪水拆题:1 部门的平均薪水;2 求高于平均的雇员姓名和薪水1 部门的平均薪水select avg(sal) avgsal, deptno from emp group by deptno;2 高于部门平均薪水的雇员姓名及薪水此处需要进行关联查询,需要比对,薪水高于部门平均薪水的雇员姓名sel原创 2015-08-09 14:41:12 · 4166 阅读 · 1 评论 -
连接查询及分组查询强化练习
-- 求每个雇员的姓名,工资,工资等级select * from salgrade;select a.ename, a.sal, b.grade from emp a, salgrade bwhere a.sal between b.losal and b.hisal;-- 求每个员工的姓名,部门名,部门号select a.ename, b.dname, b.deptno from em原创 2015-08-09 21:22:28 · 2654 阅读 · 1 评论 -
CCYYMMDD时间格式
通常我们看到的数据库中日期格式一般都为 "YYYY-MM-DD" 格式,今天在项目中突然看到了"CYYMMDD" 格式的日期格式,感到好奇,搜了之后,了解到"CYYMMDD" 格式是"CCYYMMDD" 格式演化而来的,为"CCYYMMDD" 格式的简写。YYYY-MM-DD : 四位的年份-两位的月份-两位的天CCYY-MM-DD : CC为century世纪,YY 两位的年份,原创 2017-07-24 23:11:21 · 21004 阅读 · 1 评论