首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

今天把小弟我刚开始接触sql的简单事例总结了一下,全是从以前收藏的帖子翻出来的,供菜鸟来学习,希望能有所帮助,有空会继续总结

2012-04-09 
今天把我刚开始接触sql的简单事例总结了一下,全是从以前收藏的帖子翻出来的,供初学者来学习,希望能有所帮

今天把我刚开始接触sql的简单事例总结了一下,全是从以前收藏的帖子翻出来的,供初学者来学习,希望能有所帮助,有空会继续总结
事例一:排序

ORDER   BY子句可包括未出现在此选择列表的项目.然而,如果指定SELECT   DISTINCT,则排序列必定出现在选择列表中.

错误的语句:SELECT   DISTINCT   书名   FROM   tb_BookStore   ORDER   BY   现存数量

正确的语句:SELECT   DISTINCT   (书名),现存数量   FROM   tb_BookStore   ORDER   BY   现存数量

(2)

gold是等级       expire_date是到期时间      
       
根据前面的查询是按等级后再按到期时间,这样的话高等级的过期的人就在低等级没过期的人的前面.      
       
现在要做成       过期的都要到后面显示       无论等级是多少       而没过期的还是正常按等级及到期时间排列      

Create       Table       #TEST      
    (ID       Int,      
        gold   Int,      
        expire_date   DateTime)      
    Insert       #TEST       Select       1,2, '2006-06-30 '      
    Union       All       Select       2,3, '2006-06-30 '      
    Union       All       Select       3,5, '2006-05-30 '      
    Union       All       Select       4,6, '2006-06-12 '      
    Union       All       Select       5,10, '2006-07-30 '      
    Union       All       Select       6,1, '2006-08-30 '      
    Union       All       Select       6,1, '2008-08-30 '    
    Union       All       Select       6,1, '2009-08-30 '    

