在ORACLE9i之前,oracle语法基础是SQL/86标准,9i及之后的版本中支持SQL/92标准。
基表信息:products、purchases和product_types

SQL> select * from products;

PRODUCT_ID PRODUCT_TYPE_ID NAME                           DESCRIPTION                                     PRICE
---------- --------------- ------------------------------ -------------------------------------------------- ----------
Modern Science A description of modern science 19.95
Chemistry Introduction to Chemistry
Supernova A star explodes 25.99
Tank War Action movie about a future war 13.95
Z Files Series on mysterious activities 49.99
: The Return Aliens return 14.95
Space Force Adventures of heroes 13.49
From Another Planet Alien from another planet lands on Earth 12.99
Classical Music The best classical music 10.99
Pop The best popular music 15.99
Creative Yell Debut album 14.99
My Front Line Their greatest hits 13.49 已选择12行。 SQL> select * from product_types; PRODUCT_TYPE_ID NAME
--------------- ----------
Book
Magazine
CD
DVD
Video
test 已选择6行。 SQL> SELECT * FROM PURCHASES; PRODUCT_ID CUSTOMER_ID QUANTITY
---------- ----------- ---------- SQL>

1、使用Oracle连接语法(SQL/86版)

SQL> select p.name,pt.name type from products p,product_types pt where p.product_type_id=pt.product_type_id order by p.name;

NAME                           TYPE
------------------------------ ----------
: The Return Video
Chemistry Book
Classical Music CD
Creative Yell CD
From Another Planet DVD
Modern Science Book
Pop CD
Space Force DVD
Supernova Video
Tank War Video
Z Files Video 已选择11行。

2、使用SQL/92引入INNER JOIN和ON重写上面的查询

SQL> select p.name,pt.name type from products p inner join  product_types pt on p.product_type_id=pt.product_type_id order by p.name;

NAME                           TYPE
------------------------------ ----------
: The Return Video
Chemistry Book
Classical Music CD
Creative Yell CD
From Another Planet DVD
Modern Science Book
Pop CD
Space Force DVD
Supernova Video
Tank War Video
Z Files Video 已选择11行。

3、SQL/92使用using代替on进行简化连接:

SQL> select p.name,pt.name type from products p inner join  product_types pt using (product_type_id);

NAME                           TYPE
------------------------------ ----------
Modern Science Book
Chemistry Book
Z Files Video
Tank War Video
Supernova Video
: The Return Video
Space Force DVD
From Another Planet DVD
Classical Music CD
Pop CD
Creative Yell CD 已选择11行。 SQL>
------------USING子句不能使用表别名,否则报错:
SQL> select p.name,pt.name type,product_type_id from products p inner join product_types pt using (p.product_type_id);
select p.name,pt.name type,product_type_id from products p inner join product_types pt using (p.product_type_id)
*
第 行出现错误:
ORA-: 此处只允许简单的列名

4、同上,如果希望在查看product_type_id的值,则在SELECT子句中只能指定该列名,不能再在该列名前加表的别名

SQL> select p.name,pt.name type,product_type_id from products p inner join  product_types pt using (product_type_id);

NAME                           TYPE       PRODUCT_TYPE_ID
------------------------------ ---------- ---------------
Modern Science Book
Chemistry Book
Z Files Video
Tank War Video
Supernova Video
: The Return Video
Space Force DVD
From Another Planet DVD
Classical Music CD
Pop CD
Creative Yell CD 已选择11行。 SQL> select p.name,pt.name type,pt.product_type_id from products p inner join product_types pt using (product_type_id);
select p.name,pt.name type,pt.product_type_id from products p inner join product_types pt using (product_type_id)
*
第 行出现错误:
ORA-: USING 子句的列部分不能有限定词 SQL>

5、使用SQL/92执行多表内连接

