Oracle数据库讲义(第二章).ppt
讲 义Oracle数据库2009.3李明俊第二章 SQL语言基础本章内容本章内容2.1 SQL概述2.2 SQL*Plus概述2.3 数据操纵SQL2.4 查询2.5 小结事务处理2.1 SQL概述SQL(Structure Query Language)SQL(Structure Query Language)语言是数据库的核心语。语言是数据库的核心语。一、一、SQLSQL语言的特点语言的特点 在在OracleOracle数据库中创建、存储、更新、检索和维护数据;数据库中创建、存储、更新、检索和维护数据;SQL SQL语句由关键字、表名、字段名、变量名及表达式等构成;语句由关键字、表名、字段名、变量名及表达式等构成;SQL SQL语言是面向集合的描述性非过程化的语言是面向集合的描述性非过程化的4GL4GL。二、二、SQLSQL语言共分为五大类:语言共分为五大类:数据查询语言数据查询语言DQLDQL(SELECT SELECT)数据操纵语言数据操纵语言DMLDML(INSERTINSERT、UPDATEUPDATE、DELETEDELETE)数据定义语言数据定义语言DDLDDL(CREATECREATE、ALTERALTER、DROPDROP)事务控制语言(事务控制语言(COMMITCOMMIT、ROLLBACKROLLBACK)数据控制语言数据控制语言DCLDCL(GRANTGRANT、REVOKEREVOKE)。)。三、三、SQLSQL语言的基本语法语言的基本语法 SQL SQL语言的语法比较简单,类似于英文语法,说明如下:语言的语法比较简单,类似于英文语法,说明如下:SQL SQL语句一般由主句和从句组成,主句表示主要功能;语句一般由主句和从句组成,主句表示主要功能;从句表示条件和限定;从句表示条件和限定;在关键字、变量名、字段名、表名等之间用一个以上在关键字、变量名、字段名、表名等之间用一个以上 的空格或逗号分隔;的空格或逗号分隔;语句不分大小写语句不分大小写(查询的数据内容除外查询的数据内容除外);一条语句可写在一行或多行上;一条语句可写在一行或多行上;每条语句已分号每条语句已分号(;)结束。结束。例:例:Select spbm,spmc,xsje from T_SPML where xsjg=100;Select spbm,spmc,xsje from T_SPML where xsjg=100;-主句主句 从句从句四、四、SQLSQL基本数据类型基本数据类型 常量常量 数值常量、字符常量数值常量、字符常量 数值型数值型Number Number 整数型、浮点数整数型、浮点数 字符型字符型CharChar、Varchar2 Varchar2 固定长、可变长固定长、可变长 日期型日期型Date DD-MMDate DD-MM月月-YY(MM=112)-YY(MM=112)长字符型长字符型Long Long 长字符串长字符串(32767)(32767)布尔型布尔型Boolean Boolean 真真(TRUE)(TRUE)、假、假(FALSE)FALSE)描述格式:描述格式:number(m,n)char(n)varchar2(n)number(m,n)char(n)varchar2(n)Date long(n)Boolean Date long(n)Boolean例:例:number(6,2)char(8)varchar2(20)long(1000)number(6,2)char(8)varchar2(20)long(1000)五、SQL基本运算符 种类种类 运算符运算符 含含 义义算术运算符 *指数 *、/乘、除+、-、|加、减、连接 关系运算符 或!=不等于 、=、sqlplus scott/tiger主机字符串(3)输入SQL命令,在命令的结尾处输入一个“;”号,然后按回车。SQL*Plus的关闭在使用完SQL*Plus后,一定要正确关闭会话。正确关闭会话可以确保会话使用的数据库资源释放,以便数据库的其他用户访问。(1)直接关闭窗口。(2)在SQL提示符后键入并执行EXIT命令,窗口自动关闭。SAVE该命令将当前的命令行保存到操作系统的文件中。格式:SAVE filename.ext其中:filename:你将把缓冲区中的内容存入到操作系统目录的文件名。ext:若使用文件后缀,缺省的文件后缀为SQL。2.2.2 SQL*Plus常用编辑命令GET 该命令将操作系统的目录下的命令文件读到缓冲区(但不执行)。格式:GET filename.ext其中:filename:希望加载到SQL缓冲区的文件名。ext:文件的扩展名,缺省为 SQL.EDIT该命令为调用操作系统的编辑指定文件或缓冲区的内容。格式:EDIT filename.ext 其中:如果EDIT后面没有跟文件名,则编辑SQL缓冲区中的内容,编辑中所做的改变均存入缓冲区。RUN 或/该命令运行指定的文件。LIST 可以用 LIST 命令来列出当前SQL缓冲区中的一行或多行命令语句 格式:LIST n|n m|n*|n LAST|*|*n|*LAST|LAST其中:n 列出第n行,n m 列出n到m行,n*列出第n行到当前行,n LAST 列出第n行到最末行,*列出所有行,*n 列出当前行到第n行,*LAST列出当前行到最末行,LAST 列出最末行SPOOLSPOOL 命令可以实现将屏幕所出现的一切信息记录到操作系统的文件中直到SPOOL OFF为止。格式:SPOOL filename.ext|OFF其中:filename:输出(spool)的文件名.ext文件的后缀。缺省的后缀是LST(或LIS)。SPOOL test 以下的屏幕显示内容存储到test.lst文件中。SPOOL off 结束屏幕显示内容输出到文件中。配置会话环境 一般在SQL下进行SQLPLUS 操作,都需要进行必要的环境设置才能完成我们所需要的输出。所有环境的设置由 SET命令加相应的环境变量来完成。下面是常用的环境设置:ARRAYSIZE(读取的行数)格式:SET ARRAYSIZEintegerAUTOCOMMIT(自动提交)格式:SET AUTO COMMIT OFF|ON LINESIZE(行显示宽度)格式:SET Linesize80|integerPAGESIZE(页行数)格式:SET pagesize 24|integer 2.3 数据库对象创建和操纵 2.3.1 创建表 表是关系数据库中最重要的数据库对象,其他数据库对象的创建以及各种操作都是围绕表进行。本章所有例子以下列学生选课系统为例。学生(学号,姓名,年龄,性别,专业名)课程(课程号、课程名,任课教师)选课(学号,课程号,成绩)定义语句格式一、一、CREATE TABLE(,)例例1:Create Table TT_spml(:Create Table TT_spml(spbm char(6),spmc spbm char(6),spmc varchar2(20),varchar2(20),spgg varchar2(15),spcd varchar2(10),spgg varchar2(15),spcd varchar2(10),jldw char(2),ghdw char(6),jldw char(2),ghdw char(6),xsjg number(8,2),zfrq char(8);xsjg number(8,2),zfrq char(8);二、描述语句Oracle Oracle 对对SQLSQL最重要的改进之就是增加了描述最重要的改进之就是增加了描述(describedescribe)命令,使用)命令,使用describedescribe命令,用户可命令,用户可以快速掌握表及其中所有表列的概要。以快速掌握表及其中所有表列的概要。describedescribe命令可以列出存储的命令可以列出存储的PL/SQLPL/SQL包中所有的过程和这包中所有的过程和这些过程所使用的输入些过程所使用的输入/输出参数。输出参数。【例【例3 3】显示表商品目录及供货单位的结构:】显示表商品目录及供货单位的结构:DESCribe T_spml DESCribe T_spml DESCribe T_ghdwml DESCribe T_ghdwml三、复制表三、复制表 Create Table 表名1 as select 列名1,列名2 from 表名2;例:例:Create Table TT_spml as select*from t_spml;修改表的列名修改表的列名 Create Table TT_ghdwml(ghdw,dwmc)as select dwbm,dwmc from t_ghdwml;四、删除表四、删除表 Drop Table Drop Table 语句语句 格式:格式:Drop table Drop table 表名表名 Cascade Constraint Cascade Constraint 语句;语句;Cascade Constraint Cascade Constraint当要删除的表与与其他表有当要删除的表与与其他表有 约束条件时同时删除约束条件。约束条件时同时删除约束条件。例:例:Drop Table TT_spml;Drop Table TT_spml;Create Table TT_ghdwml as Select dwbm,dwmc from t_ghdwml;Drop Table TT_ghdwml;五、表的重命名五、表的重命名 Rename 语句语句 格式:格式:Rename 原表名原表名 To 现表名现表名;例:例:Rename TT_ghdwml to ghdwml;六、六、数据完整性与约束条件数据完整性与约束条件 列级格式:列级格式:Create table 表名表名 (列名列名1 1 类型类型 约束条件约束条件,列名列名2 2 类型类型 约束条件约束条件,);,);表级格式:表级格式:Create table 表名表名 (列名列名1 1 类型,列名类型,列名2 2 类型,类型,)约束条件约束条件;约束条件:约束条件:Check 检验取值的正确性;检验取值的正确性;Not Null 不允许取空值;不允许取空值;Unique 值不允许重复;值不允许重复;Primary 设定为主键,值不允许重复和空;设定为主键,值不允许重复和空;References设定为外键,建立表的主从关系,设定为外键,建立表的主从关系,外键的值必须存在于主表的主键中;外键的值必须存在于主表的主键中;主键主键 Primary Key 主键有两个功能:主键有两个功能:能够唯一地标示每一行;能够唯一地标示每一行;主键不能是空值。主键不能是空值。主键有两个规则:主键有两个规则:每个表只能有一个主键;每个表只能有一个主键;主键可以是一列或多列组合。主键可以是一列或多列组合。例例1: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 非空功能:列不能是空值。非空功能:列不能是空值。例例1: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_xsml(xsbh char(8)Primary Key,xsxm varchar2(8)Not null,sfzh char(18)Unique);Insert Into T_xsml values(20031101,王强王强,230102198401010001);Create Table T_xscjb(kcbm char(4),-课程编码 xsbh char(8),-学生编号 pscj varchar2(6),-平时成绩 kscj varchar2(6),-考试成绩 Constraint uq Unique(kcbm,xsbh);Constraint uq 可以省略。可以省略。检查检查 Check 检查功能:列只能取指定范围的值,可以有多个限定。检查功能:列只能取指定范围的值,可以有多个限定。例例1: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),zybmzybm char(3),-专业编码专业编码 kcbmkcbm char(4),pscj varchar2(6),kscj varchar2(6),Foreign Key(zybm,kcbmzybm,kcbm)References T_kcml(zybm,kcbmzybm,kcbm);-课程目录课程目录Create Table T_kcml(zybmzybm char(3),zymc varchar(20),kcbmkcbm char(4),primary key(zybm,kcbmzybm,kcbm);注意:在有多列外键时,所要关联表的主键必须是注意:在有多列外键时,所要关联表的主键必须是 相对应多列。相对应多列。【例1】在SAM用户下建立表Student,Course,SCSQL create table Student(Stu_no char(8),Stu_name varchar2(10)not null,Stu_age number(3),Stu_sex char(2),Stu_dept varchar2(20),CONSTRAINT pk_sno PRIMARY KEY(Stu_no);SQL create table Course(Cou_no char(3),Cou_name varchar2(16)not null,Cou_pno char(3),Cou_teacher varchar2(10),CONSTRAINT pk_cno PRIMARY KEY(Cou_no);create table SC(-create table SC(-成绩表成绩表 Stu_no char(8),Stu_no char(8),Cou_no char(3),Cou_no char(3),Grade number(3),Grade number(3),CONSTRAINT pk_sc PRIMARY KEY(Stu_no,Cou_no),CONSTRAINT pk_sc PRIMARY KEY(Stu_no,Cou_no),FOREIGN KEY(Stu_no)REFERENCES Student(Stu_no),FOREIGN KEY(Stu_no)REFERENCES Student(Stu_no),FOREIGN KEY(Cou_no)REFERENCES Course(Cou_no),FOREIGN KEY(Cou_no)REFERENCES Course(Cou_no),CHECK(grade is null)or CHECK(grade is null)or (grade between 0 and 100);(grade between 0 and 100);2.3.2 修改表结构语法ALTER TABLE user.tableALTER TABLE user.tableADD (colum_element|table_constraintADD (colum_element|table_constraint ,column_element|table_constraint.),column_element|table_constraint.)MODIFY(column_element,column_element.)MODIFY(column_element,column_element.)DROP CONSTRAINT constraint.DROP CONSTRAINT constraint.PCTFREE integerPCTUSED integerPCTFREE integerPCTUSED integerINITRANS integerMAXTRANS integerINITRANS integerMAXTRANS integerSTORAGE storageSTORAGE storageBACKUPBACKUP 格式:格式:Alter Table 表名表名 Add|Modify|Drop Column 修改内容修改内容;例:例:增加新列增加新列 Alter Table T_ghdwml add swdm char(15);修改列修改列 Alter Table T_ghdwml Alter Table T_ghdwml modify swdm number(15);modify swdm number(15);删除列删除列 Alter Table T_ghdwml Drop Column swdm;例:对已经存在的学生表增加一新的列(入学成绩)对已经存在的学生表增加一新的列(入学成绩)alter table student add stu_score number(3);例:删除学生表中的入学成绩删除学生表中的入学成绩 alter table student drop column stu_score;2.3.3 插入语句INSERT INSERT 语句可以完成对表、视图进行数据插入。语句可以完成对表、视图进行数据插入。INSERT INTO user.tabledb_link INSERT INTO user.tabledb_link (column1,column2.)(column1,column2.)VALUES(express1,express2.);VALUES(express1,express2.);Insert into Insert into 表名表名1(1()Select Select From From 表名表名2 2;例例:插入插入1 1条记录于条记录于studentstudent表中。表中。INSERT into Student INSERT into Student VALUES(20026101,VALUES(20026101,李勇李勇,20,20,男男,计算机计算机););2.3.4 修改数据语句使用UPDATE语句修改表中的数据 格式:UPDATE table SET column=value,column=value WHERE condition;使用UPDATE语句应注意以下事项:如果要更新数值列,则可以直接提供数值;如果要更新字符列或日期列,则数据必须用单引号。当更新数据时,数据必须要与列的数据类型匹配。当更新数据时,数据必须要满足约束规则,例:将例:将studentstudent表中学号为表中学号为2002610120026101的学生年龄修改的学生年龄修改为为1818。update student set stu_age=18 update student set stu_age=18 where stu_no=20026101;where stu_no=20026101;将所有选修课程号为将所有选修课程号为a01a01的成绩加的成绩加2 2分,所有分,所有选修课程号为选修课程号为a03a03的成绩加的成绩加3 3分。其余加分。其余加1 1 分。分。update sc set grade=update sc set grade=case cou_no case cou_no when a01 then grade+2 when a01 then grade+2 when a03 then grade+3 when a03 then grade+3 else grade+1 else grade+1 end;end;2.3.5 删除数据使用DELETE语句可从表中删除现有的数据。用户确定要删除表的所有数据,使用TRUNCATE TABLE 语句速度更快。DELETE语句的操作可以回退,但TRUNCATE TABLE语句的操作不能回退。DELETE FROM DELETE FROM 表名表名 WHERE WHERE 条件条件;如果不用where子句,则会删除表中所有的行,使用where子句只删除满足条件的行。例:例:删除选修课程号为a01学生的成绩记录 delete from sc where cou_no=a01;2.3.6 索引索引主要目的是加快数据的读取速度和完整性检查。一般在数据库设计阶段的与数据库结构一道考虑。应用系统的性能直接与索引的合理直接有关。Oracle 9i采用了多种新颖的索引算法以显著地提高Oracle查询数据库的速度。索引按功能分类唯一索引主关键字索引一般索引。索引按索引对象分类:单列索引(表单个字段的索引)多列索引(表多个字段的索引)函数索引(对字段进行函数运算的索引)创建索引的语法形式:CREATE UNIQUE INDEX index_nameON table_name(column_name,column_name);其中:UNIQUE:指定索引所基于的列(或多列)值必须唯一;缺省索引是非唯一索引。index_name:表示创建的索引名字;table_name:指要创建索引的表;删除索引 当不需要时可以将索引删除以释放出硬盘空间。DROP INDEX indexname例:例:删除Student表的Stusname索引。DROP INDEX Stusname;注意:删除索引时,系统会从数据字典中删去有关该索引的描述。当表结构被删除时,有其相关的所有索引也随之被删除。2.3.7 视图视图是原始数据库数据的一种变换,是查看表中数据的另外一种方式。可以将视图看成是一个移动的窗口,通过它可以看到感兴趣的数据。视图是从一个或多个实际表中获得数据的,这些表的数据存放在数据库中。那些用于产生视图的表叫做该视图的基表。一个视图也可从另一个视图产生。视图是数据库对象,它的定义存放在数据库数据字典中。建立视图语法:create replace view 视图名column_name1,column_name2 as查询子句 with read only;例:对用户经常要用到的商品目录、供货单位等数据建立视图。例1:Create View v_spml as Select spbm,spmc,xsjg from T_spml;例2:Create View v_spxx as Select x.ghdw,y.dwmc,spbm,spmc from T_spml x,T_ghdwml y where x.ghdw=y.dwbm;视图的撤消 DROP VIEW 视图查询对视图的查询与表的查询相同。例:查询供货单位编码是G90008的商品信息。select*from v_spxx where grade85;视图更新对视图的更新最终要转换为对基本表更新。如果视图从单个基表中选择,投影操作导出且包含关系的主码或某个候选码,则可执行更新操作,但不提倡更新视图,容易破坏数据完整性。2.3.8 同义词(SYNONYM)同义词是数据对象的别名。在本地数据库中同义词可以表示表、视图、序列、程序、函数或包等数据对象,也可以通过链路表示另一个数据库的对象。同义词可以使多个用户使用同一个对象而不用将模式(Schema)作为前缀加在对象的前面,从而简化授权方面的操作。同义词有公有和私有两种。同义词创建语法:create public synonym 同义词 for 用户名.表名database_link;不同用户拥有的对象创建的同义词,首先要进行授权。例:创建私有的同义词:grant all on emp to lll;授权。connect lll/lllw;改变登入用户。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语句自动提交事务(连同在它之前的DML命令一起提交)、用户退出(系统自动发出commit命令)、系统崩溃。Oracle中事务处理提供以下好处:事务可以保证Oracle数据库所有用户的读一致性。事务可以预先预览改变,然后再永久保存到Oracle数据库中。事务控制命令Commit 事务提交。永久改变数据库内容。Rollback 事务回滚。取消本次执行的一组DML语句。2.4 查询查询语句的基本语法如下:SELECT ALL|DISTINCT,FROM,WHERE HAVING GROUP BY ,ORDER BY,ASC|DESC ;2.4.1 简单查询简单查询仅涉及一个表或视图,是一种最简单的查询操作,可以分为如下几种:查询指定的列无条件查询条件查询对查询结果排序对查询结果分组 使用函数查询所有列或指定列【例】查询在商品目录中所有的供货单位编码(消除取值重复的行)。SQL SELECT DISTINCT ghdw FROM T_spml;无条件查询 Select*from t_spml;条件查询【例】查询销售价格=100元以上的商品编码、商品名称,销售价格。Select spbm,spmc,xsje from T_spml where xsjg=100;例:Select*from t_spml where spbm=941001;Select*from t_spml where spbm like 95%;Select*from t_spml where spbm in(931001,961001);对查询结果排序 Select*from t_spml where spbm=941001 order by ghdw,spbm desc;分组查询 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.2常用函数函数是一种有零个或多个参数并且有一个返回值的程序。在SQL中Oracle内建了一系列函数,这些函数都可被称为SQL或PL/SQL语句,函数主要分为两大类:单行函数和组函数。单行字符函数 单行数字函数 单行日期函数 单行转换函数组函数(集合函数)一、单行函数数值函数 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;USER语法:USER 返回当前Oracle用户名。组函数 取值选项 ALL在组函数取所有的值,包括重复的值;DISTINCT重复值只取一个。函数 COUNT语法:COUNT(ALL|DISTINCT 表达式)返回查询行数;MAX语法:MAX(表达式)返回最大值;MIN语法:MIN(表达式)返回最小值;SUM语法:SUM(表达式)返回表达式值的和。2.4.3 高级查询高级查询多表连接oracle允许使用表连接来实现在一个查询中显示多个表的数据,连接两个或多个表中的数据所需的条件是:两个表中有相同列(列名可以相同或不同)。连接查询中用来连接两个表的条件称为连接条件或连接谓词,连接可以分类为等值连接、非等值连接、自然连接、外连接、自身连接。格式:.等值连接:等值连接:当比较运算符是当比较运算符是“=”“=”时,称为等值连接。时,称为等值连接。【例】查询商品的编码、名称、产地及库存数量。【例】查询商品的编码、名称、产地及库存数量。Select x.spbm,spmc,spdj,yyslSelect x.spbm,spmc,spdj,yysl from t_spkcmx x,t_spml y from t_spkcmx x,t_spml y where ghdw=G90007 and x.spbm=y.spbm;where ghdw=G90007 and x.spbm=y.spbm;复合条件连接复合条件连接【例】查询商品的编码、名称、产地、库存数量及供【例】查询商品的编码、名称、产地、库存数量及供 货单位。货单位。Select x.ghdw,dwmc,x.spbm,spmc,spdj,yys Select x.ghdw,dwmc,x.spbm,spmc,spdj,yys from t_spkcmx x,t_spml y,t_ghdwml z from t_spkcmx x,t_spml y,t_ghdwml z where ghdw=G90007 and where ghdw=G90007 and x.spbm=y.spbm and x.ghdw=z.dwbm;x.spbm=y.spbm and x.ghdw=z.dwbm;自然连接自然连接是两个表之间根据同名列使用 natural join 进行连接。【例】查询商品的编码、名称、产地及库存数量。查询商品的编码、名称、产地及库存数量。Select spbm,spmc,spdj,yyslSelect spbm,spmc,spdj,yysl from t_spkcmx natural join t_spml from t_spkcmx natural join t_spml where ghdw=G90007;where ghdw=G90007;外连接外连接与普通连接的区别在于:普通连接操作只输出满足连接条件的元组,外连接操作以指定表为连接主体,将主体表中不满足连接条件的元组一并输出。可以使用外连接查看不满足连接条件的那些记录,外连接的运算符是符号+,+被放置在缺失记录的那一边,但不能两边都放。它可以是以下两种形式:左外连接(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(+);自身连接 在特殊情况下,可能需要只用一个表进行连接。用表的两个副本连接表中的数据,这种连接称为自身连接。因为自连接查询仅涉及某张表与其自身的连接,所以在FROM子句中该表名出现两次,分别用两个不同的别名表示。Select x.spbm,x.spmc,y.xsjg from t_spml x,t_spml y where x.xsjg=y.xsjg;2.4.3 子查询子查询是嵌入在select、update或delete命令中的标准select语句,它提供父语句的from、where或having部分的数据,限制父查询的所选输出,产生某种中间结果集。SELECT表达式 FROM table|查询子句WHERE表达式 operator 表达式|(查询子句);其中 表达式为列名、变量、常数运算符等组成的式子;operator为比较运算符。比较运算符分为两种:单行运算符(、=、=、=、)多行运算符(IN、ANY、ALL)。单行子查询单行子查询是只返回一个值的子查询,在主查询执行以前,它先被执行,且只执行一次,返回的结果值用于限定主查询。【例】查询与商品编码9650005的商品供货单位相同的所有商品信息。Select *from T_spml where ghdw=(select distinct ghdw from T_spml where spbm=9650005);【例】查询供货单位G90028的商品最高价格更低的所有商品信息。Select *from T_spml where xsje、=、=、)。谓词语义:ANY:任意一个值。ALL:所有值 ANY 大于子查询结果中的某个值 ALL 大于子查询结果中的