0 0 0

单表数据记录查询—过滤查询

ZAESKY
2020-1-27 2084

一、查询指定记录

当用户需要查询数据库中符合一定条件的数据时,可以使用WHERE子句对表中的记录进行筛选,语法形式如下:

SELECT {*|col_list} FROM table_name WHERE condition;

WHERE子句中可以使用多种条件判断符,如表所示

1.1 使用“=”符号查询

实例1:从goods表中查询id值为3的记录。SQL语句及其执行结果如下

mysql> SELECT * FROM goods WHERE id=3;
+----+----------+-----------+----------+----------+-----------------+
| id  | type       | name    | price    | num  | add_time      |
+----+----------+-----------+----------+----------+-----------------+
|  3  | 糖类       | 水果糖  |  2.50    |  100  | NULL        |
+----+----------+-----------+----------+----------+-----------------+
1 row in set (0.06 sec)

实例2:从goods表中查询type值为“糖类”的记录。SQL语句及其执行结果如下

mysql> SELECT * FROM goods WHERE type='糖类';
+----+--------+-----------+--------+--------+-------------------------------+
| id   | type  | name    | price  | num   | add_time      |
+----+--------+-----------+--------+--------+-------------------------------+
|  2   | 糖类 | 牛奶糖   |  7.50  |  200   | 2018-02-02 13:40:40  |
|  3   | 糖类 | 水果糖   |  2.50  |  100   | NULL  |
+----+--------+-----------+--------+--------+-------------------------------+
2 rows in set (0.00 sec)

1.2 使用“>=”符号查询

实例3:从goods表中查询num值大于等于100的记录。SQL语句及其执行结果如下

mysql> SELECT * FROM goods WHERE num>=100;
+----+----------+-----------+----------+----------+-----------------------------+
| id  | type       | name      | price    | num  | add_time       |
+----+----------+-----------+----------+----------+-----------------------------+
|  2  | 糖类       | 牛奶糖  |  7.50    |  200  | 2018-02-02 13:40:40  |
|  3  | 糖类       | 水果糖  |  2.50    |  100  | NULL       |
+----+----------+-----------+----------+----------+-----------------------------+
2 rows in set (0.00 sec)


二、多条件查询

2.1 使用AND关键字查询

MySQL支持多条件查询,如果条件之间使用AND关键字连接,那么只有符合所有条件的记录才会被返回。

实例4:从goods表中查询price值大于50,并且id值大于3的记录。SQL语句及其执行结果如下

mysql> SELECT * FROM goods WHERE price>50 AND id>3;
+----+----------+-----------------+----------+------------+-----------------------------+
| id   | type     | name           | price    | num        | add_time                |
+----+----------+-----------------+----------+------------+-----------------------------+
|  4   | 服饰    | 休闲西服      | 800.00 | NULL      | 2018-04-04 13:40:40  |
+----+----------+-----------------+----------+------------+-----------------------------+
1 row in set (0.06 sec)

2.2 使用OR关键字查询

如果多条件查询中的条件使用OR关键字连接,表示只需要符合所有条件中的一个条件,此记录就会被返回。

实例5:从goods表中查询type值为“糖类”或者“书籍”的记录。SQL语句及其执行结果如下

mysql> SELECT * FROM goods WHERE type='糖类' OR type='书籍';
+----+----------+-----------+----------+----------+----------------------------+
| id  | type       | name    | price    | num  | add_time      |
+----+----------+-----------+----------+----------+----------------------------+
|  1  | 书籍     | 西游记  | 50.40    |   20  | 2018-01-01 13:40:40 |
|  2  | 糖类     | 牛奶糖  |  7.50     |  200  | 2018-02-02 13:40:40 |
|  3  | 糖类     | 水果糖  |  2.50    |  100  | NULL      |
+----+----------+-----------+----------+----------+-----------------------------+
3 rows in set (0.00 sec)

AND关键字可以使用符号“&&”代替;OR关键字可以使用符号“||”代替。

2.3 使用IN关键字查询

