课例复制

OCM

全称:Oracle Certified Master 认证大师

含义:Oracle 原厂推出的数据库方向最高级别认证

作用:是否能成为资深数据库专家的技能考试

1.你所做的任何操作,都会在数据字典中被记录。

2.你所不理解的任何ORACLE的咨询都可以在文档找到资料。

清屏命令

clear screen

clear scr

cle scr(只要书写三个字母即可)

只写clean也是可以的

若是删除表格,需要先删除从表,解除依赖,再删除主表

SQL题目一

表结构:

1、表名:g_cardapply

字段(字段名/类型/长度):

apply_no varchar8; //申请单号(关键字)

apply_date date; //申请日期

state varchar2; //申请状态

2、表名:g_cardapplydetail

字段(字段名/类型/长度):

apply_no varchar8; //申请单号(关键字)

name varchar30; //申请人姓名

idcard varchar18; //申请人身份证号

state varchar2; //申请状态

其中,两个表的关联字段为申请单号。

-- 创建工卡表
create table g_cardapply(
apply_no varchar2(8),
apply_date date not null,
state varchar2(2) not null,
constraint PK_APPLY_NO PRIMARY KEY (apply_no)
);
-- 创建工卡申请明细表,apply_no即是主键又是外键,我们称为主外键重合,是一种经典的一对一设计方案
create table g_cardapplydetail(
apply_no varchar2(8) ,
apply_name varchar2(30) not null,
idcard char(18) not null,
state varchar2(2) not null,
constraint PK_APPLY_DETAIL_NO PRIMARY KEY (apply_no),
constraint FK_CARDAPPLY_DETAIL foreign key (apply_no) references g_cardapply(apply_no)
); -- oracle字符串转日期,必须使用to_date函数,然后做好日期格式的适配
insert into g_cardapply values('00000010',to_date('2011-11-12','yyyy-mm-dd'),'01');
insert into g_cardapply values('00000011',to_date('2011-11-13','yyyy-mm-dd'),'01');
insert into g_cardapply values('00000012',to_date('2011-11-14','yyyy-mm-dd'),'02');
insert into g_cardapply values('00000013',to_date('2011-11-15','yyyy-mm-dd'),'03');
insert into g_cardapply values('00000014',to_date('2011-11-16','yyyy-mm-dd'),'03'); insert into g_cardapplydetail values('00000010','mary','440401430103082','01');
insert into g_cardapplydetail values('00000011','david','440401430103083','01');
insert into g_cardapplydetail values('00000012','mary','440401430103082','02');
insert into g_cardapplydetail values('00000013','mike','440401430103084','03');
insert into g_cardapplydetail values('00000014','mary','440401430103082','03');
commit;

要求:

1、查询身份证号码为440401430103082的申请日期

-- 内关联
select a.apply_date
from g_cardapply a inner join g_cardapplydetail b
on a.apply_no=b.apply_no and b.idcard='440401430103082';

2、查询同一个身份证号码有两条以上记录的身份证号码及记录个数

select idcard,count(*)
from g_cardapplydetail
group by idcard
having count(*)>=2;

3、将身份证号码为440401430103082的记录在两个表中的申请状态均改为07

update g_cardapplydetail
set state='07'
where idcard='440401430103082'; -- 子查询
update g_cardapply
set state='07'
where apply_no in (
select apply_no
from g_cardapplydetail
where idcard='440401430103082'
);
commit;

4、删除cardapplydetail表中所有姓李的记录

-- 模糊查询
delete from g_cardapplydetail
where apply_name like '李%';

SQL题目二

有一个工厂,非常繁忙,同时在进行多个订单的生产任务。

每个订单都有自己的订单编号(WORKORDER_ID),

每个订单要生产的物品要拆分成多个工序,

这些工序并行进行,每个工序都有自己的编号STEP_NBR,

测试数据如下:

C-完成 W-等待

-- 建表语句
create table projects(
workorder_id varchar2(10) not null,
step_nbr int not null,
step_status char(1) not null,
constraint PK_PROJECTS PRIMARY KEY (workorder_id,step_nbr)
); insert into projects values('ww023',0,'C');
insert into projects values('ww023',1,'W');
insert into projects values('ww023',2,'W');
insert into projects values('ww024',0,'W');
insert into projects values('ww024',1,'W');
insert into projects values('ww025',0,'C');
insert into projects values('ww025',1,'C');

