標籤:
1.集合
--集合操作: 並集、交集、差。
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;
select deptno,job,sal
from emp
group by rollup(deptno,job,sal);
上述兩種表達結果相同。
-- 集合操作需要注意的事項:
1). 集合的所有列應該數量相同,類型相同。
2). 集合操作的結果以第一條sql語句的表頭為表頭。
3).集合操作盡量少用。
2.資料處理
SQL 的類型:
1). DML : 資料操作語言 insert/update/delete/select
2). DDL : 資料定義語言 (Data Definition Language) 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 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操作的時候
>> 非正常關閉: 斷電斷網....
Oracle Day05 集合與資料處理