SQL WHERE子句
SQL WHERE子句
SQL WHERE子句用于过滤由DML语句(如SELECT,UPDATE和DELETE等)获得的结果。我们可以使用WHERE子句从单个表或多个表(经过JOIN操作)检索数据。
例如,您可以使用WHERE子句检索组织中某个部门的员工详细信息,或者收入高于/低于某个金额的员工详细信息,或者符合奖学金条件的学生的详细信息。该子句基本上指定了要检索哪些记录以及要忽略哪些记录。
语法
SQL WHERE子句的基本语法如下所示:
在这里,DML_Statement可以是任何语句,如SELECT、UPDATE、DELETE等。
你可以使用 比较或逻辑运算符 来指定条件,例如,>,<,=, LIKE, NOT 等等。
使用SELECT语句的WHERE子句
通常,SELECT语句用于从表中检索数据。如果我们在SELECT语句中使用WHERE子句,我们可以根据特定条件(或表达式)过滤要检索的行。以下是它的语法−
示例
假设我们使用以下CREATE TABLE语句在MySQL数据库中创建了一个名为CUSTOMERS的表-
以下INSERT查询将7条记录插入到此表中−
创建的表如下所示−
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-
输出
这将会产生如下结果:
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语句和WHERE子句将名为Ramesh的顾客的工资增加了10000 –
输出
我们得到了以下结果。我们可以观察到有2个客户的年龄已被修改。
验证
为了验证更改是否在表中反映出来,我们可以使用以下查询中显示的SELECT语句。
下表显示如下:
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 12000.00 |
使用IN操作符的WHERE子句
使用IN操作符可以在where子句中指定值列表或子查询。如果您在SELECT语句中使用WHERE和IN,它允许我们检索与指定列表中的任何值匹配的表中的行。以下是其语法:
在这里, column_name 是表中的一列, value1, value2, 等等是我们想要与column_name进行比较的值的列表。
示例
假设你想要从CUSTOMERS表中显示NAME值为’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操作是对指定列表中不存在的值(列的值)执行的。
示例
在这个例子中,我们显示了CUSTOMERS表中AGE不等于’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子句允许我们过滤满足特定模式的行。这个特定模式由通配符(如%
,_
,[]
等)表示。以下是语法——
其中, column_name 是我们要与模式进行比较的列名,而 pattern 是一个字符串,可以包含通配符(如%
,_
,[]
等)。
示例
下面是一个查询,它将显示所有名称以K开头且长度至少为4个字符的记录:
输出
下面是所获得的结果:
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运算符的语法:
示例
在以下查询中,我们根据一些条件从CUSTOMERS表中检索所有行。括号控制评估顺序,使OR运算符优先应用,然后是AND运算符 –
输出
这将产生以下结果:
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
3 | Kaushik | 23 | Kota | 2000.00 |