请编写SQL语句,找出STEP_NBR=0,其 STEP STATUS='C',同时本订单其它工序STEP_STATUS均为W的订单

比如对以上数据的分析结果就是:

WORKORDER ID

ww023

要求:至少实现2种写法(多写更好),语句越短越好

-- 条件1:
where step_nbr=0 and step_status='C'
-- 条件2:
'W'= ALL
(
select step_status from projects where step_nbr> = 1
) -- 解一:
select workorder_id from projects p
where p.step_nbr=0 and p.step_status='C'
and 'W'= ALL
(
select step_status
from projects
where step_nbr>=1 and workorder_id=p.workorder_id
); -- 解二:
select workorder_id,sum(step_nbr)
from projects
where step_status='C'
group by workorder_id
having sum(step_nbr)=0;

SQL题目三

Northwind商贸公司,业务日益发展,公司OA系统正不断推出新版本以紧跟公司的发展.

在OA系统中,有一员工角色表,情况如下:

数据:

EMP_NAME EMP_ROLE

陈城 W

刘海 D

刘海 O

田亮 O

王晓刚 D

张玲 S

张天明 D

张天明 O

其中:

W – 搬运工人

D – 主任

O – 高级职员

S – 秘书

create table roles(
emp_name varchar2(20) not null,
emp_role char(1) not null,
constraint pk_roles primary key(emp_name,emp_role)
); insert into roles values('陈城','W');
insert into roles values('刘海','D');
insert into roles values('刘海','O');
insert into roles values('田亮','O');
insert into roles values('王晓刚','D');
insert into roles values('张玲','S');
insert into roles values('张天明','D');
insert into roles values('张天明','O');

OA开发组的SQL程序员张明得到了上级的一个任务:

领导要求得到的高级职员信息表如下:

EMP_NAME COMBINE_ROLE

刘海 B

田亮 O

王晓刚 D

张天明 B

要求:

(1)只列出主任和高级职员的信息

(2)如果即是高级职员又是主任,用B表示其角色, 其它信息不用再显示 (只一条记录)。

你能不能用单条SQL语句帮助张明实现这个查询?

-- 一解:
select emp_name,
case
when count(*)=1
then max(emp_role)
else 'B'
end
as emp_role
from roles
where emp_role in ('D','O')
group by emp_name; -- 二解:
select emp_name, substr('DOB',sum(instr('DO',emp_role)),1) combine_role
from roles
where emp_role in ('D','O')
group by emp_name; -- 三解:
select emp_name,'B' combine_role
from roles
where emp_role in ('D','O')
group by emp_name
having count(*)=2
union
select emp_name,max(emp_role) combine_role
from roles
where emp_role in ('D','O')
group by emp_name
having count(*)=1 ;

笔记

instr('DO',emp_ role)

instr函数表示emp_ role变量在'DO'中出现的位置

比如emp_ role是'D',则返回值为1;

若emp_ role是'D'和'O',则返回为3,是1+2;

substr('DOB' , sum(instr('DO',emp_ role)),l)

substr函数表示通过返回值的位置取一个字符

substr('DOB' , sum(instr('DO','DO')),l)

取得是B

substr('DOB' , sum(instr('DO','D')),l)

取得是D

substr('DOB' , sum(instr('DO','O')),l)

取得是O

