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 userwhere 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%';#%表示0个或多个select * from user where username like 'fengfeng______';#_表示一个占位符# 查询年龄不是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;#按性别统计人数并求平均年龄,并求最大和最小select user.sex,count(user.id),avg(user.age),min(age),max(age) from user group by sex;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 limit1 0 size2 2 size3 4 sizen (n-1) * size sizeDISTINCT 子句
去重
# 显示不重复的年龄段select distinct age from user;
# 按照年龄分组,并且统计,不重名的个数select age, count(distinct username) from user group by age;UNION 子句
UNION 的作用是将两次或多次查询结果纵向合并起来。
select 1, 2 union select 3, 4注意,字段的个数要匹配



