mysql的查询可以单独拿出来讲,因为知识点太多太多了
select
MySQL 的 SELECT 语句用于从数据库表中检索数据。功能强大,语句结构复杂多样。不过基本的语句格式像下面这个样子。
不局限于查询数据表,例如可以直接输出
select '枫枫知道', now() as date;
一个完整的 SELECT 语句包含一些可选的子句。SELECT 语句定义如下
SELECT clause
[FROM clause]
[WHERE clause]
[GROUP BY clause]
[HAVING clause]
[ORDER BY clause]
[LIMIT clause]
不同子句的执行顺序
开始 > FROM子句 > WHERE子句 > GROUP BY子句 > HAVING子句 > SELECT子句 > ORDER BY子句 > LIMIT子句 > 最终结果
WHERE 子句
运算符 | 描述 |
---|---|
= | 等于 |
!= 或 <> | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
BETWEEN AND | 在某个范围内(闭区间) |
LIKE | 搜索某种模式 |
AND | 多个条件与 |
OR | 多个条件或 |
造些数据,方便做查询用
delete from user
where true;
alter table user
auto_increment = 1;
insert into user(username, age, sex)
values ('wangwu', 19, 0),
('lisi', 20, 1),
('zhangsan', 18, 0),
('fengfeng', 23, 1),
('fangfang', 18, 0),
('fengfengzhidao', 25, 1),
('feifei12138', 28, 0);
# 查询是女的
# 查询年龄范围在18-23之间的
# 查询是女的,年龄在18-23的
# 查询名称是feng开头的
# 查询年龄不是18的
# 查询年龄是18,或者名称是feng开头的
# 查询是女的
select * from user where sex = 0;
# 查询年龄范围在18-23之间的
select * from user where age >= 18 and age <= 23;
select * from user where age between 18 and 23;
select * from user where age in (18,19,20,21,22,23);
# 查询是女的,年龄在18-23的
select * from user where sex = 0 and (age between 18 and 23);
# 查询名称是feng开头的
select * from user where username like 'feng%';
# 查询年龄不是18的
select * from user where not age = 18;
select * from user where age <> 18;
select * from user where age != 18;
# 查询年龄是18,或者名称是feng开头的
select * from user where age = 18 or username like 'feng%';
GROUP BY 子句
除分组字段,其他字段要被套在聚合函数里面
分组查询
# 分别统计男女生人数
select sex, count(id) from user group by sex;
# 统计各个年龄的个数,并且把用户名显示出来
select age, count(id), group_concat(username) from user group by age;
HAVING 子句
HAVING 和 WHERE 子句一样,用于指定选择条件。但 HAVING 和 WHERE 子句的用法上却有明显的区别。
WHERE 作用于表和视图,HAVING 作用于组。
WHERE 在分组和聚集计算之前选取输入行(因此,它控制哪些行进入聚集计算),而 HAVING 在分组和聚集之后选取分组
# 分别统计男女生人数,只显示人数大于3的数据
# select sex, count(id) as cnt from user where cnt > 18 group by sex; # 无法做到
select sex, count(id) as cnt from user group by sex having cnt > 3;
ORDER BY 子句
ORDER BY 子句用于根据指定的列对结果集进行排序。
默认是主键升序 ASC(ascend)
# 按照id降序
select * from user order by id desc;
# 先按照年龄升序,再按照id降序
select * from user order by age,id desc;
LIMIT 子句
LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。
一般搭配offset,记录偏移
# 查全部
select * from user;
# 查前两个
select * from user limit 2;
select * from user limit 0, 2;
# 查两个,偏移两个
select * from user limit 2,2;
select * from user limit 2 offset 2;
分页查询
一页显示条数 size = 2
页数 offset limit
1 0 size
2 2 size
3 4 size
n (n-1) * size size
DISTINCT 子句
去重
# 显示不重复的年龄段
select distinct age from user;
# 按照年龄分组,并且统计,不重名的个数
select age, count(distinct username) from user group by age;
UNION 子句
UNION 的作用是将两次或多次查询结果纵向合并起来。
可以直观感受一下
select 1, 2 union select 3, 4
注意,字段的个数要匹配