数据库SQL Server

一、数据库登陆

  • 服务器名称:.  //联系本机
  • 身份验证: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

原文地址:https://www.cnblogs.com/caiyc/p/7718559.html