zoukankan      html  css  js  c++  java
  • 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 字符串拼接,解决方法是查询时使用参数化方式查询

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

    缓慢行走的蜗牛
  • 相关阅读:
    【BZOJ 4581】【Usaco2016 Open】Field Reduction
    【BZOJ 4582】【Usaco2016 Open】Diamond Collector
    【BZOJ 4580】【Usaco2016 Open】248
    【BZOJ 3754】Tree之最小方差树
    【51Nod 1501】【算法马拉松 19D】石头剪刀布威力加强版
    【51Nod 1622】【算法马拉松 19C】集合对
    【51Nod 1616】【算法马拉松 19B】最小集合
    【51Nod 1674】【算法马拉松 19A】区间的价值 V2
    【BZOJ 2541】【Vijos 1366】【CTSC 2000】冰原探险
    【BZOJ 1065】【Vijos 1826】【NOI 2008】奥运物流
  • 原文地址:https://www.cnblogs.com/gxwang/p/4940889.html
Copyright © 2011-2022 走看看