WHERE 子句——指定查询限制条件
查询语句里的条件指定了要返回满足什么标准的信息。条件的值是 TURE 或 FALSE,从而限制查询中获取的数据。WHERE 子句用于规定选择的标准。如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句中。
WHERE 子句里可以有多个条件,它们之间以操作符 AND 或 OR 连接。如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。
一、WHERE 子句的格式
语法:SELECT 列名 FROM 表名
WHERE 列 操作符 值;
叙述:1.下面的比较操作符可在 WHERE 子句中使用:
---------------------------------------
操作符 描述
---------------------------------------
= 等于
<> 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于
---------------------------------------
注释:在某些版本的 SQL 中,操作符 <> 可以写为 !=。
2.在 WHERE 子句中使用的逻辑操作符 :
--------------------------------------------------------------------------
操作符 描述
--------------------------------------------------------------------------
BETWEEN 值1 AND 值2 在两个值之间
NOT BETWEEN 值1 AND 值2 不在两个值之间
IN <值列表> 在特定的集合里(枚举)
NOT IN <值列表> 不在特定的集合里(枚举)
LIKE 匹配于一个模式
NOT LIKE 不匹配于一个模式
IS NULL 字段为空的
IS NOT NULL 字段不为空的
--------------------------------------------------------------------------
注释:操作符 LIKE 利用通配符把一个值与类似的值进行比较,通配符有两个:
百分号(%)代表任意长度的字符串;
下划线(_)代表任意单个字符。
例如,'A_Z' 表示所有以'A' 起头,另一个任何值的字符,且以'Z' 为结尾的字符串。'ABZ' 和'A2Z' 都符合这一个模式,而'AKKZ' 并不符合(因为在A和Z之间有两个字符,而不是一个字符)。
'ABC%' 表示所有以'ABC' 起头的字符串。举例来说,'ABCD' 和'ABCABC' 都符合这个模式。
'%XYZ' 表示所有以'XYZ' 结尾的字符串。举例来说,'WXYZ' 和'ZZXYZ' 都符合这个模式。
'%AN%' 表示所有含有'AN' 这个模式的字符串。举例来说,'LOS ANGELES' 和'SANFRANCISCO' 都符合这个模式。
二、WHERE 子句使用举例
下面,我们通过一些例子来说明 WHERE 子句的使用方法及查询结果,从中了解带WHERE 子句的 SELECT 语句的基本功能。
例1:我们要由 Store_Information 表里
store_name Sales Date
---------------------------------------------------------
Los Angeles 1500 1999-01-05
San Diego 250 1999-01-07
San FranciSCo 300 1999-01-08
Boston 700 1999-01-08
找出营业额超过 1,000 的记录:
SELECT store_name
FROM Store_Information
WHERE Sales > 1000;
结果:store_name
----------------
Los Angeles
若要选出所有 Sales 高于 1,000 或是 Sales 在 500 及 275 之间的记录的话,我们可以用以下语句:
SELECT store_name
FROM Store_Information
WHERE Sales > 1000
OR (Sales < 500 AND Sales > 275) ;
结果:store_name
----------------
Los Angeles
San FranciSCo
例2:我们要在 Store_Information 表里找出所有含盖 Los Angeles 或 San Diego 的记录,可以用以下语句:
SELECT * FROM Store_Information
WHERE store_name IN ('Los Angeles', 'San Diego');
结果:store_name Sales Date
----------------------------------------------------------
Los Angeles 1500 1999-01-05
San Diego 250 1999-01-07
例3:由 Store_Information 表里找出所有介于 January 6, 1999 及 January 10, 1999 之间的记录,可以用以下语句:
SELECT * FROM Store_Information
WHERE Date BETWEEN 'Jan-06-1999' AND 'Jan-10-1999' ;
结果:store_name Sales Date
-----------------------------------------------
San Diego 250 1999-01-07
San FranciSCo 300 1999-01-08
Boston 700 1999-01-08
例4:在 Store_Information 表里找出所有店名含有'AN' 这个模式的记录:
SELECT * FROM Store_Information
WHERE store_name LIKE '%AN%' ;
结果:store_name Sales Date
----------------------------------------------------------
LOS ANGELES 1500 1999-01-05
SAN FRANCISCO 300 1999-01-08
SAN DIEGO 250 1999-01-07
三、选定条件中操作符的优先级
以下列表显示了操作符优先级由高到低的顺序。排列在同一行的操作符具有相同的优先级。
---------------------------------------------------------------------
操作符 描述
---------------------------------------------------------------------
^ 乘方
*, / 乘、除
+, - 加、减
<<, >> 左移、右移
& 按位与
| 按位或
=, <=>, >=, >, <=, <, <>, !=, IS, LIKE, IN 等于、NULL-safe equal、大于等于、大于、小于等于、小于、不等于. . .
BETWEEN 两值之间
NOT 逻辑非
AND 逻辑与
OR 逻辑或
---------------------------------------------------------------------
说明:
<=> NULL-safe equal 这个操作符和 = 操作符执行相同的比较操作,不过在两个操作码均为 NULL 时,其所得值为1而不为 NULL,而当一个操作码为 NULL 时,其所得值为0而不为 NULL;
<> != 不等于;
( ... ) 使用括弧来规定表达式的运算顺序。
查询语句里的条件指定了要返回满足什么标准的信息。条件的值是 TURE 或 FALSE,从而限制查询中获取的数据。WHERE 子句用于规定选择的标准。如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句中。
WHERE 子句里可以有多个条件,它们之间以操作符 AND 或 OR 连接。如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。
一、WHERE 子句的格式
语法:SELECT 列名 FROM 表名
WHERE 列 操作符 值;
叙述:1.下面的比较操作符可在 WHERE 子句中使用:
---------------------------------------
操作符 描述
---------------------------------------
= 等于
<> 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于
---------------------------------------
注释:在某些版本的 SQL 中,操作符 <> 可以写为 !=。
2.在 WHERE 子句中使用的逻辑操作符 :
--------------------------------------------------------------------------
操作符 描述
--------------------------------------------------------------------------
BETWEEN 值1 AND 值2 在两个值之间
NOT BETWEEN 值1 AND 值2 不在两个值之间
IN <值列表> 在特定的集合里(枚举)
NOT IN <值列表> 不在特定的集合里(枚举)
LIKE 匹配于一个模式
NOT LIKE 不匹配于一个模式
IS NULL 字段为空的
IS NOT NULL 字段不为空的
--------------------------------------------------------------------------
注释:操作符 LIKE 利用通配符把一个值与类似的值进行比较,通配符有两个:
百分号(%)代表任意长度的字符串;
下划线(_)代表任意单个字符。
例如,'A_Z' 表示所有以'A' 起头,另一个任何值的字符,且以'Z' 为结尾的字符串。'ABZ' 和'A2Z' 都符合这一个模式,而'AKKZ' 并不符合(因为在A和Z之间有两个字符,而不是一个字符)。
'ABC%' 表示所有以'ABC' 起头的字符串。举例来说,'ABCD' 和'ABCABC' 都符合这个模式。
'%XYZ' 表示所有以'XYZ' 结尾的字符串。举例来说,'WXYZ' 和'ZZXYZ' 都符合这个模式。
'%AN%' 表示所有含有'AN' 这个模式的字符串。举例来说,'LOS ANGELES' 和'SANFRANCISCO' 都符合这个模式。
二、WHERE 子句使用举例
下面,我们通过一些例子来说明 WHERE 子句的使用方法及查询结果,从中了解带WHERE 子句的 SELECT 语句的基本功能。
例1:我们要由 Store_Information 表里
store_name Sales Date
---------------------------------------------------------
Los Angeles 1500 1999-01-05
San Diego 250 1999-01-07
San FranciSCo 300 1999-01-08
Boston 700 1999-01-08
找出营业额超过 1,000 的记录:
SELECT store_name
FROM Store_Information
WHERE Sales > 1000;
结果:store_name
----------------
Los Angeles
若要选出所有 Sales 高于 1,000 或是 Sales 在 500 及 275 之间的记录的话,我们可以用以下语句:
SELECT store_name
FROM Store_Information
WHERE Sales > 1000
OR (Sales < 500 AND Sales > 275) ;
结果:store_name
----------------
Los Angeles
San FranciSCo
例2:我们要在 Store_Information 表里找出所有含盖 Los Angeles 或 San Diego 的记录,可以用以下语句:
SELECT * FROM Store_Information
WHERE store_name IN ('Los Angeles', 'San Diego');
结果:store_name Sales Date
----------------------------------------------------------
Los Angeles 1500 1999-01-05
San Diego 250 1999-01-07
例3:由 Store_Information 表里找出所有介于 January 6, 1999 及 January 10, 1999 之间的记录,可以用以下语句:
SELECT * FROM Store_Information
WHERE Date BETWEEN 'Jan-06-1999' AND 'Jan-10-1999' ;
结果:store_name Sales Date
-----------------------------------------------
San Diego 250 1999-01-07
San FranciSCo 300 1999-01-08
Boston 700 1999-01-08
例4:在 Store_Information 表里找出所有店名含有'AN' 这个模式的记录:
SELECT * FROM Store_Information
WHERE store_name LIKE '%AN%' ;
结果:store_name Sales Date
----------------------------------------------------------
LOS ANGELES 1500 1999-01-05
SAN FRANCISCO 300 1999-01-08
SAN DIEGO 250 1999-01-07
三、选定条件中操作符的优先级
以下列表显示了操作符优先级由高到低的顺序。排列在同一行的操作符具有相同的优先级。
---------------------------------------------------------------------
操作符 描述
---------------------------------------------------------------------
^ 乘方
*, / 乘、除
+, - 加、减
<<, >> 左移、右移
& 按位与
| 按位或
=, <=>, >=, >, <=, <, <>, !=, IS, LIKE, IN 等于、NULL-safe equal、大于等于、大于、小于等于、小于、不等于. . .
BETWEEN 两值之间
NOT 逻辑非
AND 逻辑与
OR 逻辑或
---------------------------------------------------------------------
说明:
<=> NULL-safe equal 这个操作符和 = 操作符执行相同的比较操作,不过在两个操作码均为 NULL 时,其所得值为1而不为 NULL,而当一个操作码为 NULL 时,其所得值为0而不为 NULL;
<> != 不等于;
( ... ) 使用括弧来规定表达式的运算顺序。