MySQL数据库单表查询——条件查询

一,带关系运算符的查询

在 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;

在这里插入图片描述
在这里插入图片描述
查询结果显示了所有员工的月薪,并且没有重复的数据。

猜你喜欢

转载自blog.csdn.net/javanofa/article/details/108478635