数据库重点Word格式.docx

上传人:b****4 文档编号:16360734 上传时间:2022-11-23 格式:DOCX 页数:17 大小:44.38KB
下载 相关 举报
数据库重点Word格式.docx_第1页
第1页 / 共17页
数据库重点Word格式.docx_第2页
第2页 / 共17页
数据库重点Word格式.docx_第3页
第3页 / 共17页
数据库重点Word格式.docx_第4页
第4页 / 共17页
数据库重点Word格式.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

数据库重点Word格式.docx

《数据库重点Word格式.docx》由会员分享,可在线阅读,更多相关《数据库重点Word格式.docx(17页珍藏版)》请在冰豆网上搜索。

数据库重点Word格式.docx

200012

欧阳雨

200515

刘依依

23

表3-5课程表

课程号

课程名

前修课程

学分

c01

数据库原理

c03

4

c02

信息系统

C01

数据结构

null

6

c04

DB_设计

co1

3

表3-6成绩表

成绩

70

80

95

45

78

……

 

实验D002:

单表查询实验

六、验证性实验

先选择要操作的数据库,用T-SQL命令:

USESTUDENT

或在工具栏的当前数据库中选择STUDENT,如图3-11所示。

工作数据库

图3-11查询编辑器界面

以下查询要求在逐个语句执行,执行后将执行结果记录下来:

1.条件查询全部数据

SELECT*FROMS

2.在SELECT关键字后指明要检索的列名

(1)查询S表的学生学号和姓名

SELECTSNO,SNAMEFROMS

(2)查询S表中的系部名

SELECTDEPAFROMS

(3)查询S表中不重复的系部名

SELECTDISTINCTDEPAFROMS

3.改变列标题的检索

(1)使用空格形式:

列名新标题

SELECTSNO学号,SNAME姓名FROMS

(2)使用“AS”形式,列名AS新标题

SELECTSNOAS学号,SNAMEAS姓名FROMS

3.有条件选择的查询

(1)在S表检索“信息系”的学生信息

WHEREDEPA=’信息系’

(2)在S表中检索姓“王”的学生信息

WHEREsnamelike‘王%’

(3)在SC表检索’C01’选修课成绩为空的选课记录

SELECTSNO,CNOFROMSC

WHEREcno=’C01’andgradeisnull

(4)检索年龄为21,18,22的学生学号、姓名

WHEREagein(21,18,22)

AgeIN{21,18,22}表示某条记录的AGE字段值是否是集合{21,18,22}中的元素,如是,则选择。

它等价于下面语句:

WHEREage=18orage=21orage=22

4.使用聚集函数

(1)查询选课表中最高分、平均分、最低分

SELECTMAX(GRADE),AVG(GRADE),MIN(GRADE)

FROMSC

(2)查询“C01”课程的最高分、平均分和最小成绩。

WHERECNO=‘C01’

5.对检索结果进行排序

SELECT*FROMSC

WHEREGRADEISNULL

ORDERBYSNO,CNODESC

6.进行分组统计:

(1)查询各学生的选课数

SELECTSNO,COUNT(*)

GROUPBYSNO

(2)使用HAVING字句:

“选课表”中查询选修了3门以上课程的学生学号。

SELECTSNO,COUNT(*)FROMSC

HAVINGCOUNT(*)>

=3

(3)“选课表”中按学号分组汇总学生的平均分,并按平均分的降序排列。

SELECTSNO学号,AVG(GRADE)平均分FROMSC

ORDERBY平均分DESC

(4)析下面两个SELECT语句执行结果,说明有什么不同?

SELECTSNOFROMSC

ORDERBYSNO

GO

7.在ORDERBY字句后带COMPUTE字句

(1)按学号对不及格的成绩记录进行汇总。

SELECTSNO,CNO,GRADEFROMSC

WHEREGRADE<

60

COMPUTECOUNT(GRADE)

(2)按学号对不及格的成绩记录进行明细汇总(即根据排序结果进行分组汇总)

COMPUTECOUNT(GRADE)BYSNO

实验D003:

多表查询实验

注意:

多表连接时要注意当某列名在两张表中同时存在时,在列名前要加表名以示区分。

3.表自身的连接

SELECT别名.列名,…