使用IN关键字可以查询字段值等于指定集合中任意一个值的记录,语法形式如下:

SELECT {*|col_list} FROM table_name 
WHERE col_name IN (value1,value2,……valuen);

实例6:执行SQL语句,查询goods表中id值为13的记录,结果如下

mysql> SELECT * FROM goods WHERE id IN (1,3);
+----+----------+-----------+----------+----------+-----------------------------+
| id  | type       | name      | price    | num  | add_time       |
+----+----------+-----------+----------+----------+-----------------------------+
|  1  | 书籍       | 西游记  | 50.40    |   20  | 2018-01-01 13:40:40  |
|  3  | 糖类       | 水果糖  |  2.50    |  100  | NULL             |
+----+----------+-----------+----------+----------+-----------------------------+
2 rows in set (0.01 sec)

另外,IN关键字还可以与NOT关键字配合使用,作用是查询字段值不在指定集合中的记录。

实例7:执行SQL语句,查询goods表中id值不为13的记录,结果如下

mysql> SELECT * FROM goods WHERE id NOT IN (1,3);
+----+----------+--------------+-------------+-----------+-------------------------------+
| id   | type     | name       | price        | num      | add_time    |
+----+----------+--------------+-------------+-----------+-------------------------------+
|  2   | 糖类    | 牛奶糖     |   7.50        |  200      | 2018-02-02 13:40:40  |
|  4   | 服饰    | 休闲西服  | 800.00      | NULL    | 2018-04-04 13:40:40  |
|  5   | 饮品    | 果汁         |   3.00        |   70       | 2018-05-05 13:40:40  |
+----+----------+--------------+-------------+-----------+-------------------------------+
3 rows in set (0.00 sec)


三、查询空值

MySQL提供IS NULL关键字,用于查询字段值为NULL的记录,语法形式如下:

SELECT {*|col_list} FROM table_name WHERE col_name IS NULL;

实例8:执行SQL语句,查询goods表中num值为NULL的记录,结果如下

mysql> SELECT * FROM goods WHERE num IS NULL;
+----+----------+-----------------+----------+--------+----------------------------+
| id   | type     | name           | price    | num   | add_time             |
+----+----------+-----------------+----------+--------+-----------------------------+
|  4   | 服饰    | 休闲西服      | 800.00 | NUL L | 2018-04-04 13:40:40 |
+----+----------+-----------------+----------+--------+-----------------------------+
1 row in set (0.02 sec)

IS NULL也可以和NOT关键字配合使用,用于查询字段值不为NULL的记录。

实例9:执行SQL语句,查询goods表中num值不为NULL的记录,结果如下

mysql> SELECT * FROM goods WHERE num IS NOT NULL;
+----+----------+-----------+----------+----------+-----------------------------+
| id   | type     | name    | price    | num  | add_time       |
+----+----------+-----------+----------+----------+-----------------------------+
|  1   | 书籍    | 西游记   | 50.40    |   20  | 2018-01-01 13:40:40   |
|  2   | 糖类    | 牛奶糖   |  7.50    |  200  | 2018-02-02 13:40:40   |
|  3   | 糖类    | 水果糖   |  2.50    |  100  | NULL        |
|  5   | 饮品    | 果汁       |  3.00    |   70  | 2018-05-05 13:40:40   |
+----+----------+-----------+----------+----------+-----------------------------+
4 rows in set (0.00 sec)

需要注意的是,如果某些字段值为NULL,在将这些字段与其他值进行比较时,就会返回不准确的数据。

实例10:执行SQL语句,查询goods表中num值不等于100的记录,查询结果如下

mysql> SELECT * FROM goods WHERE num<>100;
+----+--------+----------+------------+----------+----------------------------------------+
| id   | type  | name  | price  | num  | add_time    |
+----+--------+----------+------------+----------+----------------------------------------+
|  1  | 书籍    | 西游记  | 50.40  |   20  | 2018-01-01 13:40:40  |
|  2  | 糖类    | 牛奶糖  |  7.50  |  200  | 2018-02-02 13:40:40  |
|  5  | 饮品  | 果汁  |  3.00  |   70  | 2018-05-05 13:40:40  |
+----+--------+----------+------------+-----------+---------------------------------------+
3 rows in set (0.00 sec)


