一、数据库登陆
- 服务器名称:. //联系本机
- 身份验证:Windows身份验证(管理员权限)和SQL Server验证
- 登录名:sa(默认登录名)
二、数据库约定
- 数据库、库、表的名称一律用英文名词,首字母大写
- 建立表,功能不能交叉
- 字符串必须单引号
三、建表
- 主键:一行数据的唯一标识
- 数据类型:
- int 整数类型
- float小数类型
- bit 布尔类型
- datetime
- 字符串类型
- char(10) 只能放5个中文,定长,如果只放一个字节,后面就是9个空格(一个中文2个字节
- nchar(10) 放10个中文,定长
- varchar(10) 放5个中文,变长,如果只放一个字节,就只是一个字节
- nvarchar(10) 放10个中文或10个字符,变长
- 通过语句建库建表
create database Library(库名)
create table Users(表名)
userName nvarchar(20) not null
userPwd nvarchar(20) not null
…………
四、查询语句
单表查询
- select * from UserInfor -- 查询UserInfor表内全部的数据
- select UserName,QQ from UseInfor --查询UserInfor表内 UserName,QQ的数据
- select * from UserInfor where Sex=‘男’ --查询UserInfor表内所有男生
- select * from UserInfor where Sex=‘男’ and Place='武汉' --查询UserInfor表内所有武汉的男生
- select * from UserInfor where Sex=‘男’ and (Place='武汉' or Place='杭州' ) --查询UserInfor表内所有武汉或者杭州的男生
- select count(*) as PCount from UserInfor where Place='武汉' --查询UserInfor表内所在地在武汉的人的数量并且起别名PCount
- select * from UserInfor where Age>=25 and Age<=30 或者 select * from UserInfor where Age between 25 and 30 --查询UserInfor表内查询年龄在25到30之间的用户
- select * from UserInfor order by Age asc --根据年龄排序由小到大asc默认可以不写 select * from UserInfor order by Age desc --根据年龄排序由大到小
- select top 3* from UserInfor order by Age desc --查询出年龄前三的用户并且由大到小排序
- select top 3 UserName,Pwd,QQ from UserInfor order by Age desc --查询出年龄前三用户的用户名字,密码,QQ并且由大到小排序
- select count(*),Place from UserInfor group by Place --通过place分组显示每个地区用户数量
- select count(*) as PCount,Place from UserInfor group by Place having count(*) >1 --查询通过place分组之后同一所在地用户大于1的分组信息
- 模糊查询
- select * from UserInfor where UserName like 'zh%' --查询以用户名zh字母开头的用户
- select * from UserInfor where UserName like '%np' --查询以用户名np字母结尾的用户
- select * from UserInfor where UserName like '%n%' --查询以用户名包含n字母的用户
- select min(Age) from UserInfor --查询年龄最小的数值
- select max(Age) from UserInfor --查询年龄最大的数值
- select sum(Age) from UserInfor --查询用户年龄的总值
- select avg(Age) from UserInfor --查询用户年龄的平均值
- select * from UserInfor where Age (select avg(Age) from UserInfor) --查询所有大于平均年龄的用户
- select distinct UserName from UserInfor --查询不重复名字的用户名
联合查询
- select UI UserInfor ,UI.UserName,UI.QQ,SC.EnglishScore,SC.MathScore from UserInfor UI left join Score on UI.UserId=SC.UserId --通过UserId左关联两个表,查询左表UserInfor表中全部学生的名字QQ 和 右表Score表中对应学生的英语成绩数学成绩,右表中不匹配的内容用null表示
- select UI UserInfor ,UI.UserName,UI.QQ,SC.EnglishScore,SC.MathScore from UserInfor UI right join Score on UI.UserId=SC.UserId --通过UserId右关联两个表,查询右表Score表中全部的学生的英语成绩数学成绩和左表UserInfor表中对应学生的名字QQ 和,左表中不匹配的内容用null表示
- select UI UserInfor ,UI.UserName,UI.QQ,SC.EnglishScore,SC.MathScore from UserInfor UI inner join Score on UI.UserId=SC.UserId --通过UserId关联两个表,查询UserInfor表中学生的名字QQ 和 Score表中对应学生的英语成绩数学成绩
- select UISC.*,PR.MumName,PR.DadName from (select UI UserInfor ,UI.UserName,UI.QQ,SC.EnglishScore,SC.MathScore from UserInfor UI inner join Score SC on UI.UserId=SC.UserId) UISC inner join Parents PR on UISC.UserId=PR.UserId --通过UserId关联三个表Praents、UserInfor和Score,其中UserInfor和Score 看成一个整表别名UISC,查询UserInfor表中学生的名字QQ 和 Score表中对应学生的英语成绩数学成绩外加Parents表中对应学生的爸爸妈妈名字
五、分页
select top pagesize *
from
(
select row_number() over(order by NewsId) as rownumber,* from RNews
) A
where rownumber > (pageindex-1)*pagesize --第pageindex页数据
六、获取时间
- select year(getdate()) --获取当前的年
select month(getdate()) --获取当前的月
select day(getdate()) --获取当前的天
- select dateadd(yy,100,getdate()) --当天加上100年的时间,getdate()也可以换成具体的某一天比如写成:'2108/12/31'
select dateadd(mm,1,getdate()) --当天加上1个月的时间
select dateadd(dd,100,getdate()) --当天加上100天的时间
- select datediff(yy,getdate(),'2108/12/31') ---当天距离2108/12/31还有多少年
select datediff(mm,getdate(),'2108/12/31') ---当天距离2108/12/31还有多少月
select datediff(dd,getdate(),'2108/12/31') ---当天距离2108/12/31还有多少日
七、增加
- insert into UserInfor value (值除了主键全部需要按顺序写,不能少)
- insert into UserInfor(UserName,Pwd,QQ,Age) value('名字','密码','QQ','年龄') ---其他默认为null
八、删除
delect UserInfor where UserId=19 --删除第19行
九、修改
update UserInfor set UserName='xxxx'where UserId=18 --将第18行用户名字改成xxxx
十、索引
- 聚集索引 (默认主键)
- 非聚集索引
十一、存储过程
create proc procSelectUser
(
@UserName nvarchar(50),
@Pwd nvarchar(50)
)
as
select * from UserInfor where UserName=@UserName and Pwd=@Pwd
执行:
exec procSelectUser 'zh' ,'xxxx'
十二、触发器
create trigger trigUserDelect
ON UserInfor
after delete /* 有三种INSERT,DELETE,UPDATE*/
AS
begin
select * from deleted /*在删除后同时查出删除后的内容*/
end
GO