Oracle基础

2017-07-13  本文已影响0人  到底什么情况

Oracle基础总结

1.基本查询

DML(数据库操作语言):包括insert、update和delete,用于对表中的行进行添加、修改和删除的操作;

DDL(数据库定义语言):包括create和drop等,用于创建表和删除表;

DCL(数据库控制语言):包括grant和revoke,用于为用户分配权限;

DQL(数据库查询语言):最常用,用于查询数据;

DQL格式:

常规:select需要展示的信息from表名where条件1group by ‘用于分类的列名’having条件2order by ‘用于排序的列名’asc/desc;

去重复查询:select distinct …;

四则运算:select ename , sal*12 from emp;

null值处理:nulls first、nulls last;

连接符||的用法:select  “编号:”  ||  empno  ||  “的雇员姓名是:” ||  ename;

逻辑运算:and、or、not(配合其他的关键词使用,如not in,not null等)

比较运算:>、<、>=、<=、!=、<>、=

范围限制:between…and…

模糊查询:select * from emp where ename like ‘%郭%’;//郭德纲、郭小纲、东郭先生

select * from emp where ename like ‘郭_纲’;//郭德纲、郭小纲

排序:可以单一字段排序,也可以多字段排序;order by一定要放在SQL语句最后的位置;

SQL的函数:

单行函数:只影响单行的函数;

字符拼接函数:select concat(‘hello’,‘world’) from dual;//helloworld

字符截取函数:select substr(‘hello’, 1 , 3 ) from dual;//hel

计算字符串长度:select length(‘hello’) from dual;//5

字符替换函数:select replace(‘hello’,‘l’,‘d’) from dual;//heddo

四舍五入:select round(45.926,2) from dual;//45.93

截取指定位数:select trunc(45.926,2) from dual;//45.92

求余数:select mod(10,3) from dual;//1

日期:oracle中默认的日期格式是:dd-MM-yy

select ename,round((sysdate - hirdate)/365) from emp;查询员工入职年限;

select ename,round(months_between(sysdate - hiredate)) from emp;查询员工入职月数;

select add_months(sysdate,3) from dual;//显示的结果为月份加3后的系统时间;

转换函数:

to_char(sysdate,‘yyyy-mm-dd’);将日期转为2017-07-13这种格式;

to_char(sysdate,‘fmyyyy-mm-dd’);将日期转为2017-7-13这种格式;to_char(9,‘玖’);将数字转换为金额大写的‘玖’;

to_number(‘10’);将字符串形式的10转换为数字10参与运算;

to_date(‘1990-05-20’,‘yyyy-mm-dd’);将字符串格式的日期转换为日期;

通用函数:

nvl(comm,0);如果comm为null则按照0处理;

条件表达式:

select ename,sal,decode(

trunc(sal/2000,0),

0,0.00,

1,0.09,

2,0.20,

3,0.30,

0.40 ) TAX_RATE from emp;

多行函数:即聚合函数,常用的有count()、avg()、min()、max()、sum();

几点注意:count(ename)执行效率要高于count(*);

使用group by只能查出分组条件字段和分组函数查询出来,不能有其他字段;

2.多表查询

笛卡尔积:多表相乘的结果;

要去除笛卡尔积,则需要关联查询;

两张表的关联查询字段一般是其中一张表的主键,另一张表的外键;

Oracle的连接条件的类型:

等值连接/不等值连接/外连接/自连接

隐式内连接:select * from emp,dept where emp.deptno = dept.deptno;

显式内连接:select * from emp inner join dept on emp.deptno = dept.deptno;

左外连接:select * from emp left join dept on emp.deptno = dept.deptno;

右外连接:select * from dept right join emp on emp.deptno = dept.deptno;

Oracle特有的外连接:select * from emp,dept where emp.deptno = dept.deptno(+);//哪边需要补充数据,就把(+)加在哪边

自连接:select * from emp e1,emp e2 where e1.mgr =

e2.empno;

嵌套查询:

select * from emp where emp.deptno = (select depno from dept where dname = ‘ANALYST’);

select * from emp where emp.deptno in (select deptno from dept where dname <> ‘ANALYST’);

select * from emp e,(select * from dept where dname <> ‘ANALYST’) r where e.deptno = r.deptno;

exists的用法:

select * from dept where exists (select * from emp where emp.deptno = dept.deptno);

rownum的用法:Oracle中用来做分页显示效果的特有方法;

select rownum,emp.* from emp;

rowid的用法:rowid是Oracle向数据库中插入数据时生成的物理地址,修改表数据的时候用;

select rowid,emp.* from emp;

3.集合的运算

交集:(SQL语句1)intersect (SQL语句2);

并集:(SQL语句1)union (SQL语句2);//去除重复元素;

(SQL语句1)union all (SQL语句2);//不去除重复元素;

差集:(SQL语句1)minus (SQL语句2);//在前SQL语句执行的结果集中,去除后SQL语句执行的结果集中的元素后的结果集;

上一篇下一篇

猜你喜欢

热点阅读