常用总结
查看表结构
desc 表名称
字符串链接
select ‘abc’||‘123’ from dual;
模糊查询
通配符%表示任意多个字符
_表示任意1个字符
例如:查询员工姓名中第2个字母是A员工有哪些人呢?
select * from emp where eName like ‘_A%’
范围查询,从…到…
关键字:between 小 and 大(类似 >= and <= )
单行函数
转大写 upper(‘字符串’) select upper(‘aBc’) from dual;
转小写 lower(‘字符串’) select lower(‘aBc’) from dual;
首字符大写 initcap(‘字符串’) select initcap(‘miss.wu’) from dual;
字符串链接 concat(‘字符串1’,‘字符串2’) select concat(‘abc’,‘123’) from dual;
数学函数
四舍五入:round(数,精度) select round(125.678,-1) from dual; 130
数字截取:trunc(数,精度)
select trunc(125.678,2) from dual; 125.67
select trunc(125.678,-1) from dual; 120
字符转数值
to_number(‘数值字符串’)
多表连接
内链接:显示2个表或多个表之间的共有数据(交集)
外链接:显示主表的所数据,对应从表的数据会补null
外链接关键字:(+)所在方补充null
select * from dept,emp where dept.deptNo = emp.deptNo(+)
SQL99规范实现多表联合查询
内链接:显示2个表或多个表之间的共有数据(交集) inner join
外连接:
左外链接(left join):显示关键字前(左边)表的所有数据,关键字后(右边)表的数据补NULL
完全外链接(full join):显示关键字前后2个表的所有数据,对应补NULL
DQL语言执行顺序
from>start with>where>group by>having>select>order by
DML 数据操作语言
删除表语法:
truncate table 表名 会产生rollback,如果删除大数据量的表速度会很慢,同时会占用很多的rollback segments
delete from 表名 是DDL操作,不产生rollback,速度快
增加:insert into 表名(列名1,列名2,…,列N) values(值1,值2,…,值N)
修改:update 表名 set 列名1=值,…,列N=值 where 修改条件
删除:delete from 表名 where 删除条件
事务管理
事务提交 commit; 保存
设回滚点 savepoint 名; 设置一个名字用于回滚到指定地点
例:update emp set sal=sal-200 where eName=‘TOM’; savepoint a1
事务回滚 rollback to 名; 取消
例:rollback to a1
约束总结(需要学习)
主键约束:constraint PK_自定义约束名 primary key(主键列名)
外键约束:constraint FK_自定义约束名 foreign key(外键列名) references 主表(主键名)
唯一约束:constraint Uq_自定义约束名 unique(唯一键列名)
检查约束:constraint CK_自定义约束名 check( 检查条件 )
create table Dept(dName varchar2(15),
constraint PK_自定义约束名 primary key(列名)
)
进阶学习
视图
create view 自定义视图名 as 查询语句
自定义存储过程(挑时间系统学习)
声明
create procedure 自定义过程名(
形参变量名1 [in/out/in out] 数据类型,
... ...
形参变量名2 [in/out/in out] 数据类型
)
is/as
... 声明区 ...
begin
...代码编辑区...
end;
/
调用:exec 自定义过程名(实参列表,…)
例
创建
create procedure pro_SaveDept(
v_loc dept.loc%type
)
as
begin
insert into dept(loc) values(v_loc);
commit;
end;
/
调用
exec pro_SaveDept('杭州')
函数(挑时间系统学习)
声明
create function 自定义函数名(
形参变量名1 [in/out/in out] 数据类型,
... ...
形参变量名N [in/out/in out] 数据类型
)
return 返回值类型
as/is
... 声明区...
begin
...函数编辑区...
end;
例
声明函数,根据每月实际收入计算所得税
create function fun_tax(
v_sal emp.sal%type
)
return number
as
v_tax emp.sal%type;
begin
if v_sal<=3500 then
v_tax:=0;
elsif v_sal<=5000 then
v_tax:=(v_sal-3500)*0.03;
else
v_tax:=45+(v_sal-5000)*0.25;
end if;
return v_tax;
end;
触发器
行级触发,语句级触发;由DML数据操作语句(inser/update/delete)触发
创建
create trigger 自定义触发器名称
before|after /*事前发生|事后发生*/
insert|update|delete /*点火触发事件*/
on 对象
for each row /*行级触发频率,对每一行数据对象进行循环遍历*/
PL/SQL 语句块
例
create trigger tri_DelDept
before delete on Dept
for each row
begin --删除部门前,删除这个部门下员工的子记录;
delete from emp where deptNo= :old.deptNo;
dbms_output.put_line('员工注销完成!');
end;
触发只需要创建,无需显示调用。在删除部门时自动点火触发删除员工操作