sql复习题 精简版.docx
- 文档编号:27690495
- 上传时间:2023-07-04
- 格式:DOCX
- 页数:36
- 大小:4.56MB
sql复习题 精简版.docx
《sql复习题 精简版.docx》由会员分享,可在线阅读,更多相关《sql复习题 精简版.docx(36页珍藏版)》请在冰豆网上搜索。
sql复习题精简版
基本表结构:
Student(Sno,Sname,Sgender,Class,Birthday)
Course(Cno,Cname,Tno)
SC(Sno,Cno,Score)
Teacher(Tno,Tname,Tgender,Title)
主要考点:
E-R图;
创建数据表;
表的基本操作;
索引;
数据查询;
视图;
子查询;
游标;
第一章数据库基础知识
1.计算机数据管理的三阶段
(1手工处理阶段
(2文件系统阶段
(3数据库系统阶段
2.数据库是:
相互关联的数据的集合,它用综合的方法组织数据,具有较小的数据冗余,可供多个用户共享,具有较高的数据独立性,具有安全控制机制,能够保证数据的安全、可靠;允许并发地使用数据,能有效、及时地处理数据,并能保证数据的一致性和完整性。
3.数据库用户:
♦终端用户
♦专业用户(应用程序员)
♦系统用户(数据库管理员,DBA)
4.软件支持系统:
♦操作系统
♦软件开发工具
♦DBMS
5.什么是DBMS:
数据库管理系统(DatabaseManagementSystem,简称DBMS)是一层数据管理软件
6.DBMS的用途:
科学地组织和存储数据、高效地获取和维护数据
7.DBMS的主要功能:
(1数据定义功能:
提供数据定义语言(DDL),定义数据库中的对象
(2数据操纵功能:
提供数据操纵语言(DML),实现对数据的增删改查操作
8.常见数据库产品:
Oracle、DB2SQLServer、MySQL、Access、Informix,Sybase,FoxPro等
10.概念模型:
通过对客观事物及其联系的抽象,方便、直接的表达各种语义,以实现数据库设计人员与用户的交流。
v实体:
客观存在并可以相互区分的客观事物或事件称为实体。
v属性:
实体所具有的某一方面的特性称为属性。
v关键字:
实体的某一属性或属性组合,其取用的值能唯一标示出某一实体。
v域:
属性的取值范围。
v实体集:
具有相同特征的一类实体的集合称之为实体集。
v联系:
(1事物之间的关系:
(1实体集内部的联系,表现在属性之间或者实体之间。
(2实体集间的联系。
最基本的是两个实体间的联系。
11.两个实体集间联系的类型:
v1:
1实体集A中每个实体至多只与实体集B中一个实体相联系。
反之亦然。
v1:
n实体集A中每个实体与实体集B中多个实体相联系,而B中每个实体至多只与A中一个实体相联系。
vm:
n实体集A中每个实体与实体集B中多个实体相联系,反之,B中每个实体也与A中多个实体相联系。
12.E-R数据模型:
概念模型的表示方法很多,以E-R图应用最广。
实体:
矩形框,框内为实体名称。
属性:
椭圆,以线与实体连接。
属性较多时也可以将实体及其属性单独列表。
实体间的联系:
菱形框,框内为联系的名称。
用线将菱形框与实体相连,线上标注联系类型。
13.例:
用E-R图表示实体及其联系。
学生:
学号、姓名、性别、入学分
班级:
班级号、所属院
课程:
课程号、课程名、学分
教师:
教工号、姓名、职称
14.1.5.2数据模型:
v三种方式:
层次模型
网状模型
关系模型
15.关系模型:
以关系代数为基础构造的数据模型,将每个实体集或实体集间的联系用二维表(关系)来表示。
16.关系代数基本术语:
v关系:
一个关系就是一张二维表,每个关系都有一个关系名。
v元组:
表中的一行即为一个元组,对应存储文件中的一个记录值。
v属性:
表中的列称为属性,每一列有一个属性名。
v域:
属性的取值范围。
即不同元组对同一个属性的值所限定的范围。
v关系模式:
对关系的描述。
如Student(ID,Sno,Sname,Class)
v候选关键字:
属性或属性的组合,其值能惟一地标识一个元组。
v主属性:
包含在任何候选关键字中的属性称为主属性,否则为非主属性。
v主关键字:
一个关系中可能有多个候选关键字,从中选择一个作为主关键字。
v外关键字:
如果一个关系中的属性或属性组不是该关系的关键字,但是另一个关系的关键字,称其为该关系的外关键字。
如SC(Sno,Cno,Score)中的Sno属性。
17.关系的性质
v每列都是同类型的数据,来自同一个域;
v不同的列给予不同的属性名;
v任意两个元组不能完全相同。
v行、列的次序可以任意交换。
v关系必须是规范化的关系,即每个属性都必须是不可分的数据项,不能表中有表;
19.关系的规范化:
20.范式
定义:
在关系规范化过程中,必须遵循一定的准则以指导,一般把这些准则称之为范式。
v第二范式
定义:
如果一个关系不存在部分依赖关系,那么该关系就属于第二范式。
凡是以单个属性作为主关键字的关系自动就是第二范式。
因为主关键字只有一个,不会存在部分依赖的情况。
因此,第二范式只是针对主关键字是组合属性的关系。
第三范式
v定义:
一个关系如果是第二范式的,并且没有传递依赖关系,则该关系就是第三范式。
v每个非主属性不部分依赖于关键字,也不传递依赖于关键字的关系就是第三范式。
第2章SQLServer2005简介
1.
2.SQL,“结构化查询语言(StructuredQueryLanguage)”,其语法结构简洁,功能强大,简单易学,众多关系型数据库都支持SQL语言作为查询语言。
3.SQL语言主要包括:
⏹DML(数据操作语言)
⏹SELECT、INSERT、UPDATE、DELETE等
⏹DDL(数据定义语言)
⏹CREATE,ALTER、DROP等
第3章数据库和数据表
2.
逻辑数据库
▪从用户观点看,数据库是一个存放数据的表和支持这些数据的存储、检索、安全性和完整性的逻辑成分所组成的集合。
▪组成数据库的逻辑成分称为数据库对象。
数据库对象可用两种方式表示:
▪完全限定名
▪部分限定名
Sql语句创建数据表
CREATETABLEStudent
(
SNosmallint
IDENTITY(1,1)PRIMARYKEY,
SNamevarchar(50)NOTNULL
DEFAULT'Newstuent',
Ssexvarchar
(2)default'女',
Birthdaydatetime
)
第4章Transact-SQL语言
1.T-SQL语言由以下几部分组成:
❑数据定义语言(DDL)
❑数据操纵语言(DML)
2.数据定义语句DDL:
⏹如:
❑创建数据库
❑使用数据库
❑删除数据库
❑创建表
❑修改表
❑删除表等
3.
几种查询:
(1.投影查询
(2.选择查询
(3.排序查询
(4.使用聚合函数
(5.连接查询
(6.联接查询
⏹Join_type
❑内联接
⏹[Inner]join
❑外联接
⏹Left[outer]join
⏹Right[outer]join
⏹Full[outer]join
❑交叉连接
⏹Crossjoin
(7.子查询
(8.UNION子句
4.4.2数据的修改
⏹UPDATEtable_name
SETcolumn_name={expression|DEFAULT|NULL}
[WHERE
4.4.3数据的删除
⏹DELETE[FROM]table_name
[WHERE
4.6游标
declare@s_noint,@s_namechar(8),@s_classchar(5)
declarest_cursorcursorforselectsno,sname,classfromstudent
openst_cursor
fetchnextfromst_cursorinto@s_no,@s_name,@s_class
while@@fetch_status=0
Begin
printcast(@s_noaschar(8))+@s_name+@s_class
fetchnextfromst_cursorinto@s_no,@s_name,@s_class
End
closest_cursor
deallocatest_cursor
⏹@@FETCH_STATUS
⏹报告上一个fetch语句的状态
❑0fetch语句成功
❑-1fetch语句失败
❑-2被提取的行不存在
作业
设有一个工程供应数据库系统,包括如下四个关系模式:
l
S(SNO,SNAME, STATUS,CITY); l
P(PNO,PNAME,COLOR,WEIGHT); l
J(JNO,JNAME,CITY); l
SPJ(SNO,PNO,JNO,QTY);
供应商表S由供应商号、供应商名、状态、城市组成;
零件表P由零件号、零件名、颜色、重量组成;
工程项目表J由项目号、项目名、城市组成;
供应情况表SPJ由供应商号、零件号、项目号、供应数量组成。
请利用游标查询使用了供应商S1所供应的全部零件的工程号JNO
复习:
SQL语言练习
(1)求供应工程J1零件的供应商号码SNO;
(2)求供应工程J1零件P1的供应商号码SNO;
(3)求供应工程J1零件为红色的供应商号码SNO;
(4)求没有使用天津供应商生产的红色零件的工程号JNO;
(5)求至少用了供应商S1所供应的全部零件的工程号JNO。
第5章索引
⏹索引是对数据表中一个或多个列的值进行排序的结构,可以利用索引快速访问数据库表中的特定信息。
索引的优点
⏹提高查询速度
❑无索引时,查询数据需要访问数据表中的每一行记录;
❑有索引时,由于索引有序排列,可以先查询索引,通过索引定位数据。
索引带来的问题
⏹占用更多的空间;
⏹对数据插入、修改、删除的负面影响
使用SQL语言创建索引
CREATE[UNIQUE][CLUSTERED|NONCLUSTERED]INDEXindex_name
ONtable_name
(column[ASC|DESC][,...n])
例:
CREATE
INDEX[IX_Class]ON[dbo].[Student]([Class]desc)
使用SQL语言管理索引
⏹DROPINDEX
❑从当前数据库中删除一个或多个索引。
❑DROPINDEX语句不适用于通过定义PRIMARYKEY或UNIQUE约束创建的索引(通过分别使用CREATETABLE或ALTERTABLE语句的PRIMARYKEY或UNIQUE选项创建)。
⏹语法
❑DROPINDEX'table.index|view.index'[,...n]
❑例如:
dropindexstudent.ix_class
第6章视图
☐视图由一个SELECT语句定义,其内容源于一个或多个表、视图。
☐视图定义所依据的表称为基表,定义视图的SELECT语句存放在数据库中,视图内容在每次使用时生成,因此也可称为虚表。
☐可以通过视图查询表的数据,也可以适度修改表的数据。
☐请创建视图View_Score3,显示成绩最高的三位同学的姓名以及成绩。
☐视图执行顺序
☐在数据库中找到视图的定义
☐执行SELECT语句
☐得到视图的数据。
例:
Select*fromv_sc
Selectsnamefromv_scwherescore>80
☐可通过视图进行适当的数据增删改操作;
第7章存储过程
►存储过程是预先保存起来的可以接受和返回参数的T-SQL语句的集合,用于实现复杂的数据处理。
createprocedurestud_degree
as
selectstudent.sno,student.sname,
o,sc.score
fromstudent,course,sc
wherestudent.sno=sc.snoando=o
orderbystudent.sno
createproceduredelete_stud
(@st_noint)
As
deletefromscwheresno=@st_no;
deletefromstudentwheresno=@st_no;
createprocedureavg_score
(@st_noint,
@st_namevarchar(50)output,
@st_avgfloatoutput)
as
select
@st_name=s.sname,@st_avg=avg(sc.score)
fromstudents,sc
wheres.sno=sc.sno
groupbys.sno,s.sname
havings.sno=@st_no
createprocedureinsert_student
(@snovarchar(50),@birthdaydatetime)
as
insertintostudent(sno,birthday)
values(@sno,@birthday)
execinsert_student200,'2005-10-1'
execinsert_student@birthday='2005-12-1',@sno=201
createprocedureinsert_student_default
(@snovarchar(50)=777,@birthdaydatetime='2012-6-1')
as
insertintostudent(sno,birthday)
values(@sno,@birthday)
execinsert_student_default
execinsert_student_default301
execinsert_student_default302,'2004-12-20'
alterprocedureinsert_student_default
(@snovarchar(50)=777,@birthdaydatetime=getdate())
as
insertintostudent(sno,birthday)
values(@sno,@birthday)
createprocedureaverage
(@st_noint,
@st_namechar(8)output,
@st_avgfloatoutput)
as
select
@st_name=s.sname,@st_avg=avg(sc.score)
fromstudents,sc
wheres.sno=sc.sno
groupbys.sno,s.sname
havings.sno=@st_no
declare@st_namechar(8)
declare@st_avgfloat
execaverage108,@st_nameoutput,@st_avgoutput
select@st_name,@st_avg
go
createprocaddStudent
@snovarchar(50),
@snamevarchar(50)
as
Begin
insertintoStudent(sno,sname)Values(@sno,@sname)
insertintoSC(sno,cno)select@sno,cnofromcoursewherecname='计算机导论'
insertintoSC(sno,cno)select@sno,cnofromcoursewherecname='操作系统'
End
请创建一个存储过程,显示每门课程考试前三名同学的姓名、课程名称、分数。
createprocshowTop3
as
Begin
createtabletop3Result
(
snamevarchar(50),
cnamevarchar(50),
scoreint
)
declare@cnovarchar(50)
declarecur_coursecursorforselectcnofromcourse
opencur_course
fetchnextfromcur_courseinto@cno
while@@FETCH_STATUS=0
begin
insertintotop3Result
selecttop3sname,cname,scorefromstudent,sc,course
wherestudent.sno=sc.snoando=oando=@cno
orderbyscoredesc
fetchnextfromcur_courseinto@cno
end
closecur_course
deallocatecur_course
select*fromtop3Result
droptabletop3Result
End
第8章触发器
☐触发器是一种特殊类型的存储过程。
⏹当使用UPDATE、INSERT或DELETE操作在指定表中对数据进行修改时,触发器会自动运行,以实现复杂业务规则或要求。
⏹触发器可以评估数据修改前后的表状态,并根据其差异采取对策。
☐注意
⏹只能在当前数据库中创建触发器。
⏹触发器可以引用当前数据库以外的对象
⏹TRUNCATETABLE不会引发DELETE触发器。
createtriggertrig_stuonstudent
forinsert,update,delete
as
select*fromstudentorderbysno
Insertintostudent(sno,sname)values(501,'张学生')
Updatestudentsetsname='王学生'wheresno=501
Deletefromstudentwheresno=501
☐执行触发器时,产生两个临时表:
deleted表和inserted表。
☐SQLServer自动创建和管理这两个临时表,它们的表结构与触发器所在表相同。
☐虽然不能直接对这两个临时表中的数据进行更改,但是可以利用这两个临时表的数据设置操作条件。
☐执行INSERT语句时,新建行被同时添加到inserted表和触发器所在表中。
Inserted表中的行是触发器所在表中新行的副本。
☐执行DELETE语句时,行从触发器所在表中删除,并传输到deleted表中。
☐执行UPDATE操作等价于于在删除之后执行插入;首先旧行被复制到deleted表中,然后新行被复制到触发器所在表和inserted表中。
☐Inserted表用于存储INSERT和UPDATE语句所影响表中新行的副本。
☐Deleted表用于存储DELETE和UPDATE语句所影响表中旧行的副本。
Altertriggertrig_stuonStudent
forinsert,update,delete
as
select'inserted表',*frominserted
select'deleted表',*fromdeleted
Insertintostudent(sno,sname)values(501,'张学生')
Updatestudentsetsname='王学生'wheresno=501
Deletefromstudentwheresno=501
练习:
如果学号不在1至999之间,则提示学号有错误
altertriggertrig_stuonStudent
forinsert,update
as
declare@snoint
select@sno=snofrominserted
if@sno<1or@sno>999
begin
rollback
raiserror(‘学号应该在1到999之间!
',16,1)
end
练习:
如果删除学生的基本信息,则删除学生选课记录
createtriggertrig_delonstudent
fordelete
as
deletefromsc
wheresc.sno=
(selectsnofromdeleted)
createtriggerdel_trig_stuonstudent
insteadofdelete
as
updatestudentsetstate=1wheresnoin(selectsnofromdeleted)
createtriggerupdate_trig_stuonstudent
forupdate
As
IFUPDATE(ssex)
begin
declare@sexvarchar(50),@snovarchar(50)
declarecur_sexcursorforselectsno,ssexfrominserted
opencur_sex
fetchnextfromcur_sexinto@sno,@sex
while@@fetch_status=0
begin
if(@sexnotin('男','女'))
updatestudentsetssex=''wheresno=@sno
fetchnextfromcur_sexinto@sno,@sex
end
closecur_sex
deallocatecur_sex
end
☐ALTERTRIGGER:
更改原来由CREATETRIGGER语句创建的触发器定义。
☐语法
ALTERTRIGGERtrigger_name
ON{table|view}
{
{
{FOR|AFT
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- sql复习题 精简版 sql 复习题 精简
![提示](https://static.bdocx.com/images/bang_tan.gif)