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语句执行的结果集中的元素后的结果集;