zoukankan      html  css  js  c++  java
  • SQL基础知识总结

    1、在SQLServer数据库表中设置主键时,有两种常用的主键数据类型:
    int(或bigint)+标识列(又称自动增长字段);
    uniqueidentifier(又称Guid、UUID);

    其中Guid算法是一种可以产生唯一标识的高效的算法,它使用网卡MAC、地址、纳秒级时间、芯片ID码等算出来的,这样保证每次生成的GUID永远
    不会重复,无论是同一个计算机上还是不同的计算机。SQLServer中生成GUID的函数newid(),.Net中生成GUID的方法:Guid.NewGuid(),返回是Guid
    类型。

    两者优缺点比较:
    Int自增字段的优点:占用空间小、无需开发人员干预、易读;
    Guid的优点:效率高、数据导入导出方便;
    Int自增字段的缺点:效率低、数据导入导出的时候很痛苦;
    Guid的缺点:占用空间大、不易读;
    业界主流倾向于使用Guid;

    2、数据库中对数据的操作

    (1)、在sql语句中出现了中文时要注意在其前面加一个N 以防出错,形如:update Person1 set NickName=N'青年人';
    (2)、在向表中插入数据时有两种形式:
    不写表中的字段名,形如:insert into Person values(1,'张三',20);
    该方式添加的值的顺序得与表中字段顺序一致;
    写表中的字段名,形如:insert into Person(Number,Name,Age) values(1,'张三',20);
    在实际应用中最好用第二种方式,能使别人一目了然。

    (3)、删除数据两种方法:
    delete from table:删除表中数据;
    drop table:连同表一同删除;

    (4)、检索表中数据时可以检索不与任何表示关联的数据,形如:select 1+1 as 列1,getdate() as 日期,newid() as 编号;

    (5)、在C#中null表示没有,而在SqlServer中null不表示没有,而表示不知道。
    例如:
    select null+1;
    返回值是null;
    select ''+'123';
    返回值是123;
    select null+'123'
    返回值还是null;
    由上可知,null在SqlServer中表示不知道。

    在数据库中查询字段为null的数据时使用is,形如:select * from Person where Name is null;

    (6)、限制结果集范围:
    将T_Employee表中数据按工资进行降序排序并取前三,sql语句如下:
    select top 3 * from T_Employee order by FSalary DESC;
    检索按照工资从高到低排序检索从第六名开始一共三个人的信息,sql语句如下:
    select top 3 * from T_Employee where FNumber not in( select top 5 FNumber from T_Employee
    order by FSalary DESC) order by FSalary DESC;

    (7)、联合结果集:
    每个结果集必须有相同的列数;
    每个结果集的列必须类型相容.
    Union因为要进行重复值扫描,所以效率低,因此如果不是确定要合并重复行,那么就用UNION ALL.
    查询每位正式员工的工号和工资,并在最后一行加上所有员工工资额合计,sql语句如下:
    select FName,FSalary from T_Employee
    UNION
    select '工资合计',sum(FSalary) from T_Employee;

    (8)、字符串函数:
    ceiling:舍入到最大整数,形如:3.33将舍入到4;(ceiling--天花板的意思,所以取最上)
    floor():舍入到最小整数,形如:3.33将舍入到3;(floor--地板的意思,所以取最下)
    LTRIM():去掉字符串左侧的空格;
    RTRIM():去掉字符串右侧的空格;
    要想去掉两侧的空格,sql语句如下:
    select LTRIM(RTRIM( 'ab' ));
    DATEADD(datepart,number,date):计算增加以后的日期.参数date为待计算的日期;参数number
    为增量;参数datepart为计量单位.
    形如:DATEADD(day,3,getdate());计算三天后的日期.
    DATEDIFF(datepart,startdate,enddate):计算两个日期之间的差额.datepart为计量单位,可取值参考DateAdd.
    计算员工的工龄,sql语句如下:
    select FName,FInDate,DateDiff(year,FInputDate,getdate()) from T_Employee;
    DATEPART(datepart,date):返回一个日期的特定部分.
    得到每一年入职的员工的人数,sql语句如下:
    select DatePart(year,FInDate),count(*) from T_Employee group by DatePart(year,FInDate);


    (9)、类型转换函数:
    cast(expression as data_type):第一参数是被转换的表达式,第二个参数是数据类型;
    select cast('123' as int)
    convert(data_type,expression):第一个参数是数据类型,第二参数是被转换的表达式;
    select convert(datetime,'2008-09-09')

    (10)、空值处理函数:

    ISNULL(expression,value):如果expression不为空则返回expression,否则返回value.

    例如:
    如果从数据库表中检索出所有名字,有一项为空,若想让为空的显示为'佚名',sql语句如下:
    select ISNULL(FName,'佚名') as 姓名 from T_Employee;

    (10)、CASE函数:

    单值判断,相当于switch ccase,用法:CASE expression when value1 then returnvalue1 when value2 then returnvalue2

    else defaultreturnvalue end
    例如:
    从数据库表中检索会员信息,sql语句如下:
    select FName,
    (
    case FLevel
    when 1 then '普通客户'
    when 2 then '会员'
    when 3 then '超级会员'
    else '未知客户类型'
    end
    ) as 客户类型
    from T_Customer;
    测试数据在备注中,相当于if...else...else...,用法:CASE when condation1 then returnvalue1 when condation2 then returnvalue2
    else defaultreturnvalue end
    例如:
    检索雇员的工资水平:
    select FName,
    (
    case
    when FSalary<2000 then '低收入'
    when FSalary>=2000 and FSalary<=5000 then '中等收入'
    else '高收入'
    end
    ) as 收入水平
    from T_Employee;

  • 相关阅读:
    tinyxml优化之一
    vs下C++内存泄露检测
    Cocos2d-x项目移植到WP8系列之九:使用自定义shader
    [leetcode 双周赛 11] 1228 等差数列中缺失的数字
    [leetcode 周赛 158] 1224 最大相等频率
    [leetcode 周赛 158] 1223 掷骰子模拟
    [leetcode 周赛 158] 1222 可以攻击国王的皇后
    [leetcode 周赛 158] 1221 分割平衡字符串
    [leetcode 周赛 157] 1220 统计元音字母序列的数目
    [leetcode 周赛 157] 1219 黄金矿工
  • 原文地址:https://www.cnblogs.com/zcz527/p/3087785.html
Copyright © 2011-2022 走看看