在学生选课数据库中XK包含5个数据表:
系部表Department:DepartNo(系部编号),DepartName(系部名称)
班级表Class:ClassNo(班级编号),ClassName(班级名称),DepartNo(系部编号)
学生表Student:StuNo(学号),ClassNo(班级编号),StuName(姓名),pwd(选课密码)
课程表Course:CouNo(课程编号),CouName(课程名称),Kind(课程类别),Credit(学分),Teacher(教师)
DepartNo(系部编号),SchoolTime(上课时间),LimitNum(限制选课人数),WillNum(报名人数),ChooseNum(被选中上该课程的人数)
学生选课表StuCou:StuNo(学号),CouNo(课程编号),WillOrder(志愿号),State(选课状态:报名或选中),RandomNum(随机数,用途在续章节说明) 查询信息:
例1:
use xk use xk
go go
select+列名 select CouNo,CouName
from+表名(Class) from Course 单元2:查询与统计数据(1)Select 选择列表/*要查询的列,列名之间用逗号间隔*/
from 表的列表/*要查询的列来自哪些表,表名之间用逗号间隔*/
where 查询的条件/*查询要满足的条件*/(2) 切换当前数据库用:use (3)改变查询显示结果的列标题:(附有汉字标题)
use xk
go
select '课程编号'=CouNo,'课程名称'=CouName,'教师'=Teacher
from Course(4)消除查询结果的重复行: SELECT DISTINCT +列表表名
use xk
select distinct '课程编号'=CouNo
from Course(5)返回查询结果的前n(%)行select top n * 返回查询结果前n行,select top n percent* 则返回查询结果n%行,此时n必须介于0~100
如果在select语句中包括有排序子句用:order by(6)在查询结果中增加要显示的字符串:在select子句中,可以将要增加的字符串用单引号括起来,用逗号与其他列名称分隔开。(7)用where子句限制查询条件:where子句用来限制查询结果的数据行,where后面色条件为条件表达式,条件表达式可有一个或者多个逻辑表达式组成,查询结果为满足条件表达式的那些数据行。and(与):当给出所有查询条件都为真时,则值为真。
or(或):当给出的所有查询条件中只要有一个查询条件为真,则值为真。
not(非):否定其后的表达式。
比较运算符用来对两个表达式进行比较,比较结果又3种逻辑值:TRUE(真),FLASE(假),UNKNOW(未知)。
范围运算符用来查询在某一指定范围内的数据行,它总是和关键字and一起使用,范围运算符又BETWEEN,NOT BETWEEN.
列表运算符IN用来给出要查找得那些值得列表。(8)重新排序查询结果:order by 进行排序,可从低到高(ASC升序),可从高到低(DESC降序)。(9)模糊查询:使用LIKE。
通配符:%表示匹配0个或多个长度烦人字符。
_(下划线)表示匹配任意当个字符。
[]表示匹配指定范围的任意单个字符。
[^]表示匹配不在指定范围内的任意单个字符。
通配符和要匹配的值必须括在单引号内,当需要查找通配符本身时,需将它们用方括号括起来。(10)查询指定列未输入的数据行:指定列末输入值意味要判断指定列的值是否为null,where子句可写为:where指定列is null,null值是一个未知值,它不等于零(0),空格或零长度的字符串,(11)聚合函数查询:sum(函数),min(最小值),max(最大值),avg(平均值),count(总行数)。(12)分组查询结果:可用来进行分组查询的有group by子句,cube运算符,having子句,group by all子句,compute子句和compute by。
使用group by子句分组查询时需要使用聚合函数,在group by子句中使用cube运算符,会在查询结果中增加一个汇总行,cube运算符可使用于所有的聚合函数。
having子句用于对分组后的数据进行条件限定,写在group by子句之后,在having子句中允许使用聚合函数。
group by all子句用于显示所有的组,包括那些被where排除的组。
compute子句可以根据需要完成计算并作为新的一行。
compute by子句用来分组,并可对每组进行计算,分组查询时如果需要显示明细,则可使用compute by子句。(13)子查询时返回单值的select查询,子查询可以嵌在select,insert,update或delete语句中,也可以用早where或having子句中,包括一个或更多个子查询的select查询称为嵌套查询。(14)多表连接查询数据:
交叉连接查询(cross join),内连接查询(左表join;右表on),外连接(左表from left join;右表from right join),全连接(full join)。单元3 :管理数据表数据
(1)合并多个查询结果中的数据:使用union all合并两个查询结果。(2)使用select into语句允许将select抽取的数据保存在当前数据库中并不存在的一个新表中,select into语句会创建这个新表,如果这个新表已经存在,那么操作会失败。(3)更新数据表数据:使用update语句或使用可视化操作。
update语句语法如下:
update:要更新表名
set:更新的列名=更新后的值
[from设计的表名]
[where条件](4)删除数据表数据:用delete删除。
delete的语句语法如下:
delete:删除数据的表名。
[from涉及的表名列表]
[where条件]单元5:创建于管理数据库
(1)使用create database语句创建数据库。
(2)filename :给出文件物理名,如果给出路径,则必须是一个已经存在的路径。
(3)size:文件容量。
(4)maxsize:文件最大容量。
(5)filegroup:文件的增量。
(6)log on:指出用来存放事物日志文件。
(7)查看数据库:sp_helpdb+数据库名(如xk,mydb)
(8)修改数据库:新增文件组:alter database+数据库名
add filegroup+文件组名
系统存储过程:sp_hlepfilegroup+文件组名
(9)缩小数据库和数据文件:在alter database语句中用remove file删除数据指定文件或事物日志,从而缩小数据库或事物日志容量。
(10)sp_dbption修改或查看数据库选项。
(11)drop database语句删除数据库。
sp_remove重命名数据库名。
modify:改文件,文件大小只增不减。
remove:移除文件。
sp_remove .bz+重命名文件名。单元6创建管理数据表
使用transcact_sql语句创建数据库
create table+表的名字
column+表中列的名字
datatype:列的系统定义或定义的数据类型
null/not null:该列是否允许有空值
identity:用于那些需要自动产生唯一系统值得列。
seed:是identity的初始值。
increment:增量,可为负值。
on{filegroup}/default:指出将表创建在哪个文件组上,如果on子句或给出on default,则将表创建在默认的主文件组上,即:primary。(2)新增列:alter table+表名
add +已有列名,新增列名。
删除列:
alter table
drop column +列名删除数据库中的表:drop table+表名。
申请变量:declare@(定义表变量)
table(变量数据的一种方式)单元7实施数据完整性
约束的五种类型:主键(primary key),外键(foreign key),唯一约束(unique),检查(check),默认约束(default)
创建约束:alter table+约束表名。
constraint+要添加的约束名。
constraint_type:指出约束的类型。
with check/with nocheck:指出对现有的数据是否进行检查。删除约束:alter table+要删除约束的表名。
constraint+要删除的约束名。
(2)外键:
alter table1+要添加外键约束并且已存在的表名。
constraint+要添加的外键约束名。
col1+外键列名
alter table2+主键名(外检表所参照的表名)
col2+主键列名。
references(删除文件名)
删除外键:drop constraint fk_+外键名字级联删除:references +表名 +(列名) on delete cascade
创建唯一约束:alter table+约束表名
add constraint,,,unique
删除唯一约束 :alter table+约束表名
drop constraint un_+表名单元8实现索引
(1)索引概念:索引(index)与书籍目录相似,通过目录中给出的章节页码快速找到对应的内容。
如果表中任意两行被索引的列值不允许出现重复值,那么这种索引成为唯一(unique)索引。
(2)索引的分类:
两种类型:集聚索引(clustered index)和非集聚索引(nonclustered index)
,也被称为聚族索引和非聚族索引。
例题:执行查询时,使用基于学号列,姓名列的索引
select *
from student
where stuno='20000001',stuname='林斌'
go
(3)创建索引格式:
create
[unique]建立唯一索引
[clustered/nonclustered] 建立集聚索引或非集聚索引
index ix_name建立索引名称
on table_name索引所在的表名称
view_name索引所在的视图名称
use xk
go
create unique clustered index in_stuname
on student
go
(4)删除索引:
drop index
table_name 索引所在的表名称
index_name要删除的索引的名称use xk
go
drop index student.ix_stuno
go
(5)修改索引:
table_name索引所在的表名
old_index_name要重命名的索引名称
new_index_name新的索引名称
use xk
go
table index ' student.in_stuno',ix_stunonew
go(6)索引分析:显示查询计划
set showplan_all on/off
set showplan_text on/off
use xk
go
set showplan_all on;
go
select stuno,stuname
from student
where stuname like'林%'
set showplan_off;
go显示磁盘活动量
statistics io(设置选项)
设置是否显示磁盘活动量的选项为:
set statistics on/off
use xk
go
set statistics io on
go
select *from student where stuname ='林斌'
go
set statistics io off
go
(7)维护索引
更新统计信息:update statistics+表名 pk_表名
扫描表: dbcc showcontig +表名,pk_表名
碎片整理:dbcc indexdefrag(数据库名,表名,pk_表名)单元10创建与管理视图
(1)创建视图
create view v_name(视图名)
[with encryption]对视图的定义进行加密
as
select+列名(视图名)
from+表名
where+条件
(2)删除视图
drop view v_表名
(3)修改视图
alter view v_视图名
as
select+列名(视图名)
from+表名
where+条件
select* from v_视图名