前期回顾
- 排序(order by)
select * from `group` order by max_size;
select * from `group` order by max_size desc;
- 查询数量(limit)
select * from `group` limit 2;
select * from `group` limit 2,3;
- 排序和查询数量组合
select * from `group` order by max_size limit 2;
- 分组(group by)
select max_size,count(*) from `group` group by max_size;
- 模糊查询(like)
select * from `group` where name like '%b%';
select * from `group` where name like 'z_';
- 外键详解
如果对以上存在疑惑,可以查看上一篇博客
子查询
遗漏的distinct
查询分组最多人数的种类
select distinct max_size from `group`;
having
使用方法:和where一样
区别:where用于查询数据,而having主要是对查询的数据进行筛选
/* 查看分组类型数量大于1的分组类型 */
select type,count(*) from `group` group by type having count(*) >1;
where子查询
/* 获取分组最多人数最多的分组 */
select * from `group` order by max_size desc limit 1;
/* 使用子查询 */
select * from `group` where
max_size = (select max(max_size) from `group`);
in子查询
查询分组序号为3、4、5的分组
select * from `group` where id in (3,4,5);
between … and …
如果这个区间很大,可以考虑使用这个
select * from `group` where id between 3 and 5;
多表查询
查询分组中不存在成员的分组
select * from `group` where id not in
(select group_id from member group by group_id);
查询结果使用多表数据
查询所有用户,并显示其所在分组的名称等其他数据
select m.user_id,m.user_name,m.user_password,m.descp,
g.id,g.name,g.max_size,g.type,g.description
from member m,`group` g where m.group_id = g.id;
from member m,
group
g:其中m、g分别表示member和group表的别名,如果不使用别名,这个sql语句可能会有点长指的注意的是最后的那个查询条件
可以尝试下如果不写条件
select m.user_id,m.user_name,m.user_password,m.descp,
g.id,g.name,g.max_size,g.type,g.description
from member m,`group` g ;
可以很明显的看到,12条记录,这时候group有4条数据,member有3条数据,那么不言而喻这个12条记录是如何得来了
左连接查询(left join … on …)
左连接查询:两个表中以第一个表为准,如果不存在第二个数据则为null
一个在线美化sql语句的工具:sql美化
SELECT g.id, g.name, g.max_size, g.type, g.description
, m.user_id, m.user_password, m.descp
FROM `group` g
LEFT JOIN member m ON g.id = m.group_id;
右连接查询(right join … on …)
以连接的表为主,如果左表不存在数据也返回右表
SELECT g.id, g.name, g.max_size, g.type, g.description
, m.user_id, m.user_password, m.descp
FROM `group` g
RIGHT JOIN member m ON g.id = m.group_id;
全连接查询(full join … on …)
只要有一个表匹配成功就返回列
内连接(inner join … on …)
只有两个表都匹配成功才返回列
SELECT g.id, g.name, g.max_size, g.type, g.description
, m.user_id, m.user_password, m.descp
FROM `group` g
INNER JOIN member m ON g.id = m.group_id;
mysql这一系列的博客已经完成,如果你有什么其他建议可以进行留言
欢迎大家留言转载
关注微信公众号:SimFG,随时随地看博客要点