1、语法
SELECT * FROM <表名> WHERE <条件表达式>
2、举例
SELECT语句可以通过WHERE条件来设定查询条件,查询结果是满足查询条件的记录。
例如,要指定条件“分数在80分或以上的学生”,写成WHERE条件就是
SELECT * FROM students WHERE score >= 80;
其中,WHERE关键字后面的score >= 80就是条件。score是列名,该列存储了学生的成绩,因此,score >= 80就筛选出了指定条件的记录:
id | class_id | name | gender | score |
1 | 1 | 小明 | M | 90 |
2 | 1 | 小红 | F | 95 |
3 | 1 | 小军 | M | 88 |
5 | 2 | 小白 | F | 81 |
7 | 2 | 小林 | M | 85 |
8 | 3 | 小新 | F | 91 |
9 | 3 | 小王 | M | 89 |
10 | 3 | 小丽 | F | 88 |
条件表达式可以用 AND 表达满足条件1并且满足条件2。例如,符合条件“分数在80分或以上”,并且还符合条件“男生”,把这两个条件写出来:
- 条件1:根据score列的数据判断:score >= 80;
- 条件2:根据gender列的数据判断:gender = 'M',注意gender列存储的是字符串,需要用单引号括起来。
SELECT * FROM students WHERE score >= 80 AND gender = 'M';
结果如下:
id | class_id | name | gender | score |
1 | 1 | 小明 | M | 90 |
3 | 1 | 小军 | M | 88 |
7 | 2 | 小林 | M | 85 |
9 | 3 | 小王 | M | 89 |
第二种条件是
OR ,表示满足条件1或者满足条件2。例如,把上述
AND查询的两个条件改为OR,查询结果就是“分数在80分或以上”或者“男生”,满足任意之一的条件即选出该记录:
SELECT * FROM students WHERE score >= 80 OR gender = 'M';
结果如下:
id | class_id | name | gender | score |
1 | 1 | 小明 | M | 90 |
2 | 1 | 小红 | F | 95 |
3 | 1 | 小军 | M | 88 |
5 | 2 | 小白 | F | 81 |
6 | 2 | 小兵 | M | 55 |
7 | 2 | 小林 | M | 85 |
8 | 3 | 小新 | F | 91 |
9 | 3 | 小王 | M | 89 |
10 | 3 | 小丽 | F | 88 |
第三种条件是NOT ,表示“不符合该条件”的记录。例如,写一个“不是2班的学生”这个条件,可以先写出“是2班的学生”:class_id = 2,再加上NOT:NOT class_id = 2:
SELECT * FROM students WHERE NOT class_id = 2;
结果如下:
注意,NOT class_id = 2其实等价于class_id <> 2,因此,NOT查询不是很常用。
id | class_id | name | gender | score |
1 | 1 | 小明 | M | 90 |
2 | 1 | 小红 | F | 95 |
3 | 1 | 小军 | M | 88 |
4 | 1 | 小米 | F | 73 |
8 | 3 | 小新 | F | 91 |
9 | 3 | 小王 | M | 89 |
10 | 3 | 小丽 | F | 88 |
要组合三个或者更多的条件,就需要用小括号()表示如何进行条件运算。例如,编写一个复杂的条件:分数在80以下或者90以上,并且是男生:
SELECT * FROM students WHERE (score < 80 OR score > 90) AND gender = 'M';
结果如下:
id | class_id | name | gender | score |
6 | 2 | 小兵 | M | 55 |
如果不加括号,条件运算按照NOT、AND、OR的优先级进行,即NOT优先级最高,其次是AND,最后是OR。加上括号可以改变优先级。
3、常用
条件 | 表达式举例1 | 表达式举例2 | 说明 |
使用=判断相等 | score = 80 | name = 'abc' | 字符串需要用单引号括起来 |
使用>判断大于 | score > 80 | name > 'abc' | 字符串比较根据ASCII码,中文字符比较根据数据库设置 |
使用>=判断大于或相等 | score >= 80 | name >= 'abc' | |
使用 | score < 80 | name | |
使用 | score | name | |
使用<>(或者 != )判断不相等 | score <> 80 | name <> 'abc' | |
使用LIKE判断相似 | name LIKE 'ab%' | name LIKE '%bc%' | %表示任意字符,例如'ab%'将匹配'ab','abc','abcd' |
使用 is 判断是否为null | score is null | name is not null | 当值为null时判断 |
4、小结
- 在条件查询时,AND 表示并且, OR 表示或, NOT 表示非
- 在条件查询时,当某个列的值在一个固定的结果集里面,可以用 IN,比如 WHERE score IN (60, 90) 表示当score是60或者90
- 在条件查询时,当某个列的值在一个固定范围内时,可以用BETWEEN ... AND,比如 WHERE score BETWEEN 60 AND 90,等同于 WHERE score >= 60 AND score
- 模糊查询用LIKE,会根据字符串匹配