4. 选取所有字段,条件是Money小于200,以及ID是大于1(不包括1)或者Name是「小白」的也可以。要根据ID升幂排序。
标准语法:Select * from 数据表名称 where 字段1>数值 and 字段2>数值 or 字段3='字符串'
实例语法:Select * from Bank where Money>195 and ID>1 or Name='小白'
语法解说:这是开始使用三个条件的SQL语法。
传回的数据的第一个条件,以及符合其后两个条件之一。
资料传回:ID为1、3及4的资料,因为这三笔资料皆符合Money>195,而他们又各自符合ID>1或者Name='小白'其中一个的条件。
【资料增值站 】
‧比较运算子
上面已说到三个比较运算子,用法大家也许明白了。现在笔者告诉你更多的比较运算子。
1. > 大于 2. >= 大于或等于3. < 小于 4. <= 小于或等于5. = 等于 6. <> 不等于(尽量不使用)
‧逻辑运算子
逻辑运算子其实只有两个:and 和 or 。上面的文章也已提到。这两个是在where条件中常用的啊,大家一定要牢记。在多个逻辑运算子中,它们的关系必须搞清楚,以下为一个实例:
Select * from TableA where ColumnA='value' and ColumnB='value' or ColumnC='value' (or会先运算)
在这句SQL中,ColumnA='value'是跟ColumnB='value' or ColumnC='value'一起处理的,例只只要符合ColumnB或ColumnC的其中一个条件,再符合ColumnA的条件,这些资料就会被传回。
‧Between …… And ……
这个语法中的 And 跟逻辑运算子不同。若我们要找ID范围在2-4,我们要用比较运算子这样写:
Select * from Bank where ID>2 and ID<4
但是用Between …… And …… 则可以省略这么繁复的条件,如下所示:
Select * from Bank where ID Between 2 and 4
这样便可以简化SQL语法了。
【课后小测 】
上一期的问题,答案是「Select ID,Nme,Money from Bank order by ID DESC」,大家得出正确答案了没?这次的课后小测,问题是根据这次的范例数据表,「Select * from Bank where Name='大文' and Money<>195 order by ID DESC」的结果是什么?
A. 传回所有字段、ID为2的纪录。
B. 传回ID字段、ID为1、3及4的纪录。
C. 传回所有字段的所有纪录。
D. 没有纪录传回。
下一期,我们将会使用到一些在SQL中的函数,是更进阶的课程哦。请务必先明白这篇文章及上一篇文章才阅读下一篇。
【范例数据表 】
资料表──「Student」
ID(自动编号) Name(字符串) Age(数字) Height(数字) BirthDate(日期时间) 1 张三 15 163 19-2-1988 15:32:19 2 李四 14 159 16-8-1989 18:43:24 3 王五 15 146 7-10-1988 23:59:56 4 小明 16 162 10-9-1987 14:17:20 5 小美 13 129 31-12-1990 9:18:36
【范例语法 】
1a. 使用 Count() 函数,取出数据库的数据笔数。
标准语法:Select Count(*) from 数据表名称实例语法:Select Count(*) from Student
语法解说:「Count(*)」表示要取出数据笔数,函数内的 * 代表所有字段。当然,键入一个字段亦可,但一般来说都会使用 * 。
资料传回:一个字段储存着纪录笔数 5 ,但是该字段名称是以Expr起始的。
1b. 使用 Count() 函数及 as 关键词,自定数据笔数字段名称为Records。
标准语法:Select Count(*) as 字段别名 from 数据表名称实例语法:Select Count(*) as Records from Student
语法解说:「as 字段别名」是指替该字段设定别名哦。在传回来的数据,字段名称会是被更改了的,但是数据库的字段名称没有被更改。
资料传回:字段 Records 储存着纪录笔数 5 。
1c. 使用 Count() 函数,取出Age是大于或等于14的纪录笔数。要求传回的字段名称是RC。
标准语法:Select Count(*) as 字段别名 from 数据表名称 where 条件实例语法:Select Count(*) as RC from Student where Age>=14
语法解说:在Count函数后加上Where条件,只统计符合该条件的纪录笔数。
资料传回:字段RC中存着数据库中Age字段大于或等于14的数据笔数,一共是4。注意,这里并不需要用到 order by ,因为传回的数据只有一笔,那就是数据笔数,因此没需要用到 order by 排序。
2a. 取出Age的最大值,字段名称要是MaximumAge。
标准语法:Select Max(字段名称) as 字段别名 from 数据表名称实例语法:Select Max(Age) as MaximumAge from Student语法解说:「Max(字段名称)」表示要找出此字段中的最大值。资料传回:字段MaximumAge中存有所有数据中的Age字段的最大值──16。
2b. 取出Height的最小值,字段名称要是MinimumHeight。
标准语法:Select Min(字段名称) as 字段别名 from 数据表名称实例语法:Select Min(Height) as MinimumHeight from Student语法解说:「Min(字段名称)」表示要在字段找出最小的值。资料传回:字段MinimumHeight中存有所有数据中的Height字段的最大值──129。
2c. 找出Age的最小值,字段要设定成MinAge,但条件是ID必须在1-4内。
标准语法:Select Min(字段名称) as 字段别名 from 数据表名称 where 条件
实例语法:Select Min(ID) as MinAge from Student where ID Between 1 and 4 或Select Min(ID) as MinAge from Student where ID>1 and ID<4
语法解说:加上条件,表示只从符合条件的资料中找出最小值。
资料传回:虽然所有数据中,Age的最小值是13。但是在ID 1-4 的纪录中,Age的最小值是14,因此,字段MinAge中存着14。
2d. 同时找出Age的最大值及最小值、以及总数据笔数。字段名称中,最大值字段指定为Maximum、最小值字段指定为Minimum、数据笔数的字段名称设定为RC。
标准语法:Select Max(字段名称) as 字段别名,Min(字段名称) as 字段别名, Count(*) as 字段别名 from 数据表名称
实例语法:Select Max(Age) as Maximum, Min(Age) as Minimum, Count(*) as RC from Student
语解解释:由于三个函数传回的方式皆是一个字段,因此三个函数可以像普通字段般结合传回。
注意,由于多个函数是共享条件的,因此设定条件时必须考虑到多个函数要求的东西。
资料传回:Maximum 是 16 Minimum 是 13 RC 是 5
【资料增值站 】
‧As的应用
As (Alias) 的作用是在传回数据中更变字段名称,虽然上面只说到更改函数的传回字段名称,但其实连普通的字段名称都可以改的啊,这样便可以把长字段缩写成短字段,在程控SQL上是很有用的。这时,代表所有字段的「*」便不能使用了,即使要传回所有字段,由于要更改名称,也要一个一个的用逗号分隔写出来。下面是一个范例,是根据Student数据表更改字段别名,大家参考看看:
Select ID,Age as YearsOld,Height as BodyHeight,BirthDate as Brithday,Name as ChineseName from Student
‧聚合函数 (Aggregate Function)
聚合函数是SQL的其中一种函数,本文介绍的Max、Min及Count皆是聚合函数。聚合函当中,除了Count外,其它函数都会不把空值(Null)计算在内。聚合函数通常与DQL(Data Query Language,只有Select)一并使用。由于它只回有一个传回值,因此传回值只有一个字段及一笔数据。
【课后小测 】
经过上面详尽的解说,我想大家必定对这三个常用函数 Max 、 Min 及 Count 有所理解。这次的课后小测,请大家写出查询在Height中的最大值及最小值,条件是Age要大于或等于15的SQL语法。上期的课后小测答案是D,因为根本没纪录符合这个条件啊。下期,笔者将会说明较进阶的Select指令,包括