数据库笔记Word格式.docx
《数据库笔记Word格式.docx》由会员分享,可在线阅读,更多相关《数据库笔记Word格式.docx(20页珍藏版)》请在冰豆网上搜索。
路径:
磁盘上存储的具体位置建立后的库为空库
数据文件扩展名:
mdf日志文件扩展名:
ldf
只有一个为mdf其他为ndfmdf为主数据文件(数据信息)
系统应用是无法考走复制此时应分离操作
分离操作student→右键任务→分离(可以考走文件)
数据库→右键→附加→添加
四种数据库备份方式
1.完全备份
2.差异备份
3.事务日志备份
4.文件和文件组备份
必须做完完全备份在做差异备份
备份:
库名→右键任务→备份→备份文件扩展名为bak
还原:
库名→右键任务→还原→源设备(找到原文)勾选前面对号
备份设置:
服务器对象→备份设备→右键新建备份设置备份→删除目标→添加aaa设备
添加到aaa:
右键→任务→还原→数据库→目标数据库→源设备→备份设置→aaa
第三课
超级用户进入管理者
验证:
安全性→登录名→右键新建任务→SQLServer身份验证连接→SQLServer→登录名:
li(普通用户连接不能创建数据库新建账户)
Window身份验证登录名必须Windows下存在账户(点击搜索)
添加Windows用户:
开始→设置→控制面板→管理工具→计算机管理→本地用户和组→用户→新建用户
登录名→Windows身份验证→搜索→高级→立即查找→确定
Windows验证要求:
Windows账户连接要求启动Windows用这个用户启动才能进入数据库
分组:
安全性→服务器角色(对登录账户分组)
用户名→右键属性→服务器角色(进行分组)
服务器角色
执行服务器级管理操作用户权限集合
数据库→MySchool→安全性→用户→新建用户→登录名→查找→浏览→找到已有的(连接已有用户或创建用户)
登录名→属性→用户映射
数据库角色:
数据库角色→数据库→安全性→角色→数据库角色
要求:
增删改查
权限:
MySchool→右键属性→权限(数据库权限)→数据库→Myschool→表→属性→权限(对表进行操作)
第四课
建立学生数据库表
能够处理二维表
1、建立新数据库:
school→表→新建表→名称;
→宽度(列)类型(存储)bit(逻辑性)
定义表的内容:
定义表的结构
Nvarchar:
动态字符型
school→表→dbo.student
loginpwd密码
brondate:
日期
设置默认值:
sex→线面框默认值
逐渐:
studentNO→右键→设置主键
主键列唯一不能重复(主键约束)→
Len测字符长度
第五课
检查约束
约束:
表→修改→LoginPwd→右键CHEK约束→表达式
Len(LoginPwd)>
=6(密码大于等于6位len测字符串长度)
一列可以添加多个约束。
对任何列都可以添加
邮件要求emaillike‘%@%’(like运算符)表示时用’’%任意字符
标识列:
表→修改→第一行→右键插入列→id→标识规范→是标识规范不用写、自动生成、唯一的标识
第六课
数据库表拆分的越小越好
关系图→myschool→数据库关系图→新建数据关系图→选定文件→添加[0-9]只能在0到9之间(约束条件号码)对已有数据不影响时可在约束时在表设计器→在创建或重新启用时检现有数据更改为否(即不影响更改数据)
Select后面可以是列名可以是表达式
SQL语言完整性约束:
1、唯一约束:
unique
2、主键约束:
primarykey
3、标识列:
identity
4、检查约束:
check
5、外键约束:
foreignkey
6、默认值约束:
defauit
7、不为空约束:
notnull
数据库:
database
表:
table
主文件:
filespec
事务日志文件:
filegroup
显示数据库文件:
on
显示日志文件:
logon
文件名:
name
存储路径:
filename
文件占据空间:
size
最大存储空间:
maxsize
文件增长量:
filegrowth
连接:
references
列:
column
删除表:
dropcloumn(表名行)
删除文件:
1、指定位置:
alterdatabase文件名2:
删除:
removefile文件名
更改文件:
更改:
modifyfile文件名
添加:
add
切换:
use
连接:
约束关键字:
constraint
选定目标关键字:
select
不重复关键字:
distinct
简化关键字:
in与where一块使用
最左,右关键字:
top
指定表关键字:
from
改名关键字:
as
插入数据关键字:
insert和intovalues一块使用
选定位置关键字:
into
具体列关键字:
values
更新数据关键字:
update和setwhere一块使用
选定记录关键字:
set
选择列关键字:
where
删除数据关键字:
delete和fromwhere一块使用
指定位置关键字:
查询排序关键字:
orderby
选择前n行:
升序排序:
desc
降序排序:
asc
查询分组关键字:
groupby
替换关键字:
replace
筛选关键字:
having
求和函数:
sum
求平均数:
avg
计算函数:
count
求最大值函数:
max
最小值函数:
min
允许用户操作数据库:
grant
拒绝用户权限:
deny
废除用户权限:
revoke
拒绝或废除用户权限语句:
cascade
SQL高级查询
连接具体位置关键字:
交叉联接关键字:
crossjojn
内联接:
innerjoin(具体到列)
左外联接:
left(左)join
右外联接:
right(右)join
查询具体条件:
exists(也可以看作一次测试)
联合查询:
unlon
显示全部:
all
字符型加引号
数据库第一种语句:
Insertintostudent(列名)
Values(列命所添加的数据)
数据库第二种语句:
UPDATE(对表中已有的数据进行修改)
WHERE(更新条件)
UPDAT表名SET列名=更新值
[WHERE](更新条件)
Int整型修改数据不加引号
例如:
updatestudentsetSex='
女'
whereGradeId=1
其中的GradeId(年级为整型所以1不加引号)
Updatestudentsetgradeid=gradeid+1
数据库第三种语句:
Delete(form→可加可不加)+列表名+where+列名=’’
导出数据:
把数据转换成不同格式的文件也可以把其他的文件转换到数据库文件中来
选择要导出的表
单击下一步
数据库第四种语句:
查询语法:
SELECT<
列名>
FORM<
表名>
[WHERE<
查询条件表达式>
]过滤条件
[ORDERBY<
排序的列名>
[ASC或DESC]]排序条件
usestudb
go
select*fromstudent
--*表示所有可查询所有列
selectStudentName,sex,Emailfromstudent
--表示查询想要查询的列
select*fromstudentwheresex='
男'
--表示查看所有性别为男的记录
selectStudentName,sex,EmailfromstudentwhereBornDate>
'
1990-12-31'
--查询年后出生的学生姓名,电话,出生日期。
select*fromstudentwhereSex='
andGradeID=2
--查询男生二年级学生的信息
selectstudentname,phonefromstudentwherePhonelike'
135%'
--查询电话号码以开头的信息
--下面是第二种方法
--selectstudentname,phonefromstudentwhereleft(phone,)='
135'
select*fromResultwhereStudentResult>
=60andStudentResult<
=80
--对Result表,查询寻成绩在到之间的学生信息
select*fromstudentwhereyear(BornDate)='
1991'
--year(BornDate)month(BornDate)day(BornDate)
--hour()minute()second()week
--查询年出生的学生信息。
Orderby+被排序的列名(有升序降序之分)+Desc降序
Orderby+被排序的列名(有升序降序之分)+Asc升序
Charindex寻找指定的字符串在另一个字符串的起始位置
Selectcharindex()
Len字符串长度
Upper转换为大写字符串
Getdate获得当前的系统日期
Dateadd添加日期
Selectdateadd(mm,4,‘01/01/2009‘)
返回05/01/2009
Datediff两个日期的间隔部分
Datename日期指定名字字符串形式
Datepart日期指定部分的指定形式
/*SelectDatepart(day,’01/05/2000’)*/
SelectDatepart(day,borndate)
↑
Month
Year
修改列表名
selecttop20percentstudentname,addressfromstudent
--①取学生表前五名百分比写法
selecttop5studentname,addressfromstudent
--②取学生表前五名
selecttop5studentnameAS姓名,addressAS地址fromstudent
--将输出的列明改为中文AS加上自己要改变的列表中文名as可以省略
selecttop5studentnameAS姓名,address地址,男=sexfromstudent
--注意中文列表名与左右无关例男=sex
SELECT'
姓名是:
+StudentName学生姓名,Gradeid+2年级增加fromstudent
--SELECT'
写入字段名'
+StudentName逐个字段名称,Gradeid+2写入字段名fromstudent
selecttop3+StudentName学生姓名,Addressas地址,学号=studentnofromstudentwhereAddress<
>
北京'
--查询前三个不是北京的学生的学号,姓名,地址,使用列别名列名条件后必须加from
select*fromstudentwhereEmailisnull
--where后面跟条件isnull判断条件是否为空
selecttop1studentname学生姓名,gradeid年级fromstudentorderbyBornDateasc
--查询年龄最小的学生姓名及年级
select*fromResultwherestudentNo=10011orderbyExamDateasc
--查询学号的学生参加所有考试信息,按考试时间前后次序显示asc升序desc降序
第十章:
模糊查询:
通配符:
_(代表一个字符)
%(代表多个字符)
[](限定范围的指定范围内的一个字符)
Clike‘9w0[0-3]’
9w01或9w02[]内代表一个字符
[ˆ](不在指定范围内的一个字符)
DLIKE’%[A-D][^1-2]’9W03或9W07等
共四个
凡是模糊查询用likelen字符串长度
Betweenand在什么什么之间
Or或者in在什么什么范围内
四月5日
selectstudentname,emailfromstudentwhereEmaillike'
%@'
--查询email地址域名是.com的学生姓名和邮箱
select*fromstudentwhereleft(Phone,6)='
135126'
orderbyPhoneasc
--查询电话以开头的学生信息
select*fromstudentwherephonelike'
135126[0-9][0-9][0-9][0-9][0-9]'
--查询电话以开头的学生信息默认是升序可不写asc(升序)
SELECTSTUDENTNO,STUDENTRESULTFROMResultWHEREStudentResultBETWEEN60AND80
--查询学生的成绩在到之间并显示学生的学号和成绩
select*fromstudentwhereBornDatebetween'
1991-7-1'
and'
1992-6-30'
--查询出生日期在1991-7-1至1992-6-30之间的学生信息
--查询直辖市两种方法
select*fromstudentwhereAddress='
orAddress='
上海'
天津'
重庆'
select*fromstudentwhereAddressin('
'
'
)
四月8日(聚合函数)
Sum求和函数
Avg求平均值函数
Min最小
MaX最大
Count统计个数
USEstudb
GO
selectSUM(studentresult)总分,avg(studentresult)平均分fromresult
--查询所有学生总分平均分并将列名改为别名
selectmax(studentresult)最高分,min(studentresult)最低分fromresultwhereExamDate='
2009-2-17'
--查询-2-17考试成绩的最高分最低分
selecttop1studentresultfromResultorderbyStudentResultdesc
--查询-2-17考试成绩的最高分
selecttop1studentresultfromResultorderbyStudentResultasc
--查询-2-17考试成绩的最低分
selectCOUNT(*)总人数fromstudent
--查询表内总人数
selectCOUNT(*)男生总人数fromstudentwhereSex='
--统计男生的人数
selectAVG(studentresult)平均分fromResultwhereSubjectNo=2andExamDate='
--查询-2-17考科目号为的学生成绩的平均值
4月13号
链接查询和分组查询
Select。
。
from
Where。
Groupby。
Selectcount(*)as人数,sgradeas年级
Fromstudents
GroupbySgrade
多列分组
Go
查询学生表的总人数
selectGradeId年级,COUNT(*)总人数fromstudentgroupbyGradeId
--查询学生表各年级总人数
--查询学生表男生和女生人数
selectGradeId年级,Sex性别,COUNT(*)总人数fromstudentgroupbySex,GradeId
--查询学生表各年级男生和女生的人数
selectExamDate,AVG(StudentResult)平均分fromResultgroupbyExamDate
--查询不同考试时间的学生平均分
selectSubjectNo科目名,COUNT(*)总人数fromResultwhereStudentResult>
=60groupbySubjectNo
--统计不同科目及格的学生人数
selectGradeId年级,COUNT(*)总人数fromstudentwhereYEAR(BornDate)>
1990-12-31groupbyGradeIdorderbyGradeIddesc
--查询以后出生的不同年级学生人数,并按年级降序排列
4月15日
Where对整体表而言having对筛选后的条件而言
selectAVG(StudentResult)科目平均分fromResultgroupbystudentNo
--统计不同科目的平均分
selectstudentNo科目,AVG(StudentResult)科目平均分fromResultwhereStudentResult>
=60groupbystudentNo
--统计不同科目及格成绩的平均分
selectSubjectNo科目,AVG(StudentResult)科目平均分fromResultgroupbySubjectNohavingAVG(StudentResult)>
70
--统计科目及格成绩大于平均分的科目
selectgradeid年级,COUNT(gradeid)总人数fromstudentgroupbygradeidhavingCOUNT(gradeid)>
2
--统计人以上的年级及年级总人数
selectgradeid年级,COUNT(gradeid)总人数fromstudentwhereSex='
groupbygradeid
--统计男生不同年级的学生人数
selectSubjectNo考试科目,max(StudentResult)分数fromResult
whereExamDate='
groupbySubjectNo
havingmax(StudentResult)>
80orderbymax(StudentResult)asc
--统计-2-17考试最高分分以上的科目及最高分,并按最高分升序排列
内链接(innnerjoin表一on表二)
一、lectfrom表一innerjoin表二on
修饰条件加where
二、elect。
from表一,表二where
其中where起到连接作用
selectstudent.studentno,studentname,subjectno,studentresult
fromstudent,Result
wherestudent.StudentNO=Result.studentNo
andStudentResult>
80
--查询学生姓名科目号学生成绩student.StudentNO=Result.studentNo
--两个表都包含的需要特别指出添加条件用and连接
selecta.studentno,studentname,subjectno,studentresultfromstudentasa,Resultasswherea.StudentNO=s.studentNoandStudentResult>
80--可将表起别名用别名代替
fromstudentinnerjoinResultonstudent.StudentNO=Result.studentNo
whereStudentResult>
80
selectstudentname,subjectname,studentresult
fromstudentinnerjoinResultonstudent.StudentNO=Result.studentNo
innerjoinSubjectonresult.subjectno=Subject.subjectno
--查询成绩分以上成绩的学生姓名,科目名及成绩
sel