32数据定义Word文档下载推荐.docx
- 文档编号:19086406
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:32
- 大小:25.53KB
32数据定义Word文档下载推荐.docx
《32数据定义Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《32数据定义Word文档下载推荐.docx(32页珍藏版)》请在冰豆网上搜索。
索引名>
ON<
(<
[<
次序>
][<
]]…)
例6
CREATETABLEUNIQUEINDEXStusnoONStudent(Sno);
CREATETABLEUNIQUEINDEXCoucnoONCourse(Cno);
CREATETABLEUNIQUEINDEXScnoONSC(SnoASC,CnoDESC);
二、删除索引
DROPINDEX<
;
例7DROPINDEXStusno
3.3查询
SELECT[ALL∣DISTINCT]<
目标列表达式>
[,<
]…
FROM<
表名或视图名>
[,<
[WHERE<
条件表达式>
[GROUPBY<
列名1>
[HAVING<
]]
[ORDERBY<
列名2>
[ASC∣DESC];
学生-课程数据库中包括三个表
学生表:
Student(Sno,Sname,Ssex,Sage,Sdpt)
课程表:
Course(Cno,Cname,Cpno,Ccredit)
选课表:
SC(Sno,Cno,Grade)
3.3.1单表查询
一、选择表中的若干列
例1查询全体学生的学号与姓名。
SELECTSno,Sname
FROMStudent;
例2查询全体学生的姓名、学号、所在系。
SELECTSname,Sno,Sdept
例3查询全体学生的详细记录。
SELECT*
例4查询全体学生的姓名及出生年份。
SELECTSname,2001-Sage,FROMStudent;
Sname2001-Sage
李勇1980
刘晨1981
王敏1982
张立1981
例5查询全体学生的姓名、出生年份、所在系(小写)。
SELECTSname,“YearofBirth:
”,2001-Sage,ISLOWER(Sdept)
Sname“YearofBirth:
”2001-SageISLOWER(Sdept)
李勇YearofBirth:
1980cs
刘晨YearofBirth:
1981is
王敏YearofBirth:
1982ma
张立YearofBirth:
SELECTSnameNAME,“YearofBirth:
”BIRTH,2001-SageBIRTHDAY,ISLOWER(Sdept)DEPARTMENT
二、选择表中的若干元组
假设SC表中有下列数据
SnoCnoGrade
95001192
95001285
95001388
95002290
95002380
例6查询选修了课程的学生学号。
SELECTSno
FROMSC;
结果为:
Sno
95001
95002
SELECTDIATINCTSno
*****DISTINCT消除重复行******
例7查询计算机系全体学生的名单。
SELECTSname
FROMStudent
WHERESdept=’CS’;
例8查询所有年龄在20岁以下的学生姓名及年龄。
SELECTSname,Sage
WHERESage<
20;
或SELECTSname,Sage
WHERENOTSage>
=20;
例9查询考试成绩有不及格的学生的学号。
SELECTDISTINCTSno
FROMCourse
WHEREGrade<
60;
例10查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄。
SELECTSname,Sdept,Sage
WHERESageBETWEEN20AND23;
例11查询年龄不在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄。
WHERESageNOTBETWEEN20AND23;
例12查询信息系(IS)、数学系(MA)和计算机系(CS)学生的姓名和性别。
SELECTSname,Ssex
WHERESdeptIN(‘IN’,’MA’,’CS’)
例13查询不是信息系(IS)、数学系(MA)和计算机系(CS)学生的姓名和性别。
WHERESdeptNOTIN(‘IN’,’MA’,’CS’)
·
%代表任意长度的字符串。
_代表任意单个字。
例14查询学号为95001的学生的详细情况。
FROMStudent
WHERESnoLIKE‘95001’
等价于:
例15查询所有姓刘的学生的姓名、学号和性别。
SELECTSname,Sno,Ssex
WHERESnameLIKE‘刘%’
例16查询姓“欧阳”且全名为三个汉字的学生的姓名。
WHERESnameLIKE‘欧阳__’;
例17查询名字中第2个字为“阳”字的学生的姓名和学号。
SELECTSname,Sno
WHERESnameLIKE‘__阳%’;
例18查询所有不姓刘的学生的姓名。
WHERESnameNOTLIKE‘刘%’
例19查询DB_Design课程的课程号和学分。
SELECTCno,Ccredit
WHERECnameLIKE‘DB\_Design’ESCAPE‘\’
例20查询以“DB_”开头,且倒数第3个字符为i的课程的详细情况。
WHERECnameLIKE‘DB\_%__’ESCAPE‘\’;
例21查询缺少成绩的学生的学号和相应的课程号。
SELECLSno,Cno
FORMSC
WHEREGradeISNULL;
或SELECLSno,Cno
例22查询所有有成绩的学生的学号和相应的课程号。
WHEREGradeISNOTNULL;
例23查询计算机系年龄在20岁以下的学生姓名。
WHERESdept=’CS’ANDSage<
三、对查询结果排序
例24查询选修了3号课程的学生的学号及成绩,查询结果按分数的降序排列。
SELECTSno,Grade
FROMSC
WHERECno=’3’
ORDERBYGradeDESC;
例25查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列。
ORDERBYSdept,SageDESC;
四、使用集函数
COUNT([DISTINCT∣ALL]*)统计元组个数
COUNT([DISTINCT∣ALL]<
)统计一列中值的个数
SUM([DISTINCT∣ALL]<
)计算一列值的总和(数值型)
AVG([DISTINCT∣ALL]<
)计算一列值的平均值(数值型)
MAX([DISTINCT∣ALL]<
)求一列值的最大值(数值型)
MIN([DISTINCT∣ALL]<
)求一列值的最小值(数值型)
例26查询学生总数。
SELECTCOUNT(*)
例27查询选修了课程的学生人数。
SELECTCOUNT(DISTINCTSno)
例28计算1号课程的学生平均成绩。
SELECTAVG(Grade)
WHERECno=’1’;
例29查询选修1号课程的学生最高分数。
SELECTMAX(Grade)
五、对查询结果分组
例30求各个课程号及相应的选课人数。
SELECTCno,COUNT(Sno)
GROUPBYCno;
CnoCOUNT(Sno)
122
234
344
433
548
例31查询选修了3门以上课程的学生学号。
GROUPBYSno
HAVINGCOUNT(*)>
3;
3.3.2连接查询
例32查询每个学生及其选修课程的情况。
SELECTstudent.*,SC.*
FROMStudent,SC
WHEREStudent.Sno=SC.Sno;
例33查询每个学生及其选修课程的情况(自然连接)。
SELECTstudent.Sno,Sname,Sage,Sdept,Cno,Grade
例34查询每门课的间接先修课(即先修课的先修课)。
FIRST表(Course表)
CnoCnameCpnoCcredit
1数据库54
2数学2
3信息系统14
4操作系统63
5数据结构74
6数据处理2
7PASCAL语言64
SECOND表(Course表)
SELECLEFIRST.Cno,SECOND.Cpno
FROMCourseFIRSE,CourseSECOND
WHEREFIRSE.Cpno=SECOND.Cno;
CnoCpno
17
35
外连接
WHEREStudent.Sno=SC.Sno(*);
复合条件连接
例35查询选修2号课程且成绩在90分以上的所有学生。
SELECTStudent.Sno,Sname
FROMStudent,SC
WHEREStudent.Sno=SC.SnoAND
SC.Cno=’2’AND
SC.Ggrade>
90;
多表连接
例36查询每个学生的学号、姓名、选修的课程名及成绩。
SELECEStudent.Sno,Sname,Cname,Grade
FROMStudent,SC,Course
WHEREStudent.Sno=SC.SnoandSC.Cno=Course.Cno;
3.3.3嵌套查询
例37查询与“刘晨”在同一个系学习的学生。
SELECTSno,Sname,Sdept
WHERESdeptIN
(SELECTSdept
FROMStudent
WHERESname=’刘晨’;
当结果为单值时可以用‘=’代替‘IN’
WHERESdept=
用自然连接完成
SELECTS1.Sno,S1.Sname,S1.Sdept
FROMStudentS1,StudentS2
WHERES1.Sdept=S2.SdeptAND
S2.Sname=’刘晨’;
例38查询选修了课程名为“信息系统”的学生学号和姓名。
WHERESnoIN
(SELECTSno
WHERECnoIN
(SELECTCno
FROMCourse
WHERECname=’信息系统’);
用连接查询
SC.Cno=Course.CnoAND
Course.Cname=’信息系统’;
带有ANY或ALL谓词的子查询
>
ANY大于子查询结果中的某个值
ALL大于子查询结果中的所有值
<
ANY小于子查询结果中的某个值
ALL小于子查询结果中的所有值
=ANY大于等于子查询结果中的某个值
=ALL大于等于子查询结果中的所有值
=ANY小于等于子查询结果中的某个值
=ALL小于等于子查询结果中的所有值
=ANY等于子查询结果中的某个值
=ALL等于子查询结果中的所有值(无意义)
!
=(或<
)ANY不等于子查询结果中的某个值
)ALL不等于子查询结果中的任何一个值
例39查询其他系中比信息系某一学生年龄小的学生姓名和年龄。
SELECTSname,Sage
ANY(SELECTSage
FROMStudent
WHERESdept=’IS’
ANDSdept<
’IS’
用集函数实现
SELECTSname.Sage
(SELECTMAX(Sage)
WHERESdept=’IS’)
例40查询其他系中比信息系所有学生年龄都小的学生姓名及年龄。
ALL
(SELECTSage
ANDSdept<
(SELECTMIN(Sage)
带有EXISTS谓词的子查询
例41查询所有选修了1号课程的学生姓名。
WHEREEXISTS
(SELECT*
FROMSC
WHERESno=Student.SnoANDCno=’1’);
例42查询没有选修1号课程的学生姓名。
WHERENOTEXISTS
例43查询选修了全部课程的学生姓名。
(SELECT*
WHERENOTEXISTS
WHERESno=Student.Sno
ANDCno=Course.Cno);
例44查询至少选修了学生95002选修的全部课程的学号号码。
SELECTDISTINCTSno
FROMSCSCX
FROMSCSCY
WHERESCY.Sno=’95002’AND
NOTEXISTS
FROMSCSCZ
WHERESCZ.Cno=SCY.Cno
3.3.4集合查询
例45查询计算机系的学生及年龄不大于19岁的学生。
WHERESdept=’CS’
UNION
=19;
例46查询选修了课程1或选修了课程2的学生。
****查询选修课程1的学生集合与选修课程2的学生集合的并集。
SELECTSno
WHERECno=’1’
WHERECno=’2’;
例47查询计算机系的学生与年龄不大于19岁的学生的交集。
*****查询计算机系中年龄不大于19岁的学生。
WHERESdept=’CS’AND
Sage<
=19
例48查询选修课程1的学生集合与选修课程2的学生集合的交集。
*****查询既选修了课程1又选修了课程2的学生。
WHERECno=’1’ANDSnoIN
(SELECTSno
WHERECno=’2’);
例49查询计算机系的学生与年龄不大于19岁的学生的差集。
****查询计算机系中年龄大于19岁的学生。
Sage>
19;
3.4数据更新
SQL中数据更新包括插入数据、修改数据和删除数据三条语句。
3.4.1插入数据
格式1:
INSERT
INTO〈表名〉[(〈属性列1〉[,〈属性列2〉…])]
VALUE(〈常量1〉[,〈常量2〉…])
例1将一个新学生记录(学号:
95020;
姓名:
陈冬;
性别:
男;
所在系:
IS;
年龄:
18岁)插入到Student表中。
INSERT
INTOStudent
VALUE(‘95020’,‘陈冬’,‘男’,‘IS’,18)
例2插入一条选课记录(‘95020’,‘1’)。
INTOSC(Sno,Cno)
VALUE(‘95020’,‘1’)
新插入记录在Grade列上取空值。
格式2:
子查询;
例3对每个系,求学生的平均年龄,并把结果存入数据库。
CREATTABLEDeptage
(SdeptCHAR(15)
AvgageSMALINT);
INTODeptage(Sdept,Avgage)
SELECTSdept,AVG(Sage)
GROUPBYSdept;
3.4.2修改数据
UPDATE〈表名〉
SET〈列名〉=〈表达式〉[,〈列名〉=〈表达式〉]…
[WHERE〈条件〉];
例4将学生95001的年龄改为22岁。
UPDATEStudent
SETSage=22
WHERESno=’95001’
例5将所有学生的年龄增加1岁。
SETSage=Sage+1;
例6将计算机系全体学生的成绩置零。
UPDATESC
SETGrade=0
WHERE‘CS’=
WHEREStudent,Sno=SC.Sno);
3.4.3删除数据
DELETE
FROM〈表名〉
[WHERE〈条件〉];
例7删除学号为95019的学生记录。
WHERESno=’95019’;
例8删除所有的学生选课记录。
DELETE
例9删除计算机系所有学生的选课记录。
(SELECTSdept
WHEREStudent.Sno=SC.Sno);
更新操作与数据库的一致性
删除95019学生同时删除95019学生的选课记录。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 32 数据 定义