mysql基础-3.mysql单表查询

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

注意,字段的个数要匹配

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值