SQLServer2000学习笔记(待整理)
(1)关系型数据库(RDBMS)是指一些相关的表和其他数据库对象的集合。
(2)表(table)、行(row)、列(column)、关系(relation)、元组(tuple)、属性(attribute)、文件(file)、记录(record)、字段(field)
(3)主码Primary key(PK)、外码Foreign key(FK)。支持完整性约束条件,是评价RDBMS的一个重要指标。
(4)net start net start server
(5)文件>>范围>>页面
(6)主数据文件(.mdf)次数据文件(.ndf)事务日志文件(.ldf)
(7)创建数据库
create database 学生管理数据库
on(
name='学生管理数据库',
filename='d:\microsoft sqllserver 2000\mssql\data\学生管理数据库.mdf',
size=1MB,
maxsize=50MB,
filegrowth=5MB)
log on(
name='学生管理日志'
filename='d:\microsoft sqllserver 2000\mssql\data\学生管理数据库.ldf',
size=1MB,
maxsize=5MB,
filegrowth=10%)
(8)修改数据库alter database
(9)删除数据库drop database
(10)建表
create table students
(
学号 int not null primary key,
姓名 char(8),
性别 char(2),
年龄 tinyint,
专业 char(30),
家庭住址 char(50)
)
(11)修改表
alter table students
alter column 家庭住址 char(80)
(12)插入记录
insert into students(学号,姓名,性别,年龄,专业,家庭住址)
values(001,'郭瑞斌','男',25,'计算机','济南')
(13)修改记录
update students
set 专业='英语'
where 姓名='郭瑞斌'
(14)删除记录
delete from students
where 性别='女'
(15)删除表
drop students
(16)查询语句
select 学号,姓名,2002-年龄"出生年份"
from 学生表
(17)去掉重复记录
select distinct 姓名
from students
(18)and or 日期
select *
from students
where 入学年份<'2002-1-1'
(19)not !=
select *
from 学生表
where not 年龄=19
(20)between not between
select *
from 学生表
where 年龄 between 18 and 20
(21)is null
select *
from 学生表
where 年龄 is null
(22)in(or也能实现) not in
select *
from 学生表
where 所在院系 in('计算机','英语')
(23)所有姓"苏"的老师
select *
from 授课表
where 教师名 like '苏%'
(24)列出"苏_步"
select *
from 授课表
where 教师名 like '苏_步'
(25)名字第二个字为"成"
select *
from 授课表
where 教师名 like '_成%'
(26)order by(若入学年份相同就按学号排)
select *
from 学生表
order by 入学年份 desc,学号
(27)order by 和where
select *
from 学生表
where 入学年份<'2002-10-1'
order by 入学年份 desc
(28)统计人数,去掉重复记录
select count(distinct 姓名)'学生人数'
from students
(29)count 和*
select count(*)
from students
where condition
(30)max min
select max(数学成绩)'数学成绩',min(姓名)'姓名'
from students
(31)avg
select avg(年龄)'平均年龄'
from students
(32)sum
select sum(年龄+1)'年龄总和'
from students
(33)group by
select 入学年份, count(*)'每届人数'
from 学生表
group by 入学年份
select 性别,count(年龄),avg(年龄)
from 学生表
group by 性别
(34)having 组别(这里按性别分)平均年龄大于17的
select 性别,avg(年龄)
from 学生表
group by 性别
having avg(年龄)>17
(35)多表查询(连接查询)
自然连接>>等值连接、非等值连接、连接字段
自身连接(自身和自身连接)
复合条件连接
(36)
select 学生表.*,成绩表.*
from 学生表,成绩表
where 学生表.学号=成绩表.学号
(37)自然连接:在等值连接中,把结果表中重复的字段去掉(往往是将各表的主码和外码进行连接)
select 学生表.学号,姓名,年龄,所在院系,班级名,入学年份,课程号,成绩
from 学生表,成绩表
where 学生表.学号=成绩表.学号
(38)自身连接
每一门课程的间接先修课(即先修课的先修课)?
select f.课程号,s.先修课
from 课程表 f,课程表 s /*分别取了两个别名*/
where f.先修课=s.课程号
(39)复合条件连接
学习成绩,课程学时?
select a.姓名,d.课程名,b.课程号,b.成绩,c.教师名,c.学时数
from 学生表 a,成绩表 b,授课表 c,课程表 d
where (a.学号=b.学号)and(a.班级名=c.班级名)and(b.课程号=c.课程号)and(c.课程号=d.课程号)
(40)选修'C801'且成绩在90分以上
select 学生表.学号,姓名,性别,年龄,所在院系,班级名,成绩
from 学生表,成绩表
where 学生表.学号=成绩表.学号 and --自然连接
课程号='C801' and --其它筛选条件
成绩>90 --其它筛选条件
(41)嵌套查询
select *
from 学生表
where 班级名=(select 班级名
from 学生表
where 姓名='沈香娜')
(42)带in的子查询
select *
from 学生表
where 所在院系 in(select 所在院系
from 学生表
where 姓名='刘成锴')and 性别='女'
select *
from 学生表
where 性别 in('女','男')
(43)也可多表嵌套查询
(44)any(某个) all(所有)
> < = !=
(45)exists(指表之间的关系,不需要指定列名) not exists
select *
from 学生表
where exists (select *
from 成绩表
where 学号=学生表.学号 and 课程号='c801')
(46)在where子句中使用集合函数
select *
from 学生表
where 年龄=(select max(年龄) from 学生表)
select *
from 学生表
where 年龄>(select avg(年龄) from 学生表)
order by 年龄 desc
(47)union
select *
from 学生表
where 所在院系='计算机'
union
select *
from 学生表
where 性别='女'
(48)合并两表中的学号
select 学号
from 学生表
union
select 学号
from 成绩表
(49)into子句
select * /*复制表,不完全,比如primary key*/
into newtable
from 学生表
select *
into newtable
from 学生表
where condition
(50)into 与 union组合时into必须出现在第一个select列表后面
select *
into newtable
from where
union
select *
from where
(51)创建某个表的空副本
select *
into newtable
from 学生表
where 姓名='我'
(52)创建一个临时表,退出SQL Server后自然消失
select *
into #newtable
from 学生表
where 性别='女'
(53)插入子查询结果
insert into newtable2
select *
from 学生表
where 所在院系='计算机' or 性别='女'
(54)带子查询的修改语句
update 成绩表
set 成绩 =成绩-8
where '电子学'=(select 所在院系 from 学生表 where 学号=成绩表.学号)
select * from 成绩表
(55)带子查询的删除语句
(101)
索引:加速查询效率,同时还加速order by和group by子句的操作.
视图:从逻辑上,描述了一个或多个表中的记录.
(102)
(103)
(104)
(105)
(106)文本型和图像型text image
create table text_example
(pid int not null,
names char(8),
text_feild text null)
insert text_example values(101,'郭瑞斌',replicate('结果,过程!',6))
(107)将日期序列从默认状态改为yy/mm/dd: set dateformat ymd
datetime 1753-1-1 9999-12-31<8字节>
smalldatetime 1900-1-1 2079-6-6 <4字节>
(108)位型bit(identity表示该字段自动加1)
create table bit_example
(学号 int identity,
性别 bit not null)
insert bit_example values(1)
insert bit_example values(0)
(109)数值数据类型
整数类 int(-231约21亿,231-1约21亿<4字节>),smallint(-215约3万多,215-1约3万多<2字节>),tinyint(0,255<1字节>)
浮点类 float(-1.79E+308,1.79E+308<8字节15位精度>),real(-3.04E+38,3.04E+38<4字节7位精度>)
精确数值 numeric,decimal
货币类 money<8字节>,smallmoney<4字节>
(110)系统表systypes包含本章所介绍的所有数据类型,并且包含了许多数据类型的null值。
(111)变量与运算符
以@为首的标识符表示一个局部变量
以#为首的标识符表示一个临时数据库对象
表或存储过程前加#表示局部临时对象,加##表示全局临时对象。
(112)运算符优先级:
()、-、^、&、|、*/%、+、-、not and or
(113)用declare来声明局部变量,前面必须加@,声明多个时用,隔开。
declare @ppp int,@ooo char(3)
select @ppp=10,@ooo=学号
from students
where 学号='2002'
select @ppp,@ooo(输出)
declare @maxage tinyint
select @maxage=max(年龄)
from students
select @maxage
向变量赋值的select语句不能与数据检索操作结合使用。
(114)利用update为局部变量赋值
declare @dbage tinyint
update students
set @dbage=3*年龄
where 学号='2003'
select @dbage
(115)全局变量
不能由等程序员定义,不可赋值,在所有等距离中可直接使用,在某个时刻各用户的值互不相同。
常用全局变
量:@@rowcount,@@error,@@trancount,@@transtate,@@tranchained,@@servername,@@version,@@spid,@@identity,@@nestlevel,@@fetch_stat
us
(116)注释
--单行注释
/*多行注释*/
(117)
begin……end
if……else
if exists
case <算术表达式>
when then
when then
else
while
goto
waitfor:
waitfor delay '02:29:59'延迟/time '20:30:00'到某一时间
insert into table values()
print:显示输出
set condition{on|off|value}
set statistics --请求显示执行时间
set rowcount 60 --请求服务器只返回记录的