關聯查詢
1--笛卡爾積
指做關聯操作的每個表的每一行都和其他表的每一行的組合,假設兩個表的記錄條數分別是x和y,笛卡爾積將返回x*y條記錄.
select count(*) from emp;
select count(*) from dept;
select emp.ename,dept.dname from emp,dept;
2--等值連線
連線查詢中最常見的一種,通常是在有主外來鍵關聯關係的表之間建立,並將連線條件設定為有關係的列,使用"="連線相關的表
查詢職員的姓名,職位以及所在的部門名字和所在城市
select e.ename,e.job,d.dname,d.loc
from emp e,dept d
where e.deptno=d.deptno;
3--內連線
返回所有滿足條件的記錄
查詢職員的姓名,職位以及所在的部門名字和所在城市
select e.ename,e.job,d.dname,d.loc
from emp e,dept d
where e.deptno=d.deptno;
或者select e.ename,e.job,d.dname,d.loc
from emp e join dept d
on (e.deptno=d.deptno);
4--外連線
不僅返回所有滿足條件的記錄,還將返回不滿足條件的記錄
select table1.column,table2.column
from table1 left/right/full[outer] join table2
on table1.column1=table2.column2;
select e.ename,e.job,d.dname,d.loc
from emp e left join dept d
on (e.deptno=d.deptno);
5--自連線
是一種特殊的連線查詢,資料的**是同乙個表,也就是說關聯關係來自單錶中的多個列.
表中的列參照同乙個表中的其他列的情況稱作自參照表
自連線是通過錶用別名虛擬成兩個表的方式實現,可以是等值或不等值連線
查出每個職員的名字,以及上級經理名字和編號
select worker.empno w_empno,worker.ename w_name,manager.empno m_empno,manager.ename m_empname
from emp worker join emp manager
on worker.mgr=manager.empno;
子查詢子查詢在where子句中
在select查詢中,在where查詢條件中的限制條件不是乙個確定的值,而是來自於另外乙個查詢的結果
為了給查詢提供資料而首先執行的查詢語句叫子查詢
子查詢是嵌入在其他sql語句中的select語句,大部分時候出現在where子句中
子查詢嵌入的語句稱作主查詢或父查詢
主查詢可以使select語句,也可以是其他的sql語句
根據返回結果的不同,子查詢可以分為單行子查詢,多行子查詢和多列子查詢
查詢和scott同職位的員工
select * from emp where job=(select job from emp where ename='scott');
rownum
被稱作偽列,用於返回標示行資料順序的數字
查詢出emp表第三條以後的資料
select * from emp where rownum>3; (這樣不行,沒有結果)
解決方案:(必須使用子查詢)
select ename
from(select rownum rm,e.* from emp e)
where rm>3;
查詢出emp表 第三條到第七條資料
select ename
from(select rownum rm,e.* from emp e)
where rm between 3 and 7;
使用子查詢進行分頁
在oracle中利用rownum的功能,可用來進行分頁,假設結果集共用105條資料,每頁20條資料,那麼:
page1:1-20;
page2:21-40;
.....
pagen:(n-1)*20+1-n*20
(current_page-1)*page_size+1
current_page*page_size
按照薪水倒序排列,取出結果集中第8-10條記錄
select *
from(select rownum rm,e.* from(select * from emp order by sal desc)e)
where rm between 8 and 10;
select * from(
select rownum rn,e.*
from(select empno,ename,sal from emp order by sal desc)e
)where rn between 8 and 10;
查詢職員表,根據職員的職位計算獎金額,管理者1.2倍工資,辦事員1.1倍工資,銷售員1.05倍工資,如果不是這三個職位,則取工資值
decode函式解決此類問題
decode(column,search1,result1,search2,result2....result)
select decode(job,'manager',sal*1.2,'clerk',sal*1.1,'salesman',sal*1.05,sal) bonus from emp;
select ename,job,sal,
case job when 'manager' then sal*1.2
when 'clerk' then sal*1.1
when 'salesman' then sal*1.05
else sal end
bouns
from emp;
select ename,job,sal,
decode(job,
'manager',(sal*12+nvl(comm,0)*12)*0.5,
'clerk',(sal*12+nvl(comm,0)*12)*0.4,
'salesman',(sal*12+nvl(comm,0)*12)*0.3,
(sal*12+nvl(comm,0)*12)*0.2 )bonus
from emp;
多列子查詢
select employee_id,manager_id,department_id
from employees
where (manager_id,department_id) in
(select manager_id,department_id from employees where employee_id in(110,188));
exists操作符
檢查子查詢中是否滿足條件的行
a--如果在子查詢中存在滿足條件的行, 返回ture,就不再子查詢中繼續查詢
b--如果在子查詢中不存在滿足條件的行,返回false,在子查詢中繼續查詢
Oracle基礎(三)資料庫管理
上篇介紹了oracle資料庫的基本操作指令 增 刪 改 查下面針對資料庫的管理進行介紹 資料管理員 至少有乙個資料庫管理員dba,職責 安裝和公升級oracel資料庫 建庫,表空間,表,檢視,索引 制定並實施備份和恢復計畫 資料庫許可權管理,調優,故障排除 對於高階dba,要求能參與專案開發,會編寫...
Oracle基礎(三)資料庫管理
上篇介紹了oracle資料庫的基本操作指令 增 刪 改 查以下針對資料庫的管理進行介紹 資料管理員 至少有乙個資料庫管理員dba。職責 安裝和公升級oracel資料庫 建庫,表空間,表。檢視。索引 制定並實施備份和恢復計畫 資料庫許可權管理,調優,故障排除 對於高階dba,要求能參與專案開發,會編寫...
oracle資料庫(三) 高階查詢
根據員工的上級編號進行層級關聯 select level empno,ename,mgr from emp connect by prior empno mgr start with mgr is null order bylevel translate expr,from string,to st...