標籤:
1.集合運算:
UNION運算子返回兩個集合去掉重複元素後的所有記錄。
例:查詢屬於部門10與部門20的所有員工資訊。
select * from emp where deptno=10union 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 salbetween 1000 and 1500
INTERSECT運算子返回同時屬於兩個集合的記錄。
例:查詢工資在500~1500又在1000~2000範圍的員工資訊(這是兩個工資層級)。
select * from emp where sal between 500 and 1500intersect select * from emp where salbetween 1000 and 1500
MINUS返回屬於第一個集合,但不屬於第二個集合的記錄。
例:查詢屬於500~1500但不屬於1000~2000範圍的員工資訊。
select * from emp where sal between 500 and 1500minus select * from emp where salbetween 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 記錄時間關閉
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
oracle 學習筆記(五)