四、范围查询

MySQL提供BETWEEN AND关键字,用于查询字段值在某个范围内的记录,语法形式为:

SELECT {*|col_list} FROM table_name 
WHERE col_namea BETWEEN value1 AND value2;

实例11:执行SQL语句,查询goods表中price值为2.550的商品名称和价格,结果如下

mysql> SELECT name,price FROM goods WHERE price BETWEEN 2.5 AND 50;
+----------+----------+
| name  | price  |
+----------+----------+
| 牛奶糖  |  7.50  |
| 水果糖  |  2.50  |
| 果汁  |  3.00  |
+----------+----------+
3 rows in set (0.00 sec)

实例12:执行SQL语句,查询goods表中price值不在2.550之间的商品名称和价格,结果如下

mysql> SELECT name,price FROM goods WHERE price NOT BETWEEN 2.5 AND 50;
+----------------+----------+
| name  | price  |
+----------------+----------+
| 西游记  |  50.40  |
| 休闲西服  | 800.00  |
+----------------+----------+
2 rows in set (0.00 sec)


五、字符匹配查询

使用LIKE关键字的查询又称为模糊查询,通常用于查询字段值包含某些字符的记录,语法形式如下:

SELECT {*|col_list} FROM table_name WHERE col_namea LIKE valueb;

5.1 通配符“%”

通配符“%”可以匹配任意长度的字符,可以是0个,也可以是1个或多个。

实例13:执行SQL语句,查询goods表中name值以“果”开头的记录,结果如下

mysql> SELECT * FROM goods WHERE name LIKE '果%';
+----+--------+-------+----------+----------+-------------------------------+
| id   | type  | name| price    | num     | add_time    |
+----+--------+-------+----------+----------+-------------------------------+
|  5   | 饮品 | 果汁  |  3.00    |   70      | 2018-05-05 13:40:40  |
+----+--------+-------+----------+----------+-------------------------------+
1 row in set (0.00 sec)

执行以下语句,可查询goods表中name值以“糖”结尾的记录

SELECT * FROM goods WHERE name LIKE '%糖';

执行以下语句,可查询goods表中name值包含“游”的记录

SELECT * FROM goods WHERE name LIKE '%游%';

执行以下语句,可查询goods表中name值以“休”开头,以“服”结尾的记录

SELECT * FROM goods WHERE name LIKE '休%服';

通过以上多个语句可以看出,通配符“%”可以出现在匹配字符的任意位置,并且可以匹配任意数目的字符


使用LIKE关键字的查询又称为模糊查询,通常用于查询字段值包含某些字符的记录,语法形式如下:

SELECT {*|col_list} FROM table_name WHERE col_namea LIKE valueb;


5.2 通配符 "_"

通配符“_”的使用方法与通配符“%”类似,都可以出现在匹配字符的任意位置,但通配符“_”只能匹配一个字符

实例14:执行SQL语句,查询goods表中name以“西”开头,“西”后有两个字符的记录,结果如下所示。

mysql> SELECT * FROM goods WHERE name LIKE '西__';
+----+--------+-------------+----------+----------+-----------------------------+
| id   | type   | name      | price    | num  | add_time          |
+----+--------+-------------+----------+----------+-----------------------------+
|  1   | 书籍  | 西游记      | 50.40    |   20  | 2018-01-01 13:40:40  |
+----+--------+-------------+----------+----------+-----------------------------+
1 row in set (0.00 sec)

如果要查询goods表中name值以“西”开头,“西”后有一个字符的记录,则执行以下语句即可。

SELECT * FROM goods WHERE name LIKE '西_';
最新回复 (0)

    暂无评论

请先登录后发表评论!

返回
请先登录后发表评论!