FROM表1AS别名1,表1AS别名2

WHERE别名1.列名=别名2.列名

自身连接时因为是对同一张表操作,为区分开来对该表操作的顺序,需要对表取两个别名,以示区别。

4.IN嵌套子查询

SELECT<

目标列表达式列表>

FROM表名

WHERE列名IN

(SELECT字句)

5.EXISTS嵌套子查询

–带有EXISTS谓词的子查询不返回任何数据,只产生逻辑真值“true”或逻辑假值“false”。

●若内层查询结果非空,则返回真值

●若内层查询结果为空,则返回假值。

由EXISTS引出的子查询,其目标列表达式通常都用*,因为带EXISTS的子查询只返回真值或假值,给出列名无实际意义

所以,EXISTS子查询中一般是相关自查询,即子查询脱离父查询后不能单独执行。

思考:

如果EXISTS子查询中是不相关子查询,会有什么结果?

1.多表的连接查询(相当于做笛卡儿乘积)

SELECT*FROMC,SC

2.表的等值连接查询

(1)查询各学生的选课信息(包括学号、课程名、成绩)

因为学号和成绩在SC表中,而课程名在C表中,因此需要多表查询。

SELECTSNO,CNAME,GRADE

FROMC,SC

WHEREC.CNO=SC.CNO

(2)查询学生的选课记录,显示学生的学号、姓名、课程号、成绩。

SELECTS.SNO,SNAME,CNO,GRADE

FROMS,SC

WHERES.SNO=SC.SNO

(3)查询学生的选课记录,显示学生的学号、姓名、课程号、课程名、成绩

SELECTS.SNO,SNAME,SC.CNO,CNAME,GRADE

FROMS,SC,C

WHERES.SNO=SC.SNOANDSC.CNO=C.CNO

3.左外连接查询:

当希望左表(第一张表)中所有记录全部显示出来时,需要用左外连接操作。

INSERTINTOS(SNO,SNAME)VALUES(’20000’,’ZXX’)

FROMS

LEFTOUTERJOINSCONS.SNO=SC.SNO

4.表自身的连接

(1)查询与‘李勇’同系的学生学号

将学生表S与S本身进行等值连接(系部相等),因为S与S做连接操作时不能区分,所以,对表取一个别名。

然后将第二张表S中名字为‘李勇’的记录选择出就可。

SELECTS1.SNO

FROMSASS1,SASS2

WHERES1.DEPA=S2.DEPAANDS2.SNAME=’李勇’

(2)显示每个学生的非最高分成绩(学生自己的选课成绩中,不是最高分的选课记录显示出来)

SELECTSNO,CNO,GRADEFROMSCASSC1

WHEREGRADE<

(SELECTMAX(GRADE)FROMSCASSC2

WHERESC2.SNO=SC1.SNO)

5.IN嵌套子查询

(1)不相关的IN子查询:

子查询可以单独执行,与被嵌套的查询无关。

如,查询与‘李勇’同系的学生学号

可以先查询出‘李勇’所在的系,然后再到S表中查询与上述结果相同的记录。

SELECTSNO

FROMS

WHEREDEPAIN

(SELECTDEPAFROMSWHERESNAME=‘李勇’)

查询‘数据库原理’课程的选课人数

SELECTCOUNT(*)FROMSC

WHERECNOIN

(SELECTCNOFROMCWHERECNAME=‘数据库原理’)

(2)相关的子查询:

子查询中要用到父查询表的信息,子查询不能独立执行。

如,查询选修课程号为“C01”课程且成绩至少高于选修课程号为“C02”的同学的Cno、Sno和GRADE。

在子查询中,因为要查找该同学‘C02’课程的成绩,所以,需要父查询表中该学生的学号信息。

SELECTCNO,SNO,GRADE

FROMSCASSC1

WHERECNO=’C01’ANDGRADE>

SELECTGRADEFROMSCASSC2

WHERESC2.SNO=SC1.SNOANDSC2.CNO=’C02’)

6.EXISTS嵌套子查询

(1)执行以下语句,观察显示的两个查询结果

SELECTSNO,SNAME

WHEREEXISTS

(SELECT*FROMSCWHERECNO=‘C03’)

GO

(2)执行以下语句,观察显示的两个查询结果

