打开SQL Server Management Studio,系统自动打开“连接到服务器”,进入系统首页窗口
打开SQL,在“连接到服务器”中,在“身份验证”下拉选择“SQL Server身份认证”选项;然后输入登录名为“sa”,密码为“123456”,单机连接进入系统首页
打开SQL,单机新建查询,进入查询设计器,工具--选项--查询执行,可设置参数
SET ROWCOUNT执行超时值 SET TEXTSIZE批处理分隔符
Master:记录所有SQL Server系统级信息的数据库
Model:模板数据库。每当用户创建一个新的数据库,SQL S便会复制Model,以此作为创建新数据库的基础
Tempdb :临时数据库
Distribution:与数据复制相关的库
系统首页--数据库--右键--新建数据库--输入名称--确定
系统首页--数据库名称--右键属性
常规:备份信息和维护相关信息
文件:查看和修改文件名称、文件类型、文件组
文件组:查看修改文件组相关信息
选项:查看修改访问限制,故障还原
更改跟踪:对数据库的持续数据变更进行异步跟踪
权限:查看修改数据库权限,用户或角色以及权限的设置等相关信息
事务日志:查看修改事务日志相关信息
定长字符型Char、Nchar
变长字符型 Vachaar、Nvachar、
文本型Text、Ntext
(1)整数型:存储整数
Bignit大整形、Int/Integer整形、Smallint短整型、Tinyint微短整型
(2)精确数值型:带小数的整数
(3)浮点型:近似数值型,不能精确表是数值
float(n) real
(4)货币型:数字前冠一个货币符号¥,梅三位分隔符
时间戳数据类型
账号标识符数据类型
游标数据类型
变体数据类型
1.数据库包含(多个)数据表,表是库的对象,库对应文件,表对应主题
2.二维表:以行和列的形式
3.字段field是数据表中最基本的数据项
4.数据表组成
表名:同一个数据库中表的名称不能相同,不要与数据库中的师团窗体报表等同名
表结构:空表。创建表先设计表结构
表记录
1.语法框架
CREATE TABLE...
2.语法格式
CREATETABLE<表名>
(<列名><数据类型>[<列约束>]
[,<列名><数据类型>[<列约束>]]...
[,<表约束>])
1.增加或删除字段
2.改变字段的排列顺序
3.修改字段
更改字段名、更改字段的数据类型、更改字段的大小,更改字段的其他属性
4.重新设置主键
只要能唯一区分开每一条记录的列都可以设置成主键;一个表只允许有一个主键
主键外键可同时存在,也可独立存在
(1)一个表只有一个主键,分为单字段主键和多字段主键
2.1对1,1对n,n对1,m对n
语法框架 INSERT INTO …VALUES …
例1:将一个完整的学院记录('A', '软件', '沈存', '04311234567', 'A-209') 插入到学院表中。 INSERT INTO 学院 VALUES('A', '软件', '沈存', '04311234567','A-209')
例2:将一个不完整的学院记录('B', '物理','B901')插入 到学院表中。 INSERT 学院 (学院编号,学院名称,地址) VALUES ('B','物理', 'B901')
先删除从表中的相关记录,然后才能删除主表中相关的记录
5.1 索引是按照索引表达式的值,使表中的记录有序排列;索引可分为聚集索引,非聚集索引,唯一索引
索引要占用无力空间,而且常比基本表本身占用的空间要大
一个基本表,可根据应用环境的需要创建若干索引以提供多种存取途径,所i你的创建和撤销由DBA或表的拥有着负责
1.聚集索引
2.非聚集索引
3.唯一索引
create...index...on...
unique 唯一索引 clustered 聚集索引 nonclustered 非聚集索引
更新“学生1_V”视图,增加“籍贯”列
SQL是(关系型 )数据库语言的标准,只要掌握了SQL,在这类数据库中是通用的。
数据定义语言 DDL
定义关系数据库的模式、外模式、内模式
数据操纵语言 DML
数据查询、数据维护
数据控制语言 DCL
对基本表和视图的授权,完整性规则描述和事务控制语句
系统存储过程
其他的语言元素(批处理,控制流语句,注释)
1.高度的综合 2.非过程化 3.采用面向集合的操作方式
4.一种语法结构多种使用方式 5.语言结构简介
功能描述 | 命令动词 |
数据操纵 | select、inserrt、update、delete |
数据定义 | create、alter、drop |
数据控制 | grant、revoke |
数据操纵命令动词
数据定义命令动词
1.1 数值型
integer,INT:长整数
smallint:短整数
real:取决于机器精度的浮点数
double:取决于机器精度的双精度浮点数
numeric(p,q):定点数,由p位数字组成,包括符号、小数点、小数点后有q位数
1.2 字符型
(1)Char(n): 长度为n的定长字符串,n是字符的个数;
(2)Varchar(n): 具有最大长度为n的变长字符串;
(3)Text/Memo: 长度可根据数据多少而定;
(4)Binary(n): 长度为n的定长二进制位串;
(5)VarBinary (n): 具有最大长度为n的变长二进制位。
1.3 日期、时间型
(1)Date:日期数据类型;
(2)Time:时间数据类型;
(3)DateTime:日期时间数据类型。
1.4 逻辑型
(1)boolean:逻辑数据
1.5 货币型
(1)smallmoney:货币数据类型
(2)money
1.6 OLE型
(1)general:通用型数据
用来限制用户输入数据的规则或条件。
(1)语法格式
①创建表时:<约束类型><列名>
②修改表时: 添加约束:ADD CONSTRAINT <约束名> <约束 类型><列名>
删除约束:DROP CONSTRAINT <约束名>
删除列要加关键字column
alter table Student drop column 列名
alter table语句默认添加的是列,删除的则是约束
alter table Student drop 约束名,这样是正确的
(2)约束名的命名规则推荐采用:约束类型_约束列,且一般用英文名称。
①主键(Primary Key)约束: 如PK_StudentId
②默认(Default Key)约束:如DF_Sex
③检查(Check Key)约束:如CK_Age
④唯一(Unique Key)约束: 如UQ_CardId
⑤外键(Foreign Key)约束: 如FK_DepartmentId
1.语法框架
select字段列表...from数据源...where检索条件...group by对结果分组表达式...having参与分组条件...order by对结果排序表达式...
2.无条件查,简单查询
① 查看各个学院的全部信息
select 学院编号,学院名称,院长姓名,电话,地址 from 学院
② 检索制定列,查看每个系多少班级, 系主任是谁
select 系名称,班级个数,系主任
from 系
3.运算符
类型
算术运算符:+ - * / %
赋值运算符:=
比较运算符:> >= < <= = <>
逻辑运算符:AND、OR、NOT
连接运算符:+
优先级
()>算术>比较> 逻辑>连接>赋值
聚合函数
1.SUM:返回表达式值的总和
2.AVG:返回表达式值的平均值
3.COUNT:返回记录集中的计数
4.MAX:返回表达式中的最大值
5.MIN:最小值
排序的关键字:order by
分组的关键字:group by
从大到小 升序:ASC 从小到大 降序:DESC
1.在结果中添加新列的语法格式
select<表达式>AS<新列名>
group by <表达式>having<表达式>
如需使用控制条件,则使用having;having 必须与 group by 联合使用,不能单独使用
同时涉及多个表的查询,参与连接的表可以有多个,但连接操作在两个表直接进行
全外连接 full outer join
左右两端表中的记录都输出,如没能找到匹配的元组,使用null代替
不带where子句,它返回被连接到的两个表的所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数
查询学生表和选课表两个关系模式的乘积
select * from 学生 cross join 成绩
一个查询语句中完整的包含另一个查询语句。由里到外,先执行最内层,依次由里到外
1.谓词:用来描述或判定客体性质的词 5大于3,大于
2.SQL常用谓词,谓词前面是where
distinct、top
in、not in
比较运算符和between
exists
like
any或all
例子1 查看与0001班级人数相等的班级名称,班长姓名
例子2 查看两门成绩
带有any 或 all 的子查询
1.any:任意一个值
2.all:所有值需配合使用比较运算符
>any:大于子查询结果中的某个值
>all:大于子查询结果中的所有值
系统存储过程sp_、本地存储过程、临时存储过程、远程存储、扩展存储xp_
insert触发器、update触发器、delect触发器
create proc 女学生
as select 姓名,性别
from 学生
where 性别 = '女'
--创建一个用户存储过程(优秀学生)
create proc 优秀学生
as select 学生.学号,学生.姓名,课程.课程编号,成绩.成绩
from 学生 inner join 成绩 on 学生.学号 = 成绩.学号
inner join 课程 on 成绩.课程编号 = 课程.课程编号
where 成绩.成绩>90;
带参数的存储过程
--创建一个用户存储过程(插入学院)
CREATE PROCEDURE插入学院
@Param1char(1), @Param2char(4),
@Param3char(6), @Param4char(13),
@Param5char(5)
AS
BEGIN
INSERT INTO 学院(学院编号,学院名称,院长姓名,电话,地址)
VALUES(@Param1,@Param2,@Param3,@Param4,@Param5)
END
begin。。。end 中间部分要么一起执行,要么一起不执行
带输出参数的存储过程:
创建存储过程add_proc1,它的功能是计算两个参数之和,并将结果使用输出参数返回
CREATE PROCEDURE add_proc1
@num1 INT = 0,
@num2 INT = 0,
@num3 INT OUTPUT
AS
SET @num3 = @num1 + @num
declare @num3 as int
exec add_proc1 @num3 output
print @num3
输出结果为0,没有定义参数值,则取之前定义的0
3.删除
drop procedure 优秀学生
create trigger <触发器名>
创建一个触发器(学生性别),用以约束学生表中性别字段值(只可能是“男”或“女”),保证数据的正确性
其中,begin和end中间的内容要么全部执行要么全部不执行
create trigger 学生性别 on 学生
for insert,update
as
if exists ( select * from 学生
where 性别 not in('男','女'))
begin
RAISERROR('请输入合法的性别!',16,1)
ROLLBACK TRANSACTION
end
insert into 学生 values ('','','','','')
ALTER TRIGGER <触发器名> ON { <表名>| <视图名>}
ALTER TRIGGER Trigger_学生 ON 学生
FOR UPDATE
AS
IF UPDATE(姓名)
BEGIN
RAISERROR('您不能修改表中学生的姓名!',16,1)
ROLLBACK TRANSACTION
END
DROP TRIGGER Trigger_学生