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 字符串拼接,解决方法是查询时使用参数化方式查询

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

    缓慢行走的蜗牛
  • 相关阅读:
    动态内存开辟(一)
    结构体,联合体,枚举,typedef
    练习使用C++的string类
    WIN10 + Qt 5.14(MSVC 2017,32bit) + APP项目(minGW-7.3.0 32bit)+glog
    扫雷游戏
    最小栈实现
    快速排序算法
    c++语句(循环)
    C++ 存储类
    C++ 运算符
  • 原文地址:https://www.cnblogs.com/gxwang/p/4940889.html
Copyright © 2011-2022 走看看