Oracle语法 及 SQL题目(一)的更多相关文章

  1. Oracle语法 及 SQL题目(三)

    目录 SQL题目六 第一个问题思路(查询酒类商品的总点击量) 第二个问题思路(查询每个类别所属商品的总点击量,并按降序排列) 第三个问题思路(查询所有类别中最热门的品种(点击量最高),并按点击量降顺序 ...

  2. Oracle语法 及 SQL题目(二)

    目录 课例复制 思考题四 解题思路 思考题五 解题思路 课例复制 思考题四 最近,经过你的努力,你得到了一份工作,成为了百货公司的一位经理. 到位后,你发现你的销售数据库中有两张表,一个是商店促销时间 ...

  3. Oracle中PL/SQL简介、基本语法以及数据类型

    Oracle中PL/SQL简介.基本语法以及数据类型 一.PL/SQL简介. Oracle PL/SQL语言(Procedural Language/SQL)是结合了结构化查询和Oracle自身过程控 ...

  4. 【SQL】Oracle的PL/SQL语法及其拓展数据类型总结

    PL/SQL语法 PL/SQL程序由三部分组成,声明部分.执行部分.异常处理部分. 模板: DECLARE /*变量声明*/ BEGIN /*程序主体*/ EXCEPTION /*异常处理部分*/ E ...

  5. ansi sql 语法 切换为 oracle 语法

        语句粘贴到 工作表 打开查询构建器 勾选 创建oracle连接 over     sql dev 的语法设置调整,否则表别名会右对齐   下面是 转换后的结果,是不是看得舒服多了

  6. Oracle DBA常用SQL

    监控SQL 1.监控事例的等待: select event,sum(decode(wait_time,0,0,1)) prev, sum(decode(wait_time,0,1,0)) curr,c ...

  7. oracle中动态SQL详解

    部分内容参考网上资料 1.静态SQLSQL与动态SQL Oracle编译PL/SQL程序块分为两个种:其一为前期联编(early binding),即SQL语句在程序编译期间就已经确定,大多数的编译情 ...

  8. Oracle Database 11g : SQL 基础

    简介 1:课程目标 2:课程 目标 3:Oracle Database 11g 以及相关产品概览 1:Oracle Database 11g :重点领域 2:Oracle Fusion Middlew ...

  9. oracle中动态SQL使用详细介绍

    Oracle编译PL/SQL程序块分为两个种:通常静态SQL采用前一种编译方式,而动态SQL采用后一种编译方式,需要了解的朋友可以参考下     1.静态SQLSQL与动态SQL Oracle编译PL ...

随机推荐

  1. 信号的有效值(RMS)估计

    % Root Mean Square Value function [retval] = rms1(sig) N = 20; for k = 1 : length(sig)/N - 1 sig_sum ...

  2. The server quit without updating PID file

    [root@fjgh ~]# service mysqld start Starting MySQL... ERROR! The server quit without updating PID fi ...

  3. Chrome快捷键统计

    Chrome快捷键: Chrome 个人常用快捷键 1 将当前网页保存为书签 Ctrl + d 2 重新加载当前网页 Ctrl + r或F5 3 打开书签管理器 Ctrl + Shift + o 4 ...

  4. pycharm社区版对于django项目的创建

    学习django的基础的东西:python基础(虽然自己看了一遍,不过还有好多东西都是一知半解的,所以还要重复看,去加强自己的基础). 数据库SQL(自己也是对一些基础语句运用的不熟练,然后接下来的主 ...

  5. kali linux 虚拟机克隆之后版本回退问题

    今天在做虚拟机的克隆的之后发现 之前kali linux 系统内核升级后的更改全部又回退到之前的版本,也就是说之前安装的软件被删除了,现在需要自己重新安装一遍  ,(我滴个乖乖哟) 这里就不放图了.

  6. @ConfigurationProperties绑定配置信息至Array、List、Map、Bean

    原文:https://blog.csdn.net/justry_deng/article/details/90758250 相关说明:在SpringBoot中,我们可以通过以下几种方式获取并绑定配置文 ...

  7. HDU-2204-Eddy's爱好-容斥求n以内有多少个数形如M^K

    HDU-2204-Eddy's爱好-容斥求n以内有多少个数形如M^K [Problem Description] 略 [Solution] 对于一个指数\(k\),找到一个最大的\(m\)使得\(m^ ...

  8. Eclips+ADT+SDK构建android开发环境及android自动化测试开发环境

    一. 需要用到的包: 1.adt-bundle-windows-x86_64-20140702.zip+JDK+ant 2.ant下载地址:http://ant.apache.org/bindownl ...

  9. AQS的子类在各个同步工具类中的使用情况

    AQS AQS(AbstractQueuedSynchronizer)是 java.util.concurrent的基础.J.U.C中宣传的封装良好的同步工具类Semaphore.CountDownL ...

  10. 怎么给win10进行分区?

    新安装的win10系统的朋友,对于win10系统分区不满意应该如何是好呢?今天给大家介绍两种win10系统分区的方法,一个是windows自带分区管理软件来操作;另一个就是简单方便的分区助手来帮助您进 ...