关于Oracle SQL/82标准和SQL/92标准
在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标准的更多相关文章
- 86标准SQL与92标准SQL用法区别
86标准SQL与92标准SQL用法区别 在开发Oracle 9i时, 数据库还时间了ANSL SQL/92标准的链接语法, 在书中建议在使用Oracle 9i及更高版本时,应该使用SQL/92标准的语 ...
- oracle 10g 学习之PL/SQL简介和简单使用(10)
PL /SQL是一种高级数据库程序设计语言,该语言专门用于在各种环境下对ORACLE数据库进行访问.由于该语言集成于数据库服务器中,所以PL/SQL代码可以对数据进行快速高效的处理.PL/SQL是 P ...
- Oracle学习笔记之PL/SQL编程
SQL(Structure Query Language)的含义是结构化查询语句,最早由Boyce和Chambedin在1974年提出,称为SEQUEL语言.1976年,IBM公司的Sa ...
- Oracle学习DaySix(PL/SQL续)
一.游标 在 PL/SQL 程序中,对于处理多行记录的事务经常使用游标来实现.游标是一个指向上下文的句柄( handle)或指针.通过游标,PL/SQL 可以控制上下文区和处理语句时上 下文区会发生些 ...
- 怎样使用oracle 的DBMS_SQLTUNE package 来执行 Sql Tuning Advisor 进行sql 自己主动调优
怎样使用oracle 的DBMS_SQLTUNE package 来执行 Sql Tuning Advisor 进行sql 自己主动调优 1>.这里简单举个样例来说明DBMS_SQLTUN ...
- Oracle 11g系列:SQL Plus与PL/SQL
SQL Plus是Oracle提供的一种用户接口,是数据库与用户之间进行交互的工具. PL/SQL是Oracle的过程化编程语言. 1.登录SQL Plus 利用Windows的[开始]|[运行]命令 ...
- 【ORACLE】记录通过执行Oracle的执行计划查询SQL脚本中的效率问题
记录通过执行Oracle的执行计划查询SQL脚本中的效率问题 问题现象: STARiBOSS5.8.1R2版本中,河北对帐JOB执行时,无法生成发票对帐文件. 首先,Quartz表达式培植的启 ...
- Oracle 性能相关常用脚本(SQL)
在缺乏的可视化工具来监控数据库性能的情形下,常用的脚本就派上用场了,下面提供几个关于Oracle性能相关的脚本供大家参考.以下脚本均在Oracle 10g测试通过,Oracle 11g可能要做相应调整 ...
- Oracle安装步骤及PL/SQL Developer连接数据库
一:Oracle安装步骤及PL/SQL Developer连接数据库 win7 64位 11g 点击(操作步骤):http://www.cnblogs.com/haoke/articles/27343 ...
随机推荐
- [Ionic] Build and Run an Ionic App from Scratch
Install: npm install ionic cordova -g Create a project with blank template: ionic start <project_ ...
- [HeadFirst-HTMLCSS学习笔记][第十二章HTML5标记]
考虑HTML结构 HTML5即是把原来<div>换成一些更特定的元素.能够更明确指示包含什么内容. (页眉,导航,页脚,文章) article nav 导航 header footer t ...
- javascript正则简单入门
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- javascript创建自定义对象和prototype
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- CGRect包含交错,边缘,中心的检测
CGRectContainsPoint函数 判断给定的点是否被一个CGRect包含,可以用CGRectContainsPoint函数 BOOL contains = CGRectCont ...
- C#索引器:在集合或数组中取出某一个元素 举例 _【转】
Garmmar: [访问修饰符] 数据类型 this[参数列表] { get { 获取索引器的内容 } set { 设置索引器的内容 } } Eg: <span style="font ...
- CDZSC_2015寒假新人(1)——基础 g
Description Ignatius likes to write words in reverse way. Given a single line of text which is writt ...
- GitHub+hexo to Blog
title: GitHub+hexo to Blog date: 2014-12-26 09:44:53 tags: hexo, github --- 摘要 一直想要一个自己的博客,不过一直怯于对网站 ...
- 使用Promise规定来处理ajax请求的结果
ajax()返回结果是成功的,调用done()中的回调函数: 失败则调用fail()中的回调函数; always()的回调函数不管成功是否都会调用: 可以是使用then()函数代替done()和fai ...
- jdk配置环境变量
介绍在linux下配置jdk环境变量的几种常用方法. 首先在linux下安装jdk,如果出现提示权限不够(且root下也提示权限不够),可用#ls -l filename命令查看一下,如果显示类似如: ...