Sql 简明教程
SQL - WHERE Clause
The SQL Where Clause
SQL WHERE 子句用于筛选 DML 语句(如 SELECT、UPDATE 和 DELETE 等)获得的结果。我们可以在连接操作后使用 WHERE 子句从单个表或多个表中检索数据。
例如,你可以使用 WHERE 子句来检索组织中某部门的员工详情,或薪水高于/低于特定金额的员工,或有资格获得奖学金的学生详情等。此子句基本上提供了要检索哪些记录以及哪些要忽略的记录的说明。
Syntax
SQL WHERE 子句的基本语法如下所示:
DML_Statement column1, column2,... columnN
FROM table_name
WHERE [condition];
这里,DML_Statement 可以是任何语句,例如 SELECT、UPDATE、DELETE 等。
您可以使用 comparison or logical operators 来指定条件,例如 >、<、=、 LIKE, NOT 等。
WHERE Clause with SELECT Statement
通常情况下,SELECT 语句用于从表中检索数据。如果我们对 SELECT 语句使用 WHERE 子句,则可以基于特定条件(或表达式)来过滤要检索的行。以下为此提供语法:
SELECT column1, column2, ...
FROM table_name
WHERE condition;
Example
假设我们使用 CREATE TABLE 语句在 MySQL 数据库中创建名为 CUSTOMERS 的表,如下所示:
CREATE TABLE CUSTOMERS (
ID INT NOT NULL,
NAME VARCHAR (20) NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR (25),
SALARY DECIMAL (18, 2),
PRIMARY KEY (ID)
);
使用了以下 INSERT 查询可将 7 条记录插入此表中:
INSERT INTO CUSTOMERS VALUES
(1, 'Ramesh', 32, 'Ahmedabad', 2000.00),
(2, 'Khilan', 25, 'Delhi', 1500.00),
(3, 'Kaushik', 23, 'Kota', 2000.00),
(4, 'Chaitali', 25, 'Mumbai', 6500.00),
(5, 'Hardik', 27, 'Bhopal', 8500.00),
(6, 'Komal', 22, 'Hyderabad', 4500.00),
(7, 'Muffy', 24, 'Indore', 10000.00);
创建的表如下所示:
ID |
NAME |
AGE |
ADDRESS |
SALARY |
1 |
Ramesh |
32 |
Ahmedabad |
2000.00 |
2 |
Khilan |
25 |
Delhi |
1500.00 |
3 |
Kaushik |
23 |
Kota |
2000.00 |
4 |
Chaitali |
25 |
Mumbai |
6500.00 |
5 |
Hardik |
27 |
Bhopal |
8500.00 |
6 |
Komal |
22 |
Hyderabad |
4500.00 |
7 |
Muffy |
24 |
Indore |
10000.00 |
在以下查询中,我们从CUSTOMERS 表中获取了SALARY 大于 2000 的记录的 ID、NAME 和 SALARY 字段:
SELECT ID, NAME, SALARY FROM CUSTOMERS
WHERE SALARY > 2000;
WHERE Clause with UPDATE Statement
UPDATE 语句用于修改表中现有记录。使用 SQL WHERE 子句与 UPDATE 语句,我们可以更新特定记录。如果未使用 WHERE 子句,则 UPDATE 语句将影响表的所有记录。以下是语法:
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
Example
在以下查询中,我们通过在 UPDATE 语句中使用 WHERE 子句,将 Ramesh 命名的客户的工资提高了 10000:
UPDATE CUSTOMERS set SALARY = SALARY+10000
where NAME = 'Ramesh';
WHERE Clause with IN Operator
使用 IN 运算符,您可以在 where 子句中指定值列表或子查询。如果您对 SELECT 语句使用 WHERE 和 IN,它允许我们检索表中与指定列表中的任何值匹配的行。以下是语法:
WHERE column_name IN (value1, value2, ...);
其中, column_name 是表的列, value1, value2, 等是我们想要与 column_name 进行对比的值的列表。
WHERE Clause with NOT IN Operator
带 NOT IN 运算符的 WHERE 子句是对带 IN 运算符的 WHERE 子句的否定。
-
如果您对 IN 运算符使用 WHERE,DML 语句将针对指定的(某个列的)值列表进行操作;
-
但是,如果您对 NOT IN 运算符使用 WHERE,DML 操作将针对不在指定列表中的(某个列的)值执行。
WHERE column_name NOT IN (value1, value2, ...);
WHERE Clause with LIKE Operator
带 LIKE 运算符的 WHERE 子句允许我们过滤匹配特定模式的行。此特定模式由通配符(例如 %、_、[] 等)表示。以下是语法:
WHERE column_name LIKE pattern;
其中, column_name 是我们要针对其比较模式的列, pattern 是可以包含通配符(例如 %、_、[] 等)的字符串。
WHERE Clause with AND, OR Operators
我们在 SQL 中可以使用 AND 和 OR 运算符来组合 WHERE 子句中的多个条件,以筛选满足特定条件的行。AND 运算符将确保仅筛选满足所有条件的行,而 OR 运算符将筛选满足指定条件中的任何一个条件的记录。但是,这仅在指定一个条件不足以筛选所有必需的行时才使用。
以下是 WHERE 子句中使用 AND 和 OR 运算符的语法 -
WHERE (condition1 OR condition2) AND condition3;