首页  登陆  注册  博客集  下载频道  网络硬盘  学院论坛  家园
IT学院 网站地图 网站地图
收藏本站 收藏本站
高级搜索 高级搜索
 新闻IT新闻 互联网 微软 黑客新闻 网络网络协议 故障 网络管理 TCP/IP 无线技术 解决方案 黑客技术 漏洞 软件评测 安全资讯
 数据MSsql Oracle Mysql PL/SQL 备份 系统:Linux vista Windows FTP 防火墙 注册表 服务器行情 服务器应用 解决方案 WEB服务器
 墙纸风景壁纸 游戏壁纸 体育壁纸 汽车壁纸 人文壁纸 影视壁纸 广告壁纸 花卉壁纸 节日壁纸 动漫壁纸 明星壁纸 绘画壁纸 月历壁纸
当前位置: > 主页>数据库技术>Oracle>PL/SQL>Oracle9i的简化SQL语法
热门文章排行
 
热门文章排行 SQL 语法参考手册
SQL*NET 的加密问题
两个sql程序
用Oracle SQL实现文件访
用PL/SQL产生随机数
加速SQL查询的特征函数
Oracle PL/SQL语言基础
全面探讨PL/SQL的复合数
Oracle9i的简化SQL语法
PL/SQL中调用Java源对象
精采文章推荐
 
精采文章推荐 用T-SQL强制所有用户退
最新更新文章
 
最新更新文章 用T-SQL强制所有用户退
PL/SQL中调用Java源对象
Oracle9i的简化SQL语法
全面探讨PL/SQL的复合数
Oracle PL/SQL语言基础
加速SQL查询的特征函数
用PL/SQL产生随机数
用Oracle SQL实现文件访
两个sql程序
SQL*NET 的加密问题

Oracle9i的简化SQL语法

编辑:   来源:  日期:2008-02-06   我要投稿      家园

  Oracle对Oracle9i SQL 做了一些很重要的改进,包括一些令人兴奋的新特点,支持1:5的数量级和ISO99中的SQL标准。作为Oracle的补充,它包括以下新的TABLE JOIN的句法结构:
  CROSS IN——它在两个表格中创建了一个卡迪尔列,就象是在Oracle8i中没写WHERE时那样。
  NATURAL JOIN——这是一个很有用的Oracle9i的句法,它通过从WHERE子句中移动连接标准来改善SQL的稳定性
  USING子句——它可以通过名字来具体指定连接
  ON子句——这个句法允许在两个表格中为连接具体指定栏目的名头
   LEFT OUTER JOIN——它返回表格中左边的行和右边的数值,如果没有搭配的行的话,则返回零
  RIGHT OUTER JOIN——它返回表格中右边的行和左边的数值,如果没有搭配的行的话,则返回零
  FULL OUTER JOIN——它返回的是两个表格中所有的行,用零填满每一个空格。这在Oracle8i中则没有相应的此种句法
  大多数改进都是为了让那些非Oracle的请求以快速的进入Oracle数据库而引进的,并且必须记住这些只是句法上的不同,ISO99标准并没有给Oracle9i SQL带来任何新的功能。
  The CROSS JOIN
  在Oracle中,CROSS JOIN产生了一个“卡迪尔的产物(Cartesian product)”,就象是在连接两个表格时忘记加入一个WHERE子句一样
  select last_name,dept_id
  from emp,depts;
  在Oracle9i中,我们使用CROSS JOIN 来达到相同的结果
  select last_name.dept_id
  from emp
  CROSS JOIN dept;
  NATURAL JOIN
  我喜欢NATURAL JOIN的原因在于它能够通过在两个表格中配对的栏目的名头来自动的检查join。它同时还简化了Oracle9i SQL,由于where子句仅仅只能过滤谓语,当然,NATURAL JOIN要求在每一个表格中的栏目的名字相同。很有意思的是,这种特性甚至在没有主要的或是外来的关键词作为参考是也能起作用
  Oracle8i,
  Select book_title, sum(quantity)
  From book, sales
  Where book.book_id = sales.book_id
  group by book_title;
  Oracle9i
  Select book_title, sum(quantity)
  from book
  natural join sales
  group by book_title;
  USING子句
  假如几个栏目有同样的名字,而你又不想用所有的这些栏目来连接的时候,你就可以用USING子句。在USING子句中所列的栏目的句子中不会有任何的修饰词,包括where子句也不会有
  Oracle8i
  select dept_id, city
  from departments, locations
  where departments.location_id = location.location_id;
  Oracle9i
  select department_name, city
  from departments
  JOIN locations
  USING (location_id);
  ON子句
  ON子句被用于当在两个表格中的栏目名字不搭配时来连接表格。而连接条件就是where子句中的过滤条件
  Oracle8i
  select department_name, city
  from department, location
  where department.location_id = location.loc_id;
  Oracle9i
  select department_name, city
  from department d
  JOIN location l
  ON (d.location_id = l.id);
  易变的连接
  易变的连接就是两个以上的表格被连接所用的。ISO SQL 1999标准通常假设表格从左至右连接,连接的条件是能够为现在的连接或以前的与左边的连接相关联的栏目提供参考。
  Oracle8i
  select emp_id, city_name, dept_name
  from location l, department d, emp e
  where d.location_id = l.location_id
  and d.department_id = e.department_id;
  Oracle9i
  select emp_id, city_name, dept_name
  from locations l
  JOIN departments d ON (d.location_id = l.location_id)
  JOIN employees e ON (d.department_id = e.department_id);
  新的OUTER JOIN句法
  ISO99标准把复杂的加号从Oracle outer join中拿出去,并使得outer join SQL更容易理解。
  LEFT OUTER JOIN
  在LEFT OUTER JOIN中,会返回所有左边表格中的行,甚至在被连接的表格中没有可配对的栏目的情况下也如此。在下边的例子中,返回了所有雇员的姓,甚至包括了那些没有分配到部门的雇员。
  Oracle8i
  select last_name, dept_id
  from emp e, dept d
  where e.department_id = d.department_id(+);
  Oracle9i
  select last_name, dept_id
  from emp
  LEFT OUTER JOIN Dept
  ON e.dept_id = d.dept_id;
  RIGHT OUTER JOIN
  在RIGHT OUTER JOIN中返回的是表格中所有右边的行,甚至在被连接的表格中没有可配对的栏目的情况下也如此。在这个例子中,返回了所有部门的ID,包括那些没有一个雇员的的部门。
  Oracle8i
  select last_name, d.dept_id
  from employees e, departments d
  where e.department_id(+) = d.department_id;
  Oracle9i
  select last_name, d.dept_id
  from employees e
  RIGHT OUTER JOIN departments d
  ON (e.department_id = d.department_id);
  总结
  ISO99标准是Oracle改进SQL工具的另一个例子。NATURAL JOIN LEFT OUTER JOIN 和 RIGHT OUTER JOIN是这些改进中最受欢迎的,它们分别简化了SQL句法以及消除了对于复杂句法(比如+)的需要。


上一篇:全面探讨PL/SQL的复合数据类型  
下一篇:PL/SQL中调用Java源对象产生随机数
 关键字:  
文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【论坛讨论

   相关文章:

   文章评论:(0条)
  
 请留名: 匿名评论   点击查看所有评论
 

  责任编辑:IT学院  声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。