十一、GROUP BY
如果我们的需求是要算出每个人(name)的总成绩(score),那怎么办呢?在这个情况下,我们要做到两件事:第一,我们对于name 及score这两个栏位都要选出。第二,我们需要确认所有的 score都要依照各个 name 来分开算。这个语法为: SELECT '栏位1', SUM('栏位2') 查询每个人的总成绩: select name ,sum(score) from mytest group by name 十二、HAVING 那我们如何对函数产生的值来设定条件呢?举例来说,我们可能只需要知道哪些人的总成绩大于140。在这个情况下,我们不能使用 WHERE 的指令。那要怎么办呢?很幸运地,SQL 有提供一个 HAVING 的指令,而我们就可以用这个指令来达到这个目标。 HAVING 子句通常是在一个 SQL 句子的最后。一个含有 HAVING 子句的 SQL 并不一定要包含 GROUP BY 子句。HAVING 的语法如下: SELECT '栏位1', SUM('栏位2') 请读者注意: GROUP BY 子句并不是一定需要的。 找出总成绩大于140的学生: select name ,sum(score) from mytest group by name having sum(score) > 140 十三,AS (别名) as是别名关键字. 一般我们是这么使用. select 字段 as 别名 select 字段 别名 select 别名=字段 在sqlserver中这三种显示结果都是一模一样的. 但是我们不推荐后两种写法,只推荐第一种写法. 接下来,我们讨论 alias (别名) 在 SQL 上的用处。最常用到的别名有两种: 栏位别名及表格别名。 简单地来说,栏位别名的目的是为了让 SQL 产生的结果易读。在之前的例子中,每当我们有总成绩时,栏位名都是 SUM(score)。 虽然在这个情况下没有什么问题,可是如果这个栏位不是一个简单的总合,而是一个复杂的计算,那栏位名就没有这么易懂了。若我们用栏位别名的话,就可以确认 结果中的栏位名是简单易懂的。 第二种别名是表格别名。要给一个表格取一个别名,只要在 FROM 子句中的表格名后空一格,然后再列出要用的表格别名就可以了。这在我们要用 SQL 由数个不同的表格中获取资料时是很方便的。这一点我们在之后谈到连接 (join) 时会看到。 我们先来看一下栏位别名和表格别名的语法: SELECT '表格别名'.'栏位1' '栏位别名' 为了更直观展示学生总成绩,我们把name用“姓名”,sum(score)用“总成绩”表示,表格用别名a表示 select a.name as '姓名',sum(score) as '总成绩' from mytest as a group by name
现在我们介绍连接 (Join) 的概念。要了解连接,我们需要用到许多我们之前已介绍过的指令。我们先假设我们有以下的两个表格 表一、mytest记录学生成绩:
select a.name, b.class ,sum(a.score) 十五、外连接(OUTER JOIN): 外连不但返回符合连接和查询条件的数据行,还返回不符合条件的一些行。外连接分三类:左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)和全外连接(FULL OUTER JOIN)。 我们这上一个查询中会发现,没有'老王'的成绩。有可能老王没有参加考试,这时候,我们希望能查询所有学生的成绩,包括没有参加考试的,可以用以下查询: select b.name, b.class ,sum(a.score)
|
|