1.DISTINCT、top
2.convert
3.查询、更新、管理
4.主键、外键
5.ROLLBACK TRAN、COMMIT TRAN
6.sp_renamedb
8.identity
9.插入数据的列数必须和表中列数相等
10.空
12.truncate
14.原子性、一致性、隔离性、永久性
16.count、avg、len、substring
17.cast
18.windows
19.物理数据表
20.<>、!=
Ⅱ SQL数据查询练习
--1.1创建新表 score
create table score
(
[学号] varchar(10)
,[课程号] varchar(10)
,[成绩] float
)
--1.2插入新表的值
insert into score values(103,'3-245',86)
insert into score values(105,'3-245',75)
insert into score values(109,'3-245',68)
insert into score values(103,'3-105',92)
insert into score values(105,'3-105',88)
insert into score values(109,'3-105',76)
insert into score values(101,'3-105',64)
insert into score values(101,'3-105',64)
insert into score values(101,'6-166',85)
insert into score values(107,'6-166',79)
insert into score values(108,'6-166',81)
--1.3 按排列顺序查看创建的表的内容
select* from score order by [课程号] asc,[成绩] desc --这样查看不舒服,可以修改下,如下面这句:
select [课程号],[成绩],[学号] from score order by [课程号] asc,[成绩] desc
--1.4
select y=sum([成绩]) --查找3-105 的分数之和,问题6-166的总分也是这个道理
, x=count([课程号]) from score where [课程号]='3-105'--查找3-105的课程个数
--计算平均分
select [3-105平均分]=y/x from(select y=sum([成绩])
, x=count([课程号]) from score where [课程号]='3-105')t
--1.5 查询成绩为定值的记录
select * from score where [成绩]='85' or [成绩]='86' or [成绩]='88'
--这里用and 的话没法查出内容,
--1.6 成绩在多少到多少的记录
select * from score where [成绩] between 60 and 79 order by [成绩] desc
--1.7查询每个学生的最高分
select * from score where [成绩] in(select max([成绩]) from score group by [学号])
--1.8课程最高分
select * from score where [成绩] in(select max([成绩]) from score group by [课程号])
--各门课程最高分大于90的就是在上面的内容上增加一个where 条件,自己尝试下
select * from(select * from score where [成绩] in(select max([成绩]) from score group by [课程号]))t
where [成绩]>=90
--注意数据库别名的用法't'
--1.9弟九个问题跳过,扯蛋的问题
--2.0课程次数及排序
select [课程号],[课程次数]=count([课程号]) from score group by [课程号] order by 课程次数 desc
--注意数据库自定义字段的使用
--升序 asc ,降序 desc
--2.1最后一个问题你自己考虑考虑,方法基本都在前面几个问题里面可以找到。
Ⅲ 谁有《电子商务数据库技术》的复习资料和练习题啊
第一章
1.电子商务是发生在开放网络上包含企业之间、企业和消费者之间的商业交易(狭义)。广义的定义除电子交易外,还包括利用计算机网络技术进行的全部商业活动。
2.电子商务的类型:1企业经营2网上银行3网上商店和网上购物4网络服务5其他,有关认证,海关税务等部门。
3.电子商务的基本框架:社会环境(公共政策、法律、规则等)、自然科技环境(文档、安全、网络协议的技术标准)和电子商务技术内容构成了电子商务应用平台的三个支柱。
4.基础通信网络是电子商务的硬件基础设施,承担着电子商务传输的任务。数据库承担着对商品信息的存贮、管理、查询、结算和处理等功能。
5.Web与数据库的集成有三种形式:运用Web发布数据,运用Web共享数据,用数据库驱动Web站点。
6.数据仓库是指大量散布在网络数据库中的数据进行组织,使之能形成一个可被检索、搜索、分析和报告的商业信息清单。
7.数据挖掘是指对庞大的历史交易数据进行再分析,以选定目标客户分辨市场定位发现新的商业机会。
8.企业建立电子商务网站的步骤:1选自ISP和ICP2注册域名和选侧接入方式3网页设计制作4创建和维护数据库5整合数据库和网站6在Web上使用数据库。
9.数据库驱动Web站点的核心是网络数据库软件。
10.数据库软件的类型:桌面型,中小型面向对象型,大型分布型,数据仓库型。(包含的种类)
11.电子商务Web站点数据库的特征:1对电子商务运营各个方面确保数据安全2对电子商务交易过程管理3对客户确认已经完成,但由于硬件软件故障而未能执行的交易可以弥补。
12.创建网络数据库的调件:1要符合企业电子商务的需要2能被某个数据库管理系统接受3具有较高的质量,便于维护,理解,效率高。
脚本语言用途:1可以处理用户在表单中输入的数据,编辑,复制他们到隐含域2可以增强界面效果3可以控制表单的提交合生成复杂的URL地址。
第二章数据库系统概论
1.数据库管理的三个阶段:人工管理阶段,文件系统阶段,数据库系统阶段。
2.按照模型发展划分:1第一代数据库管理系统,层次数据库和网状数据库管理系统2第二代数据库管理系统,关系数据库管理系统(RDMS)3第三代数据库管理系统,新一代,面向对象数据库管理系统。
3.数据模型是数据库系统的数学形式框架,是用来描述数据的一组该念和定义包括:数据的静态特征,数据的动态特征,数据的完整约束性。大体可分两类:面向值得数据模型和面向对象的数据模型。
4.在实际应用中,为了更好的描述现实世界中数据的特征,常常针对不同的场合或不同的目的,采用不同的方法描述数据特征,统称为数据模型。有如下几种:1概念数据模型,这是面向数据库用户的相士世界的数据模型,与具体的DBMS无关2逻辑数据模型,这是用户从数据库中所看到的数据模型,是具体的DBMS所支持的数据模型,既要面向用户又要面向系统3物理数据模型,描述数据在存储介质山的组织方式的数据模型,不仅与DBMS有关还和操作系统和硬件有关。
5.现实世界:是指存在于人脑之外的客观世界。
6.概念世界:是现实世界在人们脑中的反映,是对客观事物及其联系的一种抽象描述。
7.实体:我们把客观存在并可以相互区别的事物称为实体。同一类实体的集合称为实体集。属性的集合表征一种实体的类型,称为实体型。
8.属性:属性是用来描述实体的某一方面的特性。属性的具体取值为属性值。
9.实体标志符:如果某个属性或属性集合的值能够唯一的标志出实体集中的每一个实体,则可以选择该属性或属性集合作为实体标志符。
10.联系:实体集之间的对应关系称为联系,它反映现实世界的事物之间的相互关系。分实体内部各属性之间的联系和实体之间的联系。
机器世界:信息经过加工编码而进入机器世界,机器世界处理的对象是数据。
记录:相对应每一实体的数据叫记录。
字段:相对应属性的数据称为字段,或者数据项,又叫数据元素或初等项。
文件:相对应实体集的叫文件,它是同类记录的集合。
记录型:相对应于实体型的叫记录型。
关键字:相应于实体标志符的为关键字,关键字又称外码。
11.E-R模型:E-R图所描述的现实世界的信息结构称为组织模式或企业模式,同时把这种描述结果称为E-R模型。三要素:实体,属性,实体之间的联系。
12.联系抽象后可归结为三种:一对一联系,一对多联系,多对多联系。
13.作实体-联系图(E-R图)的步骤:1确定所有的实体集合2选择实体集应包含的属性3确定实体集之间的联系4确定实体集的关键字,用下划线在属性上表明关键字的属性集合5确定联系的类型,在用线将表示联系的菱形框联系到实体集时,在线旁边注明是1或n来表示联系的类型。
14.层次数据模型就是根据现实世界中存在的层次结构特点而提出的一种数据模型。用树型结构来表示实体之间联系的模型称为层次模型。
15层次模型只能表示一对多关系,引入虚拟记录型和指针转换多对多关系。
16.网状模型:用逻辑记录型来代替实体型。逻辑记录所包括的所有字段的名字及其类型描述了逻辑记录格式,这样一逻辑记录型为节点所形成的有向网络结构称为网状模型。网状模型中给每一个父结点及子节点之间的联系都指定名字,这种联系称为系。
17.关系模型:关系模型是同过表格数据来表示和实现两个实体之间的联系。关系就是二维表格,表格中的每一行称作一个元组,它相当于一个记录值;每一列是一个属性值,列可以命名,称为属性名,属性相当于记录中的数据项或字段值。关系是元组的集合。
18.关系有如下属性:表格中的每一列都是不可再分的基本属性;各列的名字不同,顺序不重要;行的次序无关紧要;关系中部不允许有完全相同的两行存在。.
19.域:域是值的有限集合。关系:笛卡尔积d1*d2*…dn 的任意一个子集称为在d1,d2…dn上的一个关系。用R(d1,d2,…dn)表示,R为关系名。n为关系的度或目。
20.关系模式:我们将关系名及其属性名集合称为关系模式,具体的关系是实例。
21.数据库模式;在支持关系模型的数据中,数据被看作是一个个的关系,描述数据库全部关系的一组关系模式称为关系的数据库模式。任何时刻数据库的所有具体的关系组成关系数据库的一个实例。
22.关系运算:选择σF(R) 投影ПAR 连接RfS
23.数据库系统由五个部分组成:硬件资源(CPU,内存,磁盘),软件资源(操作系统,数据库管理系统,高级编程语言),数据库结构,数据库管理员和用户。
24.数据库管理系统的三级模式结构:用户级数据库,概念几数据库,物理级数据库。
25.用户数据库是用户看到使用的数据库,所以又称用户视图,子模式,外模式,用户模式等。
26.概念级数据库是DBA(数据库管理员)看到的数据库,因此也称DBA视图,又称为模式。
27.物理级数据库又称为存储模式,内模式,是数据库管理系统内部的表示,即对数据的物理结构和方式的描述。
28.为了保证数据库能够高效正常的运行,一般大型数据库都设有专门人员负责数据库管理系统的管理工作,这种专门的人员成为数据库管理人员(DBA)。主要职责:1负责数据库核心及其开发工具的安装及升级2为数据库管理系统分配存储空间并规划未来的存储要求3协助开发者建立基本的对象(表、视图、索引)4负责注册用户并维护系统的安全性5负责数据库管理系统的备份和恢复。
29.数据库管理系统用户分:最终用户和专业用户即应用程序员。
30.数据库管理系统是对数据库定义、管理、维护和检索的一组软件。其功能如下:1存储数据2创建并维护数据结构3允许多用户并发访问4加强安全性和保密性5允许提取和操作已存储的数据6实现数据录入和数据加载7提供不同记录的一致性8提供对指定数据快速提取的高效索引机制。
31.数据库管理系统必须提供数据的安全性、并发性、完整性、数据备份、数据恢复等数据保护能力以保证数据库中数据的安全可靠和正确性。为此需要建立数据库保护机制,用于以阻止一切物理破坏和读写破坏,并能以最快的速度使其恢复工作。
32.数据库的安全性主要是指保护数据库,防止因用户非法使用数据库造成数据泄密、更改或破坏。保证安全性关键是控制和识别。
33.用户操作数据库中的数据至少三层安全防线:1操作系统的安全保护机制2数据库管理系统的安全保护机制3数据库中的安全防护机制a用户标示和鉴定b存取控制c视图d数据加密e数据库审计。
34.数据库的完整约束性是指数据的正确性、相容性和一致性,即防止不符合语义的错误数据输入和输出,同时还要使存储在不同副本中的同一数据保持一致协调,使数据之间的结构不受破坏。
35.数据完整约束条件分类:1属性值的约束和联系的约束a属性值的约束是对一个列的取值的说明b关于数据之间的联系约束,在关系数据库中指多个属性或多个元组之间的联系的约束2静态约束和动态约束3立即执行约束和延迟执行约束。
36.完整性约束方法分两类:隐含约束方法和显式约束方法(a采用断言说明句b采用CHECK子句或constraint 子句c采用数据库触发器d将完整性约束的说明和检查任务交给应用程序)。
37.并发控制的基本单位是事务。
38.并发控制所带来的数据不一致分三类:丢失数据,不可重读数据和读“脏”数据。
39.并发控制的基本思想:当一个应用程序对数据库的某一部分执行修改操作时,对该部分数据实行封锁,拒绝其他用户对该部分的并发访问控制要求,直到该事务执行完毕(正常结束或撤销)。
40.并发控制的策略包括:封锁单位大小的确定、死锁的预防、检测和解除。
41.分布式数据库系统是在两台或多台地理上或物理上分散而逻辑上集中的数据库系统,管理这样的数据库系统的软件称为分布式数据库管理系统(DDBMS)。
42.面向对象(OO)数据模型比传统模型优势:1具有表示和构造复杂对象的能力2通过封装和消息隐藏技术提供了程序的模块化机制3继承和类层次技术不仅能表示is-a,还提供了软件重用机制4通过滞后联编等概念提供系统扩充能力5提供与宿主语言的无缝连接。
43.能够管理数值、文件、表格、图形、图像、声音等多媒体的数据库称为多媒体数据库(MDB)。
44.管理应用方式:1基于关系模型,加以扩充,使之支持多媒体数据库类型2基于OO模型来实现对多媒体信息的描述和操作3基于超文本模型。
45.多媒体数据库的特殊功能:1支持图像、声音、动画等多媒体字段和用户自定义字段2支持长数据和非长数据的集成管理3支持复杂的实体表示4有保证完整性和一致性机制5支持同一实体多种表现形式6具有良好的用户界面7至此多媒体的特殊查询和良好的接口处理8支持分布式环境。
46.多媒体数据库关键技术:1数据模型技术2数据存储管理和压缩解压技术3多媒体再现和良好的用户界面技术4多媒体信息检索和查询及其他处理技术5分布式环境与并行处理技术。
第三章数据库设计基础
1.数据库设计的基本问题是如何建立一个良好的数据库模式,亦即给出一组数据,如何构造一个合适于他们的数据模式,无论是存储还是操纵反面都有较好的性能。
2.关系数据库设计理论主要包括:函数依赖、范式和模式设计方法。
数据库问题:数据冗余、更新异常、插入异常、删除异常。
3.规范化的目的:1把关系中的每一个数据项转换成一个不可再分的基本项2消除冗余,并使关系的检索简化3消除数据在插入、修改、删除时的异常情况4关系模型灵活,易于使用非过程化的高级查询语言进行查询。
4.函数依赖:设R(A1A2A)是关系U={A1A2A}是R的所有属性集合,X、Y、Z分别是R的属性子集
1若对于R中的X的任何一个具体值,Y仅有唯一的具体值与之相对应,则称R的属性Y函数依赖于属性X,记作X→Y,X称为决定因素。
如果X→Y,且Y不是X的子集,则称X→Y是非平凡的函数依赖。
2若在R中,如果属性集Y函数依赖于属性集X,且不与X的任何真子集函数依赖,则称Y完全依赖于X记作Xf→Y,否则称Y部分依赖于X,记作Xp→Y
3在R中对于属性子集X、Y、Z,若Xf→Y,Y→Z,则称Z对X传递函数依赖,记作Xt→Z。
关键字(码):4在R中,设K是U的属性或属性集合。如果Kf→U,则称K是关系R的一个后选关键字。若R中有一个以上的关键字,则选定其中一个作为主关键字(主码),如果K是属性集合,则称为组合关键字或合成关键字。
5.包含在任意一个候选字中的属性,称为主属性,不包含在任何候选关键字中的属性称为非主属性。
6.若关系的全部属性作为关键字,则称为完全关键字。此时无非主属性。
后选关键字的两个性质:a标识的唯一性b无冗余性。
5在关系R中,若属性或属性集合X不是R的关键字,但X是其他关系中的关键字,则称X是关系R的外关键字或外码。
6在关系R中,XYZ是属性集合,且Z=U-X-Y,多值依赖X→→Y成立当且仅当对R中给定的一对(X,Z)值有一组Y的值与之对应,这组值决定于X值二与Z值无关。关系模式中至少存在三个属性,才有可能存在多值依赖。
7.第一范式(1NF):如果关系R的每一个属性的值为不可分离的原子值,即每个属性都是不可再分的基本数据项,则R是第一范式记作R∈1NF。
8.第二范式:如果关系R∈1NF,且R中的每一非主属性完全函数依赖于主关键字,则R是第二范式,记作R∈2NF。
9.第三范式:如果R∈2NF,而且它的任何一个非主属性都不传递依赖于任何主关键字,则R是第三范式,记作R∈3NF。
10.BCNF:如果关系R∈3NF,X,Y∈U,若,且Y∈/U时,X必含有码,则R是BCNF,记作R∈2NF。满足BCNF的关系模式:a非主属性对关键字完全函数依赖b主属性对不包含它的关键字完全函数依赖c没有属性完全函数依赖于一组非主属性。
11.第四范式:如果关系模式R∈BCNF,若X→→Y(Y∈/X)是平凡多值依赖,且X含有码,则称R是第四范式,记作R∈4NF.
12.规范化的小结:
目的:规范化的目的是使结构合理,清除存储异常并使数据冗余尽量小,便于插入、删除和更新。
原则:遵从概念单一化“一事一地”原则,即一个关系模式描述一个实体或实体间的一种联系。规范化的实质是概念单一化。
方法:将关系模式投影分解成两个或两个以上的关系模式。
要求:分解后的关系模式集合应当与原关系模式等价,即经过自然联结可恢复原关系而不丢失信息,并保持属性间的合理联系。
13.E-R模型转换为关系模型的规则:1E-R图中的每个实体集,都相应的转换成一个关系,实体集的名字就作为关系的名字,实体集的属性就作为关系的属性,实体集的关键字作为关系的关键字。2对于E-R图中联系,一个联系转化为一个关系,练习的名称作为关系的名称,联系的属性作为关系的属性,所有参加联系的实体集的关键字也作为关系的属性,关系的属性有联系的类型决定。
第四章 面向对象数据可设计
1.OO中对象的定义:对象是一些属性(属性值刻画了一个对象的状态)及专用服务的封装体,是问题空间中一些东西的抽象。
2.类和事例:具有相同结构和相同行为的对象被组合在同一类中,这是一种抽象类型的表示,称为类。任何单个对象都是某个类的实例。
3.消息:对象的存取或使用都是通过一种方式来实现的,即发送消息。
4.继承:继承是指对象继承了它所在的类的结构、操作和约束,也指一个类继承另一个类的结构、操作和约束,可以说继承体现了一种共享机制。
5.一个合格的面向对象的数据库管理系统应具备的性质和特征:1必备的:是指面向对象的数据库管理系统所必须满足的特征。它们是复杂对象、对象标识、封装型、类、继承性及迟后绑定虫灾、可扩充性、计算完备性、持久性、辅存管理、并发性、恢复和即席查询功能。2可选类:是指为了使系统更加完善可添加的功能。分别是多继承性类型检查和推理分布设计事务处理和版本。3开放的:是设计人员可以选择的特征。分别是程序设计范例、表示系统、类型系统及单一性。
6.对象关系数据数据库管理系统必须具备的特征:1允许基本类型扩充2支持复杂对象管理3支持结构,数据和函数的继承、包括多重继承4对产生规则的支持。
7.集中式结构,所有资源(数据)和处理(程序)都在一台称为主机的计算机上完成,用户输入的信息通过客户机终端传导主机上。
文件服务器系统结构中,应用程序在客户工作站上运行,而不是在文件服务器上运行,文件服务器只提供资源的集中式管理和访问路径。
8.两层客户机/服务器结构
客户机:从其他计算机中读取数据,经过加工处理后将数据存储到原来提供数据的计算机中的计算机。
服务器:向其他计算机提供数据的计算机。
客户机/服务器有三个基本组成部分:客户机、服务器、客户机与服务器的连接。
9.客户机是一个面向最终用户的接口或应用程序。
10.服务器的主要功能是建立进程和网络服务地址,监听用户的调用,处理客户的请求,将结果交给客户机和释放与客户机的连接。
客户机与服务器之间的连接时通过网络连接实现的。
11.客户/服务的关键在于任务的划分,一般的客户完成用户接口任务,主要是输入/输出和任务提交;服务器则主要完成数据的存储、访问和复杂的计算任务;连接件主要完成客户和服务取得数据交换。
12.三层结构:客户机、应用服务器和数据服务器。
13.客户机上只需要安装应用程序,负责处理与用户的交互和与应用程序的交互。
14.应用服务器负责处理应用逻辑,即接受客户机方应用程序的请求,然后根据应用逻辑将这个请求转化为数据库请求后与数据库服务器进行交互,并将与数据库服务器交互的结果传送给客户机方的应用程序。
15.数据服务器软件根据应用服务器发送的请求,进行数据库操作,并将操作结果传送给应用服务器。
16.应用逻辑被所有用户共享是两层结构和三层应用软件的最大区别。中间层即应用服务器是整个系统的核心,它必须具有处理系统的具体应用的能力,并提供事务处理、安全控制以及满足不同数量客户机的请求而进行性能调整的能力。
17.三层结构应用软件开发系统优点明显:1整个系统被分为不同的逻辑块,层次非常清晰2能够使肥客户机办成瘦客户机3开发和管理的时间向服务器方转移,使得分布数据处理成为可能4管理和维护变得相对简单。另外引进三层机构体系,客户机便可省去与数据库系统直接互动的麻烦。
18.数据库管理系统的实现技术
采用存储过程技术的好处如下:1高性能2共享性3简化了应用开发过程,提高了应用开发效率4简化了安全控制。
19.分布是数据库管理技术:1数据复制和分布2两个阶段提交a协调者询问各个参与者能否提交该事务,并等待他们的回答b各参与者根据收到协调者所做的决定进行事务处理或回滚,并向协调者作出答复。协调者在收到所有应答后,该事务结束。
第五章 SQL
1.Sql 数据库的数据体系是三级结构。关系模式(模式)称为基本表,存储模式(内模式)称为存储文件,子模式(外模式)称为视图,元组称为行,属性成为列。
2.Sql的组成:一个Sql 数据可是表的集合;表有行构成,行是列的集合;一个表或者是基本表或者是视图;一个基本表可以跨一个或多个存储文件,一个存储文件可存一个或多个基本表;用户可以操作基本表也可以操作视图;SQL用户可以是应用程序,也可以是终端用户。
3.SQL组成:数据定义(DDL,定义数据库的逻辑结构,包括定义数据库,基本表,视图和索引四个部分。)
数据操作:DML包括查询和更新(插入,删除,更新)。
数据控制:基本表和视图的授权,完整性规则的描述,事物控制语句。
4.嵌入语言的使用规定:规定SQL在宿主语言的程序中的使用规则。
SQL语言优点:非过程化语言,统一的语言,所有关系数据库的公共语言。
5.数据字典是关于数据描述的信息的一个特殊数据库。包含每一个数据类型的名字,意义,描述,来源,格式,用途以及与其他数据的联系等数据,这类数据成为元数据。因而数据字典又称与数据库。
数据字典库的数据类型:数据项,组项,记录,文件,外模式,概念模式,内模式,用户应用程序,存取口令,安全性要求,完整性要求,映像等。
6.DD/D(数据字典/目录)的用途:1是系统分析员,数据库设计人员的得力助手2是协助DBA管理数据库的有力工具3支持DBMS4帮助应用程序员和终端用户更好的使用数据库。
7.SQL server 备份类型:数据库备份;事务日志备份;差异备份;文件和文件组备份。
8.数据库恢复模式:简单恢复;完全恢复;批日志恢复。
Truncate table tablename
Numeric distinct identity grant revoke commit rollback column
Use master
Exec sp_admpdevice ‘tape’ ,”tape2’, ‘\\.tape0’
foreign key reference
9.通用网关接口CGI就是Web服务器与一个外部程序(又称CGI程序)进行通信的协议接口,这个接口协议规定了Web服务器与CGI程序传送消息的格式,信息的内容和格式,同时也规定了CGI程序返回信息的内容和输出标准。在Web页面中,主要通过超链接或者指定表格和图形的方法来执行CGI程序。
10.在网络服务器上,通常许多程序,用来完成不同的任务,在技术上网络服务器上的这些程序统称为CGI程序。
11.ODBC具有最大的互操作性,可以使用一个单独的程序来提取数据可信息,在提供一种方法让应用程序读取数据。一个应用程序可以存取不同的数据库管理系统,而应用程序不必和DBMS绑在一起进行编译,连接,运行,而只要在应用程序中通过选择一个叫做数据库驱动程序的模块就可以把应用程序和所选的ODBCl连接在一起。
12.ODBC组件:应用程序,驱动程序管理器,驱动程序,数据源。
13.ODBC的两个基本用途:1在电子商务实际过程中,涉及企业,客户,银行海关,运输和保险等部门和单位,他们的应用平台不一致,需要同时访问多种异构数据库。使用ODBC技术,设计人员只需要编写一个程序版本,即可以方问任何数据库,从而使程序具有更好的兼容性和适应性。2有些应用程序需要防问某种数据库,就要求程序所在的计算机安装相应的数据库软件。数据库软件有的庞大,加之很多单机版要与Web互联,为此ODBC 提供了一批常用数据库软件驱动程序,这样,计算机上即使没有安装相应的数据库管理系统,但只要安装了相应的驱动程序,CGI程序就可以防问。应用程序不必关心ODBC与DBMS之间的底层通信协议。
第七章 MYSQL
1.恢复root口令:1停止Mysqld server 服务,在任务管理器中终止MySQL进程。2使用—skop-grant-tables参数启动mysqld.3使用mysql –h –hostname mysql 命令登陆到mysql server,用grant 命令改变口令;也可以这样:mysqladmin –h hostname –u user –passwordnew password 。4载入权限表:mysqladmin –h hostname flush-privileges,或使用SQL 命令FLUSH Privileges(当然也可以重启Mysql)。 Mysqlmp
2.优化操作系统:不要交换区,不要使用NFS磁盘,增加系统和Mysql服务器的打开文件数量,增加系统进程和线程的数量,使用支持大文件的文件系统,使用合适的文件系统。
第八章 ORACLE
1.Oracle数据库的突出优点:1支持大数据库,多用户的高性能的事务处理2Oracle遵守数据存取语言,操作系统,用户接口和网络通信协议的工业标准3实施安全性和完整性控制4支持分式数据库和分布处理5具有可移植性,可兼容性和可连接性。
2.Oracle 三种访问数据库的方法;1用SQL*Plus,他用SQL命令以交互的应用程序访问数据库2用第四代语言应用开发工具的应用程序访问数据库,SQL*Froms,sql*reportwriter,sql*menu 等,3用第三代语言嵌入的Sql语言或Oracle库函数调用来访问。Prol*C。
数据保护也称数据控制主要包括数据库的完整性控制,安全性控制,并发控制和恢复。
3.Oracle用下列机制管理数据库的安全性:存取机制,特权(对象特权,系统特权)和角色,审计(语句审计,特权审计,对象审计)
数据库不一致类型: 不一致性,不可重读性,读脏数据,丢失更改,破坏DDL操作。
4.封锁:数据封锁,DDL封锁,内部封锁。
5.Oracle使用的结构,当发生故障时保护数据:数据库后备(完全后备,部分后备),日志(在线日志,归档日志),回滚段和控制文件。
6.Oracle数据库的三种标准备份方法:导出/导入(逻辑备份),冷备份和热备份(物理备份)。
Exec sql begin declare section
….
Exec sql end declare section;
Exec sql include sqlca ;
Exec sql connect : 用户名
Indentified by : 口令
定义游标
Exec sql declare 游标名 cursor for
Select 列
From 表;
打开游标
Exec sql open 游标名;
取数据
Exec sql fetch 游标名 into : 变量2,变量3 ..;
关闭游标
Exec sql close 游标名;
Ⅳ SQL数据库练习题
1. SQL Server 2000是典型的关系型数据库产品。 ( 1 )
2. 在一台计算机上可以同时运行多个版本的SQL Server。 ( 1 )
3. 在SQL Server中日志文件是维护数据库完整性的重要工具。 ( 0 )
4. 在定义数据表时,定义某列为标识列的关键字是Identity。 ( 1 )
5. 浮点数据类型的优点是能够存储范围非常大的数字,但容易发生误差。 ( 0 )
6. 数据库完整性的目的是为了防止错误信息输入和输出。 ( 0 )
7. 在Update语句中,一次可以更新多个表。 ( 0)
8. 尽量使用Select * ,可以加快查询速度。 ( 0 )
9. 在SQL Server 2000中表示注释可以用类似C语言的/*...*/和//。 ( 0 )
10. 在SQL Server中,RTRIM函数删除字符串右边的空白字符。 ( 1 )
11. 一个表只能有一个聚集索引(簇索引)。 ( 1 )
12. SQL查询语言中,如果没有指定排序方式,则默认是升序方式。 ( 1 )
13. 在SQL Server 2000中ntext类型的字段不能进行排序操作。 ( 0 )
14. 在SQL Server 2000中bit类型的字段不能建立索引。 ( 1 )
15. 在被定义为唯一索引的列上的数据不能有重复的值。 ( 1 )
16. 在被定义为唯一索引的列上的数据不允许空。 ( 0可以的但是只能有一个null值 )
17. 在SQL Server中,每张表都应该建立一个索引,以提高查询速度。 ( 0 )
18. 视图在SQL Server中是一张虚拟表。 ( 1 )
19. 当一个视图由2个以上基本表构成时,不能进行删除视图中的数据。 ( 0 )
20. 在SQL Server中,触发器是一种特殊的存储过程。 ( 1 )
21. 由于存储过程是解释执行,所以每次执行时都要检查是否有语法错误。 ( 0 )
22. 可以在用户正在使用的数据库上执行数据库恢复操作。 ( 0 )
1表示正确
Ⅳ 第五章 SQL定义表(一)
可以通过定义表(使用 CREATE TABLE )或通过定义投影到表的持久类来创建表:
由于以下原因,这两个名字之间的对应关系可能不相同:
表、视图或存储过程名称可以是限定的( schema.name ),也可以是限定的( name )。
模式名遵循标识符约定,需要特别注意非字母数字字符的使用。
模式名不应该指定为带分隔符的标识符。
尝试指定“USER”或任何其他SQL保留字作为模式名会导致 SQLCODE -312 错误。
INFORMATION_SCHEMA 模式名和相应的信息。
模式包名在所有命名空间中保留。
用户不应该在这个模式/包中创建表/类。
当执行一个创建操作(比如 create TABLE ),指定一个还不存在的模式时,InterSystems IRIS将创建新的模式。
InterSystems IRIS使用模式名生成相应的包名。
由于模式及其对应包的命名约定不同,用户应该注意非字母数字字符的名称转换注意事项。
这些名称转换的注意事项与表不同:
INFORMATION_SCHEMA 模式名和相应的信息。
模式包名在所有命名空间中保留。
用户不应该在这个模式/包中创建表/类
在所有名称空间中保留 IRIS_Shard 模式名。
用户不应在此模式中创建表、视图或过程。
存储在 IRIS_Shard 模式中的项不会通过编目查询或 INFORMATION_SCHEMA 查询显示。
初始设置是对所有名称空间(系统范围)使用相同的默认模式名。
可以为所有命名空间设置相同的默认模式名,也可以为当前命名空间设置默认模式名。
如果创建了一个具有非限定名称的表或其他项,InterSystems IRIS将为其分配默认模式名和相应的持久类包名。
如果一个命名的或默认的模式不存在,InterSystems IRIS将创建模式(和包),并将创建的项分配给该模式。
如果删除模式中的最后一项,InterSystems IRIS将删除该模式(和包)。
下面的模式名解析描述适用于表名、视图名和存储过程名。
系统范围的初始默认模式名是 SQLUser 。
对应的持久类包名是 User 。
因此,非限定表名 Employee 或限定表名 SQLUser 。
Employee 将生成类 User.Employee 。
因为 USER 是一个保留字,尝试用 USER 的模式名(或任何SQL保留字)指定限定名会导致 SQLCODE -1 错误。
要返回当前默认模式名,请调用 $SYSTEM.SQL.DefaultSchema() 方法:
或者使用以下预处理器宏:
可以使用以下任意一种方式更改默认模式名:
注意:当更改默认的SQL模式名称时,系统将自动清除系统上所有名称空间中的所有缓存查询。
通过更改默认模式名称,可以更改所有包含非限定表、视图或存储过程名称的查询的含义。
强烈建议在安装InterSystems IRIS时建立默认的SQL模式名,以后不要修改。
模式名用于生成相应的类包名。
因为这些名称有不同的命名约定,所以它们可能不相同。
可以通过将其设置为系统范围的默认模式来创建与SQL保留字同名的模式,但是不建议这样做。
名为 User 的默认模式根据类命名唯一性约定,生成相应的类包名称 User0 。
如果指定 _CURRENT_USER/name 作为默认模式名,其中name是选择的任意字符串,那么InterSystems IRIS将当前登录进程的用户名分配为默认模式名。
如果进程没有登录,则name将用作默认的模式名。
例如,如果进程没有登录, _CURRENT_USER/HMO 使用HMO作为默认模式名。
在 $SYSTEM.SQL.SetDefaultSchema() 中,指定 "_CURRENT_USER" 作为带引号的字符串。
当访问一个现有的表(或视图,或存储过程)进行DML操作时,将从模式搜索路径中提供一个非限定的名称。
按照指定的顺序搜索模式,并返回第一个匹配项。
如果在搜索路径中没有找到匹配的模式,或者没有搜索路径,则使用默认的模式名。
(注意, #Import 宏指令使用了不同的搜索策略,不会“失败”到默认的模式名。)
如果非限定名与模式搜索路径中指定的任何模式或默认模式名不匹配,则会发出 SQLCODE -30 错误,例如: SQLCODE: -30 消息: Table 'PEOPLE' not found in schemas: CUSTOMERS,EMPLOYEES,SQLUSER 。
当创建一个基于odbc的查询以通过Mac上的Microsoft query从Microsoft Excel运行时,如果从可用的表列表中选择一个表,则生成的查询不包括该表的模式(相当于类的包)。
例如,如果选择从示例模式返回 Person 表的所有行,则生成的查询为:
因为InterSystems IRIS将不限定的表名解释为 SQLUser 模式中的表名,所以该语句要么失败,要么从错误的表返回数据。
要纠正这一点,编辑查询(在SQL View选项卡上),显式引用所需的模式。
然后查询应该是:
INFORMATION.SCHEMA 。
SCHEMATA persistent 类列出当前名称空间中的所有模式。
下面的示例返回当前命名空间中的所有非系统模式名:
Management Portal SQL界面的左侧允许查看模式(或匹配筛选器模式的多个模式)的内容。
每个表在其模式中都有一个唯一的名称。
一个表有一个SQL表名和一个对应的持久化类名;
这些名称在允许的字符、区分大小写和最大长度方面有所不同。
如果使用SQL CREATE TABLE 命令定义,则指定遵循标识符约定的SQL表名;
系统生成一个对应的持久化类名。
如果定义为持久类定义,则必须指定只包含字母和数字字符的名称;
这个名称既用作区分大小写的持久类名,也用作(默认情况下)对应的不区分大小写的SQL表名。
可选的 SqlTableName class 关键字允许用户指定不同的SQL表名。
当使用 CREATE TABLE 命令创建表时,InterSystems IRIS使用表名生成相应的持久化类名。
由于表及其对应类的命名约定不同,用户应该注意非字母数字字符的名称转换:
同一个模式中的视图和表不能具有相同的名称。
尝试这样做会导致 SQLCODE -201 错误。
可以使用 $SYSTEM.SQL.TableExists() 方法确定一个表名是否已经存在。
可以使用 $SYSTEM.SQL.ViewExists() 方法确定视图名是否已经存在。
这些方法还返回与表或视图名称对应的类名。
管理门户SQL interface Catalog Details表信息选项显示与所选SQL表名称对应的类名。
试图指定 “USER” 或任何其他SQL保留字作为表名或模式名会导致 SQLCODE -312 错误。
要指定SQL保留字作为表名或模式名,可以指定名称作为带分隔符的标识符。
如果使用带分隔符的标识符指定包含非字母数字字符的表或模式名,InterSystems IRIS将在生成相应的类或包名时删除这些非字母数字字符。
适用以下表名长度限制:
在SQL中,每条记录都由一个唯一的整数值标识,这个整数值称为 RowID 。
在InterSystems SQL中,不需要指定 RowID 字段。
当创建表并指定所需的数据字段时,会自动创建RowID字段。
这个 RowID 在内部使用,但没有映射到类属性。
默认情况下,只有当持久化类被投影到SQL表时,它的存在才可见。
在这个投影表中,将出现一个额外的 RowID 字段。
默认情况下,这个字段被命名为 “ID” ,并分配给第1列。
默认情况下,当在表中填充数据时,InterSystems IRIS将从1开始向该字段分配连续的正整数。 RowID 数据类型为 BIGINT(%Library.BigInt) 。为 RowID 生成的值具有以下约束:每个值都是唯一的。不允许使用 NULL 值。排序规则是精确的。 默认情况下,值不可修改。
默认情况下,InterSystems IRIS将此字段命名为 “ ID” 。但是,此字段名称不是保留的。每次编译表时都会重新建立 RowID 字段名。如果用户定义了一个名为 “ ID” 的字段,则在编译表时,InterSystems IRIS会将 RowID 命名为 “ ID1” 。例如,如果用户随后使用 ALTER TABLE 定义了一个名为 “ ID1” 的字段,则表编译会将 RowID 重命名为 “ ID2” ,依此类推。在持久性类定义中,可以使用 SqlRowIdName 类关键字直接为此类投影到的表指定 RowID 字段名。由于这些原因,应避免按名称引用 RowID 字段。
InterSystems SQL提供了 %ID 伪列名称(别名),无论分配给 RowID 的字段名称如何,该伪列名称始终返回 RowID 值。 (InterSystems TSQL提供了 $IDENTITY 伪列名称,其作用相同。)
ALTER TABLE 无法修改或删除 RowID 字段定义。
将记录插入表中后,InterSystems IRIS将为每个记录分配一个整数ID值。 RowID 值始终递增。它们不被重用。因此,如果已插入和删除记录,则 RowID 值将按升序排列,但可能不连续。
可以通过设置 SetDDLUseSequence() 方法,将InterSystems IRIS配置为使用 $INCREMENT 执行 ID 分配。若要确定当前设置,请调用 $ SYSTEM.SQL.CurrentSettings() 方法。
在持久性类定义中, IdLocation 存储关键字global(例如,对于持久性类 Sample.Person:<IdLocation> ^ Sample.PersonD </ IdLocation> )包含RowID计数器的最高分配值。 (这是分配给记录的最高整数,而不是分配给进程的最高整数。)请注意,此RowID计数器值可能不再与现有记录相对应。要确定是否存在具有特定RowID值的记录,请调用表的 %ExistsId() 方法。
通过 TRUNCATE TABLE 命令重置 RowID 计数器。即使使用 DELETE 命令删除表中的所有行,也不会通过 DELETE 命令将其重置。如果没有数据插入表中,或者已使用 TRUNCATE TABLE 删除所有表数据,则 IdLocation 存储关键字全局值未定义。
默认情况下, RowID 值不可用户修改。尝试修改 RowID 值会产生 SQLCODE -107 错误。覆盖此默认值以允许修改 RowID 值可能会导致严重的后果,只有在非常特殊的情况下并应格外谨慎。 Config.SQL.AllowRowIDUpdate 属性允许 RowID 值是用户可修改的。
通过定义一个用于投影表的持久类,可以定义 RowID 以具有字段或字段组合中的值。为此,请使用 IdKey index 关键字指定一个索引。例如,一个表可以具有一个 RowID ,其 RowId 通过在 PatientName [IdKey] 上指定索引定义 IdxId 来与 PatientName 字段的值相同;或者可以通过指定索引定义 IdxId 来将 PatientName 和 SSN 字段的组合值在 (PatientName,SSN)[IdKey]; 上。
当 RowID 基于多个字段时, RowID 值是由 || 连接的每个组成字段的值。操作员。例如, Ross,Betsy || 123-45-6789 。 InterSystems IRIS尝试确定基于多个字段的 RowID 的最大长度。如果无法确定最大长度,则 RowID 长度默认为512。
用作外键引用的 RowID 必须是公共的。
默认情况下,不能将具有公共 RowID 的表用作源表或目标表,以使用 INSERT INTO Sample.DupTable SELECT * FROM Sample.SrcTable 将数据复制到重复表中。
可以使用Management Portal SQL界面“目录详细信息字段”列出“隐藏”列来显示 RowID 是否被隐藏。
可以使用以下程序返回指定字段(在此示例中为 ID )是否被隐藏:
Ⅵ SQL练习题
一 学生 – 课程数据库
1 查询 7号课程没有考试成绩的学生学号
select sno from sc where cno=’7’ and grade is not null
2 查询 7号课程成绩在90分以上或60分以下的学生学号
select sno from sc where grade>90 or grade<60
3 查询课程名以“数据”两个字开头的所有课程的课程号和课程名。
Select cno,cname from c where cname like ‘数据%’
4 查询每个学生所有课程的平均成绩,输出学生学号、平均成绩
select sno,avg(grade) from sc group by sno
5 查询每门课程的选修人数,输出课程号、选修人数。
Select cno,count(*) from sc group by cno
6 查询选修 7号课程的学生的学号、姓名、性别。
Select s.sno, sname,ssex from s , sc where s.sno=sc.sno and cno = ‘7’
7 查询选修7号课程学生的平均年龄。
Select avg(sage) from s , sc where s.sno=sc.sno and cno = ‘7’
8 查询由30名以上学生选修的课程号。
Select sno from sc group by cno having count(*)>30
9 查询至今没有考试不及格的学生学号
a: select sno from s where sno not in ( select sno from sc where grade<60 )
b: select sno from sc group by sno having min(grade)>=60
二
1 找出选修课程号为 C2 的学生学号与成绩。
Select sno,grade from sc where cno=’C2’
2 找出选修课程号为C4 的学生学号与姓名。
Select s.sno , sname from s,sc where s.sno=sc.sno and cno=’C4’
3 找出选修课程名为 Maths 的学生学号与姓名。
Select s.sno ,sname from s,sc,c
where s.sno=sc.sno and c.cno=sc.cno and cname = ‘Maths’
4找出选修课程号为C2或C4 的学生学号。
Select distinct sno from sc where cno in (‘C2’,’C4’)
或: Select distinct sno from sc where cno=’C2’ or cno =’C4’
5找出选修课程号为C2和C4 的学生学号。
Select sno from sc where cno =’C2’ and sno in (
select sno from sc where cno = ‘C4’ )
6 找出不学C2课程的学生姓名和年龄
select sname , sage from s where sno not in ( select sno from sc where cno=’C2’ )
或:
select sname , sage from s where not exists ( select * from sc where sc.sno=s.sno and cno=’C2’ )
7 找出选修了数据库课程的所有学生姓名。(与3同)
Select s.sno ,sname from s,sc,c
where s.sno=sc.sno and c.cno=sc.cno and cname = ‘数据库’
8 找出数据库课程不及格的女生姓名
嵌套:
select sname from s where ssex = ‘女’ and sno in ( select sno from sc where grade<60 and cno in ( select cno from c where cname=’数据库’) )
连接:
Select sname from s,sc,c
where s.sno=sc.sno and c.cno=sc.cno and ssex=’女’ and cname = ‘数据库’ and grade<60
9 找出各门课程的平均成绩,输出课程名和平均成绩
select cname , avg(grade) from sc , c where c.cno =sc.cno group by sc.cno
10找出各个学生的平均成绩,输出学生姓名和平均成绩
select sname , avg(grade) from s , sc where s.sno=sc.sno group by sc.sno
11 找出至少有30个学生选修的课程名
select cname from c where cno in ( select cno from sc group by cno having count(*)>=30 )
12 找出选修了不少于3门课程的学生姓名。
Select sname from s where sno in ( select sno from sc group by sno having count(*)>=3)
13 找出各门课程的成绩均不低于90分的学生姓名。
Select sname from s where sno not in ( select sno from sc where grade<90)
14* 找出数据库课程成绩不低于该门课程平均分的学生姓名。
Select sname from s where sno in (
Select sno from sc , c where sc.cno=c.cno and cname=’数据库’ and
Grade > (Select avg(grade) from sc , c where sc.cno=c.cno and cname=’数据库’ ) )
15 找出各个系科男女学生的平均年龄和人数。
Select sdept,ssex , avg(sage) , count(*) from s
Group by sdept , ssex
16 找出计算机系(JSJ)课程平均分最高的学生学号和姓名。
Select sc.sno , sname from s, sc where s.sno=sc.sno and sdept=’JSJ’
Group by sc.sno Having avg(grade) =
( Select top 1 avg(grade) from sc, s where s.sno=sc.sno and sdept=’JSJ’
group by sc.sno order by avg(grade) DESC )
三 客户 – 商品数据库中包括3按各表:KH,FP,YWY
1 查询工资在 1000 到3000 元之间的男性业务员的姓名和办公室编号。
Select Yname , Ono from YWY where salary between 1000 and 3000 and Ysex=’男’
2 查询各个办公室的业务员人数,输出办公室编号和对应的人数。
Select Ono , count(*) from YWY group by Ono
3 查询每个客户在2002年5月购买的总金额,输出客户号和相应的总金额。
Select Kno,sum(Fmoney) from FP where fdate between ‘2002.5.1’ and ‘2002.5.31’
Group by Kno
4 查询2002年5月购买次数超过5次的所有客户号,且按客户号升序排序。
Select Kno from FP where fdate between ‘2002.5.1’ and ‘2002.5.31’
Group by Kno having count(*)>5
Order by Kno ASC
5 查询各办公室男性和女性业务员的平均工资。
Select Ono,Ysex ,avg(salary) from YWY group by Ono , Ysex
6 查询2002年5月曾经在王海亮业务员手中购买过商品的客户号、客户姓名、联系电话。
Select Kno,Kname,phone from KH where Kno in (
Select kno from FP where fdate between ‘2002.5.1’ and ‘2002.5.31’ and
Yno=(select Yno from YWY where Yname = ‘王海亮’ )
7 查询所有工资比1538号业务员高的业务员的编号、姓名、工资。
Select yno ,Yname, salary from YWY where salary >
( Select salary from YWY where Yno=’1538’ )
8 查询所有与1538号业务员在同一个办公室的其他业务员的编号、姓名。
Select Yno , Yname from YWY where Yno<>’1538’ and Ono in (
Select Ono from YWY where Yno=’1538’ )
9 查询销售总金额最高的业务员的编号。
Select Yno from FP Group By Yno Having sum(Fmoney) =
(Select top 1 sum(Fmoney) from FP group by Yno ORDER BY sum(Fmoney) DESC)
10 查询所有业务员的编号、姓名、工资以及工资比他高的其他业务员的平均工资。
利用自身连接
Select y1.Yno ,y1.Yname ,y1.salary , avg( y2. salary) from YWY y1 , YWY y2
Where y1.Yno<>y2.Yno and y1.salary < y2.salary
Group by y1.Yno
Sno salary sno salary
1 100 1 100
2 120 2 120
3 90 3 90
4 110 4 110
四 某中学数据库中由一张表:
学生选课表:由板及代码、班内学号、姓名、科目、成绩五个属性组成,关系模式为
SC(BJDM,BNXH,XSXM,KM,CJ) ,其中(BJDM,BNXH)为主码。
说明:每个学生每门科目存放一个记录,科目有“语文”、“数学”、“外语”三门。
1 找出每个班级的班级代码、学生人数、平均成绩。
Select BJDM,count(*) ,avg(CJ) from SC group by BJDM
2 找出每个学生的班级代码、学生姓名、考试科目数、总成绩。
Select BJDM,XSXM,count(*) , sum(CJ) from SC
Group by BNXH
3 输出一张表格,每位学生对应一条记录,包括:班级代码、姓名、语文成绩、数学成绩、外语成绩。
方法一:利用视图
create view v1 (bjdm,xsxm, yw,sx,wy ) AS
select bjdm , xsxm , cj , 0,0 from sc where km=’语文’
union
select bjdm , xsxm , 0 , cj,0 from sc where km=’数学’
union
select bjdm , xsxm , 0,0,cj from sc where km=’外语’
select bjdm, xsxm , sum(yw) as 语文, sum(sx) as 数学, sum(wy) as 外语 from v1 group by bjdm, xsxm
方法二:自身连接
select a.bjdm,a.xsxm , a.km,a.cj , b.km,b.cj , c.km,c.cj from sc a , sc b , sc c
where a.bjdm=b.bjdm and a.bnxh= b.bnxh and b.bjdm=c.bjdm and b.bnxh= c.bnxh
and a.km=’语文’ and b.km=’数学’ and c.km=’外语’
方法三:利用存储过程(略)
4 输出一张表格:由成绩低于60分的每位学生对应一条记录,包括字段:班级代码、姓名、最低成绩。
Select bjdm,xsxm ,min(CJ) from sc where grade<60 group by bjdm,xsxm
5输出一张表格:由成绩低于60分的每位学生对应一条记录,包括字段:班级代码、姓名、最高成绩、平均成绩。
得到平均成绩:create view V1 (bjdm,bnxh ,avg_cj) AS
select bjdm,bnxh ,avg(cj) from sc where bjdm , bnxh
select sc.bjdm,sc.xsxm ,max(cj) , avg_cj from sc , V1
where sc.bjdm=v1.bjdm and sc.bnxh=V1.bnxh and cj<60
group by sc.bjdm,sc.xsxm
6输出一张表格:所有成绩不低于60分的每位学生对应一条记录,包括字段:班级代码、姓名、平均成绩。
select bjdm, xsxm , avg(cj) from sc
where sno not in ( select sno from sc where grade<60)
group by bjdm, xsxm
7输出一张表格:每一位学生对应一条记录,包括字段:班级代码、姓名、去掉一个最低分后的平均成绩。
方法一:
得到每个学生的最低分:
create view V1 (bjdm,bnxh ,min_cj) as
select bjdm,bnxh,min(cj) from sc group by bjdm,bnxh
select sc.bjdm,sc.xsxm , avg(cj) from sc , v1
where sc.bjdm=v1.bjdm and sc.bnxh=v1.bnxh and sc.cj <> v1.min_cj
group by bjdm,bnxh
方法二:
select sc.bjdm,sc.xsxm , ( sum(cj) – min(cj) ) / count(*) from sc
group by bjdm , bnxh
8输出一张表格:每门科目对应一条记录,包括字段:科目、去掉一个最低分后的平均成绩。
方法一:
得到每门课的最低分:
create view V1 ( km, min_cj) as
select km,min(cj) from sc group by km
select sc.km , avg(cj) from sc , v1
where sc.km=v1.km and sc.cj <> v1.min_cj
group by sc.km
方法二:
select km , (sum( cj) – min(cj) )/count(*) from sc
group by km
补充9:输出表格:每门科目对应一条记录,包括字段:科目、去掉一个最低分和最高分后的平均成绩。
select km , (sum( cj) – min(cj) – max(cj) )/count(*) from sc
group by km
五 数据库存放着某高校1990年以来英语四、六级的考试情况,且规定:
1 英语四、六级考试每年分别在6月和12月举行二次;
2 四级没有通过的学生不能报考六级;
3 某一级的考试只要没有通过可以反复参加考试;
4 某一级的考试一旦通过就不能再报考同级的考试;
5 允许报了名但不参加考试。
该数据库中有二张表,相应的关系模式如下:
学生表:S(Sno, Sname, Ssex, Sage, Sdept),其中Sno为主码。
考试表:E(Sno, Year, Month, Level, Grade),学号、年、月、级别、成绩。
其中(Sno, Year, Month)为主码。
1. 找出各次四级和六级考试的参考人数和平均成绩(报了名但没有参加考试的不作统计)
select year , month,level ,count(*) , avg(grade)
group by year,month , level
2. 找出各次四级考试中平均分最高的系科(报了名但没有参加考试的不作统计)。
A: Select sdept from s , e where s.sno=e.sno
Where level=4
Group by sdept
Having avg(grade)>=ALL(
Select avg(grade) from s , e where s.sno=e.sno where level=4 Group by sdept )
B: Select top 1 sdept from s , e where s.sno=e.sno
Where level=4
Group by sdept
Order by (avg(grade) desc
3. 找出已经通过英语六级考试的学生的学号、姓名和性别(用连接方法做)
select s.sno,sname,ssex from s,e
where s.sno=e.sno and level=6 and grade>=60
4. 找出在同一年中四、六级考试都参加了的学生的学号
1) select sno from E
where (level=4 and grade>=60) or level=6
group by year having count(*)>=2
2) select sno from E X where level=4 and grade>=60 and exists (
select * from E Y where Y.sno=X.sno and year=X.year and level=6 )
5. 找出只参加一次考试就通过了英语六级考试的学生的学号
select sno from E
where level=6
group by sno
having count(*)=1 错,想想为何?
1) select sno from E
where level=6
group by sno
having count(*)=1 and max(grade)>=60
2) select sno from E where level=6 and grade>=60 and sno in (
select sno from E where level=6 group by sno having count(*)=1)
6. 找出至今没有通过英语四级考试的学生的学号(应包括至今还没有参加过考试或者是参加了但还没有通过两种)
select sno from E where level=4
group by sno
having max(grade)<60
Union
Select sno from s where sno not in( select sno from E)
7. 找出英语六级考试中合格人数最少的考试年份和月份(有并列的都要列出,用一句SQL语句)。
Select year , month From E
Where level = 6 and grade>=60
Group by year , month
Having count(*) <=all
(Select count(*) from E where level=6 and grade>=60 group by year , month )
我是从“上海全鼎软件学院”毕业的————————
Ⅶ sql语句相关测试
sql语句相关测试
篇一:SQL语句测试
1、(10分)要求:
选择受理时间在2008-5-1 到 2008-6-1之间的所有申请人姓氏为“刘”的数据,并把“新受理编号”列表示成当前机器时间的年月和原受理编号年月后的数值组合
格式如下:
受理编号,新受理编号,受理时间, 申请人
200801112 201008112 2008-01-13刘XX
需要的表
I_Optinst 业务实例表
REGDATE(受理日期)
Regnum(受理编号)
Proposer(申请人)
解答:select Regnum as 受理编号, as 新受理编号,REGDATE as 受理时间,Proposer as申请人 from Optinst 2、(15分)要求:
前提:只统计业务小类“存量房买卖”
①按照月份分12月列出2008年每个月份的月份对应月份的交易总面积
②按照月份分12月列出2008年每个月份的月份对应月份的交易均价(申报价格/建筑面积)
格式
年度月份 交易总面积 年度月份交易均价(元/平方米)
2008-01 23232 2008-01 2323
2008-02 23232008-02 232
2008-03 232323 2008-03 7656
2008-04 232323 2008-03 565
2008-05 232323 2008-03 5656
2008-06 232323 2008-03 565
2008-07 232323 2008-03 67
2008-08 232323 2008-03 676
2008-09 232323 2008-03 6767
2008-10 232323 2008-03 8686
2008-11 232323 2008-03 867
2008-12 232323 2008-03 454
需要的表:
Fc_room 房间表
BAREA(建筑面积)
I_Optinst业务实例表
regdate(受理时间)
fc_owner 产权表
COSTVAL(申报价格)
EVLVAL(评估价格)
fc_owoom 房间明细表
1.select regdate as年度月份,BAREA as 交易总面积 from Fc_room,Optinst where
3、(20分)要求:
①:按照时间统计收费明细 统计格式如下
受理编号缴费人收费日期 收费名称收费金额核费人收费人
②:按照时间汇总(2008年度)统计收费项目分类 统计格式如下
收费名称 总金额
需要的表:
I_OptInst(业务实例表)
Regnum 受理编号
Proposer 申请人
I_Charge(收费实例表)
HEFEIMAN 核费人
PAYEE 收款人
CDATE 收费日期
I_ChrDtl(收费实例明细表
CNAME 收费名称
MONEY 收费金额
4、(15分)要求:用途是住宅并且建筑面积<=140>140 定义为 “非普通住宅”
用途是商业并且建筑面积>140 定义为 “商业A级”
其他情况定义为“非住宅”
根据用途和面积列表出所有数据
格式
受理编号, 用途
200406000386 普通住宅
200406004631 非普通住宅
200406004633 普通住宅
200406004638 普通住宅
200406004641 非住宅
200501000004 普通住宅
200406004568 非住宅
200406005677 商业A级
表:
fc_room
barea 建筑面积
BUse 用途
i_optinst
regnum 受理编号
5、(30分)工作量统计
① 选择出以下格式的数据;并创建视图名称为view_AAAA
业务小类业务实例 交易价格建筑面积 登记时间
1 存量房买卖 14100 19400.0029.98 2005-11-10 11:32:50 2 新建商品房 15041 229530.00 124.07 2005-11-21 08:59:36 3 新建商品房 15043 177363.00 101.35 2005-11-21 09:15:59 4 新建商品房 13046 71130.0023.71 2005-11-02 10:15:37 5 新建商品房 11280 148563.00 87.39 2005-10-11 09:50:48 6 新建商品房 11353 267369.00 116.04 2005-10-11 15:34:53 7 房改售房 2689 35.22 2004-06-17 08:43:00 8 产权人名称变更 11701 724.18 2005-10-17 10:05:20 9 新建商品房 7206 158257.00 88.69 2005-09-16 14:50:57 10 存量房买卖 (转 载于:wWw.cnboThwiN.cOM 博 威范文 网: sql语句测试 )10100 103.07 2005-08-31 20:27:06 11 存量房买卖 12980 51500.0046.66 2005-11-01 14:41:32 12 新建商品房 13000 136782.00 80.46 2005-11-01 15:37:05 13 新建商品房 16946 300844.00 146.33 2005-12-15 14:15:07 14 存量房买卖 10091 509.18 2005-08-31 19:19:25 ② 使用视图 view_AAAA 当做表 选择出如下样式数据
业务小类 件数合计金额 合计面积
1 用途变更 1151.3
2 转移登记 184.03
3 新建商品房 31 263243643197.34
4 房改售房 8252.43
5 产权人名称变更 3 778.6
6 单位产新建 311697.49
7 赠与 1 28.48
8 存量房买卖 24 4379004134.67
9 判决仲裁 2 439.41
10 继承遗赠 1 49.17
11 换证 2 228.88
12 新建房屋 17 928.91
③ 用水晶报表关联视图 view_AAAA 设计出类似于②的数据格式 需要的表
FC_Owner
EvlVal交易价格
I_OptInst,
SOName 业务小类
fc_owoom,
BArea 建筑面积
FC_Room
regdate 受理日期
篇二:sql查询语句学习测试答案
第一部分SQL查询语句的学习
单表查询 1、--查询订购日期在1996年7月1日至1996年7月15日之间的订单的订购日期、订单ID、客户ID和雇员ID等字段的值
use eee
SELECT 订购日期,订单ID,客户ID,
雇员ID
FROM 订单
WHERE 订购日期BETWEEN '1996-7-1 00:00:00' AND '1996-7-15 23:59:59'
2、--查询“Northwind”示例数据库中供应商的ID、公司名称、地区、城市和电话字段的值。条件是“地区等于华北”并且“联系人头衔等于销售代表”。
use eee
SELECT 供应商ID,公司名称,地区,城市,电话
FROM 供应商
WHERE 地区='华北' AND 联系人职务='销售代表'
3、--查询“Northwind”示例数据库中供应商的ID、公司名称、地区、城市和电话字段的值。其中的一些供应商位于华东或华南地区,另外一些供应商所在的城市是天津 use eee
SELECT 供应商ID,公司名称,地区,城市,电话
FROM 供应商
WHERE 地区IN('华东', '华南') OR 城市='天津'
4、--查询“Northwind”示例数据库中位于“华东”或“华南”地区的供应商的ID、公司名称、地区、城市和电话字段的值
use eee
SELECT 供应商ID,公司名称,地区,城市,电话
FROM 供应商
WHERE 地区IN('华东', '华南')
多表查询 5、--查询订购日期在1996年7月1日至1996年7月15日之间的订单的订购日期、订单ID、相应订单的客户公司名称、负责订单的雇员的姓氏和名字等字段的值,并将查询结果按雇员的“姓氏”和“名字”字段的升序排列,“姓氏”和“名字”值相同的记录按“订单 ID”的降序排列
use eee
SELECT 订购日期,订单ID,公司名称,姓氏,名字
FROM 订单,雇员,客户
WHERE 订购日期BETWEEN '1996-7-1 00:00:00' AND '1996-7-15 23:59:59'
AND 订单.雇员ID = 雇员.雇员ID
AND 订单.客户ID = 客户.客户ID
ORDER BY 姓氏,名字ASC,订单ID DESC
6、--查询“10248”和“10254”号订单的订单ID、运货商的公司名称、订单上所订购的产品的名称
use eee
SELECT 订单.订单ID,公司名称,产品名称
FROM 订单,运货商,产品,订单明细
WHERE 订单.订单ID IN('10248','10254')
AND 订单.订单ID = 订单明细.订单ID
AND 订单明细.产品ID = 产品.产品ID
AND
订单.运货商= 运货商.运货商ID
7、--查询“10248”和“10254”号订单的订单ID、订单上所订购的产品的名称、数量、单价和折扣
use eee
SELECT 订单.订单ID,产品名称,数量,订单明细.单价,折扣
FROM 订单,产品,订单明细
WHERE 订单.订单ID IN('10248','10254')
AND 订单.订单ID = 订单明细.订单ID
AND 订单明细.产品ID = 产品.产品ID
篇三:sql语句练习题及答案
一 在数据库 school 中建立student , sc, course 表。
学生表、课程表、选课表属于数据库 School ,其各自的数据结构如下:
学生 Student (Sno,Sname,Ssex,Sage,Sdept)
课程表 course(Cno,Cname,Cpno,Ccredit)
学生选课 SC(Sno,Cno,Grade)
二 设定主码
1 Student表的主码:sno2 Course表的主码:cno 3 Sc表的主码:sno,cno
1写出使用 Create Table 语句创建表 student , sc, course 的SQL语句
2
3 删除student表中的元组
4在数据库school中删除关系student
5在student表添加属性sbirthdate 类型 datetime
Delete
1 删除所有 JSJ 系的男生 from Student where Sdept=’JSJ’ and Ssex=’男’; 2 删除“数据库原理”的课的选课纪录
from SC where Cno in (select Cno fromCourse where Cname=’数据库原理’);
Update
1 修改 0001 学生的系科为: JSJ
2 把陈小明的年龄加1岁,性别改为女。 2 修改李文庆的1001课程的成绩为 93 分 3 把“数据库原理”课的成绩减去1分
Select 查询语句
一 单表
1查询年龄在19至21岁之间的女生的学号,姓名,年龄,按年龄从大到小排列。 2查询姓名中第2个字为“明”字的学生学号、性别。 3查询 1001课程没有成绩的学生学号、课程号
4查询JSJ 、SX、WL 系的年龄大于25岁的学生学号,姓名,结果按系排列 5按10分制查询学生的sno,cno,10分制成绩
(1-10分 为1 ,11-20分为2 ,30-39分为3,。。。90-100为10) 6查询 student 表中的学生共分布在那几个系中。(distinct) 7查询0001号学生1001,1002课程的成绩。
二 统计
1查询姓名中有“明”字的学生人数。 2计算‘JSJ’系的平均年龄及最大年龄。 3查询学生中姓名为张明、赵英的人数
4计算每一门课的总分、平均分,最高分、最低分,按平均分由高到低排列 5 计算 1001,1002 课程的'平均分。
6 查询平均分大于80分的学生学号及平均分 7 统计选修课程超过 2 门的学生学号
8 统计有10位成绩大于85分以上的课程号。 9 统计平均分不及格的学生学号
10 统计有大于两门课不及格的学生学号
三 连接
1查询 JSJ 系的学生选修的课程号
2查询选修1002 课程的学生的学生姓名 (不用嵌套及嵌套2种方法) 3查询数据库原理不及格的学生学号及成绩
4查询选修“数据库原理”课且成绩 80 以上的学生姓名(不用嵌套及嵌套2种方法) 5查询平均分不及格的学生的学号,姓名,平均分。 6查询女学生平均分高于75分的学生姓名。
7查询男学生学号、姓名、课程号、成绩。(一门课程也没有选修的男学生也要列出,不能
四 嵌套、相关及其他
1 查询平均分不及格的学生人数
2 查询没有选修1002 课程的学生的学生姓名
3 查询平均分最高的学生学号及平均分 (2种方法 TOP , any , all) *4 查询没有选修1001,1002课程的学生姓名。
5 查询1002课程第一名的学生学号(2种方法) 6 查询平均分前三名的学生学号
7 查询 JSJ 系的学生与年龄不大于19岁的学生的差集
8 查询1001号课程大于90分的学生学号、姓名及平均分大于85分的学生学号、姓名 9 查询每门课程成绩都高于该门课程平均分的学生学号 10 查询大于本系科平均年龄的学生姓名
答案
参考答案
1 create table student (sno6), sname var8), ssex2), sagesmallint, sdept var15), primary key(sno));
create table sc
(sno6), cno 4),
grade decimal(12,2), primary key(sno,cno));
into student
values( ’4001’,’赵茵’,’男’,20,’SX’)
from student
student
alter table student add sbirthdate datetime
1 select sno, sname, sage from student
where ssex=’女’ and sage between 19 and 21order by sage desc; 2 select sno, ssexfrom student
where sname like ’_明% ’ ; 3 select sno, cnofrom sc
where grade is null and cno=’1001’ ; 4 select sno, sname from student
where sdept in (’JSJ’,’SX’,’WL’) and sage>25 group by sdept;
select sno, cno, grade/10.0+1 as levelfrom sc ;
select distinct sdept from student ; select grade from sc
where sno=’0001’ and (cno=’1001’ or cno=’1002’) ;
select count(*) from student where sname like ’%明% ’ ; select avg(sage),max(sage) from student where sdept=’JSJ’ ; select cno,sum(grade),avg(grade),max(grade),min(grade) from sc group by cno
order by avg(grade) desc ;
select cno, avg(grade) from sc where cno in(‘1001’,’1002’) group by cno ;
select sc.sno ,avg(grade) from scgroup by sc.sno
having avg(grade)>80 ;
select sno from sc group by sno having count(*)>2 ;
select cno from sc where grade>85 group by cno having count(*)=10 ; select sno from sc group by sno having avg(grade)<60 ;
select sno from sc where grade<60 group="" by="" sno="" having="">2 ;
select cno from student,sc where student.sno=sc.sno and sdept=’JSJ’ ; a:select sname from student,sc where student.sno=sc.sno and cno=’1002’
b:select sname from student where sno in (select sno from sc where cno=’1002’)
select sno,grade from sc,course
where sc.cno=course.cno and cname=’数据库原理’ and grade<60 a:select sname from student ,sc,course
where student.sno=sc.sno and sc.cno=course.cno and grade>80 and cname=’ 数据库原理’ b:select sname from student where sno in (select sno from sc where grade>80 and cno in (select cno from course where cname=’ 数据库原理’)) select sno,sname,avg(grade) from sc,studentwhere student.sno=sc.snogroup by student.sno having avg(grade)<60
a:select sname from student where ssex=’女’ and sno in(select sno from sc group by sno having avg(grade)>75)
b:select sname from sc,student where student.sno=sc.sno and ssex=’女’group by student.sno having avg(grade)>75
select student.sno,sname,cno,grade from student left join sc on student.sno=sc.sno and ssex=’男’
select count(*) from student where sno in( select sno from sc group by sno havingavg(grade)<60)
select sname from student where sno not in(select sno from sc where cno=’1002’)
student
0001 aaX 0002 bb
0003 ccX Sc
0001 1001 0001 1002 0002 1001 0003 1002
Select sname from student where not exists(select* from sc where cno=’1002’ and sc.sno=student.sno)
a:select top 1 sno,avg(grade) from sc group by sno order by avg(grade) desc b:select sno, avg(grade) from sc group by sno
having avg(grade)=(select top 1 avg(grade) from scgroup by sno order by avg(grade) desc) c:select sno, avg(grade) from sc group by sno
having avg(grade)>=all ( select avg(grade) from sc group by sno)
select sname from student where not exists(
select * from course where cno in(‘1001’,’1002’) and
not exists(select * from sc where sno =student.sno and cno=course.cno) ) a:select top 1 sno from sc cno=’1002’ order by grade desc b:select sno from sc where cno=’1002’ and grade >=all (
;