数据库设计与开发SQL语句

上传人:m**** 文档编号:578539027 上传时间:2024-08-24 格式:PPT 页数:43 大小:209.50KB
返回 下载 相关 举报
数据库设计与开发SQL语句_第1页
第1页 / 共43页
数据库设计与开发SQL语句_第2页
第2页 / 共43页
数据库设计与开发SQL语句_第3页
第3页 / 共43页
数据库设计与开发SQL语句_第4页
第4页 / 共43页
数据库设计与开发SQL语句_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《数据库设计与开发SQL语句》由会员分享,可在线阅读,更多相关《数据库设计与开发SQL语句(43页珍藏版)》请在金锄头文库上搜索。

1、1.3 1.3 SQLSQL自从20世纪80年代以来,SQL就是一个通用的、功能极强的关系数据库语言。现在,SQL语言正从关系形式(ANSISQL-92标准)转向对象-关系形式(ANSISQL-99标准,1999年颁布)。SQL语言是1974年由Boyce和Chamberlin提出。1986年10月美国国家标准局(ANSl)批准了SQL作为关系数据库语言的美国标准。同年公布了SQL标准文本(简称SQL-86)。1987年6月国际标准化组织(ISO)也采纳了此标准。1989年,美国国家标准局(ANSI)采纳了新的规范SQL-89标准,取代SQL-86,同时SQL-89标准也被国际标准化组织(IS

2、O)采纳。1992年,ANSI/ISO颁布了SQL2版本,标准的名称为SQL-92。SQL-92分称几个顺序级别:从代表SQL-89最小扩展集的“Entry”到“Intermediate”和“Full”。完成于己于1999年的SQL-99具有更加高级的特征(包括对象-关系特性),亦称SQL3。郭文明2003.06.051.3 1.3 SQLSQL主要的几个数据库生产厂商并不可能完全遵守SQL-99(以及更老的SQL-92)。我们一般更加关注在产品中已经实现的SQL-99特征。 1.3.1 SQL特点 1.3.2数据定义 1.3.2.1 SQL模式的创建和删除 1.3.2.2 SQL提供的基本数

3、据类型 1.3.2.3 定义、删除与修改基本表 1.3.2.4 建立与删除索引 1.3.2.5 视图的创建和删除 1.3.3 数据查询 1.3.3.1 简单查询 1.3.3.2 子查询 1.3.3.3 UNION运算和FOR ALL条件 1.3.3.4 高级SQL语法 1.3.3.5 集合函数 1.3.3.6 行分组 1.3.4 数据更新 1.3.4.1 插入数据 1.3.4.2 修改数据 1.3.4.3 删除数据郭文明2003.06.051.3.1 1.3.1 SQLSQL特点特点1)综合统一 2)高度非过程化 3)面向集合的操作方式 4)以同一种语法结构提供两种使用方式5)语言简捷,易学易

4、用 和关系代数相比,就查询能力而言,SQL并没有根本的改进,在关系代数查询方面的经验可以成为用SQL来实现查询的良好借鉴。在构造查询时SQL的select语句比关系代数要灵活.郭文明2003.06.051.3.21.3.2数据定义数据定义SQL的数据定义功能包括对模式(Schema)、表(关系,Table)、视图(View)和索引(Index) 的创建、删除和修改操作。如下表所示。操作对象操 作 方 式创 建删 除修 改模式CREATE SCHEMADROP SCHEMA表CREATE TABLEDROP TABLEALTER TABLE视图CREATE VIEWDROP VIEW索引CREA

5、TE INDEXDROP INDEX郭文明2003.06.051.3.2.1 1.3.2.1 SQLSQL模式的创建和删除模式的创建和删除在SQL-99中,模式是表、索引及其他数据库对象的集合。模式名通常是一个用户名。在Core SQL-99和当前大多数产品中,当用户的数据库帐户建立时,其模式在用户名之后给出,他们不能再建立其他模式。SQL-99的扩展特性允许用户建立附加模式,一个SQL模式由模式名和模式拥有者的用户名或账号来确定。SQL模式的创建可用CREATE语句实现,其句法如下: CREATE SCHEMACREATE SCHEMA AUTHORIZATION 目前只有DB2 UDB允许

