SQL 增、删、改、查、数据处理、类型转换、sql关键字、select运算及字符处理(二)

数据的查找
      注意
        SQL中等于判断用单个=,而不是==。
        Where中可以使用的其他逻辑运算符:(||)or、(&&)and、(!)not、<、>、>=、<=、 <>(或!=)等

  1.查找全部、查找一列、按条件查找

查找全部
select * from myclass
查找一列
select classname from myclass
按条件查找
select classname from myclass where classid=3

 


  2.修改列的显示名称(单引号可以有可以没有)

as 第一种
select tSId as ID, tEnglish as 英语成绩,tMath as '数学成绩' from TblScore
第二种
select ID=tSId,数学成绩=tMath,'英语成绩'=tEnglish from TblScore

 


  3.关键字
      1)Top

查询前多少条
select Top 5 * from TblScore

 


     2)排序        注意: 无法对汉字进行排序

order by 列名 asc desc 
降序
select * from TblScore order by tEnglish asc
升序
select * from TblScore order by tEnglish desc

 


    3)去重distinct

去除重复项
select distinct * from MyClass
查询所有数据的时候不一定去掉列中的重复项

select distinct ClassDesc from MyClass
查询单列数据的时候可以去掉重复项

 

 

    4)聚合函数  注意:NULL不参与聚合函数的运算

COUNT  :  count()表示的是条数 
select COUNT(*) from MyClass
注意: 当其中有一列使用了聚合函数,其他要显示的列也需要使用聚合函数

MAX: 最大值
select MAX(tEnglish) from TblScore

MIN:最小值
select MIN(tEnglish) from TblScore

SUM:和
select SUM(tEnglish) from TblScore

AVG:平均值
select AVG(tEnglish) from TblScore

 


  5)条件取值
      范围取值 and   和    between    and

and
select * from TblScore where tEnglish>120 and tEnglish<140
between
--between 值一 and 值二 之间的数据
select * from TblScore where tEnglish between 120 and 140

 


         指定数据   or   和  in

or
select * from Customers where Country='UK' or Country='USA'
in
select * from Customers where Country IN('UK','USA')

 


  6) LIKE 模糊查询

--以“小”开头,后面任意
select * from TblStudent where tSName like '小%'
--中间有“小”的数据
select * from TblStudent where tSName like '%小%'
--以“小”开头后面2个字符,“_”表示一个占位
select * from TblStudent where tSName like '小__'
--同上 LEN 字符的长度
select * from TblStudent where tSName like '张%' and LEN(tSName)=3
--以“张”开头,后面以任意小写字母,在加一个字符
select * from TblStudent where tSName like '张[a-z]_'
--以“张”开头,加任意字符,加一个%,在加上任意字符
select * from TblStudent where tSName like '张%[%]%'

 


  7) NULL和 IS NULL

--数据是null
select * from TblScore where tEnglish is null
--数据不是null
select * from TblScore where tEnglish is not null
查找数据NULL 将其修改为.....
select *, ISNULL(convert(varchar(10),tEnglish),'缺考') from TblScore

 

  8)   group by 分组,   having 分组之后筛选条件

use kuyi
select 数量=count(*),ClassDesc from MyClass
 group by ClassDesc       --分组
 having COUNT(*)>2          --分组后在筛选条件

 


  9)合并数据表

union去除重复项
select uname,uage from T1
union
select uname,uage from T2

union all不去除重复项
select uname,uage from T1 union all select uname,uage from T2

 

  

  10)复制表

      复制数据,结构,

select * into NewMyClass1 from MyClass where 1=1
select * into NewMyClass2 from MyClass

 


      复制数据表结构,不复制数据

select * into NewMyClass3 from MyClass where 1<>1
select Top 0 * into NewMyClass4 from MyClass 

  

  11)select运算与处理字符

1.select '字符串'+'字符串'   
    
select 125+125

2.select 时间=GETDATE(); --当前时间3.DATEADD 当前时间下,往后时间
    select DATEADD(YEAR,-261,GETDATE()) --261年前 注意,年的极限就是-261,-262就崩了
    select DATEADD(MONTH,10,GETDATE()) --10月后
    select DATEADD(DAY,10,GETDATE()) --10日后
    select DATEADD(hour,10,GETDATE()) --10时后
    select DATEADD(minute,10,GETDATE()) --10分后
    select DATEADD(second,10,GETDATE()) --10秒后
3.DATEDIFF 两个时间段所经过的时间
  
select DATEDIFF(SECOND,'2000-01-01',GETDATE());
4.DATEPART 日期的指定部分     
select DATEPART(YEAR,GETDATE())
5.select '哈哈'+null
    结果是null
6.LEN 字符串的个数     
select LEN('中国abc') as 字符个数
7.DATALENGTH 字节的个数     
select DATALENGTH('asd中国') as 字节个数
8.UPPER 小写转大写     
select UPPER('abc')
9.LOWER 大写转小写     
select LOWER('ABC');
10.LTRIM 去掉前空格     
select '=='+LTRIM(' 中国')+'==';
11.RTRIM去掉后空格     
select '=='+RTRIM('中国 ')+'==';
12.去掉两边空格     
select '=='+LTRIM(RTRIM(' 中国 '))+'=='

13.截取字符   LEFT 从开始截取?个字符     select LEFT('中国人abc',2);   SUBSTRING 从?截取?个字符     select SUBSTRING('a中国cdefg',2,3);
14.percent   查找前?
%几的数据   查找前10%的数据 1进制     select Top 10 percent * from student
15.取整数   CEILING()     
select CEILING(2.2) 结果是3

 


  12)选择判断
      (
        case
          when A>B then A
        end
      )

--称号=
--(
--    case
--    when SUM(销售数量*销售价格)>6000 then '金牌'
--    when SUM(销售数量*销售价格)>5500 then '银牌'
--    when SUM(销售数量*销售价格)>4500 then '铜牌'
--    else '普通'
--    end
--)

 


  13)将负数转换成正数  abs

abs(-10)    结果是10

 


  14)分页
      方式一  not  in

--每页8条数据,查询第四页的数据
select top 8 * from Customers where CustomerID not in
(select top ((4-1)*8) CustomerID from Customers)

 


      方式二  ROW_NUMBER()over(order by CustomerID)

select * from 
(select *,序号=ROW_NUMBER()over(order by CustomerID) from Customers) as newCustomers 
where 序号 between (4-1)*8+1 and 4*8

 


  15)开窗函数
    Over()
      1.over子句与排名开窗函数一起用
        语法:over([partition by 列1] order by 列2)。必须有order by 子句
      2.over子句与聚合开窗函数一起用
        语法:over([partition by 列1])不能使用order by子句了。
    rank()
      相同数据显示并列排号
    ROW_NUMBER()
      不能用在where子句中,所以将带行号的执行结果作为子查询,就可以将结果当成表一样用了


  16)分类 partition
      先对商品进行分类,然后对每一类商品的id进行排序

select id,商品名称,行号=ROW_NUMBER() over(partition by 商品名称 order by id asc) from MyOrders

 

  

  17)行内数据转换列名

select * from (SELECT * FROM ROLE_PROPERTIES_CELLS(nolock) where ROLE_ID = '6d51fc9b-c8d5-abf5-4b1b-682af64cba3d') t 
PIVOT( MAX(String_Value) FOR Property_Name IN (Operator,Condition,CorporationCode,NcCompanyCode,
CostCenterCode,ProjectCode,OperatorType,ProjectCityCode))b

 

posted @ 2017-08-02 15:40  风儿_VIP  阅读(1112)  评论(0编辑  收藏  举报