select       top       100       *       from       [#TEST]       order       by       (Case       When       expire_date> =GetDate()       Then     0       Else     1     End),       gold       desc,expire_date       desc      


事例2:charindex

B=(1,11,2,22,3)

select       *       from       table       where          
charindex( ',1, ', ', '+B+ ', ')> 0       or       charindex( ',2, ', ', '+B+ ', ')> 0      
or       charindex( ',3, ', ', '+B+ ', ')> 0

(2)

    INSERT       @t       SELECT       '消费电子 '      
    UNION       ALL       SELECT       '消费电子       '      
    UNION       ALL       SELECT       ',消费电子, '      
       
    select       *       from       @t       where       nkey= '消费电子 '      


    /*--       结果      
    id                                           nkey      
    -----------       ----------      
    1                                               消费电子      
    2                                               消费电子          
    --*/      
       
    select       *,       ', '+ '消费电子 '+ ', '       from       @t       where       charindex( ', '+ '消费电子 '+ ', ', ', '+nkey+ ', ')> 0      
    /*--       结果      
    id                                           nkey                                  
    -----------       ----------       ----------      
    1                                               消费电子                               ,消费电子,      
    3                                               ,消费电子,                       ,消费电子,      
       
    (2       行受影响)      
    --*/      
       
    select       *       from       @t       where       ', '+ '消费电子 '+ ', '= ', '+nkey+ ', '      
    /*--       结果      
    id                                           nkey      
    -----------       ----------      
    1                                               消费电子      
       
    (1       行受影响)      
    --*/      
     

  charindex( ', '+ '消费电子 '+ ', ', ', '+nkey+ ', ')> 0      
    这个是包含关系      
       


       
    ', '+ '消费电子 '+ ', '= ', '+nkey+ ', '      
    这个是完全匹配关系.

事例3:replace

  REPLACE       (       'string_expression1 '       ,       'string_expression2 '       ,       'string_expression3 '       )      

示例      
    下例用       xxx       替换       abcdefghi       中的字符串       cde。      
    SELECT       REPLACE( 'abcdefghicde ', 'cde ', 'xxx ')      
    GO      
       
    下面是结果集:      
       
    ------------      
    abxxxfghixxx      
    (1       row(s)       affected)      


事例4:case   when

CASE   具有两种格式:  
(1)简单   CASE   函数将某个表达式与一组简单表达式进行比较以确定结果。  
(2)CASE   搜索函数计算一组布尔表达式以确定结果。两种格式都支持可选的   ELSE   参数。  

语法
简单   CASE   函数:

CASE   input_expression
        WHEN   when_expression   THEN   result_expression
                [   ...n   ]
        [  
                ELSE   else_result_expression
        END

CASE   搜索函数:

select   case   StatusValue
when   '0 '   then   (select   top   1   字段名   from   work)
when   '1 '   then   (select   top   1   字段名   from   Notice)
end  
from   CommonStatusDict


create   table   tb(id   int   ,class   varchar)--class种类就只有三种,如果不固定就需要存储过程来实现
insert   tb  
select   1, 'a '   union   all
select   1, 'a '   union   all
select   1, 'b '   union   all
select   1, 'c '   union   all
select   2, 'a '   union   all
select   2, 'b '   union   all
select   2, 'b '  
select   *   from   tb

想查找出按id分组得到的   a     ,b     ,c   的数量
    如下
id       a       b         c
1       2       1           1
2       1       2         0  


select  
  id,
  a=sum(case   class   when   'a '   then   1   else   0   end),
  b=sum(case   class   when   'b '   then   1   else   0   end),
  c=sum(case   class   when   'c '   then   1   else   0   end)
from  
  tb
group   by
  id

事例5:datediff

要查询9   月份的数据中的任意时间段,可能是一个月的,也可能是1日到15日的

select       *       from       tabname       where       datediff(month,colname, '2006-09-01 ')=0




事例6:convert

SQL中CONVERT转化函数的用法  
SQL中CONVERT转化函数的用法

CONVERT的使用方法:

////////////////////////////////////////////////////////////////////////////////////////

格式:
CONVERT(data_type,expression[,style])

说明:
此样式一般在时间类型(datetime,smalldatetime)与字符串类型(nchar,nvarchar,char,varchar)
相互转换的时候才用到.

例子:
SELECT   CONVERT(varchar(30),getdate(),101)   now
结果为
now
---------------------------------------
09/15/2001

/////////////////////////////////////////////////////////////////////////////////////

style数字在转换时间时的含义如下

-------------------------------------------------------------
Style(2位表示年份)   |   Style(4位表示年份)   |   输入输出格式  
-------------------------------------------------------------
-   |   0   or   100   |   mon   dd   yyyy   hh:miAM(或PM)  
-------------------------------------------------------------
1   |   101   |   mm/dd/yy  
-------------------------------------------------------------
2   |   102   |   yy-mm-dd  
-------------------------------------------------------------
3   |   103   |   dd/mm/yy  
-------------------------------------------------------------
4   |   104   |   dd-mm-yy  
-------------------------------------------------------------
5   |   105   |   dd-mm-yy  
-------------------------------------------------------------
6   |   106   |   dd   mon   yy  
-------------------------------------------------------------
7   |   107   |   mon   dd,yy  
-------------------------------------------------------------
8   |   108   |   hh:mm:ss  
-------------------------------------------------------------
-   |   9   or   109   |   mon   dd   yyyy   hh:mi:ss:mmmmAM(或PM)
-------------------------------------------------------------
10   |   110   |   mm-dd-yy  
-------------------------------------------------------------
11   |   111   |   yy/mm/dd  
-------------------------------------------------------------
12   |   112   |   yymmdd  
-------------------------------------------------------------
-   |   13   or   113   |   dd   mon   yyyy   hh:mi:ss:mmm(24小时制)  
-------------------------------------------------------------
14   |   114   |   hh:mi:ss:mmm(24小时制)  
-------------------------------------------------------------
-   |   20   or   120   |   yyyy-mm-dd   hh:mi:ss(24小时制)  
-------------------------------------------------------------
-   |   21   or   121   |   yyyy-mm-dd   hh:mi:ss:mmm(24小时制)  


例如当前时间为:2005-9-12   13:20:00



我要取其中的:2005-9-12

select   convert(char(10), '2005-9-12   13:20:00 ',120)




[解决办法]
沙發
[解决办法]
LZ好人~不错~学习 UP!!
[解决办法]
再UP!!
[解决办法]
楼主辛苦了!
[解决办法]
楼主辛苦,多总结,多温故才能知新,呵呵
[解决办法]
整理的有点乱

LZ继续努力
[解决办法]
学习~!

谢谢楼主 ~!
[解决办法]
楼主辛苦!

貌似和偶同岁HOHO
[解决办法]
楼主辛苦!
好人一個
[解决办法]
好人啊
[解决办法]
加油~~~
[解决办法]
:)

先占個位置
[解决办法]
感谢
[解决办法]
LZ辛苦了
[解决办法]
谢谢楼主,先收藏了
[解决办法]
学习
[解决办法]
收藏先
[解决办法]
楼主是好人..好人一生平安
JF
[解决办法]
路过...学习.
[解决办法]
支持下
[解决办法]
学习
[解决办法]
那个什么 Union 我觉得 好象不太用到啊!
呵呵!
支持!
[解决办法]
^_^
[解决办法]
学习
[解决办法]
学习
[解决办法]
学习中 up
[解决办法]
支持下
[解决办法]
只剩板凳了,也不错
[解决办法]
先谢谢楼主。再搬个板凳慢慢看,学习无止尽!
[解决办法]
学习
[解决办法]
学习
[解决办法]
顶一下!!!
[解决办法]
太好拉.谢谢.

[解决办法]
慢慢看,不懂再问。学习先。
[解决办法]
楼主费心了。。谢谢。。
[解决办法]
都是经验啊
[解决办法]
辛苦了

[解决办法]
lz辛苦~
[解决办法]
学习

[解决办法]
楼主懂得累积啊~学习……
[解决办法]
好帖
[解决办法]
jf
[解决办法]
不错,值得借鉴
[解决办法]
学习……
[解决办法]
mark

[解决办法]
顶,怎么没游标?
[解决办法]
学习……
[解决办法]
学习,占个坑位

[解决办法]
学习
[解决办法]
学习
[解决办法]
学习
[解决办法]
:)
[解决办法]
拿分..飘过~~~
[解决办法]
谢谢,我在这里还想问下,以上的简单事件发生的原因。如果能给个为什么那就更加好了,再次感谢
[解决办法]
学习....
[解决办法]
向lz致敬。
辛苦了。

