• sql server 笔记 义美


    sql语句 不区分大小写!

    在 sql 语句里面 所有的字符串 都用单引号 ''

    create database Library

    新建一个名字为 Library 的表

    建一个表 名字叫 Users 的表

    (UserId int primary key, 是设置主键的意思)

    create table Users

    (

    UserId int primary key,

    UserName nvarchar(20) not null,

    UserPwd nvarchar(20) not null,

    )

    注释 两个横线  --

    select * from UserInfor

    查询 名字 为UserInfor 我表里面的所有内容

    * 表示所有字段

    select UserId,UserName,Pwd from UserInfor

    只查询部分的内容 比如 id name 密码

    where  查询  查询 name 为 admin  pwd 为123456

    select * from UserInfor where UserName='admin' and Pwd='123456'

    select * from UserInfor where Sex='男'

    查询 UserInfor 表中 所有 Sex 为男的

    select * from UserInfor where Sex='男' and Origin='江西'

    查询  UserInfor 表中 所有 Sex 为男的 Origin 为江西的

    select * from UserInfor where Sex='男' and Origin='江西' and Age>18

    查询  UserInfor 表中 所有 Sex 为男的 Origin 为江西的  年龄大于18的

    or 是或者 或 的意思

    select * from UserInfor where Sex='男' and (Origin='江西' or Origin='湖北' ) and Age>18

    湖北 或 江西

    select * from UserInfor where (age<30 or age>25)

    select * from UserInfor where age<=30 and age>=25

    select * from UserInfor where Age between 25 and 30

    查询年龄 小于 25大于30的

    select * from UserInfor where Age between 25 and 30

    是查区间

    查记录数

    select count(*) from UserInfor where Origin='江西'

    查询江西的 个数 个数 返回个数

    select count(*) as UserCount from UserInfor where Origin!='江西'

    不为江西 的个数

    select count(*) as UserCount from UserInfor where Origin='江西'

    返回的那个个数 多了个 列名 UserCount

    select * from UserInfor order by Age

    select * from UserInfor order by Age asc

    排序查询 通过 Age 升序 查询

    默认是升序 后面的 asc 可以省略

    select * from UserInfor order by Age desc

    按照 Age  降序查询 desc 表示降序

    select * from UserInfor where UserId=5 or UserId=8 or UserId=10

    select * from UserInfor where UserId in(5,8,10)

    查询 UserId 为 5 8 10 的

    select * from UserInfor where UserId not in(5,8,10)

    除了 UserId 为 8 5 10 的

    select * from UserInfor where UserName like '谢%'

    查询查 UserName 为 谢 开头的

    select * from UserInfor where UserName like '%帅'

    查询 UserName 为 帅 结尾的

    select * from UserInfor where UserName like '%帅%'

    查询 UserName 包含 帅 的

    select min(Age) as MinAge from UserInfor

    查询 Age 最小的 列名 为 MinAge

    select max(Age) as MaxAge from UserInfor

    查询 Age 最大的 列名 为 MaxAge

    select avg(Age) as AvgAge from UserInfor

    求平均数  列名 为 AvgAge

    select sum(Age) as SumAge from UserInfor

    求和 列名 为 SumAge

    select * from UserInfor where Age>

    (

    select avg(Age) from UserInfor

    )

    查询大于 平均值的

    select top 3 * from UserInfor order by Age desc

    查询 年龄最高的三个

    select count(*) as oruginCount,Origin from UserINfor group by Origin

    分组查询

    select count(*) as oruginCount,Origin from UserINfor group by Origin having count(*)>2

    查询结果大于二的

    select distinct UserName from UserInfor

    查询不重复的  distinct 表示不重复

    left join

    select UI.UserId,UI.UserName,UI.Sex,SC.MathScore,SC.ChinaScore 

    from UserInfor UI left join Score SC on

    UI.UserId=SC.UserId

    联合查询  UI.UserId=SC.UserId 关联

    right join

    select UI.UserId,UI.UserName,UI.Sex,SC.MathScore,SC.ChinaScore 

    from UserInfor UI right join Score SC on

    UI.UserId=SC.UserId

    inner join

    select UI.UserId,UI.UserName,UI.Sex,SC.MathScore,SC.ChinaScore 

    from UserInfor UI inner join Score SC on

    UI.UserId=SC.UserId

    select UISC.* ,PT.Father,PT.Mum from

    (

    select UI.UserId,UI.UserName,UI.Sex,SC.MathScore,SC.ChinaScore 

    from UserInfor UI inner join Score SC on

    UI.UserId=SC.UserId

    ) UISC inner join Parent PT on

    UISC.UserId=PT.UserId

    三个表 联合查询 嵌套式

    联合查询 很重要 一定要过

    select row_number() over(order by UserId)as rownumber,* from UserInfor

    分页查询

    select top 5* from

    (

    select row_number() over(order by UserId)as rownumber,* from UserInfor

    ) A where rownumber>5

    行号大于5

    (以后用的非常多)

    select UserId Age,

    case

    when Age<20 then '大一'

    when Age>20 and Age<=25 then '大二'

    when Age>25 and Age<=30 then '大三' 

    else '大四'

    end as geade from UserInfor

    对某个字段进行判断

    获取时间

    select year(getdate())

    获取当前系统年

    select month(getdate())

    获取当前系统月

    select day(getdate())

    获取当前系统日

    select dateadd(yy,100,getdate())

    当前系统时间再加100年  yy是年

    select dateadd(mm,100,getdate())

    当前系统时间再加 100个月  mm是月

    select dateadd(dd,100,getdate())

    当前系统时间再加 100个天  dd是天

    可以用在VIP到期时间 添加临时VIP

    间隔时间

    select datediff(yy,getdate(),'2108/12/31')

    当前时间 距离 2108/12/31 多少年

    select datediff(mm,getdate(),'2108/12/31')

    select datediff(dd,getdate(),'2108/12/31')

    间隔多少月 间隔多少天

    下面是增加 增

    查询到这了告一段落

    --添加 下面这种方式 表里面的每一个字段都要写

    insert into UserInfor values ('林东群','dongdong520',20,'1997-7-12 00:00','女','广东')

    如果不想 写值 ‘’ 不能不填

    --下面这种方式可以添加表单中的指定项

    insert into UserInfor(UserName,Pwd,Age) values('刘严','liuyan',22)

    下面学 删除 删

    delete UserInfor

    删除这个 叫 UserInfor 的表

    --下面是删除

    delete UserInfor where UserId=1004

    删除 UserId=1004  的

    下面是该 修改

    update UserInfor set UserName='刘翔',Age=22,Pwd='qwe1234' where UserId=11

    修改 UserId 为11的 UserNam Age Pwd

    --约束

    找到对应的表 设计  选择对应的项 CHECK 约束 然后写表达式

    也可以在JS里面约束  比如年龄 不能小于1  不能大于100

    索引 数据库优化 要用的技术

    聚集索引 

    非聚集索引

    一个表里面只有一个聚集索引

    设置了主键 那么就被默认设置了是聚集索引

    提高查询效率

    (聚集索引 访问量不是特别大就不要加 访问量特别大就要就 比如和百度大那样的就要加)

    ------------------------------------

    视图  原理 就是联合查询

    联合查询 是写在程序里面 写在C# 里面

    视图 把它当做单独个体存在数据库里面 可以单一个单独的表使用

    视图(占用数据库空间 用的比较少)

    存储过程

    相对安全 相对高效

    --触发器

    利用触发器 把删除的东西 显示出来

    delete UserInfor where UserId=1005

    create trigger trigDeIuser

       ON  UserInfor

       after delete /* 有三种INSERT,DELETE,UPDATE*/

    AS 

    begin

    select * from deleted /*在删除后同时查出删除后的内容*/

    end

    数据库的还原 备份

    备份方式 三种

    方法1. 选中要备份的数据库----任务-----备份 找到备份文件

    还原 选中数据库---右键----还原数据库---设备--添加----覆盖现有数据库---确实

    如果向下兼容?

    修改兼容级别

    选中数据库---右键----属性----选项----降低至自己需要的级别

    方法2.通过日志文件还原

    C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA

    下的.mdf  文件 和.ldf

    要先保存起来 不然删了库 这个两个文件也会被删除

    然后加进去

    还原 选中数据库---右键---附加---选中---确定

    方法3.导出脚本

    选择数据库----右键---任务----生成脚本----下一步----下一步----高级---倒数第二个 

    要修改的脚本类型:架构和数据。---然后一直按确定

    存入进去

    找到脚本 拉倒软件里面 执行就可以了 也可以复制代码执行

    修改VIP到期

    --update Users set Isvip='false' where Isvip='true' and  datediff(dd,getdate(),Expire)<0

    --到期了 结果是负数  没到期 结果是正数 刚刚好是0

  • 相关阅读:
    面试题:你了解对象分配规则吗
    面试题:Java 对象的创建过程
    面试题:Minor GC、Major GC、Full GC的触发时机
    常见的垃圾回收算法
    Java GUI快速入门
    Java Swing 介绍
    Java 开发环境配置
    Java (windows)安装教程
    Gamma、Linear、sRGB 和Unity Color Space,你真懂了吗?
    Qt OpenGL 蒙板
  • 原文地址:https://www.cnblogs.com/shaozhu520/p/8475496.html
Copyright © 2020-2023  润新知