21.Oracle数据库SQL开发之 连接条件和链接类型

来源:互联网 发布:论文meta分析数据 编辑:程序博客网 时间:2024/05/07 17:05

21.Oracle数据库SQL开发之 连接条件和链接类型

欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/49134191

连接条件可以分为两类:等连接和不等连接。

连接有3种不同的类型:

         内连接:只有当连接中的列包含满足连接条件的值时才会返回一行。如果某一行的连接条件中的一列是空值,那么这行就不会返回。到现在为止所看到的例子都是内连接。

         外连接:即使连接条件中的一列包含空值也会返回一行。

         自连接:返回连接到同一个表中的行

1.  不等连接

不等连接在连接中使用除等于操作符之外的操作符。

SQL>select e.first_name,e.last_name,e.title,e.salary,sg.salary_grade_id fromemployees e,salary_grades sg

    where e.salary between sg.low_salary andsg.high_salary order by salary_grade_id;

 

FIRST_NAME LAST_NAME  TITLE                  SALARY SALARY_GRADE_ID

---------- ---------- ------------------------------ ---------------

Fred    Hobbs     Salesperson                 150000                    1

Susan           Jones     Salesperson         500000                    2

Ron     Johnson   Sales Manager             600000                    3

James          Smith     CEO                       800000                    4

找到工资等级在范围内。

2.  外连接

即使连接中的列包含一个空值,外连接也会返回一行。Oracle特有的外连接操作符是使用圆括号括起来的加号:(+)。

例如:

SQL> select p.name,pt.name fromproducts p,product_types pt where p.product_type_id=pt.product_type_id(+) orderby p.name;

 

NAME                                NAME

----------------------------------------

2412: The Return           Video

Chemistry                         Book

Classical Music              CD

Creative Yell                     CD

From AnotherPlanet               DVD

Modern Science                        Book

My Front Line

Pop 3                                  CD

Space Force 9                   DVD

Supernova                         Video

Tank War                Video

 

NAME                                NAME

----------------------------------------

Z Files                      Video

 

12 rowsselected.

         可以将外连接操作符放在连接操作符的任意一边,但是通常都应该放在想检索的行中包含空值的列相反的一边。

SQL>select p.name,pt.name from products p,product_types pt wherept.product_type_id(+)=p.product_type_id order by p.name;

 

NAME                                NAME

------------------------------ ----------

2412: The Return            Video

Chemistry                         Book

Classical Music              CD

Creative Yell                     CD

From Another Planet               DVD

Modern Science                        Book

My Front Line

Pop 3                                  CD

Space Force 9                   DVD

Supernova                         Video

Tank War                 Video

 

NAME                                NAME

------------------------------ ----------

Z Files                      Video

 

12    ows selected.

2.1左外连接

         在左外连接中,外连接操作符实际上是在等于操作符的右边。

2.2右外连接

要执行一个右外连接,需要将Oracle外连接操作符放到等于操作符的左边。

2.3外连接限制

         外连接只能在一端使用外连接操作符,不能在两端同时使用外连接操作符。

         不能同时使用外连接条件和IN操作符。

         不能同时使用一个外连接条件和另一个使用OR操作符的连接条件。

         具体其他参考《OracleDatabase SQL Reference》

3.  自连接

自连接是对同一个表进行的连接。要执行一个自连接,必须使用不同的表别名来标识在查询中每次对表的引用。

         SQL> select w.first_name || ' '|| w.last_name || ' works for '|| m.first_name || ' ' || m.last_name fromemployees w,employees m

    where w.manager_id = m.employee_id order byw.first_name;

 

W.FIRST_NAME||''||W.LAST_NAME||'WORKSFOR'||M.FIRST_NA

-----------------------------------------------------

Fred Hobbs works for Ron Johnson

Ron Johnson works for James Smith

Susan Jones works for Ron Johnson

不过没有显示James Smith,因为manager_id为空。没有显示。

使用外连接和自连接。在自连接基础上又使用外连接,可以看到James Smith的记录了。

如下:

SQL>select w.last_name || ' works for '|| nvl(m.last_name ,' theshareholders')  from employeesw,employees m

    where w.manager_id = m.employee_id(+) orderby w.last_name;

   

W.LAST_NAME||'WORKSFOR'||NVL(M.LAST_NA

--------------------------------------

Hobbs works for Johnson

Johnson works for Smith

Jones works for Johnson

Smith works for  the shareholders

0 0
原创粉丝点击