[解决办法]
谢谢
[解决办法]
具有开源精神的好人啊
[解决办法]
学习拉,谢谢。。。
[解决办法]
lz辛苦了 :)
[解决办法]
mark
感谢分享
[解决办法]
下学期学习刚好用到,多谢!!!
[解决办法]
学习
[解决办法]
谢谢LZ,不过感觉不仅只是对初学者有用.
[解决办法]
平常遇到的问题收集起来到以后学习很有帮助的,温故而知新。
[解决办法]
搂主幸苦了
[解决办法]
搂主幸苦了
------解决方案--------------------


不错
[解决办法]
很不错哦!
[解决办法]
mark,谢谢!!
[解决办法]
好东西 收藏
[解决办法]
嵌套游标的使用
declare cur1 cursor for
select ... from table_name1 where ...group by / order by ...
open cur1
FETCH NEXT FROM cur1 INTO ...
while (@@FETCH_STATUS = 0 )
begin
....
declare cur2 cursor for
select ... from table_name2 where ...group by / order by ...
set @sql= 'select ... from table_name2 where ...group by / order by ... '
exec @sql
open cur2
FETCH NEXT FROM cur2 INTO ...
while (@@FETCH_STATUS = 0 )
begin
....
FETCH NEXT FROM cur2 INTO ...
end
....
close cur2
DEALLOCATE cur2

FETCH NEXT FROM cur1 INTO ...
end
close cur1
deallocate cur1
[解决办法]
温故知新

[解决办法]
谢谢
[解决办法]
感谢!!!
[解决办法]
ths

[解决办法]
顶  学习中
[解决办法]
学习中,很有帮助。辛苦了,谢谢
[解决办法]
我是新手我喜欢。学好了帮助大家。
[解决办法]
好帖,一定要收藏。。。共享
[解决办法]
好东西 赞一个
[解决办法]
mark再慢慢看。。。。。。。
[解决办法]
不错,值得收藏!

[解决办法]
mark 收藏
[解决办法]
88
[解决办法]
为虾米没置顶?
[解决办法]
学习
[解决办法]
ding~~~好东西
[解决办法]
学习~ ^o^
[解决办法]
好多,看不过来了~
[解决办法]
mark
[解决办法]
感谢楼主,最好写成一个文档,发给大家共同学习,我的邮箱long5973@163.com
[解决办法]
你太好了 希望多来几个你这样的 老大们加油啊 我们等你们发贴呢
------解决方案--------------------


好心人啊!!少见了!!
学习
3Q lz!!!
[解决办法]
好东西要顶上去~让大家一起分享
[解决办法]
dingdingdingdingdingdingdingding

热点排行