SQL/:
SQL> select c.first_name,c.last_name,p.name as product,pt.name as type from customers c,purchases pr,products p,product_types pt
where c.customer_id=pr.customer_id and p.product_id=pr.product_id and p.product_type_id=pt.product_type_id order by p.name; FIRST_NAME LAST_NAME PRODUCT TYPE
---------- ---------- ------------------------------ ----------
Cynthis Green Chemistry Book
Steve White Chemistry Book
Cynthis Green Modern Science Book
Steve White Modern Science Book
Steve White Supernova Video SQL/:
SQL> select c.first_name,c.last_name,p.name as product,pt.name as type from customers c inner join purchases pr using(customer_id)
inner join products p using (product_id) inner join product_types pt using (product_type_id) order by p.name; FIRST_NAME LAST_NAME PRODUCT TYPE
---------- ---------- ------------------------------ ----------
Cynthis Green Chemistry Book
Steve White Chemistry Book
Cynthis Green Modern Science Book
Steve White Modern Science Book
Steve White Supernova Video SQL>

6、使用SQL/92执行多列内连接
SELECT……
FROM TABLE1 INNER JOIN TABLE2
ON TABLE1.COLUMN1 = TABLE2.COLUMN1
AND TABLE1.COLUMN2=TABLE2.COLUMN2;

------------使用using进一步简化
SELECT ……
FROM TABLE1 INNER JOIN TABLE2
USING (COLUMN1,COLUMN2);

7、Oracle特有语法(+)执行外连接,而SQL/92标准使用left/right/full outer join执行外连接
不能使用(+)执行全外连接

SQL> select p.name,pt.name from products p, product_types pt
where p.product_type_id=pt.product_type_id(+) order by p.name; NAME NAME
------------------------------ ----------
: The Return Video
Chemistry Book
Classical Music CD
Creative Yell CD
From Another Planet DVD
Modern Science Book
My Front Line
Pop CD
Space Force DVD
Supernova Video
Tank War Video
Z Files Video 已选择12行。

7.1--使用SQL/92标准left outer join重写上面的查询

SQL> select p.name,pt.name from products p left outer join product_types pt using (product_type_id) order by p.name;

NAME                           NAME
------------------------------ ----------
: The Return Video
Chemistry Book
Classical Music CD
Creative Yell CD
From Another Planet DVD
Modern Science Book
My Front Line
Pop CD
Space Force DVD
Supernova Video
Tank War Video
Z Files Video 已选择12行。

7.2--全外连接(两个表中有空值的行全列出)

SQL> select p.name,pt.name from products p full outer join product_types pt using(product_type_id) order by p.name;

NAME                           NAME
------------------------------ ----------
: The Return Video
Chemistry Book
Classical Music CD
Creative Yell CD
From Another Planet DVD
Modern Science Book
My Front Line
Pop CD
Space Force DVD
Supernova Video
Tank War Video
Z Files Video
Magazine
test 已选择14行。

8、使用SQL/92执行自连接

SQL> select * from employees;

EMPLOYEE_ID MANAGER_ID FIRST_NAME LAST_NAME  TITLE                    SALARY
----------- ---------- ---------- ---------- -------------------- ----------
James Smith CEO
Ron Johnson Sales Manager
Fred Hobbs Salesperson
Susan Jones Salesperson SQL> select w.last_name || ' works for ' || m.last_name from employees w, employees m where w.manager_id=m.employee_id; W.LAST_NAME||'WORKSFOR'||M.LAST
-------------------------------
Johnson works for Smith
Jones works for Johnson
Hobbs works for Johnson SQL> select w.last_name || ' works for ' || m.last_name from employees w inner join employees m on w.manager_id=m.employee_id; W.LAST_NAME||'WORKSFOR'||M.LAST
-------------------------------
Johnson works for Smith
Jones works for Johnson
Hobbs works for Johnson

9、使用SQL/92执行自连接
select * from product_types,products; --SQL/82标准
select * from product_types cross join products;--SQL/92标准

