• MSSQL学习笔记


        最近在看教程,重新学习SQL,突然发现基础太差,好多东西都不懂。原来只知道打开Manager啪啪的在那用,理论上的东西查好远。现在翻来看看,到是能理解不少。边看边记,可能有些语句都不太懂,只是想记下来,以后慢慢回味。

    1.SQL<>SQLSERVER<>MSSQLSERVER
    SQL指查询语言,SQLSERVER存在MSSQLSERVER和SybaseSQLSERVER的区别,MSSQLSERVER特指微软的SQLSERVER

    2.char、vachar、nvchar之间区别
    均为字符数据类型,当数据中含有中文字符时用nvchar;vchar表示长度可变,而char表示长度一旦确定即不可改变,长度不足时用空格补齐,而achar不会用空格去补充

    3.主键外键
    int uniqueidentifier(Guid,UUID)用select newid()获取,C#中调用Guid.NewId().Guid类型主键可设置默认值为NewId().会自动生成Guid

    4.聚合函数:count max min avg sum等。聚合函数不可出现在where子句中。where count(*)>2//错误。解决方法是用having子句,having子句必须跟在group by子句后

    5.通配符过滤:单字符匹配用like '_XXX' 多字符匹配like 'k%'

    6.null不等于空,而是不知道内容是什么。null+2=null<>''+'2'='2'

    7.Group by 列名;select 后面的字段必须在group by子句中,或者是聚合函数
    select age,count(*) from Table group by age;
    select age,name from table group by age;//name 不在group by 子句中

    8.distinct取消重复是针对整行的数据,而不是某一字段的重复

    9.union将两个查询结果合并到一起,两个查询语句的查询字段数目相同,对应的字段类型需相同(相容)。另外,union会对合并后的查询结果去除重复,如果仅想合并查询结果集则需在union后加all

    10.函数
    ABS()绝对值 CEILING()向上取整数 FLOOR()向下取整数 ROUND(float,int)四舍五入,舍入离自己半径最近的数
    LEN()字符串长度 LOWER() UPPER() LTRIM() RTRIM() SUBSTRING(str,startpoint,len)
    GETDATE() DATEADD(datepart,number,date)计算增加后的日期 DATEDIFF()计算日期差额
    DATEPART()取出日期中特定部分(datapart:ss秒,mi分,hh小时,dd天,mm月,yy年)
    CAST(expression as datatype) CONVERT(datatype,expression)
    case expression when 2 then '' when 3 then '' end

    11.索引,被经常使用去查询的字段建立索引,查询时按原来查询一样,方便查询。插入、删除、更新时都需要改变索引,降低速度。所以只对经常出现在where子句中的字段设索引

    12.join语法(left join、right join、cross join) select from table1 as t1 join table2 as t2 on table1.col1=table2.col(表也可以起别名)

    13.子查询。将一个查询结果供其他查询使用,用的时候将其视为普通的表一样。select子句作为一列的话,查询子句只能返回一行一列。
    select 1 as col1,(select getdate()) as date//正确  select 1 as col1,(select getdate() as date,newid() as id)//错误

    14.in(value1,value2,....) in里面也可用select子查询,但子查询需要返回单行多列

    15.Row_NUMBER()函数(叫开窗函数,05以上版本提供),用于求行号介于某两个书之间的行.只能出现在select或order by子句
    select * from
    (
    select row_number() over(order by col1 desc) as rownum,
    col2,col3,... from table1
    )as t1 where t1.rownum>=3 and t1.rownum<=5  将子查询作为一个表进行操作

    16.实现idisposable接口的对象,使用完都需要dispose 最方便的用法是使用Using

    17.insert into table output inserted.id values('' '' '') 返回新插入的一行的id(自动生成行号情况),此时在C#中可用command.executescalar()返回一行一列的数据

    18.sql注入式漏洞攻击。1' or '1'='1 字符串拼接,解决方法是查询时使用参数化方式查询

    版权声明:本文为博主原创文章,未经博主允许不得转载。

    缓慢行走的蜗牛
  • 相关阅读:
    N4-某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
    N3-按链表值从尾到头的顺序返回一个ArrayList。
    N2-替换字符串空格
    innodb死锁1213
    innodb是行锁还是表锁
    docker是什么,docker干什么用
    innodb通过frm ibd还原数据,线上项目验证过
    机器性能预警系统(cpu,process,内存,硬盘监控)并钉钉机器人报警
    mysql++ query.more_results()为true时,query.store_next()就崩掉了
    yum install nload失败,提示No package nload available.Error: Nothing to do
  • 原文地址:https://www.cnblogs.com/gxwang/p/4940889.html
Copyright © 2020-2023  润新知