常用的sql语句Word格式.docx
- 文档编号:20396611
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:11
- 大小:41.37KB
常用的sql语句Word格式.docx
《常用的sql语句Word格式.docx》由会员分享,可在线阅读,更多相关《常用的sql语句Word格式.docx(11页珍藏版)》请在冰豆网上搜索。
∙右外连接:
rightjoin
∙全外连接:
fulljoin
∙全内连接:
innerjoin
SQL语言的构成
∙DDL语言:
数据定义,定义基本表、视图、索引;
∙DML语言:
数据操纵,查询、增加、修改、删除
∙DCL语言:
权限
2、查询概述
查询包括:
单表查询、连接查询、带有exists的相关子查询、集合操作四中。
select...from常用语句执行过程
select…⑤投影
from…①table→内存
where…②选取元组
group…③分组
having…④选择分组
[{union|…}⑥查徇结果的集合运算
select…]①~⑤
orderby…⑦排序输出
3、单表查询
groupby只有出现在groupby子句中的属性,才可出现在select子句中。
用orderby子句对查询结果按照一个或多个列的值进行升/降排列输出,升序为ASC;
降序为desc,空值将作为最大值排序
having与where的区别
∙where决定哪些元组被选择参加运算,作用于关系中的元组
∙having决定哪些分组符合要求,作用于分组
4、连接查询
连接查询包括:
多表连接查询、单表连接查询(自连接)、外连接查询、嵌套查询4种
连接条件一
[表名1.]列名1比较运算符[表名2.]列名2
连接条件二
[表名1.]列名1between[表名2.]列名2and[表名2.]列名3
连接条件中的列名称为连接字段,对应的连接字段应是可比的。
执行过程:
采用表扫描的方法,在表1中找到第一个元组,然后从头开始扫描表2,查找到满足条件的元组即进行串接并存入结果表中;
再继续扫描表2,依次类推,直到表2末尾。
再从表1中取第二个元组,重复上述的操作,直到表1中的元组全部处理完毕。
4.1单表连接(自连接)
用表别名把一个表定义为两个不同的表进行连接。
例:
查找至少选修了2号和4号课程的学生的学号
selectFIRST.sno
fromSCasFIRST,SCasSECOND
whereFIRST.Sno=SECOND.SnoandFIRST.cno='
s2'
andSECOND.cno='
4'
4.2外连接查询
外连接查询包括:
Leftjoin、rightjoin、fulljoin
4.3嵌套查询
∙在select…from…where语句结构的where子句中可嵌入一个select语句块
∙其上层查询称为外层查询或父查询,其下层查询称为内层查询或子查询
∙SQL语言允许使用多重嵌套查询
∙在子查询中不允许使用orderby子句
∙嵌套查询的实现一般是从里到外,即先进行子查询,再把其结果用于父查询作为条件
4.3.1返回单个值的子查询
求与“刘力”同一个系的学生名,年龄
方法一:
selectSname,Sage
fromstudent
whereSdept=(selectsdeptfromstudentwhereSname="
刘力"
);
方法二:
selectFIRST.Sname,FIRST.Sage
fromStudentFIRST,StudentSECOND
whereFIRST.Sdept=SECOND.SdeptANDSECOND.Sname="
;
4.3.2返回一组值的子查询
求选修“C6”课程且成绩超过90分的学生
select*from
student
wheresnoIN(selectsnofromSCwhereCno="
C6"
ANDGrade>
90);
方法二(连接查询):
selectstudent.*
fromstudent,SC
whereStudent.Sno=SC.SnoANDCno="
90;
求比计算机系中某一学生年龄小的其他系的学生
select*
where
sdept!
="
CS"
AND
sage<
ANY(selectSagefromStudentwhereSdept="
select*
fromStudent
where
Sdept!
=’CS’AND
Sage<
(selectMAX(Sage)fromStudentwhereSdept="
4.3.3多重子查询
求D01部门中工资与国贸系中任意职工相同的职工姓名和工资
表结构:
Teacher(tno,tname,salary,dno)
Department(dno,dname)
查询语句:
selectTname,Salary
fromTeacher
Dno="
D01"
salaryIN(
selectsalaryfromteacher
whereDno=(selectDNOfromdepartmentwhereDname="
国贸"
)
);
求工资介于“张三”与“里司”两个之间的职工
fromteacher
Salary>
=(selectMIN(Salary)fromteacherwhereTnameIN("
张三"
"
里司"
))AND
Salary<
=(selectMAX(Salary)fromteacherwhereTnameIN("
4.3.4在from语句中使用子查询,对查询结果定义表名及列名
求平均成绩超过80分的学号及平均成绩
selectSno,avg_G
from(selectSno,avg(Grade)fromSCgroupbySno)ASRA(Sno,avg_G)
whereavg_G>
80;
ASRA(Sno,avg_G),为查询作为定义表名(RA)和列名(Sno,avg_G)
5、带有exists的相关子查询
∙不相关子查询:
子查询的查询条件不依赖于父查询的称为不相关子查询。
∙相关子查询:
子查询的查询条件依赖于外层父查询的某个属性值的称为相关子查询,带exists的子查询就是相关子查询
∙exists表示存在量词,带有exists的子查询不返回任何记录的数据,只返回逻辑值“True”或“False”
求所有选修了“C1”课程的学生名。
不相关子查询:
selectSnamefromstudentwheresnoIN(selectsnofromSCwhereCno="
C1"
相关子查询
selectSnamefromstudent
whereexists(select*fromSCwherestudent.sno=SC.snoANDCno="
相关子查询执行过程:
先在外层查询中取student表的第一个元组(记录),用该记录的相关的属性值(在内层where子句中给定的)处理内层查询,若外层的where子句返回‘TRUE’值,则此元组送入结果的表中。
然后再取下一个元组;
重复上述过程直到外层表的记录全部遍历一次为止。
∙不关心子查询的具体内容,因此用select*
∙exists+子查询用来判断该子查询是否返回元组
∙当子查询的结果集非空时,exists为“True”;
当子查询的结果集为空时,exists为“False”。
∙notexists:
若子查询结果为空,返回“TRUE”值,否则返回“FALSE”
查询选修了所有课程的学生的姓名(续)
selectSname
fromstudent
wherenotexists(
select*
fromCourse
wherenotexists(
select*fromSCwhere
student.sno=SC.snoANDCourse.Cno=SC.Cno
)
查询至少选修了S1所选的全部课程的学生名
wherenotexists(
select*
fromSCSCX
where
SCX.sno="
s1"
notexists(
fromSCSCY
wherestudent.sno=SCY.snoANDSCX.Cno=SCY.Cno
6、SQL的集合操作
∙属性个数必须一致、对应的类型必须一致
∙属性名可以不一致,最终结果集采用第一个结果的属性名
∙缺省为自动去除重复元组,除非显式说明ALL
∙orderby放在整个语句的最后
6.1“并”操作,例:
查询计算机系的学生或者年龄不大于19岁的学生,并按年龄倒排序。
select*fromstudentwhereSdept="
UNION
select*fromstudentwhereAGE<
=19
orderbyAGEdesc
6.2“交”操作,例:
查询计算机系的学生并且年龄不大于19岁的学生,并按年龄倒排序。
(select*fromstudentwhereSdept="
)
INTERSECT
(select*fromstudentwhereAGE<
=19)
6.3“差”操作,例:
查询选修课程1但没有选修课程2的学生。
selectSname,Sdept
wheresnoIN(
(selectsnofromSCwhereCno="
1"
EXCEPT
2"
7、插入操作
格式:
insertinto表名[(列名1,…)]values(列值1,…)
插入一已知元组的全部列值
insertintostudentvalues("
2003001"
陈冬"
18,"
男"
电商"
管理学院"
徐州"
插入一已知元组的部分列值
insertintoSC(Sno,Cno)values("
C003"
插入子查询的结果
设关系S_G(Sno,avg_G),把平均成绩大于80的男生的学号及平均成绩存入S_G中
insertintoS_G(sno,avg_G)(
selectsno,avg(GRADE)
fromSC
whereSnoIN(selectSnofromStudentwhereSEX="
groupbySno
havingavg(GRADE)>
80
8、删除操作
deletefrom表名[where条件];
∙只能对整个元组操作,不能只删除某些属性上的值
∙只能对一个关系(表)起作用,若要从多个关系(表)中删除元组,则必须对每个关系分别执行删除命令
9、修改操作
update语句一次只能操作一个表。
格式1:
update表名[别名]
set列名=表达式,...
[where条件];
格式2:
set(列名,...)=(子查询)
工种为SALESMEN的职工的工资改为工种平均工资的110%
updateEMPLOYEE
setSalary=(select1.1*avg(Salary)fromEMPLOYEEwhereJOB="
SALESMEN"
whereJOB="
将所有学生的年龄增加1岁
updatestudentsetSage=Sage+1;
10、数据定义
创建课程表
createtableSC(
snoCHAR(6)notnull,
CnoCHAR(6)notnull,
Gradesmallintdefaultnull
primarykey(sno,Cno)
foreignkey(sno)referencesstudent(sno)
foreignkey(Cno)referencesCourse(Cno)
check(Gradebetween0AND100);
常用的索引:
唯一索引和聚簇索引
唯一索引
∙对于已含重复值的属性列不能建UNIQUE索引
∙对某个列建立UNIQUE索引后,插入新记录时DBMS会自动检查新记录在该列上是否取了重复值。
这相当于增加了一个UNIQUE约束
createUNIQUEINDEXStusnoONStudent(SnoASC);
聚簇索引
建立聚簇索引后,基表中数据也需要按指定的聚簇属性值的升序或降序存放。
也即聚簇索引的索引项顺序与表中记录的物理顺序一致
createCLUSTERINDEXStusnameONStudent(Sname);
在Student表的Sname(姓名)列上建立一个聚簇索引,而且Student表中的记录将按照Sname值的升序存放。
Sqlserver中的表示方式createclusteredindex。
某些DMBS不支持聚簇索引,所以用前一定要查使用说明。
∙在一个基本表上最多只能建立一个聚簇索引
∙聚簇索引的用途:
对于某些类型的查询,可以提高查询效率
∙聚簇索引的适用范围:
很少对基表进行增删操作;
很少对其中的变长列进行修改操作
删除索引
删除索引时,系统会从数据字典中删去有关该索引的描述。
DROPINDEX[表名.]<
索引名>
删除Student表的Stusname索引
DROPINDEXStudent.Stusname;
11、视图
建立电商系学生的视图
createviewec_student
as
selectsno,sname,agefromstudentwheredept="
ec"
删除视图
DROPVIEW<
视图名>
一个视图被删除后,由此视图导出的其他视图也将失效,用户应该使用DROPVIEW语句将他们一一删除
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 常用 sql 语句
