zoukankan      html  css  js  c++  java
  • C#基础之SQL笔记4

    数据分组:

    1.查询的字段只能是所要分的[组的属性](如聚合函数 avg()某一组的平均值 max()某一组的最大值等,也可以是属于某一组的某个特殊成员属性等),以及要用来分组的字段,即某一组的过滤信息,且不可缺少。

    2.聚合函数不能出现在 where 子句中,但可以出现在 having 子句中,且 having 子句中只能包含分组的字段和聚合函数,即having也只能存放某一组的过滤信息。

    3.having是对分组后的信息的过滤用的列和select中能用的列是一样的,having无法代替where

     

    限制结果集的范围:

    例: select top 3 * from T_Employee (只取前3条数据)

     

    去掉重复数据:

    例:select distinct FDepartment,FSubCompany from T_Tmployee;

     

    联合(Union):

    联合的查询语句中的查询的字段数目要一致

    select FName,FAge,'工资' from T_TempEmployee

    union

    select FName,FAge,FSalary from T_Employee

     

    select FName,FName,FAge,FDepartment from T_Employee

    union

    select FIdCardNumber,FName,FAge,'临时工,无部门' from T_TempEmployee

     

    union会自动去除重复行,用union all可以去除重复行

    select FName from T_Employee

    union all

    select FName from T_TempEmployee

     

     

    流控制函数:

    ISNULL()函数判断是否为空

    SELECT ISNULL(FName,'佚名') as 姓名 FROM T_Employee;

     

    CASE expression

    WHEN value1 THEN returnvalue1

    WHEN value2 THEN returnvalue2

    WHEN value3 THEN returnvalue3

    ELSE defaultreturnvalue

    END

     

    例:

    select FName,

    (

    case FLevel

    when 1 then '普通客户'

    when 2 then '会员'

    when 2 then 'VIP'

    else '未知客户类型'

    end

    ) as 客户类型

    from T_Customer

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

    select FName

    (

    case

    when FSalary<2000 then '低收入'

    when FSalary>=2000 then '中等收入'

    else '高收入'

    end

    ) as 收入水平

    from T_Employee

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

    select FNumber

    (

    case

    when FSalary<2000 then FAmount

    else 0

    end

    ) as 收入,

    (

    case

    when FAmount<0 then ABS(FAmount)

    else 0

    end

    ) as 支出

    from T_Test1

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

    把下表:

    Name Score

    拜仁 胜

    奇才 胜

    湖人 胜

    拜仁 负

    拜仁 负

    奇才 胜

    按下面格式输出:

    Name 胜 负

    拜仁 1 2

    奇才 1 0

    湖人 2 0

    **************

    select Name,

    Sum(

    case Score

    when N'胜' then 1

    else 0

    end

    ) as,

    Sum(

    case Score

    when N'负' then 1

    else 0

    end

    )as

    from T_Scores

    group by Name

     

     

    join表的连接:

    例:

    select o.BillNo,c.Name,c.Age

    from T_Orders as o join T_Customs as c on o.CustomerId=c.Id

    where c.Age>15

     

    子查询:

    例:

    select * from

    (

    select * from T_Orders

    ) as o1

     

        1.单值子查询

    select 1 as f1,2,(select min(FYearPublicshed) from T_Book),

    (select max(FYeayPublished) from T_Book) as f4

     

    select 1 as f1,(select min(FYearPublished),max(FYearPublished) from T_Book)

     

    2.单列多值子查询

    select * from T_Reader

    where FYearOfJoin in

    (select distinct FYearPublished from T_Book)

     

    select * from

    (

    select row_number() over(order by Fsalary desc) as rownum,

    FNumber,FName,FSalary,FAge from T_empoyee

    ) as e1

    where e1.rownum>=3 and e1.rownum<=5;

     

  • 相关阅读:
    常用 Git 命令清单
    radhat 6.4/centos 6.4 下编译安装 最新ruby 2.1.5
    centos 6.4/redhat 6.4 安装gitlab
    微信小程序——navigator无法跳转
    微信小程序——修改data里面数组某一个值
    微信小程序——template的循环嵌套
    微信小程序——template的使用方法
    node学习笔记8——发布npm包
    淘宝镜像使用方法
    node学习笔记7——npm安装包
  • 原文地址:https://www.cnblogs.com/luowei010101/p/2177379.html
Copyright © 2011-2022 走看看