INSERTINTOCVALUES(‘C06’,‘数据库安全’,NULL,3)

(SELECT*FROMSCWHERECNO=‘C06’)

(3)查询‘数据库原理’课程的选课人数

SELECTCOUNT(*)

(SELECT*FROMC

WHEREC.CNO=SC.CNOANDCNAME=’数据库原理’)

实验D004:

数据完整性约束实验

4.修改表结构时可以添加或删除完整性约束

ALTERTABLE表名

ADD[CONSTRAINT完整性约束名]约束

如,在S表上添加主键约束

ALTERTABLES

ADDCONSTRAINTpriKPRIMARYKEY(SNO)

每小题语句输入好后执行,观察执行后有什么结果?

想想为什么?

1.PRIMARYKEY主键约束的建立

(1)建立表时加主键约束

CREATETABLEST(SNOVARCHAR(10)PRIMARYKEY,SNAMEVARCHAR(20)NOTNULL,DEPAVARCHAR(20),AGEINT,SEXCHAR(4))

INSERTINTOST(SNO,SNAME,DEPA)VALUES(‘1001’,‘ZXX’,NULL)

INSERTINTOST(SNO,SNAME)VALUES(‘1001’,‘MID’)

INSERTINTOST(SNO,SNAME)VALUES(NULL,‘ZXX’)

(2)在已有的表上添加约束

CREATETABLEST2(SNOVARCHAR(10)NOTNULL,SNAMEVARCHAR(20)NOTNULL,DEPAVARCHAR(20),AGEINT,SEXCHAR(4))

INSERTINTOST2SELECT*FROMS

ALTERTABLEST2ADDCONSTRAINTpriKEYPRIMARYKEY(SNO)

INSERTINTOST2(SNO,SNAME,DEPA)VALUES(‘200512’,‘Beibei’,NULL)

运行后出现什么结果?

分析原因。

2.DEFAULT约束

CREATETABLECUST(NOVARCHAR(5)PRIMARYKEY,WEIGHTINTDEFUALT(10))

INSERTINTOCUST(NO)VALUES(‘ZY01’)

INSERTINTOCUST(NO)VALUES(‘ZY03’)

INSERTINTOCUSTVALUES(‘ZY02’,20)

SELECT*FROMCUST

3.CHECK约束

CREATETABLECUSTOMER(CUSTNOCHAR(4)NOTNULLCHECK(CUSTNOLIKE‘[A-Z0-9][A-Z0-9][A-Z0-9][A-Z0-9]’),CUSTNAMEVARCHAR(20))

INSERTINTOCUSTOMERVALUES(‘BJ01’,‘BeijingGridCorp.’)

INSERTINTOCUSTOMERVALUES(‘BJ1’,‘BeijingGridCorp.’)

INSERTINTOCUSTOMERVALUES(‘BJ*1’,‘BeijingGridCorp.’)

4.UNIQUE唯一性约束的建立

CREATETABLECUST1(CUSTNOCHAR(4)PRIMARYKEY,CUSTNAMEVARCHAR(20)NNIQUE,COUNTRYVARCHAR(10))

INSERTINTOCUST1(CUSTNO)VALUES(‘BJ01’)

INSERTINTOCUST1(CUSTNO)VALUES(‘BJ02’)

INSERTINTOCUST1VALUES(‘BJ03’,‘BeijingGridCorp.’)

INSERTINTOCUST1VALUES(‘BJ04’,‘BeijingGridCorp.’)

5.FOREIGNKEY外键约束的建立

ALTERTABLECADDCONSTRAINTCpriKEYPRIMARYKEY(CNO)

ALTERTABLESCADDCONSTRAINTscpriKEYPRIMARYKEY(SNO,CNO)

ALTERTABLESCADDCONSTRAINTscforKEY1FOREIGNKEY(SNO)REFERENCESST2(SNO)

ALTERTABLESCADDCONSTRAINTscforKEY2FOREIGNKEY(CNO)REFERENCESC(CNO)

INSERTINTOSC(SNO,CNO)VALUES(‘890’,’C10’)

INSERTINTOSC(SNO,CNO)VALUES(‘200518’,’C01’)

INSERTINTOSC(SNO,CNO)VALUES(‘890’,NULL)

