一,带关系运算符的查询
在 SELECT 语句中可以使用 WHERE 子句指定查询条件,从而查询出筛选后的结果,语法格式如下:
SELECT 字段名1, 字段名2 , .... FROM 表名 WHERE 条件表达式;
在以上语法中,字段名1,字段名2等表示需要查询的字段名称,条件表达式过滤筛选数据的条件。MySQL 提供了一系列关系运算符,这些运算符可以作为条件表达式过滤数据。
关系运算符
关系运算符 | 含义 |
---|---|
= | 等于 |
!= | 不等于 |
<> | 不等于 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
注意:“!=”和“<>”都表示不等于,有个别数据库不支持“!=”,因此建议使用“<>”。
在 stu 表中查询所有性别为女的学生信息。
SELECT * FROM STU WHERE gender='female';
gender 字段为字符串类型,直接在查询条件的字符串上使用单引号即可。
然后查询 sid 为 S-1008 的学生姓名:
SELECT sname FROM stu WHERE sid='S-1008';
查询年龄大于等于21的学生的信息。
SELECT * FROM stu WHERE age>=21;
整数类型不同于字符串类型,不需要单引号。
二,带 AND 关键字的查询
在使用 SELECT 查询数据时,有时不是简单的一个查询条件,而是多个查询条件才可以过滤查询到正确的数据,在 MySQL 中可以使用 AND 关键字连接查询条件,具体语法如下:
SELECT 字段名1, 字段名2, .... FROM 表名 WHERE 条件表达式1 AND 条件表达式2 ....;
在以上语法中,字段名1,字段名2等表示需要查询的字段名称,在 WHERE 子句中可以写多个条件表达式,表达式之间用 AND 连接。
查询年龄大于 20 岁 的男生信息。
SELECT * FROM stu WHERE age>20 AND gender='male';
接着查询 sid 不等于 S_1007 且年龄大于等于20岁的男生的姓名。
SELECT sname FROM stu WHERE sid!='S_1007' AND age>=20 AND gender='male';
三,带 OR 关键字的查询
在过滤时要满足所以查询条件,MySQL 还提供了 OR 关键字,使用 OR 也可以连接多个查询条件,但是在过滤时只要满足其中一个查询条件即可,具体语法如下:
SELECT 字段名1, 字段名2, ..... FROM 表名 WHERE 条件表达式1 OR 条件表达式2 ....;
查询学号为 S_1002 或者姓名为 sunQi 的学生的信息。
SELECT * FROM stu WHERE sid='S_1002' OR sname='sunQi';
接着查询学号为 S_1005 或者姓名为 zhaoLiu 并且年龄小于24岁的学生的信息。
SELECT * FROM stu WHERE sid='S_1005' OR sname='zhaoLiu' AND age<24;
四,带 IN 或 NOT IN 关键字的查询
MySQL 提供了 IN 或 NOT IN 来判断某个字段是否在指定集合中,如果不满足条件,则数据会被过滤掉,具体语法格式如下:
SELECT 字段名1, 字段名2, .... FROM 表名 WHERE 字段名 IN(NOT IN) (元素1, 元素2, ....);
在以上语法中,字段名1,字段名2等表示需要查询的字段名称,WHERE 子句中的字段名表示需要过滤的字段,NOT 是可选的,表示不在集合范围中,元素1,元素2是集合中的元素。
查询学号为 S_1001, S_1002, S_1003 的学生的信息。
SELECT * FROM stu WHERE sid IN('S_1001','S_1002','S_1003');
接着查询年龄不为 18,20,22和25的学生的信息。
SELECT * FROM stu WHERE age NOT IN(18,20,22,25);
五,带 IS NULL 或 IS NOT NULL 关键字的查询
在数据表中可能存在空值,空值与0不同,也不同于空字符串。在 MySQL 中使用 IS NULL 或 IS NOT NULL 关键字判断是否为空值,具体语法格式如下:
SELECT 字段名1, 字段名2, ....FROM 表名 WHERE 字段名 IS (NOT) NULL;
在以上语法中,字段名1,字段名2等表示需要查询的字段名称,WHERE 子句中的字段名表示需要过滤的字段,NOT 是可选的,使用 NOT 关键字可以判断不为 NULL。
查询年龄为 NULL 的学生的信息。
SELECT * FROM stu WHERE age IS NULL;
查询性别不为 NULL 的学生的信息。
SELECT * FROM stu WHERE gender IS NOT NULL;
六,带 BETWEEN AND 关键字的查询
BETWEEN AND 关键字用于判断某个字段的值是否在指定范围内,若不在指定范围内,则会被过滤掉,具体语法格式如下:
SELECT 字段名1, 字段名2, ..... FROM 表名 WHERE 字段名 (NOT)BETWEEN 值1 AND 值2;
在以上语法中,字段名1,字段名2等表示需要查询的字段名称,WHERE 子句中的字段名表示需要过滤的字段,NOT 是可选的,使用 NOT 表示不在指定范围内,值1和值2表示范围,其中值1为范围的起始值,值2为范围的结束值。
查询年龄在23~25岁的学生的信息。
SELECT * FROM stu WHERE age BETWEEN 23 AND 25;
查询年龄不在23~25岁的学生的信息。
SELECT * FROM stu WHERE age NOT BETWEEN 23 AND 25;
六,带 LIKE 关键字的查询
数据库在某些情况下需要进行模糊查询,例如查询名字中带有某个字母的学生,具体语法如下:
SELECT 字段名1, 字段名2, ....FROM 表名 WHERE 字段名 (NOT)LIKE '匹配字符串';
在以上语法中,字段名1,字段名2等表示需要查询的字段名称,WHERE 子句中的字段名表示需要过滤的字段,NOT 是可选的,使用 NOT 则表示查询与字符串不匹配的值,‘匹配字符串’用来指定要匹配的字符串,这个字符串可以是一个普通的字符串,也可以是包含百分号(%)和下划线(_)的通配符字符串,其中百分号表示任意0~n个字符,下划线表示任意一个字符。
查询姓名由5个字母构成的学生的信息。
SELECT * FROM stu WHERE sname LIKE'_____';
注意:一个下划线代表一个字符。
接着查询姓名由5个字母构成,并且第5个字母为 i 的学生的信息。
SELECT * FROM stu WHERE sname LIKE'____i';
查询姓名以 z 开头的学生的信息。
SELECT * FROM stu WHERE sname LIKE'z%';
注意:%可以代表任意数量的字符。
查询姓名中第二个字母为 i 的学生的信息。
SELECT * FROM stu WHERE sname LIKE'_i%';
接着查询姓名中包含 a 字母的学生的信息。
SELECT * FROM stu WHERE sname LIKE'%a%';
用百分号代替前面或者后面都有的任意字符。
七,带 DISTINCT 关键字的查询
MySQL 提供了 DISTINCT 关键字用于去除重复数据,例如查询科目的种类,对于这样的需求显然不希望看到重复的科目,因此需要去除重复的数据,具体语法格式如下:
SELECT DISTINCT 字段名 FROM 表名;
查询所有员工的月薪,并且去除重复。
SELECT DISTINCT sal FROM emp;
查询结果显示了所有员工的月薪,并且没有重复的数据。