前面我们的查询都是将所有数据都查询出来,但是有时候我们只想获取到满足条件
的数据 语法格式:SELECT 字段名 FROM 表名 WHERE 条件;
流程:取出表中的每条数据,满足条件的记录就返回,不满足条件的记录不返回
CREATE TABLE stu3 (
id INT,
NAME VARCHAR(20),
age INT,
sex VARCHAR(5),
address VARCHAR(100),
math INT,
english INT
);
-- 批量插入
INSERT INTO stu3 VALUES
(1,'马云',55,'男','杭州',66,78),
(2,'马化腾',45,'女','深圳',98,87),
(3,'马景涛',55,'男','中国香港',56,77),
(4,'柳岩',20,'女','湖南',76,65),
(5,'柳青',20,'男','湖南',86,NULL),
(6,'刘德华',57,'男','中国香港',99,99),
(7,'马德',22,'女','中国香港',99,99),
(8,'德玛西亚',18,'男','南京',56,65);
> 大于
< 小于
<= 小于等于
>= 大于等于 a=3,a>=1 true; b = 4, b>=4, true
= 等于
<> != 不等于
具体操作:
select * from stu3 where math > 80;
执行如下:
-- stu3表的数据
mysql> select * from stu3;
+------+--------------+------+------+---------+------+---------+
| id | NAME | age | sex | address | math | english |
+------+--------------+------+------+---------+------+---------+
| 1 | 马云 | 55 | 男 | 杭州 | 66 | 78 |
| 2 | 马化腾 | 45 | 女 | 深圳 | 98 | 87 |
| 3 | 马景涛 | 55 | 男 | 中国香港 | 56 | 77 |
| 4 | 柳岩 | 20 | 女 | 湖南 | 76 | 65 |
| 5 | 柳青 | 20 | 男 | 湖南 | 86 | NULL |
| 6 | 刘德华 | 57 | 男 | 中国香港 | 99 | 99 |
| 7 | 马德 | 22 | 女 | 中国香港 | 99 | 99 |
| 8 | 德玛西亚 | 18 | 男 | 南京 | 56 | 65 |
+------+--------------+------+------+---------+------+---------+
8 rows in set (0.00 sec)
-- 查询math分数大于80分的学生
mysql> select * from stu3 where math > 80;
+------+-----------+------+------+---------+------+---------+
| id | NAME | age | sex | address | math | english |
+------+-----------+------+------+---------+------+---------+
| 2 | 马化腾 | 45 | 女 | 深圳 | 98 | 87 |
| 5 | 柳青 | 20 | 男 | 湖南 | 86 | NULL |
| 6 | 刘德华 | 57 | 男 | 中国香港 | 99 | 99 |
| 7 | 马德 | 22 | 女 | 中国香港 | 99 | 99 |
+------+-----------+------+------+---------+------+---------+
4 rows in set (0.00 sec)
mysql>
select * from stu3 where english<=80;
执行如下:
mysql> select * from stu3 where english<=80;
+------+--------------+------+------+---------+------+---------+
| id | NAME | age | sex | address | math | english |
+------+--------------+------+------+---------+------+---------+
| 1 | 马云 | 55 | 男 | 杭州 | 66 | 78 |
| 3 | 马景涛 | 55 | 男 | 中国香港 | 56 | 77 |
| 4 | 柳岩 | 20 | 女 | 湖南 | 76 | 65 |
| 8 | 德玛西亚 | 18 | 男 | 南京 | 56 | 65 |
+------+--------------+------+------+---------+------+---------+
4 rows in set (0.00 sec)
mysql>
select * from stu3 where age=20;
执行如下:
mysql> select * from stu3 where age=20;
+------+--------+------+------+---------+------+---------+
| id | NAME | age | sex | address | math | english |
+------+--------+------+------+---------+------+---------+
| 4 | 柳岩 | 20 | 女 | 湖南 | 76 | 65 |
| 5 | 柳青 | 20 | 男 | 湖南 | 86 | NULL |
+------+--------+------+------+---------+------+---------+
2 rows in set (0.00 sec)
mysql>
SELECT * FROM student3 WHERE age!=20;
SELECT * FROM student3 WHERE age<>20;
执行如下:
mysql> SELECT * FROM stu3 WHERE age!=20;
+------+--------------+------+------+---------+------+---------+
| id | NAME | age | sex | address | math | english |
+------+--------------+------+------+---------+------+---------+
| 1 | 马云 | 55 | 男 | 杭州 | 66 | 78 |
| 2 | 马化腾 | 45 | 女 | 深圳 | 98 | 87 |
| 3 | 马景涛 | 55 | 男 | 中国香港 | 56 | 77 |
| 6 | 刘德华 | 57 | 男 | 中国香港 | 99 | 99 |
| 7 | 马德 | 22 | 女 | 中国香港 | 99 | 99 |
| 8 | 德玛西亚 | 18 | 男 | 南京 | 56 | 65 |
+------+--------------+------+------+---------+------+---------+
6 rows in set (0.00 sec)
mysql>
mysql> SELECT * FROM stu3 WHERE age<>20;
+------+--------------+------+------+---------+------+---------+
| id | NAME | age | sex | address | math | english |
+------+--------------+------+------+---------+------+---------+
| 1 | 马云 | 55 | 男 | 杭州 | 66 | 78 |
| 2 | 马化腾 | 45 | 女 | 深圳 | 98 | 87 |
| 3 | 马景涛 | 55 | 男 | 中国香港 | 56 | 77 |
| 6 | 刘德华 | 57 | 男 | 中国香港 | 99 | 99 |
| 7 | 马德 | 22 | 女 | 中国香港 | 99 | 99 |
| 8 | 德玛西亚 | 18 | 男 | 南京 | 56 | 65 |
+------+--------------+------+------+---------+------+---------+
6 rows in set (0.00 sec)
mysql>
and(&&) 多个条件同时满足
or(||) 多个条件其中一个满足
not(!) 不满足
具体操作:
mysql> SELECT * FROM stu3 WHERE age>35 and sex='男';
+------+-----------+------+------+---------+------+---------+
| id | NAME | age | sex | address | math | english |
+------+-----------+------+------+---------+------+---------+
| 1 | 马云 | 55 | 男 | 杭州 | 66 | 78 |
| 3 | 马景涛 | 55 | 男 | 中国香港 | 56 | 77 |
| 6 | 刘德华 | 57 | 男 | 中国香港 | 99 | 99 |
+------+-----------+------+------+---------+------+---------+
3 rows in set (0.00 sec)
mysql>
mysql> SELECT * FROM stu3 WHERE age>35 or sex='男';
+------+--------------+------+------+---------+------+---------+
| id | NAME | age | sex | address | math | english |
+------+--------------+------+------+---------+------+---------+
| 1 | 马云 | 55 | 男 | 杭州 | 66 | 78 |
| 2 | 马化腾 | 45 | 女 | 深圳 | 98 | 87 |
| 3 | 马景涛 | 55 | 男 | 中国香港 | 56 | 77 |
| 5 | 柳青 | 20 | 男 | 湖南 | 86 | NULL |
| 6 | 刘德华 | 57 | 男 | 中国香港 | 99 | 99 |
| 8 | 德玛西亚 | 18 | 男 | 南京 | 56 | 65 |
+------+--------------+------+------+---------+------+---------+
6 rows in set (0.00 sec)
mysql> SELECT * FROM stu3 WHERE id=1 OR id=3 OR id=5;
+------+-----------+------+------+---------+------+---------+
| id | NAME | age | sex | address | math | english |
+------+-----------+------+------+---------+------+---------+
| 1 | 马云 | 55 | 男 | 杭州 | 66 | 78 |
| 3 | 马景涛 | 55 | 男 | 中国香港 | 56 | 77 |
| 5 | 柳青 | 20 | 男 | 湖南 | 86 | NULL |
+------+-----------+------+------+---------+------+---------+
3 rows in set (0.00 sec)
mysql>
语法格式:SELECT 字段名 FROM 表名 WHERE 字段 in (数据1, 数据2...);
in里面的每个数据都会作为一次条件,只要满足条件的就会显示
具体操作:
mysql> SELECT * FROM stu3 WHERE id in (1,3,5);
+------+-----------+------+------+---------+------+---------+
| id | NAME | age | sex | address | math | english |
+------+-----------+------+------+---------+------+---------+
| 1 | 马云 | 55 | 男 | 杭州 | 66 | 78 |
| 3 | 马景涛 | 55 | 男 | 中国香港 | 56 | 77 |
| 5 | 柳青 | 20 | 男 | 湖南 | 86 | NULL |
+------+-----------+------+------+---------+------+---------+
3 rows in set (0.01 sec)
mysql>
mysql> SELECT * FROM stu3 WHERE id not in (1,3,5);
+------+--------------+------+------+---------+------+---------+
| id | NAME | age | sex | address | math | english |
+------+--------------+------+------+---------+------+---------+
| 2 | 马化腾 | 45 | 女 | 深圳 | 98 | 87 |
| 4 | 柳岩 | 20 | 女 | 湖南 | 76 | 65 |
| 6 | 刘德华 | 57 | 男 | 中国香港 | 99 | 99 |
| 7 | 马德 | 22 | 女 | 中国香港 | 99 | 99 |
| 8 | 德玛西亚 | 18 | 男 | 南京 | 56 | 65 |
+------+--------------+------+------+---------+------+---------+
5 rows in set (0.00 sec)
mysql>
语法格式:SELECT * FROM 表名 WHERE 字段名 BETWEEN 值1 AND 值2
between 值1 and 值2
值1一定要小于值2
比如: age BETWEEN 80 AND 100
相当于: age>=80 && age<=100
具体操作:
-- 查询 [75,90]
mysql> SELECT * FROM stu3 WHERE english >= 75 and english <= 90;
+------+-----------+------+------+---------+------+---------+
| id | NAME | age | sex | address | math | english |
+------+-----------+------+------+---------+------+---------+
| 1 | 马云 | 55 | 男 | 杭州 | 66 | 78 |
| 2 | 马化腾 | 45 | 女 | 深圳 | 98 | 87 |
| 3 | 马景涛 | 55 | 男 | 中国香港 | 56 | 77 |
+------+-----------+------+------+---------+------+---------+
3 rows in set (0.00 sec)
-- 查询 [75,90]
mysql> SELECT * FROM stu3 WHERE english BETWEEN 75 AND 90;
+------+-----------+------+------+---------+------+---------+
| id | NAME | age | sex | address | math | english |
+------+-----------+------+------+---------+------+---------+
| 1 | 马云 | 55 | 男 | 杭州 | 66 | 78 |
| 2 | 马化腾 | 45 | 女 | 深圳 | 98 | 87 |
| 3 | 马景涛 | 55 | 男 | 中国香港 | 56 | 77 |
+------+-----------+------+------+---------+------+---------+
3 rows in set (0.00 sec)
mysql>
select * from 表名 where 字段 like 条件;
% : 模糊所有
_ : 模糊一位
例如:
"马%" 匹配以"马"字开头
"%马" 匹配以"马"字结尾
"_马" 匹配第二个字是"马"字的
"__马%" 匹配第三个字是"马"字的
"%马%" 匹配包含"马"字的
具体操作:
mysql> SELECT * FROM stu3 WHERE name LIKE '马%';
+------+-----------+------+------+---------+------+---------+
| id | NAME | age | sex | address | math | english |
+------+-----------+------+------+---------+------+---------+
| 1 | 马云 | 55 | 男 | 杭州 | 66 | 78 |
| 2 | 马化腾 | 45 | 女 | 深圳 | 98 | 87 |
| 3 | 马景涛 | 55 | 男 | 中国香港 | 56 | 77 |
| 7 | 马德 | 22 | 女 | 中国香港 | 99 | 99 |
+------+-----------+------+------+---------+------+---------+
4 rows in set (0.00 sec)
mysql>
mysql> SELECT * FROM stu3 WHERE name LIKE '%德%';
+------+--------------+------+------+---------+------+---------+
| id | NAME | age | sex | address | math | english |
+------+--------------+------+------+---------+------+---------+
| 6 | 刘德华 | 57 | 男 | 中国香港 | 99 | 99 |
| 7 | 马德 | 22 | 女 | 中国香港 | 99 | 99 |
| 8 | 德玛西亚 | 18 | 男 | 南京 | 56 | 65 |
+------+--------------+------+------+---------+------+---------+
3 rows in set (0.01 sec)
mysql>
mysql> SELECT * FROM stu3 WHERE name LIKE '马__';
+------+-----------+------+------+---------+------+---------+
| id | NAME | age | sex | address | math | english |
+------+-----------+------+------+---------+------+---------+
| 2 | 马化腾 | 45 | 女 | 深圳 | 98 | 87 |
| 3 | 马景涛 | 55 | 男 | 中国香港 | 56 | 77 |
+------+-----------+------+------+---------+------+---------+
2 rows in set (0.01 sec)
mysql>
通过 ORDER BY 子句,可以将查询出的结果进行排序(排序只是显示方式,不会影响数据库中数据的顺序)
语法: select * from 表名 where 条件 order by 字段名称1 [desc | asc] , 字段名2 [desc | asc]... ;
asc(默认) : 升序
desc : 降序
先根据字段1排序,若有第二排序字段,在第一排序字段的基础上进行第二次排序
单列排序就是使用一个字段排序
具体操作:
mysql> SELECT * FROM stu3 ORDER BY age DESC;
+------+--------------+------+------+---------+------+---------+
| id | NAME | age | sex | address | math | english |
+------+--------------+------+------+---------+------+---------+
| 6 | 刘德华 | 57 | 男 | 中国香港 | 99 | 99 |
| 1 | 马云 | 55 | 男 | 杭州 | 66 | 78 |
| 3 | 马景涛 | 55 | 男 | 中国香港 | 56 | 77 |
| 2 | 马化腾 | 45 | 女 | 深圳 | 98 | 87 |
| 7 | 马德 | 22 | 女 | 中国香港 | 99 | 99 |
| 4 | 柳岩 | 20 | 女 | 湖南 | 76 | 65 |
| 5 | 柳青 | 20 | 男 | 湖南 | 86 | NULL |
| 8 | 德玛西亚 | 18 | 男 | 南京 | 56 | 65 |
+------+--------------+------+------+---------+------+---------+
8 rows in set (0.00 sec)
mysql>
组合排序就是先按第一个字段进行排序,如果第一个字段相同,才按第二个字段进行排序,依次类推。上面的例子中,年龄是有相同的。当年龄相同再使用math进行排序
SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名1 [ASC|DESC], 字段名2 [ASC|DESC];
具体操作:
mysql> SELECT * FROM stu3 ORDER BY age DESC, math DESC;
+------+--------------+------+------+---------+------+---------+
| id | NAME | age | sex | address | math | english |
+------+--------------+------+------+---------+------+---------+
| 6 | 刘德华 | 57 | 男 | 中国香港 | 99 | 99 |
| 1 | 马云 | 55 | 男 | 杭州 | 66 | 78 |
| 3 | 马景涛 | 55 | 男 | 中国香港 | 56 | 77 |
| 2 | 马化腾 | 45 | 女 | 深圳 | 98 | 87 |
| 7 | 马德 | 22 | 女 | 中国香港 | 99 | 99 |
| 5 | 柳青 | 20 | 男 | 湖南 | 86 | NULL |
| 4 | 柳岩 | 20 | 女 | 湖南 | 76 | 65 |
| 8 | 德玛西亚 | 18 | 男 | 南京 | 56 | 65 |
+------+--------------+------+------+---------+------+---------+
8 rows in set (0.00 sec)
mysql>
之前我们做的查询都是横向查询,它们都是根据条件一行一行的进行判断,而使用聚合函数查询是纵向查询,它是对一列的值进行计算,然后返回一个结果值。另外聚合函数会忽略空值
五个聚合函数:
count() : 计数
IFNULL(字段名,0) : 如果指定字段的值为null,则使用0表示
sum() : 求和
max() : 求最大值
min() : 求最小值
avg() : 求平均值
扩展-保留小数位
cast(avg(字段名称) as decimal(5,2))
-------------------
聚合函数的使用:写在 SQL语句SELECT后查询结果的位置
SELECT 字段名... FROM 表名;
SELECT COUNT(age) FROM 表名;
具体操作:
mysql> SELECT count(english) FROM stu3;
+----------------+
| count(english) |
+----------------+
| 7 |
+----------------+
1 row in set (0.00 sec)
mysql>
我们发现对于NULL的记录不会统计
假如expr1 不为 NULL,则 IFNULL() 的返回值为 expr1; 否则其返回值为expr2, 我们可以利用IFNULL()函数,如果记录为NULL,给个默认值,这样统计的数据就不会遗漏
mysql> SELECT COUNT(IFNULL(english,0)) FROM stu3;
+--------------------------+
| COUNT(IFNULL(english,0)) |
+--------------------------+
| 8 |
+--------------------------+
1 row in set (0.00 sec)
mysql>
mysql> SELECT COUNT(*) FROM stu3;
+----------+
| COUNT(*) |
+----------+
| 8 |
+----------+
1 row in set (0.00 sec)
mysql>
mysql> SELECT COUNT(*) FROM stu3 WHERE age>40;
+----------+
| COUNT(*) |
+----------+
| 4 |
+----------+
1 row in set (0.00 sec)
mysql>
mysql> SELECT SUM(math) FROM stu3;
+-----------+
| SUM(math) |
+-----------+
| 636 |
+-----------+
1 row in set (0.00 sec)
mysql>
mysql> SELECT AVG(math) FROM stu3;
+-----------+
| AVG(math) |
+-----------+
| 79.5000 |
+-----------+
1 row in set (0.00 sec)
mysql>
mysql> SELECT MAX(math) FROM stu3;
+-----------+
| MAX(math) |
+-----------+
| 99 |
+-----------+
1 row in set (0.00 sec)
mysql>
mysql> SELECT MIN(math) FROM stu3;
+-----------+
| MIN(math) |
+-----------+
| 56 |
+-----------+
1 row in set (0.00 sec)
mysql>
分组查询是指使用 GROUP BY语句对查询信息进行分组,相同数据作为一组
SELECT 字段1,字段2... FROM 表名 GROUP BY 分组字段 [HAVING 条件];
GROUP BY怎么分组的?将分组字段结果中相同内容作为一组
SELECT * FROM stu3 GROUP BY sex;
mysql> select * from stu3 group by sex;
+------+-----------+------+------+---------+------+---------+
| id | NAME | age | sex | address | math | english |
+------+-----------+------+------+---------+------+---------+
| 2 | 马化腾 | 45 | 女 | 深圳 | 98 | 87 |
| 1 | 马云 | 55 | 男 | 杭州 | 66 | 78 |
+------+-----------+------+------+---------+------+---------+
2 rows in set (0.00 sec)
mysql>
这句话会将sex相同的数据作为一组
GROUP BY
将分组字段结果中相同内容作为一组,并且返回每组的第一条数据,所以单独分组没什么用处。分组的目的就是为了统计,一般分组会跟聚合函数一起使用。
分组后聚合函数的作用?不是操作所有数据,而是操作一组数据。SELECT SUM(math), sex FROM stu3 GROUP BY sex;效果如下:
mysql> select sum(math),sex from stu3 group by sex;
+-----------+------+
| sum(math) | sex |
+-----------+------+
| 273 | 女 |
| 363 | 男 |
+-----------+------+
2 rows in set (0.00 sec)
mysql>
实际上是将每组的math进行求和,返回每组统计的结果
注意事项:当我们使用某个字段分组,在查询的时候也需要将这个字段查询出来,否则看不到数据属于哪组的
具体操作:
mysql> select sex from stu3 group by sex;
+------+
| sex |
+------+
| 女 |
| 男 |
+------+
2 rows in set (0.00 sec)
mysql>
-- 1.查询所有数据,按性别分组。2.统计每组人数
mysql> select sex,count(*) from stu3 group by sex;
+------+----------+
| sex | count(*) |
+------+----------+
| 女 | 3 |
| 男 | 5 |
+------+----------+
2 rows in set (0.00 sec)
mysql>
1.先过滤掉年龄小于25岁的人。2.再分组。3.最后统计每组的人数
mysql> select sex,count(*) from stu3 where age > 25 group by sex;
+------+----------+
| sex | count(*) |
+------+----------+
| 女 | 1 |
| 男 | 3 |
+------+----------+
2 rows in set (0.00 sec)
有很多同学可能会将SQL语句写出这样:SELECT sex, COUNT(*) FROM stu3 WHERE age > 25 GROUP BY sex WHERE COUNT(*) >2;
“注意: 并只显示性别人数>2的数据属于分组后的条件,对于分组后的条件需要使用
having
子句 ”
mysql> SELECT sex, COUNT(*) FROM stu3 WHERE age > 25 GROUP BY sex HAVING COUNT(*) >2;
+------+----------+
| sex | COUNT(*) |
+------+----------+
| 男 | 3 |
+------+----------+
1 row in set (0.00 sec)
只有分组后人数大于2的男这组数据显示出来
“having与where的区别
”
LIMIT
是限制
的意思,所以LIMIT
的作用就是限制查询记录的条数。SELECT *|字段列表 [as 别名] FROM 表名 [WHERE子句] [GROUP BY子句]\ [HAVING子句] [ORDER BY子句] [LIMIT子句];
思考:limit子句为什么排在最后?因为前面所有的限制条件都处理完了,只剩下显示多少条记录的问题了!
LIMIT语法格式:LIMIT offset,length; 或者limit length;
offset
是指偏移量,可以认为是跳过的记录数量,默认为0
length
是指需要显示的总记录数
具体操作:
-- 我们可以认为跳过前面2条,取6条数据, LIMIT offset,length
mysql> SELECT * FROM stu3 LIMIT 2,6;
+------+--------------+------+------+---------+------+---------+
| id | NAME | age | sex | address | math | english |
+------+--------------+------+------+---------+------+---------+
| 3 | 马景涛 | 55 | 男 | 中国香港 | 56 | 77 |
| 4 | 柳岩 | 20 | 女 | 湖南 | 76 | 65 |
| 5 | 柳青 | 20 | 男 | 湖南 | 86 | NULL |
| 6 | 刘德华 | 57 | 男 | 中国香港 | 99 | 99 |
| 7 | 马德 | 22 | 女 | 中国香港 | 99 | 99 |
| 8 | 德玛西亚 | 18 | 男 | 南京 | 56 | 65 |
+------+--------------+------+------+---------+------+---------+
6 rows in set (0.00 sec)
mysql>
比如我们登录京东,淘宝,返回的商品信息可能有几万条,不是一次全部显示出来。是一页显示固定的条数。假设我们一每页显示5条记录的方式来分页,SQL语句如下:
-- 每页显示5条
-- 第一页:LIMIT 0,5; 跳过0条,显示5条
mysql> SELECT * FROM stu3 LIMIT 0,5;
+------+-----------+------+------+---------+------+---------+
| id | NAME | age | sex | address | math | english |
+------+-----------+------+------+---------+------+---------+
| 1 | 马云 | 55 | 男 | 杭州 | 66 | 78 |
| 2 | 马化腾 | 45 | 女 | 深圳 | 98 | 87 |
| 3 | 马景涛 | 55 | 男 | 中国香港 | 56 | 77 |
| 4 | 柳岩 | 20 | 女 | 湖南 | 76 | 65 |
| 5 | 柳青 | 20 | 男 | 湖南 | 86 | NULL |
+------+-----------+------+------+---------+------+---------+
5 rows in set (0.00 sec)
mysql>
-- 第二页:LIMIT 5,5; 跳过5条,显示5条
mysql> SELECT * FROM stu3 LIMIT 5,5;
+------+--------------+------+------+---------+------+---------+
| id | NAME | age | sex | address | math | english |
+------+--------------+------+------+---------+------+---------+
| 6 | 刘德华 | 57 | 男 | 中国香港 | 99 | 99 |
| 7 | 马德 | 22 | 女 | 中国香港 | 99 | 99 |
| 8 | 德玛西亚 | 18 | 男 | 南京 | 56 | 65 |
+------+--------------+------+------+---------+------+---------+
3 rows in set (0.00 sec)
mysql>
-- 第三页:LIMIT 10,5; 跳过10条,显示5条
mysql> SELECT * FROM stu3 LIMIT 10,5;
Empty set (0.00 sec)
mysql>
“注意:
SELECT * FROM student3 LIMIT 0,5;SELECT * FROM student3 LIMIT 5;
”
# DQL查询语言书写顺序
select 字段
from 表名
where 条件1
group by 分组字段
having 条件2(一般是分组条件)
order by 排序字段 (desc/asc)
limit 索引,最大查询数量;
# DQL查询语言执行顺序
from ... where ... group by ... having... select ... order by... limit ...
# from 后续内容
1. 表名可以取别名 as (可以省略)
# where 后续内容
1. 比较运算符: > < >= <= = <> != (都是不等于)
2. 逻辑运算符: and or not
a. in关键字: id = 1 or id =2 -> id in(1,2)
b. between关键字: age between 5 and 10; -> age>=5 and age <=10
c. like关键字(模糊查询) : name like '%马%'
1). _ 表示一个
2). % 表示0或多个
3. 注意: 不能跟聚合函数
# group by 后续内容
1. 聚合函数
a. 如果不在分组查询中,所有数据分为一组
b. 如果在分组查询中, 分组之后执行聚合函数
c. 常见聚合函数
1). sum 求和
2). avg 平均
3). count 统计
4). max/min 最大/最小
d. 注意: null不参与聚合运算的
2. select 后面只能跟 '被分组的列' 和 聚合函数
3. having 可以用来过滤聚合函数的判断条件
# select 后续内容
1. 跟被查询的字段
2. * 代表该表所有字段
3. distinct 滤重: 只保存这个字段不同的值
4. 字段可以取别名 as(也可以省略)
# order by
1. order by 字段 desc : 根据字段值降序排序(asc是升序,可以省略)
2. order by 字段1 desc, 字段2 asc : 先根据字段1降序,如果字段1相等,根据字段2升序
# limit 索引,最大查询数量
-- 规律: 用户 查询第x页,每页count条
-- 当前页的sql如何编写
-- index = (x-1) * count
select * from student limit index,count;