关于Oracle SQL/82标准和SQL/92标准的更多相关文章

  1. 86标准SQL与92标准SQL用法区别

    86标准SQL与92标准SQL用法区别 在开发Oracle 9i时, 数据库还时间了ANSL SQL/92标准的链接语法, 在书中建议在使用Oracle 9i及更高版本时,应该使用SQL/92标准的语 ...

  2. oracle 10g 学习之PL/SQL简介和简单使用(10)

    PL /SQL是一种高级数据库程序设计语言,该语言专门用于在各种环境下对ORACLE数据库进行访问.由于该语言集成于数据库服务器中,所以PL/SQL代码可以对数据进行快速高效的处理.PL/SQL是 P ...

  3. Oracle学习笔记之PL/SQL编程

           SQL(Structure Query Language)的含义是结构化查询语句,最早由Boyce和Chambedin在1974年提出,称为SEQUEL语言.1976年,IBM公司的Sa ...

  4. Oracle学习DaySix(PL/SQL续)

    一.游标 在 PL/SQL 程序中,对于处理多行记录的事务经常使用游标来实现.游标是一个指向上下文的句柄( handle)或指针.通过游标,PL/SQL 可以控制上下文区和处理语句时上 下文区会发生些 ...

  5. 怎样使用oracle 的DBMS_SQLTUNE package 来执行 Sql Tuning Advisor 进行sql 自己主动调优

     怎样使用oracle 的DBMS_SQLTUNE package 来执行 Sql Tuning Advisor 进行sql 自己主动调优 1>.这里简单举个样例来说明DBMS_SQLTUN ...

  6. Oracle 11g系列:SQL Plus与PL/SQL

    SQL Plus是Oracle提供的一种用户接口,是数据库与用户之间进行交互的工具. PL/SQL是Oracle的过程化编程语言. 1.登录SQL Plus 利用Windows的[开始]|[运行]命令 ...

  7. 【ORACLE】记录通过执行Oracle的执行计划查询SQL脚本中的效率问题

    记录通过执行Oracle的执行计划查询SQL脚本中的效率问题   问题现象: STARiBOSS5.8.1R2版本中,河北对帐JOB执行时,无法生成发票对帐文件.   首先,Quartz表达式培植的启 ...

  8. Oracle 性能相关常用脚本(SQL)

    在缺乏的可视化工具来监控数据库性能的情形下,常用的脚本就派上用场了,下面提供几个关于Oracle性能相关的脚本供大家参考.以下脚本均在Oracle 10g测试通过,Oracle 11g可能要做相应调整 ...

  9. Oracle安装步骤及PL/SQL Developer连接数据库

    一:Oracle安装步骤及PL/SQL Developer连接数据库 win7 64位 11g 点击(操作步骤):http://www.cnblogs.com/haoke/articles/27343 ...

随机推荐

  1. (36)JS运动之使物体向右运动

    基本思路:样式要是绝对定位,不然的话根本走不起来.当开启一个定时器的时候.必须先清除定时器.这是为了防止鼠标连续点击button而开启多个定时器,导致物体的速度加快等原因,其次要控制好物体的运动和停止 ...

  2. BOOST 线程完全攻略 - 扩展 - 可被关闭的线程类

    本文假设读者已经基本了解boost线程库的使用方法. boost是个开源工程,线程这一块也在不断完善之中,到现在这个阶段,boost::thread仅仅实现了一个完美的技术框架,但是读者在实际使用中会 ...

  3. ORACLE 视图的 with check option

    ORACLE 视图的 with check option 我们来看下面的例子: create or replace view testview as select empno,ename from e ...

  4. 12款 jquery轮播插件

    Nivo Slider 首先推荐的这款插件号称世界上最棒的图片轮播插件,有独立的 jQuery 插件和 WordPress 插件两个版本. 目前下载量已经突破 1,800,000 次!jQuery 独 ...

  5. iOS-tableView点击下拉菜单

    #import "ViewController.h" @interface ViewController ()<UITableViewDataSource,UITableVi ...

  6. 关于Struts2的类型转换详解

    详细出处参考:http://www.jb51.net/article/35465.htm 一.类型转换的意义 对于一个智能的MVC框架而言,不可避免的需要实现类型转换.因为B/S(浏览器/服务器)结构 ...

  7. java zip工具类

    依赖jar :apache-ant-1.9.2-bin.zip import java.io.File; import java.io.FileInputStream; import java.io. ...

  8. oracle 联表更新

    依 a 表 cate_pub_id  为依据 更新 v 表的 cate_pub_id update td_tobrel_cate_pub_attrval v set v.CATE_PUB_ID=(se ...

  9. ASPCMS 多条件查询

    1. 表单样例: <form name="topFrm" id="topFrm" action="/search.asp"> & ...

  10. Python之路第十一天,高级(3)-线程池

    线程池 简单的线程池的实现: import queue import threading import time class ThreadPool(object): def __init__(self ...