INSERTINTOSC(SNO,CNO)VALUES(NULL,’C10’)

6.规则的建立

建立规则:

Createrulerangcountry

As

@listin(‘USA’,’China’)

规则的绑定:

Sp_bindrulerangcountry,‘cust1.country’

INSERTINTOCUST1VALUES(‘BJ05’,’YONEX’,‘GERMAN’)

INSERTINTOCUST1VALUES(‘BJ05’,’YONEX’,‘USA’)

实验D005:

数据操作与索引实验

1.数据的插入

(1)单记录的插入

INSERTINTOS(SNO,SNAME)VALUES(’200300’,’Paulwen’)

(2)多记录的插入

CREATETABLESBAK(SNOVARCHAR(10)NOTNULL,SNAMEVARCHAR(20),DEPAVARCHAR(20),AGEINT,SEXCHAR(4))

SELECT*FROMSBAK

INSERTINTOSBAKSELECT*FROMS

2.数据的删除

CREATETABLECBAK(CNOVARCHAR(10)NOTNULL,CNAMEVARCHAR(20),CPNOVARCHAR(10),CREDITINT)

INSERTINTOCBAKSELECT*FROMC

DELETEFROMCBAKWHERECREDIT<

SELECT*FROMCBAK

3.数据的修改

UPDATESSETDEPA=‘CS’

WHEREDEPA=‘计算机系’

4.索引的建立

(1)建立非聚族索引

SELECT*FROMC

CREATEINDEXICNAMEONC(CNAME)

SELECT*FROMC/*看数据表*/

SELECT*FROMCWITH(INDEX=ICNAME)/*按索引次序看数据表*/

(2)建立聚族索引

CREATECLUSTEREDINDEXCICNOONC(CNO)

SELECT*FROMCWITH(INDEX=CICNO)

(3)建立唯一索引

CREATEUNIQUEINDEXUISNOONSC(SNO)

执行后有什么结果?

为什么会出现这个结果?

CREATEUNIQUEINDEXUISNOONSC(SNO,CNODESC)

(4)建立复合索引

CREATEINDEXIAGESNOONS(AGEDESC,SNO)

SELECT*FROMSWITH(INDEX=IAGESNO)

(5)查看表中的索引

SP_HELPINDEX‘S’

(6)删除表中的索引

DROPINDEXS.IAGESNO

5.视图及其操作

(1)视图的建立

CREATEVIEWSHOWSNO

AS

SELECTS.SNO,SNAME,AVG(GRADE)AS平均成绩

GROUPBYS.SNO,SNAME

SELECT*FROMSHOWSNO

创建信息系学生的视图

CREATEVIEWVISDEPA

SELECT*FROMSWHEREDEPA=’信息系’

(2)在视图上修改数据

UPDATEVISDEPA

SETDEPA=’IS’

SELECT*FROMVISDEPA

视图中还有数据吗?

为什么会这样?

CREATEVIEWS_SUM

SELECTSNO,SUM(GRADE)ASTOTALSCOREFROMSC

UPDATES_SUM

SETTOTALSCORE=60

执行语句,出现什么结果?

分析为什么?

(3)在视图上删除数据

DELETEFROMVISDEPAWHERESEX=‘女’

1.编程实现查询与‘李勇’同系的学生学号

DECLARE@DEPAVARCHAR(20)

SELECT@DEPA=DEPAFROMSWHERESNAME=’李勇’

SELECTSNOFROMS

WHEREDEPA=@DEPA

2.运行下面的程序,观察运行结果

DECLARE@XINT,@YINT

SET@X=0

SELECT@Y=1

WHILE@Y<

BEGIN

SET@X=@X+@Y

SELECT@Y=@Y+2

PRINTSTR(@Y)+’INTHELOOP’

IF@Y>

14

BREAK

END

PRINT‘OUTOFTHELOOP’

3.CASE函数的使用

(1)CASE后带表达式

Select性别=casesex

when‘男’then‘M’

when‘女’then‘F’

else‘输入出错’

end

Froms

(2)CASE后不带参数

SELECT性别=CASE

WHENSEX=‘男’THEN‘M’

WHENSEX=‘女’THEN‘F’

ELSE‘ERROR’

END

(3)用CASE语句进行多条件

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 互联网

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1