首页 Orcle第二章

Orcle第二章

举报
开通vip

Orcle第二章Orcle第二章 讲 义 第二章 SQL语言基础 本章内容 2.1 SQL概述 2.2 SQL*Plus概述 2.3 数据操纵SQL 2.4 查询 2.1 SQL概述 SQL(Structure Query Language)语言是数据库的核心语。 1. SQL语言的特点 ? 在Oracle数据库中创建、存储、更新、检索和维护数据; ? SQL语句由关键字、表名、字段名、变量名及表达式等构成; ? SQL语言是面向集合的描述性非过程化的4GL。 2. SQL语言共分为五大类: –数据查询...

Orcle第二章
Orcle第二章 讲 义 第二章 SQL语言基础 本章内容 2.1 SQL概述 2.2 SQL*Plus概述 2.3 数据操纵SQL 2.4 查询 2.1 SQL概述 SQL(Structure Query Language)语言是数据库的核心语。 1. SQL语言的特点 ? 在Oracle数据库中创建、存储、更新、检索和维护数据; ? SQL语句由关键字、 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 名、字段名、变量名及表达式等构成; ? SQL语言是面向集合的描述性非过程化的4GL。 2. SQL语言共分为五大类: –数据查询语言DQL(SELECT ) –数据操纵语言DML(INSERT、UPDATE、DELETE) –数据定义语言DDL(CREATE、ALTER、DROP) –事务控制语言(COMMIT、ROLLBACK) –数据控制语言DCL(GRANT、REVOKE)。 3. SQL语言的基本语法 SQL语言的语法比较简单,类似于英文语法,说明如下: ? SQL语句一般由主句和从句组成,主句表示主要功能; 从句表示条件和限定; ? 在关键字、变量名、字段名、表名等之间用一个以上 的空格或逗号分隔; ? 语句不分大小写(查询的数据内容除外); ? 一条语句可写在一行或多行上; ? 每条语句已分号(;)结束。 例: Select spbm,spmc,xsje from T_SPML where xsjg>=100; --------------------------------- --------------- 主句 从句 4. SQL基本数据类型 • 常量 数值常量、字符常量 • 数值型Number 整数型、浮点数 • 字符型Char、Varchar2 固定长、可变长 • 日期型Date DD-MM月-YY (MM=1—12) • 长字符型Long 长字符串(32767) • 布尔型Boolean 真(TRUE)、假(FALSE) 描述格式:number(m,n) char(n) varchar2(n) Date long(n) Boolean 例: number(6,2) char(8) varchar2(20) long(1000) 种类 运算符 含 义 ** 指数 算术 *、/ 乘、除 运算符 +、-、|| 加、减、连接 <> 或 != 不等于 >、< 大于、小于 >=、<= 大于等、小于等 关系 In 匹配列表 运算符 Like 部分匹配 Is Null 空 Between 下限 and 上限 种类 运算符 含 义 Not 相反逻辑 And 与 逻辑 运算符 Or 或 /*与*/ 块注释 -- 行注释 := 赋值 ‘与’ 字符串界 其他常 用符号 . 项分隔 ; 语句结束 ( ) 分隔包含 6. 常用 关于工期滞后的函关于工程严重滞后的函关于工程进度滞后的回复函关于征求同志党风廉政意见的函关于征求廉洁自律情况的复函 数 函数是一种有零个或多个参数并且有一个返回值的程序。 在SQL中Oracle内建了一系列函数,这些函数都可被称为SQL 或PL/SQL语句,函数主要分为两大类,单行函数和组函数。 单行字符函数 单行数字函数 单行日期函数 单行转换函数 组函数(集合函数) (1). 单行函数 ?数值函数 MOD—语法:MOD(m,n) 返回m/n的余数; ROUND—语法:ROUND(n,m) 返回n四舍五入后取小数点后m位数; ?字符函数 SUBSTR—语法:SUBSTR(char,m,n) 返回char中第m位开始取n个字符值; 例:SUBSTR(’12字符’,1,4) 返回’12字符’ SUBSTR(‘12345’,1,4) 返回‘1234’ SUBSTRB—语法:SUBSTRB(char,m,n) 返回char中第m位开始取n个字节值。 例:SUBSTRB(’12字符’,1,4) 返回’12字’ SUBSTRB(‘12345’,1,4) 返回‘1234’ LENGTH—语法:LENGTH(char) 返回字符长度 ?日期函数 SYSDATE—语法:SYSDATE 返回系统当前日期 例:To_Char(SYSDATE,’YYYYMMDD HH24:MI:SS’) LAST_DAY—语法:LAST_DAY(日期) 返回该月份的最后一天; 例:LAST_DAY(SYSDATE)-SYSDATE ?转换函数 TO_CHAR—语法: TO_CHAR(日期,格式) 把日期转换为字符串; TO_CHAR(数值) 把数值转换为字符串; TO_DATE—语法: TO_DATE(char,格式) 把字符串转换为日期; TO_NUMBER—语法: TO_NUMBER(char) 把字符串转换为数值。 例:求某一天的星期 TO_CHAR(SYSDATE,'D') ?其他函数 NVL—语法:NVL(表达式1,表达式2) 如果表达式1为空,则返回表达式2,否则返回表达式1; 例:Select xsjg*nvl(xssl,0) from t_spxsrb; (2). 组函数 ?取值选项 ALL—在组函数取所有的值,包括重复的值; DISTINCT—重复值只取一个。 ?函数 COUNT—语法:COUNT([ALL|DISTINCT] 表达式) 返回查询行数; MAX—语法:MAX(表达式) 返回最大值; MIN—语法:MIN(表达式) 返回最小值; SUM—语法:SUM(表达式) 返回表达式值的和。 2.2 SQL*Plus概述 Oracle的SQL*Plus是 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 SQL的一个扩展集,除了符合SQL 标准的语句外,它还提供了一些Oracle 的特定的外加语句。 SQL*Plus是用户和数据库服务器之间的友好字符接口。用 户可以在SQL*Plus窗口编写语句,实现数据的处理和控制等多 种功能。 2.2.1 SQL*Plus的启动和关闭 1. 菜单方式SQL*Plus的启动 在【开始】菜单的【程序】中运行Oracle for Ora92Home 组的SQL*Plus程序。弹出登录窗口,要求输入用户名、口令和 连接字符串。SQL*Plus连接到连接字符串所对应的数据库。 2. 命令行方式启动(DOS方式启动SQL*Plus。) . 单击[运行]菜单命令,打开运行对话框。 . 在”打开”的文本框中输入sqlplus,或输入 sqlplus 用户名/密码@连接字符串 例: c:\>sqlplus scott/tiger@W 3. SQL*Plus的关闭 在使用完SQL*Plus后,一定要正确关闭会话,才能确保会话使用的数据库资源释放, 以便数据库的其他用户访问。 .直接关闭窗口 .在SQL>提示符后键入并执行EXIT命令,窗口自动关闭 2.2.2 SQL* Plus常用编辑命令 •SAVE 该命令将当前的命令行保存到操作系统的文件中。 格式: SAVE filename[.ext] 其中 filename:将把缓冲区中的内容存入到操作系统目录的文件名。ext:文件后缀,缺 省的文件后缀为SQL。 2. GET 该命令将操作系统的目录下的命令文件读到缓冲区(但不 执行)。 格式: GET filename [.ext] 其中 filename: 希望加载到SQL缓冲区的文件名。 ext: 文件的扩展名,缺省为 SQL. 3. EDIT 该命令为调用操作系统的编辑指定文件或缓冲区的内容。 格式:EDIT [filename][.ext] 其中:如果EDIT后面没有跟文件名,则编辑SQL缓冲区中的 内容,编辑中所做的改变均存入缓冲区。 4. RUN 或 / 该命令运行指定的文件。 5. SPOOL SPOOL 命令可以实现将屏幕所出现的一切信息记录到操作 系统的文件中直到SPOOL OFF为止。 格式: SPOOL [filename[.ext] |OFF] 其中 filename:输出(spool)的文件名.ext文件的后缀。 缺省的后缀是LST(或LIS)。 例: SPOOL test /*以下的屏幕显示内容存储到test.lst文件中*/ SPOOL off /*结束屏幕显示内容输出到文件中*/ 2.3 数据库对象创建和操纵 2.3.1 创建基表 基表是关系数据库中最重要的数据库对象,其他数据库对 象的创建以及各种操作都是围绕表进行。 1. 定义语句格式 CREATE TABLE <表名>( <列名> <数据类型>[ <列级完整性约束条件> ] [,<列名> <数据类型>[ <列级完整性约束条件>] ] ?? [,<表级完整性约束条件> ] ) 例: Create Table TT_spml ( spbm char(6), spmc varchar2(20), spgg varchar2(15), spcd varchar2(10), jldw char(2), ghdw char(6), xsjg number(8,2), zfrq char(8)); 2.描述语句 Oracle 对SQL最重要的改进之就是增加了描述(describe)命令,使用describe命令,用户可以快速掌握表及其中所有表列的概要。describe命令可以列出存储的PL/SQL包中所有的过程和这些过程所使用的输入/输出参数。 例:显示表商品目录及供货单位的结构 DESCribe T_spml; DESCribe T_ghdwml; 练习:在SAM用户下建立表Student, Course ,SC create table Student( Stu_no char(8) , Stu_name varchar2(10) not null, Stu_age number(3), Stu_sex char(2), CONSTRAINT pk_sno PRIMARY KEY (Stu_no)); create table Course( --课程表 Cou_no char(3), Cou_name varchar2(16) not null, Cou_teacher varchar2(10), PRIMARY KEY (Cou_no)); create table SC( --成绩表 Stu_no char(8) , Cou_no char(3), Grade number(3), PRIMARY KEY (Stu_no,Cou_no), REFERENCES Student(Stu_no), REFERENCES Course(Cou_no), CHECK ((grade is null) or (grade between 0 and 100))); 3. 复制表 Create Table 表名1 as select 列名1,列名2… from 表名2; 例:Create Table ex_copy_student as select * from ex_stu; 4. 删除表 Drop Table 语句 格式:Drop table 表名 [Cascade Constraint] 语句; Cascade Constraint—当要删除的表与与其他表有 约束条件时同时删除约束条件。 例:Drop Table TT_spml; 例:Create Table TT_ghdwml as Select dwbm,dwmc from t_ghdwml; Drop Table TT_ghdwml; 5. 表的重命名 Rename 语句 格式:Rename 原表名 To 现表名; 例:Rename TT_ghdwml to ghdwml; 6. 数据完整性与约束条件 列级格式:Create table 表名 (列名1 类型 约束条件,列名2 类型 约束条件, …); 表级格式:Create table 表名 (列名1 类型,列名2 类型,…) 约束条件; 约束条件:Check – 检验取值的正确性; Not Null – 不允许取空值; Unique – 值不允许重复; Primary Key–设定为主键,值不允许重复和空; Foreign Key–设定为外键,建立表的主从关系, 外键的值必须存在于主表的主键中; 本章所有例子以下列学生选课系统为例。 学生T_XSML(学号XSBH,姓名XSXM,身份证号SFZH,性别XSXB) 课程T_kcml (专业编码ZYBM、专业名称ZYMC、课程编码KCBM) 成绩T_xscjb(学号编号,课程编码,平时成绩PSCJ、考试成绩KSCJ) • 主键 Primary Key 主键有两个功能:? 能够唯一地标示每一行; ? 主键不能是空值。 主键有两个规则:? 每个表只能有一个主键; ? 主键可以是一列或多列组合。 例: 创建学生目录表 Create Table T_xsml(xsbh char(8) Primary Key, xsxm varchar2(8),sfzh char(18),xsxb char(1)); Create Table T_xscjb( -- 学生成绩表 kcbm char(4), --课程编码 xsbh char(8), --学生编号 pscj varchar2(6), --平时成绩 kscj varchar2(6), --考试成绩 Constraint pk Primary Key (kcbm,xsbh)); Constraint pk — 可以省略 Insert into T_xscjb Values('1101','20031101','85','90'); Insert into T_xscjb Values('1101','','85','90'); Insert into T_xscjb Values('1101','20031102','85','90'); • 非空 Not Null 非空功能:列不能是空值。 例: Create Table T_xsml(xsbh char(8) Primary Key, xsxm varchar2(8),xsxb char(1) Not Null); Insert Into T_xsml values ('20031101','王强','M'); • 唯一 Unique 功能:表中所有的行限定唯一的列(列组)不能重复。 :Create Table T_xscjb ( kcbm char(4), --课程编码 xsbh char(8), --学生编号 pscj varchar2(6), --平时成绩 kscj varchar2(6), --考试成绩 Constraint uq Unique (kcbm,xsbh)); Constraint uq — 可以省略 • 检查 Check 检查功能:列只能取指定范围的值,可以有多个限定。 例: Create Table T_xsml ( xsbh char(8) Primary Key, xsxm varchar2(8) Not null, xsxb char(1), Constraint ck Check (xsxb in (‘M’,‘W’))); Constraint ck – 可以省略 Insert Into T_xsml values ('20031101','王强','M'); • 外键 Foreign Key 外键功能:限定两个表之间的数据关系。 外键可以一列或多列。 删除时应注意表之间的关系 例:Create Table T_xscjb ( xsbh char(8), kcbm char(4) References T_kcml, -- T_kcml 课程目录的主键 pscj varchar2(6), kscj varchar2(6)); Create Table T_kcml (kcbm char(4) Primary key, kcmc varchar2(20)); Create Table T_xscjb ( xsbh char(8), zybm char(3), --专业编码 kcbm char(4), pscj varchar2(6), kscj varchar2(6), Foreign Key (zybm,kcbm) References T_kcml(zybm,kcbm)); --课程目录 Create Table T_kcml ( zybm char(3), zymc varchar(20), kcbm char(4), primary key (zybm,kcbm)); 注意:在有多列外键时,所要关联表的主键必须是 相对应多列。 练习:在SAM用户下建立表Student, Course ,SC create table Student( Stu_no char(8) , Stu_name varchar2(10) not null, Stu_age number(3), Stu_sex char(2), CONSTRAINT pk_sno PRIMARY KEY (Stu_no)); create table Course( --课程表 Cou_no char(3), Cou_name varchar2(16) not null, Cou_teacher varchar2(10), PRIMARY KEY (Cou_no)); create table SC( --成绩表 Stu_no char(8) , Cou_no char(3), Grade number(3), PRIMARY KEY (Stu_no,Cou_no), REFERENCES Student(Stu_no), REFERENCES Course(Cou_no), CHECK ((grade is null) or (grade between 0 and 100))); 2.3.2 修改表结构 •语法 ALTER TABLE [user.] table [ADD ({colum_element|table_constraint} [,{column_element|table_constraint}]...)] [MODIFY(column_element[,column_element]...)] [DROP CONSTRAINT constraint]... [PCTFREE integer][PCTUSED integer] [INITRANS integer][MAXTRANS integer] [STORAGE storage] [BACKUP] •常用格式: Alter Table 表名 [Add | Modify | Drop Column] 修改内容; 例:?增加新列 Alter Table T_ghdwml add swdm char(15); 例:?修改列 Alter Table T_ghdwml modify swdm number(15); 例:?删除列 Alter Table T_ghdwml Drop Column swdm; 2.3.3 插入语句 INSERT 语句可以完成对表、视图进行数据插入。 语句格式1: 插入一行常数记录。 INSERT INTO [user.]table[@db_link] [(column1[,column2]...)] VALUES (express1[,express2]...); 语句格式2: 把一个表的数据插入到另一个表中。 Insert into 表名1(<列名表>) Select <列名表> From 表名2; 例: 插入1条记录于student表中 INSERT into Student VALUES('20026101','李勇',20,'男','计算机'); 2.3.4 修改数据语句 使用UPDATE语句修改表中的数据 1. 格式:UPDATE table SET column = value [, column = value] [WHERE condition]; 2. 使用UPDATE语句应注意以下事项: . 如果要更新数值列,则可以直接提供数值;如果要更新字符列或日期列,则数据必须用单引号。 . 当更新数据时,数据必须要与列的数据类型匹配。 . 当更新数据时,数据必须要满足约束规则, 例:将student表中学号为20026101的学生年龄修改为18。 update student set stu_age =18 where stu_no ='20026101'; 将所有选修课程号为a01的成绩加2分,所有选修课程号为a03的成绩加3分。其余加1 分。 update sc set grade= case cou_no when 'a01' then grade+2 when 'a03' then grade+3 else grade+1 end; 2.3.5 删除数据 •使用DELETE语句可从表中删除现有的数据。 •用户确定要删除表的所有数据,使用TRUNCATE TABLE 语句速度更快。 •DELETE语句的操作可以回退,但TRUNCATE TABLE语句的操作不能回退。 DELETE FROM 表名 [WHERE 条件]; 如果不用where子句,则会删除表中所有的行, 使用where子句只删除满足条件的行。 例:删除选修课程号为a01学生的成绩记录 delete from sc where cou_no='a01'; 2.3.6 索引 •索引的目的 索引主要目的是加快数据的读取速度和完整性检查。一般 在数据库设计阶段的与数据库结构一道考虑。应用系统的性能 直接与索引的合理直接有关。 2. 索引分类 . 按功能分类 唯一索引 一般索引 主关键字索引 . 按索引对象分类 单列索引(表单个字段的索引) 多列索引(表多个字段的索引) 函数索引(对字段进行函数运算的索引) 3. 创建索引 语法:CREATE [UNIQUE] INDEX index_name ON table_name (column_name[,column_name] ??); 其中 . UNIQUE: 指定索引所基于的列组合值必须唯一; 缺省索引是非唯一索引。 . index_name : 表示创建的索引名字 . table_name : 指要创建索引的表 . Column_name: 索引基于的列名 例:在表商品目录T_SPML中以关键字商品编码创建唯一索引。 create unique index i_spml_spbm on t_spml(spbm); 3. 删除索引 当不需要时可以将索引删除以释放出硬盘空间。 语法: DROP INDEX 索引名; 例:删除表商品目录T_SPML中商品编码唯一索引I_SPML_SPBM DROP INDEX I_SPML_SPBM; 注意: . 删除索引时,系统从数据字典中删去该索引的描述。 . 当表结构被删除时,其相关的所有索引也随之被删除。 2.3.7 视图 1. 视图概念 . 视图是原始数据库数据的一种变换,是查看表中数据的另 外一种方式。 . 可以将视图看成是一个移动的窗口,通过它可以看到感兴 趣的数据。 . 视图是从一个或多个表中获得数据的。那些用于产生视图 的表叫做该视图的基表。一个视图也可从另一个视图产生。 . 视图是数据库对象,它的定义存放在数据库数据字典中。 2. 创建视图 语法:create [replace] view 视图名 [column_name1,column_name2??] as 查询子句 [with read only]; 例:对商品目录、供货单位表建立视图。 商品目录表视图: Create View v_spml as Select spbm,spmc,xsjg from T_spml; 例:对商品目录、供货单位表建立视图。 商品目录表与供货单位表组合视图: Create View v_spxx as Select x.ghdw,y.dwmc,spbm,spmc from T_spml x,T_ghdwml y where x.ghdw=y.dwbm; 3.视图的撤消 语法: DROP VIEW <视图名>; 例:删除视图V_SPML。 DROP VIEW V_SPML; 4.视图查询 视图的查询与表的查询相同。 例:查询供货单位编码是G90008的商品信息。 select * from v_spxx where ghdw = 'G90008'; 5. 视图数据的更新 对视图数据的更新最终要转换为对基本表更新。如果视图 从单个基表中选择,投影操作导出且包含关系的主码和所有非 空项,则可执行更新操作,但不提倡更新视图,容易破坏数据 完整性。 2.3.8 同义词(SYNONYM) 1. 同义词的概念 . 同义词是数据对象的别名。同义词可以表示表、视图、序 列、程序、函数或包等数据对象。 . 同义词可以使多个用户使用同一个对象而不用将模式作为 前缀加在对象的前面,从而简化授权方面的操作。 . 同义词有公有和私有两种。 2. 同义词创建 语法: create [public] synonym 同义词名 for 用户名.表名[@database_link]; 注:不同用户拥有的对象创建的同义词,首先要进行授权。 例:创建私有的同义词。 grant all on emp to lll; --授权。 connect lll/lll@w; --改变登入用户。 create synonym emp for scott.emp; --同义词已创建。 select * from emp; 例:创建公有同义词。 Grant Select On T_ghdwml To Public; --需要Public Synonym 权限 Create Public Synonym S_ghdwml For T_ghdwml; Select * from s_ghdwml; 2.3.9 事务控制 •事务控制的概念 . 一个事务可以是一组DML语句,也可以是一条DDL或DCL命令。 . 事务从第一个可执行语句开始。 事务遇到以下情况结束: ?commit 或 rollback语句 ?DDL 或 DCL语句自动提交事务 ?用户退出(系统自动发出commit命令) ?系统崩溃。 2. 事务处理的好处 . 事务可以保证Oracle数据库所有用户的读一致性。 . 事务可以先预览改变,然后再永久保存到Oracle数据库中。 3. 事务控制命令 . Commit 事务提交。永久改变数据库内容。 . Rollback 事务回滚。取消本次执行的一组DML语句。 2.4 查询 查询语句的基本语法如下: SELECT [ALL|DISTINCT] 目标列表达式[,目标列表达式>] ?? FROM 表名或视图名[,表名或视图名] ?? [ WHERE 条件表达式 ] [ HAVING 条件表达式 ] [ GROUP BY 列名1 ,列名2?? ] [ ORDER BY 列名3, 列名4?? [ ASC | DESC ] ]; 2.4.1 简单查询 简单查询仅涉及一个表或视图,是一种最简单的查询操 作,可以分为如下几种: •查询指定的列 •无条件查询 •条件查询 •对查询结果排序 •对查询结果分组 •使用函数 1. 无条件查询 Select * from t_spml; 2. 查询所有列或指定列 例:查询在商品目录中所有的供货单位编码(消除取值重复的行) SELECT DISTINCT ghdw FROM T_spml; 3. 条件查询 例:查询销售价格>=100元以上的商品编码、商品名称、销售价格 Select spbm,spmc,xsjg from T_spml where xsjg>=100; 4. 对查询结果排序 Select * from t_spml where spbm=??941001?? order by ghdw,spbm desc; 5. 分组查询 Select count(spbm) from t_spml; Select ghdw,count(spbm) from t_spml Group by ghdw; Select ghdw,sum(yysl) from t_spkcmx Group by ghdw; Select ghdw from t_spkcmx Having Count(ghdw)>1 Group by ghdw; Select max(xsjg) from t_spml; Select ghdw,max(xsjg) from t_spml Group by ghdw; 2.4.3 高级查询 1. 多表连接 .oracle允许使用表连接来实现在一个查询中显示多个表的数据,连接两个或多个表中的数 据所需的条件是:两个表中有相同列(列名可以不同) 。 . 连接查询中用来连接两个表的条件称为连接条件或连接谓词, 连接可以分类为等值连接、非等值连接、自然连接、外连接、 自身连接。 格式: [<表名1>.]<列名1> <比较运算符> [<表名2>.]<列名2> 2. 等值连接: 当比较运算符是??=??时,称为等值连接。 例:查询商品的编码、名称、产地及库存数量。 Select x.spbm,spmc,spcd,yysl,y.ghdw from t_spkcmx x,t_spml y where y.ghdw='G90007' and x.spbm=y.spbm; 3. 复合条件连接 例:查询供货单位编码、名称、商品编码、名称、产地、 库存数量。 select x.ghdw,dwmc,x.spbm,spmc,spcd,yysl,y.ghdw from t_spkcmx x,t_spml y,t_ghdwml z where y.ghdw='G90007' and x.spbm=y.spbm and x.ghdw=z.dwbm; 4. 外连接 . 外连接与普通连接的区别: 普通连接操作只输出满足连接条件的元组,外连接操作 以指定表为连接主体,将主体表中不满足连接条件的元 组一并输出。 . 可以使用外连接查看不满足连接条件的那些记录。 . 外连接的运算符是符号??+??,'+??被放置在缺失记录的 那一边,但不能两边都放。它可以是以下两种形式: 左外连接(LEFT JOIN) 和 右外连接(RIGHT JOIN) 例: 查询每个供货单位的商品情况。 Select x.dwbm,x.dwmc,y.spbm,y.spmc from t_ghdwml x,t_spml y where x.dwbm=y.ghdw(+); 5. 自身连接 在特殊情况下,可能需要只用一个表进行连接。用表 的两个副本连接表中的数据,这种连接称为自身连接。因 为自连接查询仅涉及某张表与其自身的连接,所以在FROM 子句中该表名出现两次,分别用两个不同的别名表示。 Select x.spbm,x.spmc,y.xsjg from t_spml x,t_spml y where x.xsjg=y.xsjg; 2.4.3 子查询 •1.子查询 是嵌入在select、update或delete命令中的标准select语 句,它提供父语句的from、where或having部分的数据,限制 父查询的所选输出,产生某种中间结果集。 SELECT 表达式 FROM [table|查询子句] WHERE 表达式 [表达式|(查询子句)]; 其中 表达式为列名、变量、常数运算符等组成的式子; operator为比较运算符。比较运算符分为两种: •单行运算符(>、>=、<、<=、=、<>) •多行运算符(IN、ANY、ALL)。 2. 单行子查询 单行子查询是只返回一个值的子查询,在主查询执行以前, 它先被执行,且只执行一次,返回的结果值用于限定主查询。 例:查询与商品编码9650005的商品供货单位相同的所有商品信息 Select * from T_spml where ghdw= (select distinct ghdw from T_spml where spbm='9650005'); 例:查询供货单位G90028的商品最高价格更低的所有商品信息。 Select * from T_spml where xsjg<(select max(xsjg) from T_spml where ghdw='G90028'); 2.多行子查询 查询结果返回多行记录的子查询称为多行子查询。在多行 子查询中应该使用多行运算符:in、any、all,而不能使用关 系运算符(=、>、<、>=、<=、<>)。 谓词语义: ANY:任意一个值。ALL:所有值 > ANY 大于子查询结果中的某个值 > ALL 大于子查询结果中的所有值 < ANY 小于子查询结果中的某个值 < ALL 小于子查询结果中的所有值 例:查询产地为上海的所有供货单位的商品信息。 Select * from T_spml where ghdw in (select ghdw from T_spml where spcd='上海'); 3. 相关子查询 在where子句中使用exists测试子句。如果子查询返回数 据,则exists运算符返回true,并返回查询记录,否则exists 运算符返回false,不返回查询记录。 例: 查询所有销售价格为1000的供货单位信息。 select * from t_ghdwml Where Exists (Select * From t_spml Where ghdw=t_ghdwml.dwbm); 4. 子查询作为数据源 格式:Select 表达式 From 查询子句 Where …… 例:查询扣款比率为20的所有供货单位品种个数。 select ghdw,Count(spbm) from (Select ghdw,spbm From t_spml Where ghdw In (Select dwbm From t_ghdwml Where kkbl=20)) Group By ghdw; 2.4.4 集合查询 关系数据库的优点是用户编写的SQL查询语句处理的是 数据集合,这使其具有非常强大的功能。 集合操作注意点: . 参加集合运算的两个子查询都不能包含order by子句; . 两个子查询的列数和列的类型应相同。 1. 集合查询运算符 Union 完成将两个以上的相类似的查询结果合并在一起, 并且相同的行只取其一。 union all 表示返回所有行(不管是否重复)。 Intersect 返回在两个表中都有相同内容的信息。 Minus 返回只在一个表中出现的信息。 构造两个相类似的表,集合查询中使用。 Create table tt_spml as select * from t_spml; 2. UNION运算 语法: select 子句1 union select 子句2 union ?? ?? [order by 子句] 例:查询T_spml 和 TT_spml的并集。 Select * from T_spml union select * from TT_spml order by 7; 3. Intersect(交)运算 集合交操作(intersect),返回在两个子查询中都有的所有行。 语法如下: select 子句1 intersect select 子句2 [order by子句]; 例: 查询T_spml 和 TT_spml的交集。 Select * from T_spml intersect select * from TT_spml; 注: Order By 7 --- 表示按第7列排序。 Select * from T_spml union all select * from TT_spml; 4. Minus(差)运算 集合差(MINUS)操作,将返回第一个子查询减去第二个子查 询相同行的剩余行。 语法: SELECT 子句1 MINUS SELECT 子句2; 例:查询T_spml 和 TT_spml的差集。 Select * from T_spml minus select * from TT_spml;
本文档为【Orcle第二章】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_079973
暂无简介~
格式:doc
大小:58KB
软件:Word
页数:0
分类:生活休闲
上传时间:2017-09-27
浏览量:27