4/7 SELECT语句:过滤(组合WHERE子句)

本文探讨了在数据库查询中如何使用SELECT语句进行过滤,重点关注了WHERE子句的操作符,包括用于组合条件的多种操作符,如AND、OR、BETWEEN以及NOT。还讨论了操作符的计算次序以及它们在动态构建查询和提高性能上的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

序号说明操作
1AND操作符WHERE子句附加条件
2OR操作符检索匹配任一条件的行
3计算次序优先级:()> AND > OR
4IN操作符指定条件范围,功能与OR相当
5NOT IN否定它之后所跟的任何条件

以下为数据库SQLTEST中的三张表,其结构和内容如下:
在这里插入图片描述

1.AND操作符

为了通过不止一个列进行过滤,可使用AND操作符给WHERE子句附加条件。

mysql> SELECT Stu_id,Lesson_id,Score
    -> FROM t_score
    -> WHERE Lesson_id = 'L001' AND Score > 85;
+--------+-----------+-------+
| Stu_id | Lesson_id | Score |
+--------+-----------+-------+
|      1 | L001      |    90 |
+--------+-----------+-------+

2.OR操作符

OR操作符:指示MySQL检索匹配任一条件的行。

mysql> SELECT Stu_id,Lesson_id,Score
    -> FROM t_score
    -> WHERE Lesson_id = 'L002' OR Score > 80;
+--------+-----------+-------+
| Stu_id | Lesson_id | Score |
+--------+-----------+-------+
|      1 | L001      |    90 |
|      1 | L002      |    86 |
|      2 | L001      |    84 |
|      3 | L003      |    85 |
|      4 | L005      |    98 |
+--------+-----------+-------+

3.计算次序

优先级:()> AND > OR

mysql> SELECT *
    -> FROM t_stu_profile
    -> WHERE (Gender='F' AND Age>16) OR (Gender='M' AND Age<16);
+--------+----------+--------+------+----------+
| Stu_id | Stu_Name | Gender | Age  | Class_id |
+--------+----------+--------+------+----------+
|      5 | 王五     | F      |   17 | 0614     |
+--------+----------+--------+------+----------+

4.IN操作符

IN操作符:用来指定条件范围,范围中的每个条件都可以进行匹配;
IN取合法值得由逗号分隔的清单,全都括在圆括号中;
其实,IN操作符与OR操作符完成相同的功能。

IN操作符的优点:
①在使用长的合法选项清单时,IN操作符的语法更清楚且更简单;
②在使用IN时,计算的次序更容易管理(因为使用的操作符更少);
IN操作符一般比OR操作符清单执行更快;
IN的最大优点是可以包含其他SELECT语句,使得能够更动态地建立WHERE子句。

mysql> SELECT *
    -> FROM t_stu_profile
    -> WHERE Class_id IN ('0611','0612')
    -> ORDER BY Age;
+--------+----------+--------+------+----------+
| Stu_id | Stu_Name | Gender | Age  | Class_id |
+--------+----------+--------+------+----------+
|      1 | 郭东     | F      |   16 | 0611     |
|      4 | 钱南     | M      |   17 | 0611     |
|      2 | 李西     | M      |   18 | 0612     |
+--------+----------+--------+------+----------+

5.NOT操作符

NOT操作符:否定它之后所跟的任何条件;
MySQL中的NOT:MySQL支持使用NOTINBETWEENEXISTS子句取反,这与多数其他DBMS允许使用NOT对各种条件取反有很大的差别。

mysql> SELECT *
    -> FROM t_stu_profile
    -> WHERE Class_id NOT IN (0611,0612);
+--------+----------+--------+------+----------+
| Stu_id | Stu_Name | Gender | Age  | Class_id |
+--------+----------+--------+------+----------+
|      3 | 张北     | F      |   16 | 0613     |
|      5 | 王五     | F      |   17 | 0614     |
|      6 | 赵七     | F      |   16 | 0615     |
+--------+----------+--------+------+----------+
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值