一、查询指定记录
当用户需要查询数据库中符合一定条件的数据时,可以使用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值为1和3的记录,结果如下
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值不为1和3的记录,结果如下
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.5到50的商品名称和价格,结果如下
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.5和50之间的商品名称和价格,结果如下
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 '西_';
暂无评论