条件查询

文章介绍了如何使用SQL的WHERE子句进行条件查询,包括如何根据特定条件(如score>80)筛选记录,以及如何结合AND、OR和NOT操作符进行复杂条件的组合查询。通过示例展示了如何在数据库中查找分数在80分以上的学生,或满足其他特定条件的记录。
摘要由CSDN通过智能技术生成

原文链接:条件查询 - 廖雪峰的官方网站

使用SELECT * FROM <表名>可以查询到一张表的所有记录。但是,很多时候,我们并不希望获得所有记录,而是根据条件选择性地获取指定条件的记录,例如,查询分数在80分以上的学生记录。在一张表有数百万记录的情况下,获取所有记录不仅费时,还费内存和网络带宽。

SELECT语句可以通过WHERE条件来设定查询条件,查询结果是满足查询条件的记录。例如,要指定条件“分数在80分或以上的学生”,写成WHERE条件就是SELECT * FROM students WHERE score >= 80

其中,WHERE关键字后面的score >= 80就是条件。score是列名,该列存储了学生的成绩,因此,score >= 80就筛选出了指定条件的记录:

-- 按条件查询students:
SELECT * FROM students WHERE score >= 80;

 结果:

idclass_idnamegenderscore
11小明M90
21小红F95
31小军M88
52小白F81
72小林M85
83小新F91
93小王M89
103小丽F88

因此,条件查询的语法就是:

SELECT * FROM <表名> WHERE <条件表达式>

条件表达式可以用<条件1> AND <条件2>表达满足条件1并且满足条件2。例如,符合条件“分数在80分或以上”,并且还符合条件“男生”,把这两个条件写出来:

  • 条件1:根据score列的数据判断:score >= 80
  • 条件2:根据gender列的数据判断:gender = 'M',注意gender列存储的是字符串,需要用单引号括起来。

就可以写出WHERE条件:score >= 80 AND gender = 'M'

-- 按AND条件查询students:
SELECT * FROM students WHERE score >= 80 AND gender = 'M';

 结果:

idclass_idnamegenderscore
11小明M90
31小军M88
72小林M85
93小王M89

第二种条件是<条件1> OR <条件2>,表示满足条件1或者满足条件2。例如,把上述AND查询的两个条件改为OR,查询结果就是“分数在80分或以上”或者“男生”,满足任意之一的条件即选出该记录: 

-- 按OR条件查询students:
SELECT * FROM students WHERE score >= 80 OR gender = 'M';

 结果:

idclass_idnamegenderscore
11小明M90
21小红F95
31小军M88
52小白F81
62小兵M55
72小林M85
83小新F91
93小王M89
103小丽F88

很显然OR条件要比AND条件宽松,返回的符合条件的记录也更多。

第三种条件是NOT <条件>,表示“不符合该条件”的记录。例如,写一个“不是2班的学生”这个条件,可以先写出“是2班的学生”:class_id = 2,再加上NOTNOT class_id = 2

-- 按NOT条件查询students:
SELECT * FROM students WHERE NOT class_id = 2;

 

idclass_idnamegenderscore
11小明M90
21小红F95
31小军M88
41小米F73
83小新F91
93小王M89
103小丽F88

上述NOT条件NOT class_id = 2其实等价于class_id <> 2,因此,NOT查询不是很常用。

要组合三个或者更多的条件,就需要用小括号()表示如何进行条件运算。例如,编写一个复杂的条件:分数在80以下或者90以上,并且是男生:

-- 按多个条件查询students:
SELECT * FROM students WHERE (score < 80 OR score > 90) AND gender = 'M';

 结果:

idclass_idnamegenderscore
62小兵M55

如果不加括号,条件运算按照NOTANDOR的优先级进行,即NOT优先级最高,其次是AND,最后是OR。加上括号可以改变优先级。

常用的条件表达式

条件表达式举例1表达式举例2说明
使用=判断相等score = 80name = 'abc'字符串需要用单引号括起来
使用>判断大于score > 80name > 'abc'字符串比较根据ASCII码,中文字符比较根据数据库设置
使用>=判断大于或相等score >= 80name >= 'abc'
使用<判断小于score < 80name <= 'abc'
使用<=判断小于或相等score <= 80name <= 'abc'
使用<>判断不相等score <> 80name <> 'abc'
使用LIKE判断相似name LIKE 'ab%'name LIKE '%bc%'%表示任意字符,例如'ab%'将匹配'ab','abc','abcd'

小结

通过WHERE条件查询,可以筛选出符合指定条件的记录,而不是整个表的所有记录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值