附加实验 oracle高级数据查询技术

实验目的:

一、掌握日期型数据的操作技术

二、掌握层次查询技术

三、理解情景查询与翻译查询技术

四、了解统计查询技术


实验内容:

一、日期型数据的操作

日期型数据的查询显示


不同语言环境下日期型数据查询结果的差异

SESSION 每建立一个连接connection会创建一个session会话


自由控制日期型数据的显示格式的方法



日期型数据的使用方法

不同语言环境下添加记录时日期型数据的使用方法

与当前的语言环境一致的格式   

自由控制不同形式的日期型数据在数据添加与修改中的应用

避免使用2位年份,先用其他方式处理使之成为4位

避免使用文字化的月份

注意事项:2位数的年份会导致意外情况

当前世纪前半叶后半叶的区别

二、层次查询技术

深度遍历的层次查询

select fieldName

from tableName

start with rootCondition

connect by prior fieldname  =  fieldName

上级节点的字段   当前节点的字段

广度遍历的层次查询


形成环路的层次查询

不再成为一棵树或森林了trees  图 graph net

三、情景查询与翻译查询技术

情景查询

decode(fieldName,orgValue,newValue)


翻译查询

translate(fieldName,beforeValue,afterValue)


SELECT empno,ename,decode(deptno,null,'未知')

FROM EMP


select translate(123.69,12345678,6901482735) transNum

from dual;

update emp set sal=translate(1500.9,1234567890,6912035487) where empno=7;



存储的数据类型

数值型    int float   number(6,2)

字符型  char    varchar   nchar  nvarchar   (varchar2)

日期型    datetime  date  timestamp     



展示的数据类型(查询结果的内容)

字符型


to_char(value,formatString)  将数值转换成指定格式的字符串   0 9 , .


to_date(string,formatStirng  将字符串按指定格式转换成日期型数据 


NLS    native language system

alter session set nls_language='%s' AMERICAN/SIMPLIFIED CHINESS




具体代码如下:

-- 附加实验 oracle高级数据查询技术
-- 实验目的:
-- 一、掌握日期型数据的操作技术
-- 二、掌握层次查询技术
-- 三、理解情景查询与翻译查询技术
-- 四、了解统计查询技术
-- 实验内容:
-- 一、日期型数据的操作
select hiredate from emp;

-- 日期型数据的查询显示
-- 不同语言环境下日期型数据查询结果的差异
prompt English environment
alter session set nls_date_language='ENGLISH';
select hiredate
from emp;
prompt  GERMAN environment
alter session set nls_date_language='GERMAN';
select hiredate
from emp;
alter session set nls_date_language='ENGLISH';

-- SESSION 每建立一个连接connection会创建一个session会话
ALTER SESSION SET nls_date_format='yyyy-mm-dd hh24:mi:ss';
select hiredate from emp;

-- 自由控制日期型数据的显示格式的方法
select to_char(hiredate,'yyyy/mm/dd/ hh24:mi:ss')from emp;

-- 日期型数据的使用方法
select to_char(to_date('17-05-08','rr-mm-dd'),'yyyy-mon-dd')as systime from dual;

-- 不同语言环境下添加记录时日期型数据的使用方法
prompt  GERMAN environment
alter session set nls_date_language='GERMAN';
select to_char(sysdate,'yyyy-Mon-dd hh24:mi:ss') as GERMANTIME FROM dual;

-- 与当前的语言环境一致的格式   
set pagesize 200;
set linesize  166;
select * from emp;
prompt English environment
alter session set nls_date_language='ENGLISH';
select to_char(hiredate,'yyyy-mm-dd hh24:mi:ss') from emp;

-- 自由控制不同形式的日期型数据在数据添加与修改中的应用
select to_char(hiredate,'yyyy/mm/dd'),
to_char(hiredate,'y,yyy-mon-dd'),
to_char(hiredate,'rrrr-rm-dd') from emp;

-- 避免使用2位年份,先用其他方式处理使之成为4位
select to_char(sysdate,'yyyy-mm-dd'),
to_char(to_date('97-01-11','yy-mm-dd'),'yyyy-mm-dd'),
to_char(to_date('07-01-11','yy-mm-dd'),'yyyy-mm-dd')
from dual;

-- 避免使用文字化的月份
alter session set nls_date_language='AMERICAN';
SELECT TO_CHAR(sysdate,'yyyy/Mon/dd hh24/mi/ss')as  chinatime from dual;

-- 注意事项:2位数的年份会导致意外情况
-- 当前世纪前半叶后半叶的区别
-- 二、层次查询技术

-- 深度遍历的层次查询
select empno,ename,mgr
from emp
start with empno=7839
connect by prior empno=mgr;

-- 上级节点的字段   当前节点的字段
-- 广度遍历的层次查询
select * from emp;
select empno,ename,mgr
from emp
start with empno=7839
connect by prior empno=mgr
order by level;

-- 形成环路的层次查询
-- 不再成为一棵树或森林了trees  图 graph net
set linesize 120
set pagesize 300
column ename format a20;
select empno,(lpad(' ',(level-1)*2)||ename)as ename,mgr
from emp
start with empno=7839
connect by prior empno=mgr;

-- 三、情景查询与翻译查询技术
-- 情景查询
-- decode(fieldName,orgValue,newValue)
select ename,sal,decode(deptno,'10','acountant','20','sell','30','reasearch')
from emp;
select ename,sal,case deptno
when 10 then 'acountant'
when 20 then 'sell'
when 30 then 'reasearch'
end
from emp;

-- 翻译查询
-- translate(fieldName,beforeValue,afterValue)
SELECT empno,ename,decode(deptno,null,'未知')
FROM EMP
select translate(123.69,12345678,6901482735) transNum
from dual;
update emp set sal=translate(1500.9,1234567890,6912035487) where empno=7;

-- 存储的数据类型
-- 数值型    int float   number(6,2)
-- 字符型  char    varchar   nchar  nvarchar   (varchar2)
-- 日期型    datetime  date  timestamp     

-- 展示的数据类型(查询结果的内容)
-- 字符型
-- to_char(value,formatString)  将数值转换成指定格式的字符串   0 9 , .
-- to_date(string,formatStirng  将字符串按指定格式转换成日期型数据 
-- NLS    native language system
-- alter session set nls_language='%s' AMERICAN/SIMPLIFIED CHINESS



注意:
1,sysdate默认时精确到秒级别,如果与只到秒级之前的时间比较,记得使用to_char()函数转换后进行比较,不然会丢失数据。
2,切记不要用到2位数的年份,可能会查询出错,可见上面的案例
3,查询,使用间尽量全用英文。