6、用户建立附加模式。其它产品中模式用用户名替代。 郭文明2003.06.051.3.2.1 1.3.2.1 SQLSQL模式的创建和删除模式的创建和删除在SQL中还有一个“目录”概念。目录是SQL环境中所有模式的集合。包含数据库中定义的对象的信息的表,由系统维护。ORACLE叫数据字典,DB2 UDB叫目录表,INFORMIX叫系统目录。目录表在建立数据库时建立,用户不能更新,但DBA可以用select获取这些信息。当一个SQL模式及其所属的基本表、视图等元素都不需要时,可以用DROP语句撤消这个SQL模式。DROP语句的句法如下: DROP SCHEMADROP SCHEMA CASCADE|

7、RESTRICT郭文明2003.06.051.3.2.2 1.3.2.2 SQLSQL提供的基本数据提供的基本数据类型型SQL-99ORACLEINFORMIXDB2UDB说明Cchar(n)char(n)n=4000char(n)n=32767char(n)n=254定长字符型chararrayn+1varchar(n)varchar(n)varchar2(n)varchar(n)varchar(n)变长字符型chararrayn+1numeric(p,d)decimal(p,d)numeric(p,d)decimal(p,d)number(p,d)numeric(p,d)decimal(p

8、,d)numeric(p,d)decimal(p,d)定点数,由p位数字(不包括符号、小数点)小数点后面有d位数字无smallintsmallintsmallintsmallint短整数shortintintegerintegerintegerinteger长整数int,longintrealrealrealreal浮点数floatdoubleprecision,float,float(n)doubleprecision,number,floatfloat(n)doubleprecision,floatdoubleprecision,double,float,float(n)取决于机器精度的双

