zoukankan      html  css  js  c++  java
  • T-SQL 查询语句总结

    我们使用一下两张表作为范例:

    select * from [dbo].[employee]

    select * from [dbo].[dept]

     

    1、select语句

    • DISTINCT:去掉记录中的重复值。

    select distinct dept_no from [dbo].[employee]

     

    • TOP:返回第一行或者是前几行

    select top(3) * from [dbo].[employee]

     

    • AS:修改列标题

    select e_no as '员工编号', e_name as '员工姓名' from [dbo].[employee]

     

    注:AS关键字也可以省略

    • 使用等号‘=’修改列标题

    select '员工编号'=e_no,  '员工姓名'=e_name from [dbo].[employee]

     

    2、在查询的结果内集中显示某字符串

    select '员工姓名:' ,e_name from [dbo].[employee]

    3、查询的列为表达式

    select e_no+10 as '新员工编号' ,e_name '员工姓名' from [dbo].[employee]

     

    4、where子句条件查询

    •   BETWEEN AND 表示范围

    select * from  [dbo].[employee]  where e_no between 1001 and 1006 

     

    • 使用IN关键字

    select * from  [dbo].[employee]  where e_no in (1001 , 1007 )

     

    使用IN关键词时,将所有检索条件用逗号分隔开。与括号内的值相匹配便可以被查出。

    • 使用LIKE关键字

    LIKE关键字使用的通配符:

    %:包含零个或多个字符的任意字符串。

     _:任何单个字符。

    []:指定范围[a-f]或者是集合[abcdef]中的任何单个字符。

    [^]:不属于该范围的任何单个字符。

    select * from [dbo].[employee] where e_name like 'a%'

     

    • IS NULL  (IS NOT NULL)

    在SELECT语句中使用IS NULL(IN NOT NULL)某字段内容是否为空(不为空)

    select * from [dbo].[employee] where e_name is null

    5、EXISTS(NOT EXISTS)关键字

    EXISTS关键字后面的参数是一个任意的子查询,系统对子查询进行运算以判断它是否返回行,如果至少返回一行,那么EXISTS的结果为TURE,此时外层查询语句将进行查询;如果子查询没有返回行,那么EXISTS反悔的结果为FALSE,此时外层语句将不进行查询。EXISTS语句可以与where或if一起使用。

    select top(2) * from [dbo].[employee] where exists (select top (1) * from [dbo].[employee])

    注:EXISTS的结果只取决于是否会返回行,而不取决于这些行的内容具体是什么。

    6、ORDER BY

    对指定的列数据进行排序。

    升序(ASC)

    降序(DESC)

    select * from [dbo].[employee] order by e_no desc

     

    多列排序:先按照第一列排序,若第一列中有相同的值,则在这些值中再按照第二列排序。

    select * from [dbo].[employee] order by dept_no desc ,e_no

     

    7、GROUP BY 分组

    GROUP BY 子句通常和聚合函数一起使用,例如:MAX,MIN,COUNT,SUM,AVG。

    select dept_no ,count(*) as '部门人数' from [dbo].[employee] group by dept_no

     注意:选择列表中任一非聚合表达式内的所有列都应包含在 GROUP BY 列表中,或者 GROUP BY 表达式必须与选择列表表达式完全匹配。

    多字段分组:GROUP BY 子句后面根据需要分组的字段,分组层次从左到右,先按照第一个字段分组,然后在第一个字段值相同的记录中,再根据第二个字段的值进行分组,以此类推。

    • 使用HAVING对分组结果过滤

    GROUP BY 和HAVING一起限定显示记录所需满足的条件,只有满足条件的分组才会被显示。

    select dept_no ,count(*) as '部门人数' from [dbo].[employee] group by dept_no having count(*)>2

    注:HAVING与WHERE都可以用来过滤数据,两者的区别是:HAVING用在数据分组之后进行过滤,即用来选择分组;WHERE在分组之前用来选择记录,它排除的记录不包括在分组中。

    8、UNION合并查询结果集

    利用UNION关键字,可以给出多条SELECT语句,并将他们的结果组合成单个结果集。若UNION不使用关键字ALL,执行的时候会自动删除重复的记录,所有返回值的行都是唯一的;使用关键字ALL的作用是不删除重复行也不对结果进行自动排序。注意合并是两个表对应的列数和数据类型必须是相同的。

    select * from [dbo].[employee] where dept_no=20

    union

    select * from [dbo].[employee] where dept_no=30

     

    9、多表连接查询

    会有另外博文单独讲解

  • 相关阅读:
    15 反转链表
    八大排序算法总结(2)
    八大排序算法总结(1)
    22从上往下打印二叉树
    19顺时针打印矩阵
    20包含min函数的栈
    SpringMVC-Mybatis整合和注解开发
    优雅的代码之选择不同支付方式
    利用freemarker+SAX解析xml的方式对excel文件字段校验
    pl/sql编程语言
  • 原文地址:https://www.cnblogs.com/darrenliu/p/4360115.html
Copyright © 2011-2022 走看看