Oracle数据库常识

来源:互联网 发布:数控车床仿真软件下载 编辑:程序博客网 时间:2024/06/05 18:07

Oracle数据库常识:

1.如果两张表做连接查询,并且没有任何条件限制的话,两张表中的记录会随意匹配,最后的查询结果条数是两张表记录数的乘积,这种现象就是著名笛卡尔积现象。

select e.ename,d.dname from emp e,dept d;

2.等值连接

内连接(等值连接):SQL92语法
select e.ename,d.dname from emp e,dept d where e.deptno=d.deptno;

内连接(等值连接):SQL99语法(优点:表连接操作和过滤数据的条件达到了分离,可读性高,维护性好)
select e.ename,d.dname from emp e INNER JOIN dept d ON e.deptno=d.deptno;
select e.ename,d.dname from emp e JOIN dept d ON e.deptno=d.deptno; //INNER 可以省略

3.非等值连接

内连接(非等值连接):SQL92语法
select e.ename,e.sal,s.grade from emp e,salgrade s where e.sal between s.losal and s.hisal;

内连接(非等值连接):SQL99语法
select e.ename,e.sal,s.grade from emp e INNER JOIN salgrade s ON e.sal between s.losal and s.hisal;
select e.ename,e.sal,s.grade from emp e JOIN salgrade s ON e.sal between s.losal and s.hisal; //INNER可以省略

4.自连接

内连接(自连接):SQL92语法
select a.ename 员工,b.ename 领导 from emp a,emp b where a.mgr=b.empno;

内连接(自连接):SQL99语法
select a.ename 员工,b.ename 领导 from emp a INNER JOIN emp b ON a.mgr=b.empno;
select a.ename 员工,b.ename 领导 from emp a JOIN emp b ON a.mgr=b.empno; //INNER可以省略

5.外连接

显示dept表中所有记录(不管emp表中有没有不匹配的数据)

外连接(右(外)连接):SQL99语法
select e.ename,d.dname from emp e right outer join dept d on e.deptno=d.deptno;
select e.ename,d.dname from emp e right join dept d on e.deptno=d.deptno; //outer 可以省略

外连接(右(外)连接):SQL92语法
select e.ename,d.dname from emp e,dept d where e.deptno(+)=d.deptno;
注意: 任何一个左(外)连接都可以写为右(外)连接
外连接(左(外)连接):SQL99语法
select e.ename,d.dname from dept d left outer join emp e on e.deptno=d.deptno;
select e.ename,d.dname from dept d left join emp e on e.deptno=d.deptno; //outer 可以省略

外连接(左(外)连接):SQL92语法
select e.ename,d.dname from emp e,dept d where d.deptno=e.deptno(+);

对于SQL99语法来说,A right(left) outer join B  , 以join为中心m,其前的right/left决定了外连接谁,right就是说显示join右边表的所有数据,left反之。

对于SQL92语法来说,没有“+”的是要显示的表的所有数据,“+”是谁的,谁可以有不匹配的数据

6.其他SQL

select d.dname from emp e right join dept d on e.deptno=d.deptno where e.ename is null;

7.to_date函数的作用:将“字符串日期”转换成“日期类型”。VARCHAR2-->DATE
to_date函数的语法:to_date('字符串日期','日期格式'), to_date函数的运算结果是DATE类型。
关于日期格式:
回顾java日期格式:
yyyy
MM
dd
HH
mm
ss
SSS 毫秒

java语言中:String-->java.util.Date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date time = sdf.parse("2008-08-08");

Oracle日期格式:
YYYY
MM/MON 月(例如:八月份,如果是MM的话就是"08",如果是MON的话就是"8月")
DD
HH24/HH12 时(HH24是采用二十四小时进制,HH12采用十二小时进制)
MI
SS

create table stu_tab(
name varchar2(20),
birth date
);

//Error:需要Date类型,不能传递字符串。
insert into stu_tab(name,birth) values('SMITH','1980-10-01');

//可以:birth是日期类型,to_date函数负责将字符串类型转换成日期类型。
insert into stu_tab(name,birth) values('SMITH',to_date('1980-10-01','YYYY-MM-DD'));
insert into stu_tab(name,birth) values('SMITH',to_date('1980-10月-01','YYYY-MON-DD'));
insert into stu_tab(name,birth) values('SMITH',to_date('80-10月-01','YY-MON-DD'));
i
nsert into stu_tab(name,birth) values('SMITH','01-10月-80')  --ORACLE数据库默认的日期格式:DD-MON-YY,字符串'01-10月-80'的格式正好和默认的日期格式相同,存在自动类型转换

如何修改ORACLE的默认日期格式:
alter session set nls_date_format = 'YYYY-MM-DD'; //只对当前会话有效。
insert into stu_tab(name,birth) values('
SMITH','1981-12-10'); //这次可以了。

综上所述:to_date函数通常使用在插入操作中。一个表中有一个字段是DATE类型,
不能把字符串类型数据传递过去,需要调用to_date函数进行类型转换。

8.①to_char 函数的作用:将“日期类型”转换成“字符串类型”。DATE--->VARCHAR2
  to_char 函数的语法:to_char(日期类型,'日期格式'),运算结果类型是字符串类型
  回顾java中如何将日期类型转换成字符串:Date-->String
  Date time = new Date();
  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  String str = sdf.format(time);

  select ename,to_char(hiredate,'YYYY-MON-DD') as hiredate from emp; 

to_char经常使用在查询操作中,期望以某种特定的格式显示日期的时候  

to_char函数的作用:将“数字”转换成“字符串”。
to_char函数的语法:to_char(数字,'数字格式'),运算结果是字符串类型。
案例:查询每个员工的工资,并且以“L999,999.00”格式显示。
select ename,to_char(sal,'L999,999.00') as sal from emp;
结论:to_char函数还是多用在查询操作中,希望以特定格式显示,就需要调用to_char函数,
起到格式化的作用。
 

9.to_number函数的作用:将“字符串数字”转换成“数字类型”。VARCHAR-->NUMBER
to_number函数的语法:to_number('字符串数字','数字格式'),运算结果是数字类型。
关于数字格式:
回顾java中的数字格式:
# 任意数字
, 千分位
. 小数点
0 不够补0

Oracle中的数字格式:
9 任意数字
, 千分位
0 不够补0
. 小数点
$ 美元符号
L 本地货币符号

找出工资是'$3,000.00'的员工
select ename,sal from emp where sal=to_number('$3,000.00','$999,999.99');





0 0