-- 查询users表中 age>20的数据 mysql> select * from users where age > 20; +----+--------+------+--------+ | id | name | age | gender | +----+--------+------+--------+ | 1 | 段段 | 24 | 女 | | 2 | 黄黄 | 23 | 男 | | 4 | duan | 23 | 女 | | 6 | user | 25 | 女 | +----+--------+------+--------+ 4 rows in set (0.00 sec)
-- 查询users表中,name是段段的数据 mysql> select * from users where name = '段段'; +----+--------+------+--------+ | id | name | age | gender | +----+--------+------+--------+ | 1 | 段段 | 24 | 女 | +----+--------+------+--------+ 1 row in set (0.00 sec)
-- 查询在users表中 年龄在22-24的数据 mysql> select * from users where age between 22 and 24; +----+--------+------+--------+ | id | name | age | gender | +----+--------+------+--------+ | 1 | 段段 | 24 | 女 | | 2 | 黄黄 | 23 | 男 | | 4 | duan | 23 | 女 | +----+--------+------+--------+ 3 rows in set (0.00 sec)
-- 查询在users表中 年龄在22-24的女生数据 mysql> select * from users where gender = '女' and age between 22 and 24; +----+--------+------+--------+ | id | name | age | gender | +----+--------+------+--------+ | 1 | 段段 | 24 | 女 | | 4 | duan | 23 | 女 | +----+--------+------+--------+ 2 rows in set (0.01 sec)
and 和 or 使用注意
举个例子
1 2 3 4 5 6 7 8 9
-- 查询在users表中 年龄为22或23的女生信息 mysql> select * from users where gender = '女' and age = 22 or age =23; +----+--------+------+--------+ | id | name | age | gender | +----+--------+------+--------+ | 2 | 黄黄 | 23 | 男 | | 4 | duan | 23 | 女 | +----+--------+------+--------+ 2 rows in set (0.00 sec)
可以看出 实际查询结果并不符合要求,这时的结果是:查询年龄为 22 的人,或者年龄为 23 的女生
and 与 or 同时存在时,sql 语句执行的顺序是 and > or
解决办法:实用小括号
1 2 3 4 5 6 7
mysql> select * from users where gender = '女' and (age = 22 or age =23); +----+------+------+--------+ | id | name | age | gender | +----+------+------+--------+ | 4 | duan | 23 | 女 | +----+------+------+--------+ 1 row in set (0.00 sec)
like 子句
可以使用 like 语句进行某个字段的模糊搜索 like 可以等价于 = 可以使用 % 进行模糊匹配,**%可以代表任意字符** 可以使用 _ 表示一个任意字符
-- 查询姓名是duan的数据 mysql> select * from users where name like 'duan'; +----+------+------+--------+ | id | name | age | gender | +----+------+------+--------+ | 4 | duan | 23 | 女 | +----+------+------+--------+ 1 row in set (0.00 sec)
-- 查询姓名中 包含n字符的数据 mysql> select * from users where name like '%n%'; +----+------+------+--------+ | id | name | age | gender | +----+------+------+--------+ | 4 | duan | 23 | 女 | +----+------+------+--------+ 1 row in set (0.00 sec)
-- 查询姓名中姓段的数据 mysql> select * from users where name like '段%'; +----+--------+------+--------+ | id | name | age | gender | +----+--------+------+--------+ | 1 | 段段 | 24 | 女 | +----+--------+------+--------+ 1 row in set (0.00 sec)
-- 查询姓名中最后一个字为黄的 mysql> select * from users where name like '%黄'; +----+--------+------+--------+ | id | name | age | gender | +----+--------+------+--------+ | 2 | 黄黄 | 23 | 男 | +----+--------+------+--------+ 1 row in set (0.00 sec)
-- 查询姓名中 第二个字符为 n 的 mysql> select * from users where name like '_u%'; +----+------+------+--------+ | id | name | age | gender | +----+------+------+--------+ | 4 | duan | 23 | 女 | +----+------+------+--------+ 1 row in set (0.00 sec)
-- 查询姓名是 两个字符的数据 mysql> select * from users where name like '__'; +----+--------+------+--------+ | id | name | age | gender | +----+--------+------+--------+ | 1 | 段段 | 24 | 女 | | 2 | 黄黄 | 23 | 男 | | 3 | 图图 | 1 | 女 | +----+--------+------+--------+ 3 rows in set (0.00 sec)
-- 1 mysql> select class_id,gender,count(*) from users where class_id = 2 group by ge nder; +----------+--------+----------+ | class_id | gender | count(*) | +----------+--------+----------+ | 2 | 女 | 2 | | 2 | 男 | 1 | +----------+--------+----------+ 2 rows in set (0.00 sec)
-- 2 mysql> select class_id,avg(age) from users group by class_id order by avg(age) desc; +----------+----------+ | class_id | avg(age) | +----------+----------+ | 1 | 23.5000 | | 2 | 17.3333 | +----------+----------+ 2 rows in set (0.00 sec)
-- 3 mysql> select class_id,count(*) from users group by class_id order by count(*) desc; +----------+----------+ | class_id | count(*) | +----------+----------+ | 2 | 3 | | 1 | 2 | +----------+----------+ 2 rows in set (0.00 sec)
-- 4 mysql> select class_id,count(*) from users group by class_id order by count(*) desc limit 1; +----------+----------+ | class_id | count(*) | +----------+----------+ | 2 | 3 | +----------+----------+ 1 row in set (0.00 sec)