SQLServer基本操作
--创建数据库
1 use master;--使用数据库 2 --创建数据库 3 create database test1 4 on 5 ( 6 name='test1',--数据库名字 7 filename='D:\DataBase\test1.mdf',--数据库存储路径 8 size=10mb,--大小 9 filegrowth=10mb--增量 10 ) 11 log on 12 ( 13 name='test1_log',--日志文件名字 14 filename='D:\DataBase\test1_log.ldf', --日志文件路径 15 size=5mb,--大小 16 filegrowth=2mb--增量 17 );
--删除数据库
drop database test1;
--创建表
use test1 create table tblPerson ( id int, stuName nvarchar(10), stuSex bit, stuAge int )
--插入一条记录
inser into tblPerson(id,stuName,stuSex,stuAge) values(1,N'测试数据','true',30);
--简单查询
select id, stuName, stuSex, stuAge from tblPerson; select id, stuName from tblPerson; select * from tblPerson;
--删除记录
delete from tblPerson; delete from tblPerson where stuName='测试数据';
--修改数据
update tblPerson set stuName = '牛牛'; update tblPerson set stuName = '洋洋' where id=1;
------添加约束
--添加主键
alter table tblPerson add constraint PK_tblPerson_id primary key(id);--命名规范- 约束键_表名_约束的字段
--添加唯一键
alter table tblPerson add constraint UQ_tblPerson_stuName unique(stuName);
--检查约束
alter table tblPerson add constraint CK_tblPerson_stuSex check(stuSex='男' or stuSex='女');
--默认约束
alter table tblPerson add constaint DF_tblPerson_inputtime default(getdate()) for inputtime;
--添加约束的快捷方式
alter table 表名 add constraint 约束名1 约束表达式1, constraint 约束名2 约束表达式2, constraint 约束名3 约束表达式3, constraint 约束名4 约束表达式4,
create table tblPerson ( id int not null constraint PK_tblPerson_id primary key, stuName nvarchar(10) constraint UQ_tblPerson_stuName unique, stuSex nchar(1) constraint CK_tblPerson_stuSex check(stuSex='男' or stuSex='女'), inputtime datetime constraint DF_tblPerson_inputtime default(getdate()) );
--创建主外键
create table tblScore ( scoreId int identity(1,1) primary key, stuId int not null, scoreNum int )
--在外键表中进行修改
alter table tblScore add constaint Fk_tblScore_stuId foreign key(stuId) references tblStudent(stuId);
--表连接
交叉联接:将第一张表的每一条记录依次与第二张表的每一条记录进行组合,得到一张新表
tbl1
-------------
1 小牛 1
2 小虎 2
3 小波 NULL
-------------
tbl2
--------
1 老师
2 学生
--------
交叉联接后得到数据
------------------------
1 小牛 1 1 老师
1 小牛 1 2 学生
2 小虎 2 1 老师
2 小虎 2 2 学生
3 小波 NULL 1 老师
3 小波 NULL 2 学生
------------------------
1 select t1.*, 2 t2.* 3 from 表1 as t1, 4 cross join 5 表2 as t2 6
内连接:交叉连接后数据有大部分是无用的,需要对其进行一个筛选,可以将内连接理解为在交叉连接的基础之上进行一个筛选
-> 将上表结果显示为
------------------------
1 小牛 1 1 老师
2 小虎 2 2 学生
------------------------
-> 语法
1 select * 2 from 3 表1 as t1 4 inner join 5 表2 as t2 6 on t1.字段 = t2.字段;
左外连接:
select * from 左表 as t1 left join 右表 as t2 on t1.字段 = t2.字段;
--分页:
使用top 分页
select top 10 * from student where id not in(select top(@pageIndex-1)*10 Id from student)
使用ROW_NUMBER(),between and分页.
select * form(select row_number() over(order by id) as num ,* from student )as t1 where t1.num between (pageIndex-1)*10 +1 and pageIndex*10
--公用表表达式:将复杂的派生表写在中间from子句中变得十分臃肿,给为维护等操作带来麻烦,将这个派生表要是能提前到前面,给一个别名,后面查询的时候直接使用别名即可
语法:
with 表的别名 as ( 结果集 ) select * from 别名 -- 将结果集(派生表)用一个别名取代了,使用的时候可以模块化
--视图:一个存在数据库中的虚拟表,视图相当于一个存储在数据库中的一个查询步骤
语法:
定义语法: create view vw_视图名 as 结果集;
--内联表值函数:就可以看做是带有参数的试图
语法:
create function fn_函数名 (@参数名 as 类型名, @参数名 as 类型名, ...) returns table as return 结果集