---------------------- 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 中。