当前位置: Oracle DBA培训网-优技培训 >> oracle培训 > Oracle培训教程 >

Oracle基础:连接查询怎么用

Oracle基础:连接查询怎么用

Oracle基础:连接查询怎么用?在SQL Server中已经学习过内联接(inner join)、外联接(outer join),外联接又分为左外联接(left outer join)和右外联接(right outer join)。Oracle中对两个表或者若干表之间的外联接用(+)表示。

案例7:请查询出工资大于2000元的,员工姓名,部门,工作,工资。

由于部门名称在dept中,其他的信息在emp表中,需要内联接才能完成。

代码演示:内联接

SQL> SELECT e.ENAME,e.JOB,e.SAL,d.DNAME

  2  FROM emp e,dept d

  3  WHERE e.deptno=d.deptno

  4  AND e.SAL>2000;

ENAME

JOB

SAL

DNAME

JONES

MANAGER

2975

RESEARCH

BLAKE

MANAGER

2850

SALES

CLARK

MANAGER

2450

ACCOUNTING

SCOTT

ANALYST

3000

RESEARCH

KING

PRESIDENT

5000

ACCOUNTING

FORD

ANALYST

3000

RESEARCH

6 rows selected

也可以使用SQL/92标准中的内联接:

代码演示:内联接

SELECT e.ENAME,e.JOB,e.SAL,d.DNAME

 FROM EMP e INNER JOIN DEPT d ON e.DEPTNO=d.DEPTNO

WHERE e.SAL>2000         

这里INNER JOIN中,关键字INNER可以省略。

案例8:请查询出每个部门下的员工姓名,工资。

案例分析:

Emp表用外键deptno引用Dept表中的deptno,在Dept表中如果有某些部门没有员工,那么用内联接,没有员工的部门将无法显示,因此必须以Dept表为基准的外联接。

代码演示:外联接

SQL> SELECT e.ENAME,e.JOB,e.SAL,d.DNAME

  2  FROM EMP e ,DEPT d

  3  WHERE  e.DEPTNO(+)=d.DEPTNO  

  4  /

ENAME

JOB

SAL

DNAME

 

SMITH

CLERK

800

RESEARCH

 

ALLEN

SALESMAN

1600

SALES

 

WARD

SALESMAN

1250

SALES

 

JONES

MANAGER

2975

RESEARCH

 

MARTIN

SALESMAN

1250

SALES

 

BLAKE

MANAGER

2850

SALES

 

CLARK

MANAGER

2450

ACCOUNTING

 

SCOTT

ANALYST

3000

RESEARCH

 

KING

PRESIDENT

5000

ACCOUNTING

 

TURNER

SALESMAN

1500

SALES

 

ADAMS

CLERK

1100

RESEARCH

 

JAMES

CLERK

950

SALES

 

FORD

ANALYST

3000

RESEARCH

 

MILLER

CLERK

1300

ACCOUNTING

 

 

 

 

公关部

 

 

 

研发部

 

 

 

培训部

 

 

 

OPERATIONS

 

 18 rows selected

代码解析:

① (+):Oracle专用的联接符,在条件中出现在左边指右外联接,出现在右边指左外联接。

也可以使用SQL/92标准的写法:

代码演示:外联接

SELECT e.ENAME,e.JOB,e.SAL,d.DNAME

FROM EMP e RIGHT OUTER JOIN DEPT d ON e.DEPTNO=d.DEPTNO

这里RIGHT OUTER JOIN中,关键字OUTER可以省略。

提示:虽然Oracle自身的联接查询语法比较好写,同时容易理解,但是为了程序便于移植,推荐使用SQL/92表中的联接查询。同时也可以与SQL Server获得一致。

技术沙龙MORE+

标签错误:<!-- #Label# labelId=20160707140604 moduleId=1 classId=12231768634 orderby=2 fields=url,title,u_info attribute= datatypeId=22192428132 recordCount=3 pageSize= <htmlTemplate><dt><img src="/images/index_26${index}.jpg" width="100" height="62" /><a href="$url" title="${title}">${title}</a><span>${api.left(u_info,60)}</span></dt></htmlTemplate> -->
我要参加技术沙龙