9、精度浮点数至少为n位精度double郭文明2003.06.051.3.2.3 1.3.2.3 定义、删除与修改基本表定义、删除与修改基本表建立数据库最重要的一步就是定义一些基本表。SQL语言使用CREATE TABLE语句定义基本表,一般格式如下: CREATE TABLECREATE TABLE (列级完整性约束条件 ,列级完整性约束条件 ,);例:CREATE TABLE Student (Sno CHAR(5) PRIMARY KEY, Sname CHAR(8) NOT NULL, Sage SMALLINT CHECK(Sage BETWEEN 17 AND 22), Ssex CH

10、AR(2) CHECK(Ssex IN(男,女), Sdept CHAR(20) DEFAULT(软件学院); 创建学生表:Sno为主键(非空唯一),Sname非空,Sage在17到20之间取值,Ssex只能取男或女,Sdept默认值为软件学院.郭文明2003.06.051.3.2.3 1.3.2.3 定义、删除与修改基本表定义、删除与修改基本表实际使用时要有用户ID和密码,进入交互式环境,才能完成数据库操作。修改基本表 ALTER TABLEALTER TABLE ADD完整性约束 DROP MODIFY; 其中是要修改的基本表,ADD子句用于增加新列和新的完整性约束条件,DROP子句用于删

11、除指定的完整性约束条件,MODIPY子句用于修改原有的列定义,包括修改列名和数据类型。郭文明2003.06.051.3.2.3 1.3.2.3 定义、删除与修改基本表定义、删除与修改基本表删除基本表 DROP TABLE 基本表一旦删除,表中的数据、此表上建立的索引和视图都将自动被删除掉。因此执行删除基本表的操作一定要格外小心。注意:有的系统,如Oracle,删除基本表后建立在此表上的视图定义仍然保留在数据字典中。但是,当用户引用时就报错。 郭文明2003.06.051.3.2.41.3.2.4建立与建立与删除索引除索引索引的功能表现在以下3方面。 (1)使用索引可以明显地加快数据查询的速度

12、(2)使用索引可保证数据的唯一性 (3)使用索引可以加快连接速度建立索引的原则 (1)索引的建立和维护由DBA和DBMS完成 (2)大表应当建索引,小表则不必建索引 (3)对于一个基本表,不要建立过多的索引 (4)根据查询要求建索引郭文明2003.06.051.3.2.41.3.2.4建立与建立与删除索引除索引CREATE UNIQUE CLUSTER INDEX ON (, );如果数据增加删改频繁,系统会花费许多时间来维护索引。这时,可以删除一些不必要的索引。 DROP INDEX ;郭文明2003.06.051.3.2.51.3.2.5视图的创建和删除视图的创建和删除视图是关系数据库系统

13、提供给用户以多种角度观察数据库中数据的重要机制。视图一经定义,就可以和基本表一样被查询、被删除,我们也可以在一个视图之上再定义新的视图,但对视图的更新(增加、删除、修改)操作则有一定的限制。 CREAT VIEWCREAT VIEW (列名,.) AS WITH CHECK OPTION; 其中子查询可以是任意复杂的SELECT语句,但通常不允许含有ORDER BY子句和DISTINCT短语。WITH CHECK OPTION表示对视图进行UPDATE,INSERT和DELETE操作时要保证更新、插入或删除的行满足视图定义中的谓词条件(即子查询中的条件表达式)。 郭文明2003.06.051.

14、3.2.51.3.2.5视图的创建和删除视图的创建和删除DROP VIEW ;视图删除后视图的定义将从数据字典中删除。但是由该视图导出的其他视图定义仍在数据字典中,不过该视图已失效。用户使用时会出错,要用DROP VIEW语句将它们一一删除。DBMS执行CREATE VIEW语句的结果只把视图的定义存入数据字典,并不执行其中的SELECT。在关系数据库中,并不是所有的视图都是可更新的,因为有些视图的更新不能的有意义的转换成对基本表的更新。行列子集视图是可更新的。各个DBMS对视图的更新有自己的规定。郭文明2003.06.051.3.3 1.3.3 数据数据查询数据查询是数据库的核心操作。SQL

15、语言的数据查询只有一条SELECT语句: SELECTSELECTALL|DISTINCT*|,. FROMFROM, WHERE GROUP BY,HAVING ORDER BYASC|DESC, ASC|DESC ;郭文明2003.06.051.3.3 1.3.3 数据数据查询Select语句的执行过程可以理解为: 首先,对FROM子句中的所有表做关系乘积 接着,删除不满足WHERE子句的行 根据GROUP BY子句对剩余的行进行分组 然后删除不满足HAVING子句的组 求出SELECT子句选择列表的表达式的值 若有关键词DISTINCT存在,则删除重复的行Select中的标识符:一般的S

16、QL标识符是大小写无关的。实际上SQL在解释以前会把它们转化为大写形式。一个标识符必须以一个字母打头,Entry SQL-92和Core SQL-99将一个标识符字节数限制在18个以内。郭文明2003.06.051.3.3 1.3.3 数据数据查询表达式可以是数值表达式、字符串表达式和日期表达式等。 数值表达式由常数、表属性、算术运算符、算术函数所组成。 字符串表达式由常数、表属性、字符串运算符、字符串函数所组成。 日期表达式由常数、表属性、日期运算符、日期函数所组成 WHERE中使用谓词来表示条件。一般情况谓词运算结果为TRUE或FALSE,但如果遇到空值时,可能为UNKNOWN。SQL查询

17、的一个争议点即:对于同一个查询会存在众多不同的构造方法。郭文明2003.06.051.3.3 1.3.3 ORACLEORACLE、INFORMIXINFORMIX、DB2 UDBDB2 UDB 中的中的一些一些数学函数数学函数名称描述结果abs(n)mod(n,b)sqrt(n)n的绝对值,n为数值型n被b除后得到的余数。n,b为整数n的平方根,n为整数或浮点数另外,三角函数、指数函数、对数函数、幂函数和round(n)数值类型整数浮点郭文明2003.06.051.3.31.3.3一些标准的和特定产品的串处理函数一些标准的和特定产品的串处理函数SQL-99中的描述ORACLEDB2UDBIN

18、FORMIX返回串长度(整数个字符)CHAR_LENGTH(str)返回子串,从m个开始取n个SUBSTRING(str)FORM m FOR(n)返回去掉左或右空格后得到的包含空格的串TRIM(LEADING|TRAILING|BOTH SETFROMstr)返回子串str2在str1中位置,如果指定n,则从n开始POSITION(str1 IN str2)字母小写LOWER(str)字母大写UPPER(str)length(str)substr(str,m,n)trim(leading|trailing|bothset from str),ltrim(str,set),rtrim(str,

19、set)instr(str1,str2,n)lower(str)upper(str)length(str)substr(str,m,n)ltrim(str);rtrim(str)posstr(str1, str2,n)lcase(str)ucase(str)length(str),char_length(str)substr(str,m,n),substring(str from m for n )trim(leading|trailing|bothset fromstr);lower(str)upper(str) 郭文明2003.06.051.3.3 1.3.3 SQL中的标准谓词中的标准谓

20、词谓词形式例子比较谓词BETWEEN谓词量化谓词IN谓词EXISTS谓词IS NULL谓词LIKE谓词expr1expr2|(subquery)expr1NOT BETWEEN expr2 and expr3exprSOME|ANY|ALL(subquery)expr NOT IN (subquery)NOTEXISTS(subquery)colname IS NOTNULLcloname NOT LIKE valESCAPE valp.price(subquery)c.discnt between 10.0 and 12.0c.discnt=all (subquery)pid in (sel

21、ect pid from orders)exist(select * )c.discnt is nullcname like A%郭文明2003.06.051.3.3.1 1.3.3.1 简单查询简单查询例:检索定货记录中所有pid值: select pid from orders -结果中有重复的pid select distinct pid from orders -结果中pid唯一 select缺省为all,distinct没有出现时允许重复行,缺省情况不遵守行唯一性规则。例:在orders表上生成每笔业务的利润profit(收入减去60%的成本、顾客的折扣以及代理商的酬金): sele

22、ct ordno,x.cid,x.aid,x.pid,.40*(x.qty*p.price)- .01*(c.discnt+a.percent)*(x.qty*p.price) as profit from orders as x,customer as c,agents as a,products as p where c.cid=x.cid and a.aid=x.aid and p.pid=x.pid;乘积投影选择郭文明2003.06.051.3.3.1 1.3.3.1 简单查询简单查询注:1)SQL-99规定FROM子句中执行连接运算,但大多数产品通过笛卡尔积运算并且在WHERE子句中

23、包含表示参与连接的列值相等的条件来模拟连接运算,具体实现方法(执行计划,查询优化)各不相同。 2)FROM中AS被省略,SQL仍能识别表别名。ORACLE和INFORMIX使用别名或表别名,DB2 UDB使用相关名。 3)列表达式的列名可以通过AS指明,ORACLE中称列别名,INFORMIX中称显示标签,DB2 UDB中简单称为列名。如果没有AS,ORACLE中将完整表达式文本作为列名。郭文明2003.06.051.3.3.2 1.3.3.2 子查询子查询每个Select查询都会生成一张表,但我们不能像关系代数表达式那样任意将一个Select语句嵌入另一个Select语句。这是SQL与关系代

