SQL WHERE子句

SQL WHERE子句

SQL WHERE子句

SQL WHERE子句用于过滤由DML语句(如SELECT,UPDATE和DELETE等)获得的结果。我们可以使用WHERE子句从单个表或多个表(经过JOIN操作)检索数据。

例如,您可以使用WHERE子句检索组织中某个部门的员工详细信息,或者收入高于/低于某个金额的员工详细信息,或者符合奖学金条件的学生的详细信息。该子句基本上指定了要检索哪些记录以及要忽略哪些记录。

语法

SQL WHERE子句的基本语法如下所示:

DML_Statement column1, column2,... columnN
FROM table_name
WHERE [condition];

在这里,DML_Statement可以是任何语句,如SELECT、UPDATE、DELETE等。

你可以使用 比较或逻辑运算符 来指定条件,例如,>,<,=, LIKE, NOT 等等。

使用SELECT语句的WHERE子句

通常,SELECT语句用于从表中检索数据。如果我们在SELECT语句中使用WHERE子句,我们可以根据特定条件(或表达式)过滤要检索的行。以下是它的语法−

SELECT column1, column2, ...
FROM table_name
WHERE condition;

示例

假设我们使用以下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表中提取ID、NAME和SALARY字段,条件是SALARY大于2000-

SELECT ID, NAME, SALARY FROM CUSTOMERS WHERE SALARY > 2000;

输出

这将会产生如下结果:

ID NAME SALARY
4 Chaitali 6500.00
5 Hardik 8500.00
6 Komal 4500.00
7 Muffy 10000.00

使用UPDATE语句的WHERE子句

UPDATE语句用于修改表中现有的记录。使用SQL WHERE子句与UPDATE语句,我们可以更新特定的记录。如果不使用WHERE子句,UPDATE语句将影响表中的所有记录。以下是语法−

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

示例

在下面的查询中,我们使用UPDATE语句和WHERE子句将名为Ramesh的顾客的工资增加了10000 –

UPDATE CUSTOMERS set SALARY = SALARY+10000 where NAME = 'Ramesh';

输出

我们得到了以下结果。我们可以观察到有2个客户的年龄已被修改。

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

验证

为了验证更改是否在表中反映出来,我们可以使用以下查询中显示的SELECT语句。

SELECT * FROM CUSTOMERS WHERE NAME = 'Ramesh';

下表显示如下:

ID NAME AGE ADDRESS SALARY
1 Ramesh 32 Ahmedabad 12000.00

使用IN操作符的WHERE子句

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

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

在这里, column_name 是表中的一列, value1, value2, 等等是我们想要与column_name进行比较的值的列表。

示例

假设你想要从CUSTOMERS表中显示NAME值为’Khilan’、’Hardik’和’Muffy’的记录,你可以使用以下查询:

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

输出

得到的结果如下:

ID NAME AGE ADDRESS SALARY
2 Khilan 25 Delhi 1500.00
5 Hardik 27 Bhopal 8500.00
7 Muffy 24 Indore 10000.00

WHERE子句使用NOT IN操作符

带有NOT IN操作符的WHERE子句是带有IN操作符的WHERE子句的否定。

  • 如果您使用带有IN操作符的WHERE子句,则DML语句将针对指定的值列表(列的值)进行操作。
  • 而如果您使用带有NOT IN操作符的WHERE子句,则DML操作是对指定列表中不存在的值(列的值)执行的。
WHERE column_name NOT IN (value1, value2, ...);

示例

在这个例子中,我们显示了CUSTOMERS表中AGE不等于’25’,’23’和’22’的记录。

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

输出

我们得到的结果如下所示−

ID NAME AGE ADDRESS SALARY
1 Ramesh 32 Ahmedabad 12000.00
5 Hardik 27 Bhopal 8500.00
7 Muffy 24 Indore 10000.00

使用LIKE运算符的WHERE子句

使用LIKE运算符的WHERE子句允许我们过滤满足特定模式的行。这个特定模式由通配符(如%_[]等)表示。以下是语法——

WHERE column_name LIKE pattern;

其中, column_name 是我们要与模式进行比较的列名,而 pattern 是一个字符串,可以包含通配符(如%_[]等)。

示例

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

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

输出

下面是所获得的结果:

ID NAME AGE ADDRESS SALARY
2 Khilan 25 Delhi 1500.00
3 Kaushik 23 Kota 2000.00
6 Komal 22 Hyderabad 4500.00

使用AND和OR运算符的WHERE子句

我们可以在SQL中同时使用AND和OR运算符,将多个条件组合在WHERE子句中,以过滤满足指定条件的行。AND运算符确保只过滤满足所有条件的行,而OR运算符过滤满足任何一个指定条件的记录。然而,只有在指定一个条件不足以过滤所有所需行时才使用该方法。

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

WHERE (condition1 OR condition2) AND condition3;

示例

在以下查询中,我们根据一些条件从CUSTOMERS表中检索所有行。括号控制评估顺序,使OR运算符优先应用,然后是AND运算符 –

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

输出

这将产生以下结果:

ID NAME AGE ADDRESS SALARY
3 Kaushik 23 Kota 2000.00

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程