Oracle多表連線與子查詢

2021-09-01 19:43:00 字數 2826 閱讀 2452

1:等值連線

迪卡爾集連線

select ename, a.deptno as a_deptno,b.deptno as b_deptno ,b.dname as 部門

from emp a, dept b

等值連線

select ename, a.deptno as a_deptno,b.deptno as b_deptno ,b.dname as 部門

from emp a, dept b

where a.deptno = b.deptno;

2:非等值連線,在emp表和salgrade表中查詢員工的姓名,工資,等級,工資上線,工資下線

select ename as 姓名, sal as 工資, grade as 工資等級,losal as 工資上線,hisal as 工資下線

from emp, salgrade

where sal between losal and hisal;

3:外連

右外連select e.ename, d.dname, e.deptno

from emp e,dept d

where e.deptno = d.deptno(+);

左外連與右外連相反

以hr登陸查詢表employees 和departments 表

select  first_name as 姓名, department_name as 部門名稱,  d.department_id as 部門編號 

from employees e, departments d

where e.department_id= d.department_id(+) ;

4:自連:在同乙個表中查詢每個員工及上司的工號和姓名

select a.empno  as 員工編號, a.ename as 員工姓名, a.mgr as 上司的員工編號, b.ename as 上司姓名

from emp a, emp b

where a.mgr = b.empno;

5:sql99

交叉連線 cross join------相當於迪卡爾集

select e.ename,d.dname

from emp e cross join dept d;

自然連線 natural join------相當等值連線

select e.ename, d.dname

from emp e natural join dept d;

using子句-----使用同名列查詢

select e.ename, d.dname

from emp e join dept d

using (deptno);

on子句 ------當列名不同時用on子句

用on查詢兩張表

select e.ename, d.dname

from emp e join dept d

on e.deptno = d.deptno;

用on查詢多張表

select e.ename, d.dname

from emp e join dept d

on e.deptno = d.deptno

join 第三個表

on 列1 = 列2;

內連線(inner join)-------內連線只返回滿足連線條件的資料

select employee_id, last_name, salary, department_id, department_name

from employees inner join departments using(department_id);

左外連select employee_id, last_name, salary, department_id, department_name

from employees left join departments using(department_id);

右外連select employee_id, last_name, salary, department_id, department_name

from employees right join departments using(department_id);

滿外連select employee_id, last_name, salary, department_id, department_name

from employees full outer join departments using(department_id);

子查詢------------

查詢出工資比scott高的人

select ename, sal from emp

where sal>

(select sal from emp where ename='scott');

查詢那些人和scott相同職位的人

select ename, job from emp

where job=

(select job from emp where ename='scott')  

and ename <> 'scott';

any的用法  < any意味著小於最大、> any大於最小

select empno, ename, sal, job

from emp 

where salall的用法 < all:小於所有,即小於最小、> all:大於所有,即大於最大

select empno, ename, sal, job

from emp

where sal

Oracle的多表查詢與子查詢

oracle的多表查詢與子查詢 子查詢 在乙個查詢的內部還包括另乙個查詢,則此查詢稱為子查詢。sql的任何位置都可以加入子查詢。自連線其實就是站在不同的角度把一張表看成多張表。範例 查詢比 7654 工資高的雇員 分析 查詢出 7654 員工的工資是多少,把它作為條件 範例 查詢出比雇員 7654 ...

Oracle多表連線查詢

兩張表沒有連線條件時 這個看情況用,資料多的時候沒有做過驗證 select a.b.from select row number over order by id as rn,from a a left outer join select row number over order by id as...

oracle多表連線查詢

連線查詢分為 內連線 相等內連線,非等內連線,自連線 外連線 左外連線,右外連線,全外連線 交叉連線,自然連線 一 內連線 1 相等內連線 使用等號 指定連線條件的連線查詢 使用where關鍵字的連線查詢 select from 表1,表2 where 表1.欄位1 表2.欄位1 使用join關鍵字...