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;

Output

这将产生以下结果 -

ID

NAME

SALARY

4

Chaitali

6500.00

5

Hardik

8500.00

6

Komal

4500.00

7

Muffy

10000.00

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';

Output

我们得到以下结果。我们可以观察到,已修改了 2 位客户的年龄:

Query OK, 2 rows affected (0.02 sec)
Rows matched: 2  Changed: 2  Warnings: 0

Verification

为了验证更改是否反映在表中,我们可以使用 SELECT 语句,如下一个查询中所示:

SELECT * FROM CUSTOMERS WHERE NAME = 'Ramesh';

该表显示如下:

ID

NAME

AGE

ADDRESS

SALARY

1

Ramesh

32

Ahmedabad

12000.00

WHERE Clause with IN Operator

使用 IN 运算符,您可以在 where 子句中指定值列表或子查询。如果您对 SELECT 语句使用 WHERE 和 IN,它允许我们检索表中与指定列表中的任何值匹配的行。以下是语法:

WHERE column_name IN (value1, value2, ...);

其中, column_name 是表的列, value1, value2, 等是我们想要与 column_name 进行对比的值的列表。

Example

假设您希望从 CUSTOMERS 表中显示 NAME 值为 KhilanHardikMuffy 的记录,您可以使用以下查询:

SELECT * from CUSTOMERS
WHERE NAME IN ('Khilan', 'Hardik', 'Muffy');

Output

获得的结果如下 −

ID

NAME

AGE

ADDRESS

SALARY

2

Khilan

25

Delhi

1500.00

5

Hardik

27

Bhopal

8500.00

7

Muffy

24

Indore

10000.00

WHERE Clause with NOT IN Operator

带 NOT IN 运算符的 WHERE 子句是对带 IN 运算符的 WHERE 子句的否定。

  1. 如果您对 IN 运算符使用 WHERE,DML 语句将针对指定的(某个列的)值列表进行操作;

  2. 但是,如果您对 NOT IN 运算符使用 WHERE,DML 操作将针对不在指定列表中的(某个列的)值执行。

WHERE column_name NOT IN (value1, value2, ...);

Example

在此示例中,我们正在显示 CUSTOMERS 表中的记录,其中 AGE 不等于 252322

SELECT * from CUSTOMERS WHERE AGE NOT IN (25, 23, 22);

Output

我们获得的结果如下:

ID

NAME

AGE

ADDRESS

SALARY

1

Ramesh

32

Ahmedabad

12000.00

5

Hardik

27

Bhopal

8500.00

7

Muffy

24

Indore

10000.00

WHERE Clause with LIKE Operator

带 LIKE 运算符的 WHERE 子句允许我们过滤匹配特定模式的行。此特定模式由通配符(例如 %、_、[] 等)表示。以下是语法:

WHERE column_name LIKE pattern;

其中, column_name 是我们要针对其比较模式的列, pattern 是可以包含通配符(例如 %、_、[] 等)的字符串。

Example

以下是将显示名称以 K 开头并且长度至少为 4 个字符的所有记录的查询:

SELECT * FROM CUSTOMERS WHERE NAME LIKE 'K___%';

Output

获得的结果如下:

ID

NAME

AGE

ADDRESS

SALARY

2

Khilan

25

Delhi

1500.00

3

Kaushik

23

Kota

2000.00

6

Komal

22

Hyderabad

4500.00

WHERE Clause with AND, OR Operators

我们在 SQL 中可以使用 AND 和 OR 运算符来组合 WHERE 子句中的多个条件,以筛选满足特定条件的行。AND 运算符将确保仅筛选满足所有条件的行,而 OR 运算符将筛选满足指定条件中的任何一个条件的记录。但是,这仅在指定一个条件不足以筛选所有必需的行时才使用。

以下是 WHERE 子句中使用 AND 和 OR 运算符的语法 -

WHERE (condition1 OR condition2) AND condition3;

Example

在以下查询中,我们基于一些条件从 CUSTOMERS 表中检索所有行。括号控制求值顺序,以便先应用 OR 运算符,然后应用 AND 运算符 -

SELECT * FROM CUSTOMERS
WHERE (AGE = 25 OR salary < 4500)
AND (name = 'Komal' OR name = 'Kaushik');

Output

这将产生以下结果 -

ID

NAME

AGE

ADDRESS

SALARY

3

Kaushik

23

Kota

2000.00