数据库(SQL Server Management Studio)
1.SQL(结构化查询)语言
- 定义: 结构化查询语言(Structured Query Language)简称SQL,是一种编程语言,一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
- 特点:(1)一体化(两方面)
(2)高度非过程化语言
(3)面向集合的操作方式(一次一集合)
(4)交互式和嵌入式两种使用方式,统一的语法结构
(5)支持三级模式结构
视图 <——>外模式
基本表(的集合)<——>模式
存储文件和索引 <——>内模式 - 功能:(1)、SQL数据定义功能:能够定义数据库的三级模式结构。
(2)、SQL数据操纵功能:包括对基本表和视图的数据插入、删除和修改,特别是具有很强的数据查询功能。
(3)、SQL的数据控制功能:主要是对用户的访问权限加以控制,以保证系统的安全性。 - 语句结构:
1、数据查询(DQL): SELECT
2、数据定义(DDL): CREATE(添加),DROP(删除),ALTER(修改)
3、数据操纵(DML): INSERT(添加),DELETE(删除),UPDATE(修改)
4、数据控制(DCL): GRANT,REVOKE
5、事务控制语言(TCL):COMMIT(提交)命令,SAVEPOINT(保存点)命令,ROLLBACK(回滚)命令
6、指针控制语言(CCL):DECLARE CURSOR,FETCH INTO,UPDATE WHERE CURRENT
注:数据定义中的添加,修改和删除是对数据库以及数据表进行操作;而数据操纵中的是对表中的字段进行操作。
2.使用T-SQL语句创建数据文件
2.1用SQL语句创建数据库
create database db_Student
on(name=db_Student_data,filename='D:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\db_Student_data.mdf',size=3MB,maxsize=100MB,filegrowth=1MB)
log on(name=db_Student_data,filename='D:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\db_Student_data.ldf',size=3MB,maxsize=100MB,filegrowth=1MB)
name:数据库名
Filename=‘D:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\db_Student_data.mdf’:数据库文件名
size=3MB 初始大小(后面单位没写默认:MB)
maxsize=100MB:最大大小(不受限制:unlimited)
filegrowth=1MB: 增长量级
mdf:主数据文件后缀名
ndf:辅数据文件后缀名
ldf:日志文件后缀名
辅数据文件只需在主数据文件括号后用逗号隔开加括号在括号中编辑五个属性即可
2.1.1、使用T—SQL创建数据库、查看数据库
查看指定数据库或所有的数据库信息
语句格式: Execute sp_helpdb 数据库名
(1)查看当前数据库服务器中所有数据库的信息
Execute sp_helpdb
(2)查看当前数据库服务器中Student数据库的信息
Execute sp_helpdb Student
2.1.2、使用T—SQL语句更改数据库名称
语句格式:
sp_renamedb 当前数据库名称,数据库新名称
2.2、分离、附加、删除数据库
分离:Sp_detach_db 数据库名
附加:Sp_attach_db 数据库名,文件名 (文件名:附加到的文件的物理地址)
删除数据库:drop database 数据库名 (数据库一旦被删除,就永久的被删除)
2.3、修改数据库
修改数据库:ALTER DATABASE 数据库名
1、添加次要数据库文件(由于添加辅数据库文件导致数据库结构改动)
ALTER DATABASE db_HX
add file(name=db_HX,name=db_HX,filename='D:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\db_HX.ldf',size=3MB,maxsize=100MB,filegrowth=1MB)
2、更改指定文件
ALTER DATABASE db_HX
modify file(name=db_HX,size=20mb)
3、删除指定文件
ALTER DATABASE db_HX
remove file db_HX
4、添加文件组
ALTER DATABASE db_HX
add filegroup group1
5、将db_HX_data文件添加到文件组group中
ALTER DATABASE db_HX
add file(name=db_HX_data,filename='物理文件名')
to filegroup group
2.4缩减数据库空间
1、缩减数据库空间的方法:
(1) 缩减已有数据库文件大小
(2) 删除没有数据或清空的数据库文件
2、缩减已有数据库文件大小
(1)收缩数据库
dbcc shrinkdatabase(db_HX,10)
(2)收缩特定数据库文件
dbcc shrinkfile(db_HX _dat,5)
3.使用T-SQL语句创建数据表
3.1数据表
- 概念:
(1)数据表是数据库中最重要的对象,数据库的全部数据都存储在不同的数据表中;
(2)包含数据库中所有数据的数据库对象。表定义为列的集合,数据在表中是按行和列组织排列的,每行代表惟一的一条记录,每列代表记录中的一个域。 - SQL常用的数据类型
(1)精确数字类型 包括:
-
整数类型:
- Bigint(长整型) 8字节
- int(基本整型) 4字节
- smallint(短整型) 2字节
- tinyint() 1字节
-
Bit(位类型):
- 取值:0和1
- 在输入0以外的其他值时,系统均把它们当1
-
Decimal和Numeric(数值类型):
- 带固定精度和小数位数的数值数据类型;
Decimal(p[,s])和numeric(p[,s])
P:精度,取值在1到38之间,默认18;
S:小数位数,0<=s<=p,默认为0;
eg:decimal(7,3),表示共有7位数,其中整数4位,小数3位。
- 带固定精度和小数位数的数值数据类型;
-
Money和SmallMoney(货币类型)
- Money:基本货币型,占8个字节长度
- Smallmoney:短货币型,占4个字节长度
(2 )近似数字类型:
- Real:近似实型浮点数,最大可有7位精确位数。占用4个字节存储空间。
- Float:可变精度实型浮点数,可精确到第15位小数,不指定Float 数据类型的长度,占用8个字节存储空间。
(3) 日期和时间类型: - Datetime:(占用8个字节),精确到毫秒。
- Smalldatetime:(占用4个字节),精确到分。
(4) 字符数据类型: - Char(n):定长字符型,若输入数据的字符串长度小于n,则系统自动在其后添加空格来填满设定好的空间;若输入的数据过长,将会截掉其超出部分。
- Varchar(n):变长字符型,每一列的长度达到规定字节之前系统不会在其后添加空格来填满设定好的空间
- Text:文本类型
(5)Unicode 字符数据类型: - Nchar(n):定长统一字符型,Nchar数据类型n的取值为1~4000。
- Nvarchar(n):变长统一字符型,n的取值范围为1~4000。
- Ntext:与Text数据类型类似
(6)二进制字符数据类型: - Binary(n):定长二进制,最大长度(即n的最大值)为8000。
- Varbinary(n):变长二进制。
- Image:用于存储照片、目录图片(包括.GIF,BNP,JPEG)等
(7)其他数据类型
(8)用户自定义数据类型
3.2使用T-SQL语句创建数据表
语句格式:
CREATE TABLE
[数据库名.DBO.] 创建数据表的表名
( 列名1 数据类型 [NULL|NOT NULL],
列名2 数据类型 [NULL|NOT NULL],
………
列名n 数据类型 [NULL|NOT NULL]
)
注意:
每个字段之间用半角状态下的逗号“,”分隔,最后一个字段没有逗号 。
3.3创建约束
1、分类:
- Primary Key主键约束
- null空值约束
- Unique惟一性约束
- Check检查约束
- Default默认值约束
- Foreign Key外键约束
2、完整性约束的基本语法格式:
[CONSTRAINT constraint_name(约束名)]<约束类型>
约束不指定名称时,系统会给定一个名称。
(1)主键(primary key)
语句格式:
constraint 约束名 primary key(列名)
--eg:
create table tb_score
(
sno char(10) not null,
cno char(10) not null,
score float,
constraint PK_tb_score primary key(sno,cno)
)
注意:
命名规范:PK_[表名称]
(2) 惟一性约束 (unique)
- 使用惟一性约束的字段允许为空值;
- 一个表中可以允许有多个惟一性约束;
- 可以把惟一性约束定义在多个字段上.
语句格式:
constraint 约束名 unique (列名)
--eg:
create table tb_student
( sno nchar(10) not null,
sn nvarchar(30) not null,
……
constraint pk_tb_student primary key(sno),
constraint uq_tb_student unique(sn)
)
主键约束与惟一约束的区别:
①在一个基本表中只能定义一个primary key约束,但可定义多个unique约束;
②对于指定为primary key的一个列或多个列的组合,其中任何一个列都不能出现空值,而对于unique所约束的惟一键,则允许为空。
注意: 不能为同一个列或一组列既定义unique约束,又定义primary key约束。
(3)检查约束(check)
- 一个表中可以定义多个检查约束;
- 每个create table语句中每个字段只能定义一个检查约束;
- 当执行insert语句或者update语句时,检查约束将验证数据。
constraint 约束名 check (约束表达式)
--eg:
create table tb_score
( sno char(5),
……
constraint ck_tb_score check (score>=0 and score<=100)
)
--注: score between 0 and 100也可以
(4)默认约束 (default)
- 每个字段只能定义一个默认约束;
- 如果定义的默认值长于其对应字段的允许长度,那么输入到表中的默认值将被截断。
语法格式:
default 默认值
--eg:
create table tb_student
(
sno char(10),
dept varchar(50) default ‘软件学院',
……
)
(5) 空值约束(null)
- null值不是0也不是空白,更不是填入字符串的“null”字符串,而是表示“不知道”、“ 不确定”或“没有数据”的意思。
(6) 外键约束 (foreign key)
- 外键从句中的字段数目和每个字段指定的数据类型都必须和references从句中的字段相匹配;
- 一个表中最多可以有31个外键约束;
- 在临时表中,不能使用外键约束;
- 主键和外键的数据类型必须严格匹配 。
语法格式:
constraint 约束名 foreign key (列名)references 主键表名 (主键表列名)
--eg:创建tb_score表,sno和cno为外键。
create table tb_score
( sno char(10),
……
constraint FK_tb_score_tb_student foreign key(sno) references tb_student(sno),
constraint FK_tb_score_tb_course foreign key(cno) references tb_course(cno)
)
3.4 修改、删除数据表
--eg: :在表tb_student中增加一个remark字段,类型为varchar,长度为200,删除表中的polity字段,并且修改sn字段的数据类型为char,长度为20。
alter table tb_student
add remark varchar(200) null
alter table tb_student
drop column polity
alter table tb_student
alter column sn char(20) null
删除表
- SQL Server管理平台创建主键约束
- 利用DROP TABLE语句删除表
语法形式:
drop table 表名
注意:
- drop table语句可以删除一个表和表中的数据及其与表有关的所有索引、触发器、约束、许可对象。
- 在删除一个表之前要先删除与此表相关联的表中的外键约束。
3.5 增加、修改和删除约束
--eg::在tb_student表中添加完整性约束定义,使birthday为系统当前时间。
alter table tb_student
add constraint def_tb_student default getdate() for birthday
--eg::在tb_score表中删除完整性约束定义,使score取任意值。
alter table tb_score
drop constraint ck_tb_score
3.6 SQL数据查询
3.6.1 select语句
SELECT语句格式:
SELECT select_list [ INTO new_table_name ] FROM talbe_list
[ WHERE 行条件表达式 ]
[ GROUP BY 分组表达式 [ HAVING 组条件表达式 ] ]
[ ORDER BY order_list] [ ASC|DESC ]
select基本语句格式:
select 查询字段1,字段2 ,…字段n from 表名
--从db_student数据库的tb_student表中检索所有学生的全部字段内容。
select * from tb_student
-- 注意:当显示全部列时可用*代替
3.6.2
1、top关键字
使用top关键字 可以返回查询结果中的前n行 ,如果指定percent关键字 ,将从结果集中返回前n%行 。
-- 返回tb_student的前3条记录。
select top 3 * from tb_student
-- 返回tb_student的前20%的记录。
select top 20 percent * from tb_student
2、列别名
对查询数据列标题进行修改,或为没有标题的列增加临时标题,列别名表示方式如下:
列别名 = 列名
列名as 列别名
-- tb_student 表中查询所有学生的学号,姓名,出生日期字段内容,要求用别名显示。
select sno as 学号,姓名=sn,birthday=出生日期 from tb_student
3、组合列
除了只是显示基础字段的信息列之外,查询还可以使用运算或函数来任意组合得到列。
-- 查询学生的学号姓名,要求如下效果201401010101 (陈广录)。
select sno+ '(' + sn + ') ' as '学号姓名' from tb_student
-- 显示每名同学的学号,姓名和年龄。
select sno as 学号, sn as 姓名, year(getdate()) - year(birthday) as 年龄 from tb_student
3.6.3 where子句的基本使用
基本的where子句格式:
where 筛选列名 操作符 值
查询条件 | 谓词 |
---|---|
比较(比较运算符) | =,>,<,>=,<=,!=,<>,!>,!< |
确定范围 | BETWEEN a AND b,NOT BETWEEN a AND b |
确定集合 | IN,NOT IN |
字符匹配 | LIKE,NOT LIKE |
空值 | IS NULL,IS NOT NULL |
多重条件(逻辑谓词) | AND,OR |
(1)where条件使用算术表达式:
注意: 不同数据类型值前后界定符号不同
-- 在tb_student表中找到姓名为陈君然的同学。
select * from tb_student where sn = '陈君然'
-- 查询tb_student表中姓“张”的同学信息。
select * from tb_student where left(sn, 1) = '张'
/*注意本例中left函数的使用
left 函数:返回从字符串左边开始指定个数的字符
eg:left (字段名, 2) 结果返回该字段数据的前2位
*/
(2)where条件使用逻辑表达式
- 表达式 or 表达式
- 表达式 and 表达式
-- 列出tb_score表中的所有低于30分或高于90分的同学。
select * from tb_score where (score< 30) or (score > 90)
-- 列出tb_student表中所有男团员的学生。
select * from tb_student where (sex= '男') and (polity = '团员')
-- 列出tb_score表中c01成绩中大于60分或c02成绩中大于60分的同学。
select * from tb_score where (cno = 'c01') and (score > 60) or (cno= 'c02') and (score> 60)
--注意:使用or逻辑关系时,只要满足任意一个表达式即可。而and需要同时满足两个条件。
(3)where条件使用三种特殊运算。
- between…and 允许你指定值的范围
- in 允许您指定一组值
- like 允许您使用通配符来模糊查询
-- 从表tb_student表中查询1995~1996年出生的同学。
select * from tb_student where year(birthday) between 1995 and 1996
-- 查询tb_student表中所有党员和团员的信息。
select * from tb_student where polity in ('党员', '团员')
-- 查询tb_student表中所有姓“张”和姓“李”的同学。
select * from tb_student where left(sn, 1) in ('张', '李')
通配符 | 含义 | 示例 |
---|---|---|
- | 任意单个字符 | where sn like’王_'匹配姓王的两个字的 |
% | 由零个或多个字符组成的字符串 | where sn like’%刘%'匹配含刘该字的所有字符串 |
[] | 某个范围或集合内的任意指定的字符 | where sn like '张[1-3]'匹配"张1"或"张2"或"张3"但不匹配"张4" |
[^] | 不在某个范围或集合内的任意指定的字 | Where sn like '张[^3]'匹配处张3以外的所有字符串 |
-- 在tb_student表中找到姓“李X”的同学。
select * from tb_student where sn like '李_'
-- 在tb_student表中找到所有姓名中带佳字的同学。
select * from tb_student where sn like '%佳%'
-- 在tb_student表中找到所有姓王名 (阳/洋/杨)的同学。
select * from tb_student where sn like '王[阳洋杨]'
-- 在tb_student表中找到所有不姓张的同学。
select * from tb_student where sn like '[^张]%'
(4)where条件使用null
NULL(空值)表示列的数据值未知或不可用
匹配方式: 列名 is NULL
列名 is not NULL
-- 在tb_student表中查询政治面貌为空的学生学号、姓名、院系。
select sno,sn,dept from tb_student where polity is null