SQL总结.docx
- 文档编号:7581517
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:12
- 大小:20.72KB
SQL总结.docx
《SQL总结.docx》由会员分享,可在线阅读,更多相关《SQL总结.docx(12页珍藏版)》请在冰豆网上搜索。
SQL总结
数据库应用SQL总结
1数据库的操作3
1.1数据库的创建createdatabasename3
1.2数据库的修改alterdatabasename3
1.2.1修改方式1:
修改modify3
1.2.2修改方式2:
添加add4
1.2.3修改方式3:
删除remove4
1.3数据库的删除dropdatabase4
2关系表的操作5
2.1关系表的创建createtablename5
2.2关系表的修改altertablename5
2.2.1修改方式1:
修改altercolumn5
2.2.2修改方式2:
添加add5
2.2.3修改方式3:
删除dropcolumn6
2.3关系表的删除droptablename6
3表数据的操作7
3.1表数据的录入insertintotablevalues7
3.2表数据的修改updatetableset7
3.3表数据的删除deletefromname7
4数据表查询8
4.1对列的相关查询selecttable_listfromtable8
4.1.1选择一个表中指定的列selecttable_listfromtable8
4.1.2查询全部列select*fromtable8
4.1.3修改查询结果中列标题selectlistaslist_namefromtable8
4.1.4替换查询结果中数据selectlistcasewhenthenendfromtable8
4.1.5查询经过计算的值selectexpressionfromtable9
4.2对行的相关查询selecttable_listfromtable9
4.2.1消除结果集中的重复行distinct9
4.2.2限制结果集的返回行数topnpercent9
4.2.3查询满足条件的行selectlistfromtablewhere9
4.3对查询结果排序orderbylist_nameasc|desc10
4.4使用聚合函数SUM()AVG()MIN()MAX()COUNT()11
4.5对查询结果分组groupby11
4.6分组数据进行过滤having11
4.7产生额外的汇总行Compute11
5多表查询12
5.1连接查询12
5.1.1条件连接12
5.1.2自身连接12
5.2嵌套查询13
5.2.1带有In谓词的子查询13
5.2.2带有比较运算符的子查询13
5.2.3带有EXISTS谓词的子查询13
5.3集合查询13
5.3.1并操作UNION13
5.3.2交操作INTERSECT13
5.3.3差操作EXCEPT14
1数据库的操作
1.1数据库的创建createdatabasename
课程数据库名称为db_stu,分别创建数据文件和事物日志,数据文件为db_stu_data,保存在C:
\ProgramFiles\MicrosoftSQLServer\MSSQL\Data\
db_stu_data.MDF,初始大小为10MB,最大大小为5MB,数据库增长按5%比例增长;日志文件为db_stu_log,保存在C:
\ProgramFiles\MicrosoftSQLServer\MSSQL\Data\db_stu_log.LDF,大小为2MB,最大可增长到100MB,按1MB增长。
createdatabasedb_stu
on
(
name=db_stu_data,
filename='C:
\ProgramFiles\MicrosoftSQLServer\MSSQL\Data\db_stu_data.MDF',
size=10MB,
maxsize=50MB,
filegrowth=5%
)
logon
(
name=db_stu_log,
filename='C:
\ProgramFiles\MicrosoftSQLServer\MSSQL\Data\db_stu_log.LDF',
size=2MB,
maxsize=100MB,
filegrowth=1MB
)
1.2数据库的修改alterdatabasename
1.2.1修改方式1:
修改modify
将数据文件的最大大小改为不受限制
Alterdatabasedb_stu
Modifyfile
(
Name=db_stu_data,
Maxsize=unlimited
)
1.2.2修改方式2:
添加add
向数据库再添加一个数据文件
Alterdatabasedb_stu
Addfile
(
Name=db_stu_data2,
filename='C:
\ProgramFiles\MicrosoftSQLServer\MSSQL\Data\db_stu_data2.MDF',
size=10MB,
maxsize=50MB,
filegrowth=5%
)
1.2.3修改方式3:
删除remove
删除数据库的数据文件
Alterdatabasedb_stu
Removefiledb_stu_data2
1.3数据库的删除dropdatabase
Dropdatabasedb_stu
2关系表的操作
2.1关系表的创建createtablename
Student表结构
列名
数据类型
长度
是否可以为空
说明
Sno
char
10
X
学号
Sname
char
30
X
姓名
Sage
Int
4
X
年龄
Ssex
Int
4
√
性别
Sdept
char
20
√
年级
usedb_stu
createtableStudent
(
Snochar(10)notnullprimarykey,
Snamechar(30)notnull,
Sageintnotnull,
Ssexintnull,
Sdeptchar(20)null
)
2.2关系表的修改altertablename
2.2.1修改方式1:
修改altercolumn
将关系表字段Ssex改为bit类型
Altertablestudent
AltercolumnSsexbit
2.2.2修改方式2:
添加add
向关系表再添加一个字段
Altertablestudent
AddSdelchar(11)null
2.2.3修改方式3:
删除dropcolumn
删除关系表字段
Altertablestudent
DropcolumnSdel
2.3关系表的删除droptablename
Droptablestudent
3表数据的操作
3.1表数据的录入insertintotablevalues
Student表记录数据
Sno
Sname
Sage
Ssex
Sdept
40900001
小红
19
0
09
40900002
小张
20
1
09
40900003
小明
19
1
09
40900004
小白
19
0
09
insertintoStudentvalues('40900001','小红',19,0,'09')
insertintoStudentvalues('40900002','小张',20,1,'09')
insertintoStudentvalues('40900003','小明',19,1,'09')
insertintoStudentvalues('40900004','小白',19,0,'09')
3.2表数据的修改updatetableset
将所有同学的年龄都增加一岁
Updatestudent
SetSage=Sage+1
3.3表数据的删除deletefromname
将男同学的记录都删除
Deletefromstudent
WhereSsex=1
4数据表查询
SELECTselect_list[INTOnew_table]
[FROMtable_source]
[WHEREsearch_condition]
[GROUPBY<列名>[,<列名>…]]
[HAVINGsearch_condition]
[ORDERBY<列名>[ASC|DESC][,<列名>…][ASC|DESC]]
4.1对列的相关查询selecttable_listfromtable
4.1.1选择一个表中指定的列selecttable_listfromtable
查询学生的学号、姓名及年龄
SELECTSno,Sname,SageFROMStudent
4.1.2查询全部列select*fromtable
SELECT*FROMStudent
4.1.3修改查询结果中列标题selectlistaslist_namefromtable
查询数据表Student中所有学生的学号及年龄,结果中各列的标题分别指定为学号、年龄;
SELECTSnoas学号,Sageas年龄FROMStudent
或者SELECTSno学号,Sage年龄FROMStudent
或者SELECT学号=Sno,年龄=SageFROMStudent
4.1.4替换查询结果中数据selectlistcasewhenthenendfromtable
查询数据表Student的学生的所有记录,结果按(学号,姓名,性别,年龄,院系)显示。
对于性别按以下规定显示:
性别为0则显示为男;性别为1则显示为女。
SELECTSno学号,Sname姓名,
性别=casewhenSsex=0then‘男’
whenSsex=1then‘女’
endage年龄,Sdept院系
FROMStudent
4.1.5查询经过计算的值selectexpressionfromtable
显示学生的学号,姓名及出生年份
SELECTSno学号,Sname姓名,
出生年份=year(getdate())-Sage
FROMStudent
注:
year(getdate())=2010
4.2对行的相关查询selecttable_listfromtable
4.2.1消除结果集中的重复行distinct
查询学生的性别和年龄,消除重复的行
SelectdistinctSsex,Sagefromstudent
4.2.2限制结果集的返回行数topnpercent
查询学生的成绩前5行记录
Selecttop5*fromchose
查询学生的成绩前30%的记录
Selecttop30percent*fromchose
4.2.3查询满足条件的行selectlistfromtablewhere
(1)逻辑运算符(andnotor)
查询院系为09或08的学生的记录
SELECT*FROMStudentWHERESdept=’09‘orSdept=’08‘
(2)比较运算符(=<<=>>=<>!
=!
>)
查询年龄大于18小于22的学生记录
SELECT*FROMStudentWHERESage>=18andSage<=22
(3)指定范围(between和notbetween)
查询年龄大于18小于22的学生记录
SELECT*FROMStudentWHERESagebetween18and22
查询学分不在1分到3分的课程号及课程名
SELECTCno,CnameFROMCourseWHERECcreditnotbetween1and3
(4)确定集合in与notin
查询年龄为18、19或20的学生记录
SELECT*FROMStudentWHERESagein(18,19,20)
查询院系为09或08的男学生的记录
SELECT*FROMStudentWHERESdeptin(’09‘,’08‘)andSsex=’男‘
(5)字符匹配(like和notlike)
通配符
含义
_下划线
任何单个字符(如a_c表示以a开头c结尾长度为3的字符串)
%百分号
包含0个或多个字符的任意字符串
(如a%c表示以a开头c结尾任意长度的字符串)
[]
在指定范围(如[a-f]或[abcdef]内的任何单个字符
[^]
不在指定范围(如[^a-f]或[^abcdef]内的任何单个字符
查找学号以2002开头的所有学生记录
SELECT*FROMStudentWHERESnolike‘2002%’
查找学号中第5个字符为5的所有学生记录
SELECT*FROMStudentWHERESnolike‘____5%’
查找学号中第5个字符不是5的所有学生记录
SELECT*FROMStudentWHERESnolike‘____[^5]%’
(6)空值比较(isnull和isnotnull)
查找目前院系不明的所有学生记录
SELECT*FROMStudentWHERESdeptisnull
查找目前已经确定院系的所有学生记录
SELECT*FROMStudentWHERESdeptisnotnull
4.3对查询结果排序orderbylist_nameasc|desc
查询选修课程号为3的学生的成绩情况,并按照分数降序排列
Select*fromchosewhereCno=‘003‘orderbyscoreDesc
查询所有学生的成绩情况,先按照课程号升序排列,再按照分数降序排列
Select*fromchoseorderbyCno,scoreDesc
4.4使用聚合函数SUM()AVG()MIN()MAX()COUNT()
查看院系为计算机的学生的平均年龄
Select平均年龄=avg(Sage)FromStudentWhereSdept=‘计算机’
显示出来学生的最大年龄、最小年龄和平均年龄
Select最大年龄=max(Sage),最小年龄=min(Sage),平均年龄=avg(Sage)FromStudent
查询参加选课学生的个数
Selectcount(distinctsno)as选课学生个数Fromchose
4.5对查询结果分组groupby
查看各个院系的学生数量
SelectSdept,count(Sno)FromStudentgroupbySdept
查询表中每个院系男女生个数
SelectSdept,Ssex,count(*)FromStudentgroupbySdept,Ssex
查看各个课程的平均成绩
SelectCno,avg(score)FromchosegroupbyCno
4.6分组数据进行过滤having
查找男生人数超过20的年级
SelectSdeptFromStudentwhereSsex=‘男’groupbySdepthavingcount(*)>=20
查看平均成绩在60以上的各个课程
SelectCno,avg(Grade)as‘平均成绩’FromchosegroupbyCnohavingavg(Grade)>=60
4.7产生额外的汇总行Compute
查找计算机院系学生的学号、姓名,并统计CS的学生人数
SelectSno,SnameFromStudentwhereSdept=‘计算机’computecount(Sno)
5多表查询
5.1连接查询
select[all|distinct]<目标列表达式>[,<目标列表达式>]…
from<表名1>[,<表名2>]…
[where<条件表达式>]
Where子句中用来连接两个表的条件称为连接条件或连接谓词。
一般格式为:
[<表名1>.]<列名1><比较运算符>[<表名2>.]<列名2>
5.1.1条件连接
查询选修课程号为2的学生姓名
SELECTsnameFROMStudent,choseWHEREStudent.Sno=chose.snoando='2'
查询学号为’40900001’的学生的姓名、院系、课程号及成绩
SELECTsname,sdept,cno,score
FROMStudent,chose
WHEREStudent.Sno=‘40090001'andStudent.Sno=chose.Sno
查询每个学生的学号、姓名、院系及选修课程的课程号、课程名和课程成绩
SELECTStudent.sno,sname,sdept,o,cname,score
FROMStudent,course,chose
WHEREStudent.Sno=chose.Snoando=o
查询选修课学分在3分以上的的学生的学号、姓名、课程号、课程名、学分及成绩
SELECTStudent.sno,sname,o,cname,ccredit,score
FROMStudent,course,chose
WHEREStudent.Sno=chose.Snoando=oandccredit>=3
5.1.2自身连接
查询和“郭进”一个院系的其他学生的基本情况
SELECT*FROMStudenta,studentb
WHEREa.Sname=‘郭进'anda.Sdept=b.Sdept
查询在同一个系的学生的基本情况
SELECT*FROMStudenta,studentb
WHEREa.sno<>b.snoanda.Sdept=b.Sdept
5.2嵌套查询
5.2.1带有In谓词的子查询
查询选修课程号为2的学生姓名
SELECTSnameFROMStudent
WHERESnoIN(SELECTSnoFROMchoseWHERECno='2')
查询没有选修课程的学生的基本情况
SELECT*FROMStudent
WHERESnonotin(SELECTsnoFROMchose)
5.2.2带有比较运算符的子查询
查询和“李勇”不在一个院系的学生基本情况
SELECT*FROMStudent
WHERESdept<>(SELECTSdeptFROMStudentWHEREsname='李勇')
查找查询年龄高于平均年龄的学生的基本信息
SELECT*FROMStudent
WHERESage>(SELECTavg(sage)FROMstudent)
5.2.3带有EXISTS谓词的子查询
查询参加选修的学生信息
SELECT*FROMstudent
WHEREEXISTS(SELECT*FROMchoseWHEREstudent.sno=chose.sno)
5.3集合查询
5.3.1并操作UNION
查询09系的学生或年龄不大于19岁的学生
SELECT*FROMStudentWHERESdept=‘09'
UNION
SELECT*FROMStudentWHERESage<=19
5.3.2交操作INTERSECT
查询09系年龄且小于等于19岁的学生集合
SELECT*FROMStudentWHERESdept=‘09'
INTERSECT
SELECT*FROMStudentWHERESage<=19
5.3.3差操作EXCEPT
查询09系的学生与年龄不大于19岁的学生的差集
SELECT*FROMStudentWHERESdept=‘09'
EXCEPT
SELECT*FROMStudentWHERESage<=19
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQL 总结