1.集合sql
--集合操做: 并集、交集、差。session
select deptno,job,sum(sal) from emp group by deptno,job
union
select deptno,to_char(null),sum(sal) from emp group by deptno
union
select to_number(null),to_char(null),sum(sal) from emp;oracle
select deptno,job,sum(sal) spa
from emp 内存
group by rollup(deptno,job);字符串
上述两种表达结果相同。flash
-- 集合操做须要注意的事项:it
1). 集合的全部列应该数量相同,类型相同。io
2). 集合操做的结果以第一条sql语句的表头为表头。table
3).集合操做尽可能少用。
2.数据处理
SQL 的类型:
1). DML : 数据操做语言 insert/update/delete/select
2). DDL : 数据定义语言 create/alter/drop/truncate
3). DCL : 数据控制语言 grant(受权) revoke(移除受权)
-- insert 向表里面添加一行记录
(1)出入一行里的某些数据
insert into emp(empno,job,sal) values(2016,'SAL',8000);
(2)按照表的顺序插入一行里的全部的数据
insert into emp values(2015,'zhangsan','MANAGER',2016,'18-3月-16',5000,3000,20);
-- 自定义日期的格式
alter session set NLS_DATE_FORMAT = 'yyyy-mm-dd';
-- create 建立一个表
-- 用模板快速的建立一个表
create table testemp as select * from emp where 1= 2;
-- 快速的插入数据
insert into testemp select * from emp; -- 批量操做的时候不要加关键字
-- 建立一个没有模板的表
create table testemp1(
id number(5),
name varchar(20),
weight number(5,2)
);
-- varchar 和varchar2 均可以用来表示字符串,可是在oracle中推荐用varchar2。varchar是每个字段固定占N个字节,无论内容是否足够N个长度;varchar2 会根据内容本身调整他的长度。
--delete 删除数据
delete from emp where empno=2016 or empno=2015;
rollback:回滚,若是你删除错误之后能够用rollback来回滚数据。
能够建立一个回滚的节点:savepoint a;
而后再回滚:rollback to a;
-- dml 能够闪回,ddl不能。
-- 格式化表 truncate
truncate table testemp;
delete 和truncate 删除数据有什么差异?
(1). delete 是逐行删除,truncate是先删除表,在从新建立一个新表
(2). delete 可以闪回(flashback),而truncate不能闪回
(3). delete 不会释放内存空间,而truncate会
(4). delete 会产生碎片,而truncate不会
(5). delete 是DML语句,truncate是一个DDL语句
(6).delete 不会真正的将数据删除,它将全部的数据移到一个叫undo表空间里面。
-- drop 操做
drop table testemp; 删除表 testemp
-- 事物: 一连串的DML,造成的一个原子操做
事物何时开启:
(1). 显示的开启: start transaction
(2). 隐式开启: 执行的第一个DML语句
事物何时关闭:
(1). 显示关闭: commit,rollback;
(2). 隐式关闭
>> 正常关闭: 执行了一个DDL操做的时候
>> 非正常关闭: 断电断网....
--导入一个脚本里的sql语句
格式: @d:/testdelete.sql;
-- 打开sql执行的时间
set timing on
-- 关闭oracle的回调显示
set feedback off;
-- update 操做
-- 从emp表更新名字为KING的工资为20000
update emp set sal=10000 where ename='KING';
--alter 修改表
-- 在emp中追加一个列 photo,数据类型为varchar2(20)。
alter table emp add photo varchar2(20);
-- 修改photo的字符串长度为50
alter table emp modify photo varchar2(50);
-- 修改photo这个列的列名为photos
alter table testemp10 rename column photo to photos;
-- 删除photos列
alter table emp drop column photos;
-- 修改emp 表名称
rename emp to testemp;
-- 删除testemp; drop table testemp;