24、数的一个很重要的不同点。例如:from子句中不能出现select(SQL-99标准已去掉该限制,但数据库产品中并未完全实现),where子句中显然可以出现select。出现在另一个select语句之内的select语句形式称为子查询。一个子查询能以许多种方式出现在另一个select语句的WHERE子句条件中。郭文明2003.06.051.3.3.2 1.3.3.2 子查询子查询1)ININ谓词(NOT INNOT IN) 例:求通过住在北京或上海的代理商订货的顾客的姓名和折扣. select cname,discnt from customers where cid in (select ci

25、d from orders where aid in (select aid from agents where city in (北京,上海); 例:求由住在北京的顾客和住在北京的代理商组成的所有订货ordno. select ordno from orders where (cid,aid) in (select cid,aid from customers c,agents a where c.city=北京 and a.city=北京); 以上两例为不相关查询不相关查询:内层子查询独立于外层的select. 例:找出订购了产品p05的顾客的名字. select distinct cna

26、me from customers where p05 in (select pid from orders where cid=customers.cid) 本例为相关查询相关查询:子查询使用外层select语句提供的数据.SQL-99允许,有些系统不允许.郭文明2003.06.051.3.3.2 1.3.3.2 子查询子查询2)量化比较谓词: exprSOME|ANY|ALLSOME|ANY|ALL (subquery) 为比较运算符,=,=,=。SOME和ANY含义相同,SOME是最新版本的推崇形式。 例:找出佣金百分率最小的代理商aid。 select aid from agents

27、where percent =all (select percent from agents); 例:求出满足以下条件的顾客cid:该顾客的discnt小于任一住在北京的顾客的discnt. 错误:select cid from customer where discnt any (select discnt from customers where city=北京); 正确: select cid from customer where discnt all (select discnt from customers where city=北京);注意any不是任意郭文明2003.06.05

28、1.3.3.2 1.3.3.2 子查询子查询3)EXISTSEXISTS谓词:EXISTS (Subquery)为真当且仅当 子 查 询 返 回 一 个 非 空 集 合 ;NOT EXISTS(Subquery)为真当且仅当返回集合为空. 例:求出既订购了产品p01有订购了产品p07的顾客cid. 关系代数:cid(pid=p01(O)cid(pid=p07(O)selectdistinctcidfromordersxwherepid=p01andexists(select*fromorderswherecid=x.cidandpid=p07);或selectdistinctx.cidfrom

29、ordersx,ordersywherex.pid=p01andx.cid=y.cidandy.cid=p07; EXISTS的查询一般能找到等价的其他查询形式。 使用和不使用exists交运算郭文明2003.06.051.3.3.2 1.3.3.2 子查询子查询NOT NOT EXISTSEXISTS确实为我们带来了一些新的功能。notexists能被用来实现关系代数的MINUS运算。如果R和S是两个兼容表(属性相同A1An),R-S用SQL计算:selectA1AnfromRwherenotexists(select*fromSwhereS.A1=R.A1andandS.An=R.An);

30、例:找出没有通过代理商a03订货的顾客cid. 关系代数:cid(O)cid(aid=a03(O) selectdistinctcidfromordersxwherenotexists(select*fromorderswherecid=x.cidandaid=a03);差运算郭文明2003.06.051.3.3.3 1.3.3.3 UNIONUNION运算和运算和FOR ALLFOR ALL条件条件为了提供关系代数的运算,SQL使用UNION: subquery UNION ALLUNION ALL subquery 例:包含了顾客所在的或代理商所在或两者皆在的城市名单。 selectcit

31、yfromcustomersunionselectcityfromagents; 或selectcityfromcustomersunionallselectcityfromagents;行不重复行重复运算郭文明2003.06.051.3.3.3 1.3.3.3 UNIONUNION运算和运算和FOR ALLFOR ALL条件条件SQL中没有等价的运算。如果面临的查询“要要求求被被检检索索的的对对象象集集合合必必须须符符合合所所有有这这类类关关键键词词的的条条件件”(”(FOR FOR ALLALL)时,关系代数要用到除运算。SQL中可以:1.表述要检索的候选对象的一个反例(至少一个对象不符合

32、条件),.并建立select语句(选出所有反例);2.建立表示这类反例不存在的条件(not exists);3.建立最终select。 例:求通过住在北京的所有代理商订了货的顾客cid. 1.反例:住在北京但没有为所求顾客c.cid订货的代理商: select*fromagentswherea.city=北京andnotexists(select*fromordersxwherex.cid=c.cidandx.aid=a.aid) 2.反例不存在:notexists(反例) 3.最终:selectc.cidfromcustomerswherenotexists(select*fromagent

33、swherea.city=北京andnotexists(select*fromordersxwherex.cid=c.cidandx.aid=a.aid);运算郭文明2003.06.051.3.3.3 1.3.3.3 UNIONUNION运算和运算和FOR ALLFOR ALL条件条件例:找出订购了所有被顾客c006订购的商品的顾客的cid. 反例:被c006订购但没有被c.cid订购的商品:selectp.pidfromproductspwherep.pidin(selectpidfromordersxwherex.cid=c006)andnotexists(select*fromorder

34、sywherey.pid=p.pidandy.cid=c.cid)反例不存在:notexists(selectp.pidfromproductspwherep.pidin(selectpidfromordersxwherex.cid=c006)andnotexists(select*fromordersywherey.pid=p.pidandy.cid=c.cid)最终:selectcidfromcustomerswherenotexists(selectp.pidfromproductspwherep.pidin(selectpidfromordersxwherex.cid=c006)and

35、notexists(select*fromordersywherey.pid=p.pidandy.cid=c.cid);运算被c006订购没有被c.cid订购郭文明2003.06.051.3.3.4 1.3.3.4 高级高级SQLSQL语法语法以下介绍的高级SQL运算符不是Entry SQL-92的部分,但几乎都属于SQL-99,目前产品中不一定支持,但可能出现在未来的数据库产品中。1)INTERSECT(INTERSECT() )和EXCEPT(EXCEPT() )运算符 SubqueryUNION ALL|INTERSECT ALL|EXCEPT ALL Subquery 注:Core S

36、QL-99只有EXCEPT而没有EXCEPT ALL。 两个子查询从左到右的列类型是兼容的,即可以并、交、差。如类型char(5)和类型char(10)的列运算,结果为char(10). ORACLE提供UNION、UNION ALL、INTERSECT、MINUS(EXCEPT)。 但 不 支 持 INTERSECT ALL或MINUS ALL。DB2 UDB都支持。ALL考虑重复行及数目郭文明2003.06.051.3.3.4 1.3.3.4 高级高级SQLSQL语法语法例: (Q UNION ALL Q UNION ALL Q) INTERSECT ALL (Q UNION ALL Q)

37、 结果是(Q UNION ALL Q),包含两个重复行。 (Q UNION ALL Q UNION ALL Q) INTERSECT (Q UNION ALL Q) 结果是(Q),没有包含重复行。 (Q UNION ALL Q UNION ALL Q) EXCEPT ALL (Q UNION ALL Q) 结果是(Q),没有包含重复行。郭文明2003.06.051.3.3.4 1.3.3.4 高级高级SQLSQL语法语法2)连接形式通 用 形 式 : FROMtablenameAScorr_name,SQL-99:FROM后面还可以是:一般形式:tablenameAS corr_name(co

38、lname,colname)子查询:(subquery) AS corr_name(colname,colname)显式连接: table1 INNER|LEFT|RIGHT|FULLOUTER JOIN table2 ON condition显然SQL-99中允许子查询出现在FROM子句中。以上三种形式在产品中并没有完全实现。使用时可以试用或帮助。可以是视图名ORACLE不能有AS允许为表的列重新命名允许是子查询,此时别名必须内连,左连,右连,外连连接条件郭文明2003.06.051.3.3.4 1.3.3.4 高级高级SQLSQL语法语法例:检索至少订购了一件价格低于0.5的商品的顾客姓名

39、。 select distinct cname from (orders o join products p on o.pid=p.pid) join customers c on o.cid=c.cid where p.price0.5;注: ORACLE仅提供左连和右连,而且语法与标准SQL也不同: SELECT FROM T1,T2 WHERE T1.c1(+)(+)=T2.c2|T1.c1=T2.c2(+)(+) AND conditionT2保留所有行与T1连不上的用NULL郭文明2003.06.051.3.3.5 1.3.3.5 SQLSQL中的集合函数中的集合函数SQL中称集合函

40、数(set function),ORACLE称组函数(group function),DB2 UDB称列函数(column function),INFORMIX称聚集函数(aggregate function).集合函数语法:SET_FUNCTION (ALL|DISTINCT col)|COUNT(*)注:ALL时包括重复行,DISTINCT不包括重复行。 WHERE子句比较操作中不能使用集合函数.如discnt=2;如果没有GROUP BY只有HAVING,则整个结果为一组.基本SQL select语句的通用形式不允许集合函数的嵌套.但可以有变通的GROUP BY形式. 例:求所有代理商的

41、最大销售额的平均值.郭文明2003.06.051.3.3.6 1.3.3.6 SQLSQL中行的分组中行的分组例:求所有代理商的最大销售额的平均值. 错: select avg(select max(dollars) from orders group by aid); 对: SQL高级形式,ORACLE中可行:select avg(t.x) from (select aid,max(dollars) as x from orders group by aid) t; 常用作法: creat view t as (select aid,max(dollars) as x from orders

42、 group by aid); select avg(t.x) from t;郭文明2003.06.051.3.4 1.3.4 SQLSQL数据更新数据更新SQL中数据更新包括插入数据(Insert)、修改数据(Update)和删除数据(Delete)三条语句. 1.3.4.1 1.3.4.1 插入数据插入数据 INSERT INTOINSERT INTO (,) VALUES(expr1|NULL,expr2|NULL.)|Subquery 将新元组插入指定表中,其中新记录属性列1的值为expr1,属性列2的值为expr2.。INTO子句中没有出现的属性列,新记录在这些列上将取空值。还可通过

43、子查询批量插入数据。在表定义时说明了NOT NULL的属性列不能取空值,否则会出错。郭文明2003.06.051.3.4 1.3.4 SQLSQL数据更新数据更新如果INTO子句中没有指明任何列名,则新插入的记录必须在每个属性列上均有值,给定值对应于表定义的字段顺序。子查询不需要用括号括起来。 insert into my_c select * from customers where city=北京; insert into my_c (select * from customers where city=北京); 1.3.4.1 1.3.4.1 修改修改数据数据 UPDATE UPDATE

44、 SET = ,=. WHERE ;与customers表结构一样错误郭文明2003.06.051.3.4 1.3.4 SQLSQL数据更新数据更新其功能是修改指定表中满足WHERE子句条件的元组。其中SET子句给出expr的值用于取代相应的属性列值。如果省略WHERE子句,则表示要修改表中的所有元组。只有一个表可以作为UPDATE的对象。有些系统中不允许在SET子句中使用限定属性名。 update agents set agents.percent=1.1*agents.percent Entry SQL-92中SET子句中不能用子查询,但SQL-99及ORACLE、DB2 UDB等都支持。

45、 用customers表中最新discnt更新my_c中discnt update my_c set discnt=(select discnt from customers where cid=my_c.cid)错误郭文明2003.06.051.3.4 1.3.4 SQLSQL数据更新数据更新删除语句的一般格式为: DELETE FROMDELETE FROM WHERE 从指定表中删除满足WHERE子句条件的所有元组。如果省略WHERE子句,表示删除表中全部元组,但表的定义仍在字典中。DELETE语句删除的是表中的数据,而不是关于表的定义。 删除条件中可以有子查询 删除总订货金额小于600

46、的代理商: delete from agents where aid in (select aid from orders group by aid having sum(dollars)600); 增删改操作只能对一个表操作。因此在执行增删改操作时,要注意数据库中数据的一致性。 郭文明2003.06.05作业:作业:1.检索佣金百分率大于最小百分率的代理商aid.2.求通过住在北京或上海的代理商订货的顾客cid.(使用子查询和不使用子查询两种)3.R、S和T具有相同的属性列A1An,不用高级SQL来实现关系表达式(R UNION S) MINUS T.4.求出没有为任何住在北京的顾客订购任何在天津生产的产品的代理商的aid.5.没有一个包含GROUP BY子句的查询会返回重复行,这一命题为真吗?如果为真,解释原因;否则,给出反例.6.说出你所用到DBMS和其中的SQL语句,他们与讲课时的不一样或者不能用.郭文明2003.06.05

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号