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
- 21.Oracle数据库SQL开发之 连接条件和链接类型
- 114.Oracle数据库SQL开发之 PLSQL编程——变量和类型
- 149.Oracle数据库SQL开发之 大对象——理解LONG和LONG RAW类型
- 22.Oracle数据库SQL开发之 SQL92语法执行连接
- 125.Oracle数据库SQL开发之 数据库对象——数据库中使用对象类型
- ORACLE数据库SQL优化--->Oracle表连接类型
- 124.Oracle数据库SQL开发之 数据库对象——查看对象类型
- 127.Oracle数据库SQL开发之 数据库对象——类型继承
- 130.Oracle数据库SQL开发之 数据库对象——NOT INSTANTIABLE对象类型
- Oracle数据库之SQL连接查询
- 128.Oracle数据库SQL开发之 数据库对象——用子类型对象代替超类型对象
- 47.Oracle数据库SQL开发之 子查询——子查询的类型
- 134.Oracle数据库SQL开发之 集合——创建集合类型
- 135.Oracle数据库SQL开发之 集合——使用集合类型定义表列
- 142.Oracle数据库SQL开发之 集合——使用CAST转换类型
- 144.Oracle数据库SQL开发之 集合——多级集合类型
- 147.Oracle数据库SQL开发之 大对象——理解大对象类型
- 9.Oracle数据库SQL开发之 连接操作合并列的输出结果
- php session_start()关于Cannot send session cache limiter - headers already sent 错误解决方法
- JavaScript 学习随记——"=="和"==="及常见元素的真假值
- django 静态资源配置详解
- QT窗体背景色设置
- 古堡算式
- 21.Oracle数据库SQL开发之 连接条件和链接类型
- OC与Swift混编
- Scala中对List进行高效的排序和倒排序
- 22.Oracle数据库SQL开发之 SQL92语法执行连接
- Thread、Handler与HandlerThread
- JavaScript语法
- <hx>标签,为你的网页添加标题
- cadence设置不同网络颜色
- 创建角色名如何在中英文混排的情况下精确限制长度