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

来源:互联网 发布:linux cc攻击脚本 编辑:程序博客网 时间:2024/05/16 05:38

---------------------- 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_Scoresgroup 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 t1where ROWNUM>=1 AND ROWNUM<=3--ROW_NUMBER()不能出现在WHERE 中。

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

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