黑马笔记-数据库之需要注意的(三)

---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------



又有时间了  KKK。

继续学习SQL,打好基础。从点点滴滴做起,系统的学习。

练习一.

表中有A、B、C 三列,用SQL语句实现当A列大于B列时选测A列否则选测B列,当B列大于C列时选择B列否则选择C列。

---创建表。
create table t4
(A int,B int,C int)
---插入数据
insert into t4 values(1,2,3)
insert into t4 values(3,2,1)
insert into t4 values(2,1,3)
 
select
(
    case  
       when A>B then A
       else B
    end
),
(
    case  
       when B>C B
       else C
    end
)
from t4


 

 

练习2.

有一张表T_Scores,记录比赛成绩。

Date                    Nane                    Score

2008-08-08                 拜仁                    胜

2008-08-09                 奇才                     胜

2008-08-09                 湖人                    胜

2008-08-10                 拜仁                    负

2008-08-08                 拜仁                     负

2008-08-12                 奇才                    胜

要求输出下面的格式:

Name              胜             负

拜仁               1               2

湖人               1               0

奇才               2               0

注意:在中文字符串前加N,比如N’负’

 

 

---创建表。
create table T_Scores
(
    [Date] datetime,     --日期
    Name   nvarchar(10),--队名
    Scores nvarchar(10) --胜负
)
---插入数据。
insert into T_Scores values('2008-08-08',N'拜仁',N'胜')
insert into T_Scores values('2008-08-08',N'奇才',N'胜')
insert into T_Scores values('2008-08-08',N'湖人',N'胜')
insert into T_Scores values('2008-08-08',N'拜仁',N'负')
insert into T_Scores values('2008-08-08',N'拜仁',N'负')
insert into T_Scores values('2008-08-08',N'奇才',N'胜')
--显示表。
select * From T_Scores;
 
---练习答案
Select Name ,
       sum
       (
           case
              when Scores = N'胜' then 1
              else 0
              end
       ) as胜,
       sum
       (
           case
              when Scores = N'负' then 1
              else 0
              end
       ) as负
from T_Scores
group by Name
      


 

 

 

注意:分解成小部分,一步一步完成.  思路:

           制作表->胜(1)负(1)->sum->groupby

子查询

            将一个查询语句做为一个结果集体供其他SQL语句使用,就像使用普通的表一样,被当作结果集的查询语句被称为子查询,所以可以使用表的地方几乎都可以使用子查询来代替。

 

使用子查询的原则:

1.一个子查询必须放在圆括号中;

2.将子查询放在比较条件的右边以增加可读性。子查询不包含 ORDER BY 子句。对一个SELECT 语句只能用一个 ORDER BY 子句,并且如果指定了它就必须放在主 SELECT 语句的最后。ORDER BY 子句可以使用,并且在进行Top-N 分析时是必须的;

3.在子查询中可以使用两种比较条件:单行运算符和多行运算符。

子查询的类型:

单行子查询:从内 SELECT 语句只返回一行的查询;

多行子查询:从内 SELECT 语句返回多行的查询;

select * from (select * from T_Reader where FYearOfBirth>1970) as Tr


注意:必须用别名

---只能是一行一列。
select 1 as f1,2,(select MIN(FYearPublished) from T_Book),(select MAX(FYearPublished) from T_Book) as f4
---单列多行
select * from T_Reader where  FYearOfJion IN(2000,2010)
 
select * from T_Reader WHERE FYearOfJion IN(SELECT FYearOfJion FROM T_Reader)
 
 
--用子查询实现TOP的功能
select * FROM
(
    select ROW_NUMBER() over (order by FSalary DESC)
    AS ROWNUM,FNumber,FName,FSalary,FAge FROM T_Employee
   
)as t1
where ROWNUM>=1 AND ROWNUM<=3
--ROW_NUMBER()不能出现在WHERE 中。

---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------

详细请查看:http://net.itheima.com/


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值