目录
第 3 章 SQL语言基础
以Scott用户下的emp表为例,新建emp的临时表(emp_temp),不对emp表做操作
3.1 SQL概述
3.1.1 SQL 语言的功能
3.1.2 SQL 的特点
3.1.3 SQL语句的编写规则
3.2 数据定义
DDL(data definition language):数据定义语言,对表结构进行操作
3.2.1 CREATE
-- 创建表
create table emp_temp
(
empno NUMBER(4) not null,
ename VARCHAR2(10),
job VARCHAR2(9),
mgr NUMBER(4),
hiredate DATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(2)
)
-- 表注释
comment on table emp_temp is '员工表';
-- 字段注释
comment on column emp_temp.empno is '员工编号';
comment on column emp_temp.ename is '姓名';
comment on column emp_temp.job is '工作';
comment on column emp_temp.mgr is '上级编号';
comment on column emp_temp.hiredate is '入职日期';
comment on column emp_temp.sal is '薪水';
comment on column emp_temp.comm is '奖金';
comment on column emp_temp.deptno is '部门编号';
tip:
number(7,2) 是5位整数,两位小数,最多7位
当前时间:sysdate
3.2.2 DROP
-- 删除表
drop table emp_temp;
3.2.3 ALTER
对字段操作 | 操作方法 |
更新字段名 | alter table TABLE_NAME rename column column_old to column_new; |
添加字段 | alter table TABLE_NAME add COLUMN_NAME varchar(10); |
删除字段 | alter table TABLE_NAME drop column COLUMN_NAME; |
添加字段并附值 | alter table TABLE_NAME ADD COLUMN_NAME NUMBER(1) DEFAULT 1; |
修改字段值 | update TABLE_NAME set filedname=value where filedname=value; |
修改字段数据类型 | alter table tablename modify filedname varchar2(20); |
3.3 数据查询
3.3.1 简单查询
-- 查询表
select * from emp_temp;
3.3.2 WHERE 子句
select * from emp_temp e where e.ename = 'Jack';
3.3.3 ORDER BY 子句
3.3.4 GROUP BY 子句
3.3.5 HAVING子句
3.3.6 多表连接查询
3.3.7 集合操作
3.3.8 子查询
3.4 数据操纵
3.4.1 INSERT语句
-- 全字段新增数据
insert into emp_temp values(1,'John','工程师',2,to_date('2020/02/02','yyyy/mm/dd'),3000,1000,21);
-- 隐式转换:varchar 和 number类型的数字可以隐式转换,
-- number字段不能插入字符或者日期数据,字段类型要一致
insert into emp_temp values('2','Nany','项目经理',3,to_date('2020/02/02','yyyy/mm/dd'),6000,2000,21);
-- 指定字段插入数据,字段的位置可以改变
insert into emp_temp(empno,ename) values(3,'Jack');
3.4.2 UPDATE语句
-- 修改字段,带条件
update emp_temp e set e.job = 'CEO' where e.ename = 'Jack';
-- 修改多个字段,带条件
update emp_temp e set e.sal = 10000.00,e.deptno = '1' where e.ename = 'Jack';
-- 异常:数据类型要一致
update emp_temp e set e.empno = 'aa' where e.ename = 'Jack';
tip:
工作中需要修改数据 通常是先查询出来 再去修改 避免改了不该改的数据
3.4.3 DELETE语句
--删除全表数据
delete from emp_temp;
-- 条件删除数据
delete from emp_temp e where e.ename = 'Jack';
3.4.4 TRUNCATE语句
delete | truncate | drop | |
条件删除 | 支持 | 不支持 | 不支持 |
事务回滚 | 支持 | 不支持 | 不支持 |
清理速度 | 慢(大数据) | 快(大数据) | drop> truncate > delete |
高水位重置 | 否 | 是 | |
属于哪种语言 | DML(data manipulation language):数据操纵语言 | DDL(data definition language):数据定义语言 | DDL(data definition language):数据定义语言 |
语法 | delete from aa where ... | truncate table aa | drop table aa |
安全性 | 高 | 低(慎用,注意备份) | 低(慎用,注意备份) |
具体说明 | 1、delete from记录是一条条删的,所删除的每行记录都会进日志 | 1、truncate一次性删掉整个页,因此日至里面只记录页释放 2、truncate不会触发delete的触发器,因为truncate操作不记录各个行删除 | 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger |
使用场景 | 1、删除部分数据行 2、想保留表而将所有数据删除. 但和事务有关,或者想触发trigger | 1、想保留表而将所有数据删除. 和事务无关 2、整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据 | 想删除表 删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态 |
3.5 数据控制
3.5.1 GRANT 语句
3.5.2 REVOKE语句
3.6 Oracle常用函数
3.6.1 字符类函数
3.6.2 数字类函数
3.6.3 日期类函数
3.6.4 转换类函数
3.6.5 聚集类函数