oracle 學習筆記(五)

1.集合運算:

UNION運算符返回兩個集合去掉重複元素後的所有記錄。

例:查詢屬於部門10與部門20的所有員工信息。

select * from emp where deptno=10 union select * from emp where deptno=20;

UNIONALL 返回兩個集合的所有記錄,包括重複的。

例:查詢工資在500~1500或在1000~2000範圍的員工信息(這是兩個工資級別)。

select * from emp where sal between 500 and 1500 union all select * from emp where sal between 1000 and 1500

INTERSECT運算符返回同時屬於兩個集合的記錄。

例:查詢工資在500~1500又在1000~2000範圍的員工信息(這是兩個工資級別)。

select * from emp where sal between 500 and 1500 intersect select * from emp where sal between 1000 and 1500

MINUS返回屬於第一個集合,但不屬於第二個集合的記錄。

例:查詢屬於500~1500但不屬於1000~2000範圍的員工信息。

select * from emp where sal between 500 and 1500 minus select * from emp where sal between 1000 and 1500

2.多表查詢

等值連接:只有兩張表中的數據沒有null值的時候才顯示 如果左表或者右表中查出的數據有Null值 不予顯示
例:查詢員工信息,要求顯示員工的編號,姓名,月薪和部門名稱
select e.empno,e.ename,e.sal,d.dname
from emp e,dept d
where e.deptno=d.deptno;

不等值連接
例:查詢員工的工資級別:編號 姓名 月薪和級別
select e.empno,e.ename,e.sal,s.grade
from emp e,salgrade s
外連接:
左外連接:where e.deptno=d.deptno  當連接條件不成立時,等號左邊所代表的表的信息仍然顯示
右外連接:where e.deptno=d.deptno  當連接條件不成立時,等號右邊所代表的表的信息仍然顯示
左外連接的寫法: where e.deptno=d.deptno(+)
右外連接的寫法: where e.deptno(+)=d.deptno
實現上面的效果:
select d.deptno,d.dname,count(e.empno)
from emp e,dept d
where e.deptno(+)=d.deptno
group by d.deptno,d.dname
order by 1;

自連接:利用表的別名,將同一張表視爲多張表
例:查詢員工信息:xxx的老闆是yyy
select e.ename||'的老闆是'||b.ename
from emp e, emp b
 where e.mgr=b.empno;

使用SQL99標準的連接查詢(JOIN..ON..)
內連接
只返回滿足連接條件的數據(兩邊都有的才顯示)。
select e.*, d.*
from emp e
inner join dept d
on e.deptno=d.deptno
-- 也可以省略inner關鍵字。
左外連接
左邊有值才顯示。
select e.*, d.*
from emp e
left outer join dept d
on e.deptno=d.deptno
-- 也可以省略outer關鍵字
右外連接
右邊邊有值才顯示。
select e.*, d.*
from emp e
right outer join dept d
on e.deptno=d.deptno
-- 也可以省略outer關鍵字
滿外聯接
任一邊有值就會顯示。
select e.*, d.*
from emp e
full outer join dept d
on e.deptno=d.deptno
-- 也可以省略outer關鍵字
交叉連接:
叉集,就是笛卡爾積
select e.*, d.*
from emp e
cross join dept d
-- 沒有連接條件

3.DML,Data Manipulation Language,數據操作語言
插入數據(Insert into):
插入全部列
插入部分列
插入空值
使用 & 變量(創建腳本)
例:
SQL> insert into emp (empno, ename, sal) values (&empno, &ename, &sal)
SQL> insert into emp (empno, ename, sal) values (&empno, '&ename', &sal)
SQL> update emp set ename='&new_name' where empno=&empno
SQL> select empno,ename,&col from emp;
可以在命令行sqlplus或是iSQL*Plus中演示。
從其它表中拷貝數據
insert into mytable 
select mycolums from ...
更新數據(Update)
刪除數據(Delete)
刪除所有的記錄:
Delete 效率高
Truncate 效率低
4.事務:
事務是由完成若干項工作的DML語句組成的
保存點
設置事務隔離級別:
QL99標準是有4個隔離級別,但Oracle只支持2個:
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
set feedback on 設置開啓每次執行完語句之後打印結果信息
set feedback off 不打印結果信息
set timing on oracle的記錄時間開啓
set timing off 記錄時間關閉

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章