(14)组合条件和布尔运算符
以下的SQL语句中就含有组合条件:
SELECT column1, SUM(column2)
FROM "list-of-tables"
WHERE "condition1" AND "condition2";
AND运算符可以在WHERE子句中连接两个或者多个条件。AND条件的两旁必须都为true(真),即两个条件都同时满足的时候,这些行才将被显示。
当然,你也可以使用OR运算符,它也可以在WHERE子句中连接两个或者多个条件。但是,只要OR运算符两旁有一个为true的时候条件就满足了,因此行才会被显示。所以你使用OR运算符的时候,可以是OR运算符两旁只有一个为true或者两旁都为true。
下面举个例子吧:
SELECT employeeid, firstname, lastname, title, salary
FROM employee_info
WHERE salary >= 50000.00 AND title = 'Programmer';
这条SQL语句是从employee_info表中选择salary大于等于50000.00并且title等于'Programmer'的列employeeid、 firstname、 lastname、 title和 salary。此时必须AND运算符两旁的条件都为真,行才会最为检索结果返回。如果其中有一个条件为假,那么就什么都没有显示。
你可以使用圆括号将条件括起来,虽然它们也不一定是必须的,但是括起来看起来更清晰一些,这是一个编程习惯的问题。比如 :
SELECT employeeid, firstname, lastname, title, salary
FROM employee_info
WHERE (salary >= 50000.00) AND (title = 'Programmer');
下面再举个例子:
SELECT firstname, lastname, title, salary
FROM employee_info
WHERE (title = 'Sales') OR (title = 'Programmer');
这条语句将从employee_info表中选择title等于'Sales'或者等于'Programmer'的列firstname、 lastname, title和 salary。
(15)IN 和 BETWEEN 条件运算符
下面是IN条件运算符的SQL语句:
SELECT column1, SUM(column2)
FROM "list-of-tables"
WHERE column3 IN (list-of-values);
下面是BETWEEN条件运算符的SQL语句:
SELECT column1, SUM(column2)
FROM "list-of-tables"
WHERE column3 BETWEEN value1 AND value2;
实际上,IN条件运算符是一个设置成员测试运算符,也就是说,它用于测试是否一个数值处在IN关键字之后提供的数值之中。举个例子如下:
SELECT employeeid, lastname, salary
FROM employee_info
WHERE lastname IN ('Hernandez', 'Jones', 'Roberts', 'Ruiz');
这条语句是从employee_info表中选择lastname等于Hernandez、Jones、 Roberts或者 Ruiz名字之一的列employeeid、 lastname和 salary。如果它在其中就将返回行。
IN条件运算符可以使用混合条件来替代,比如你可以使用等号运算符或者使用OR运算符等等,但是结果是一样的,例如:
SELECT employeeid, lastname, salary
FROM employee_info
WHERE lastname = 'Hernandez' OR lastname = 'Jones' OR lastname = 'Roberts' OR lastname = 'Ruiz';
你可以观察到,利用IN运算符时语句会更加简短并且容易读,特别是在你测试两个或者三个数值以上的时候尤为突出。
当然你也可以使用NOT IN 来在你的列表中排除行的。
而BETWEEN条件运算符是用与测试一个数值是否处在BETWEEN关键字两边指定数值的中间,比如:
SELECT employeeid, age, lastname, salary
FROM employee_info
WHERE age BETWEEN 30 AND 40;
这条SQL语句是从employee_info表中选择age处于30到40岁之间(包括30岁和40岁)的列employeeid、age、 lastname和salary。
这条语句同样可以不用BETWEEN运算符,而使用混合条件来替代,例如:
SELECT employeeid, age, lastname, salary
FROM employee_info
WHERE age >= 30 AND age <= 40;
当然,你也可以类似于NOT IN的方法,使用NOT BETWEEN来排除一些数据。
(16)数学运算符
标准的ANSI SQL-92支持下面四个基本的算术运算符:
|
加 |
- |
减 |
* |
乘 |
/ |
除 |
% |
求余 |
其中求余运算符决定除法的余数。这个运算符不是ANSI SQL支持的,但是,绝大多数的数据库支持他。下面是一些有用的数学函数,因为可能要用到它,所以我这里要集中提一下。在ANSI SQL-92中不支持这些函数,但是它们可能对于某些特殊的RDBMS是有效的。然而它们对于几个主要的数据库系统都是有效的。下面就说说这些数学函数吧:
ABS(x) |
返回x的绝对值 |
SIGN(x) |
当x为负数、零、正数的时候分别返回x的符号-1、0或者1 |
MOD(x,y) |
返回x除以y的余数,跟x%y作用一样 |
FLOOR(x) |
返回小于等于x的最大整数 |
CEILING(x) 或 CEIL(x) |
返回大于等于x的最小整数 |
POWER(x,y) |
返回x的y次方的数值 |
ROUND(x) |
返回最接近于x的数 |
ROUND(x,d) |
返回小数点数为4的接近于x的数 |
SQRT(x) |
返回x的平方根 |
下面举个例子:
SELECT round(salary), firstname
FROM employee_info
上面这条语句将从employee_info表中选择salary最接近的数以及firstname列。