MySQL基础入门之查询续集

子查询

子查询在逻辑上通常是两个查询,子查询就是提高了代码的简洁性,原本需要使用多个select语句完成的查询工作在一个查询中完成。

按照子句分类可以分为三种,第一种就是where子句,第二种就是from子句,第三种就是exists子句。子查询根据结果集可以分为标量子查询、列子查询、行子查询、表子查询。


where 子句 >>group by 子句>>having 子句>>order by 子句>>limit 子句。

select * from 表1 where id>=(select max(id) from 表2);

select * from 表1 where id in (select id from 表2);


#from型子查询,会产生一个临时表,因此我们必须为from表名的表指定一个别名,也就是下面语句的x。

select * from (select * from 表1 where id <= floor(rand()*5)) as x where name regexp ‘京东’;

select * from 表1 where exists (select * from 表2 where 表1.year = 表2.year);

分组 group by,默认group by显示的是每一组的找到的第一条记录。

select count(*) as 人数,class as 班级 from school group by class;

select max(score) as 分数,class as 班级 from school group by class;


#group by 多字段排序,首先会对第一个字段进行排序,然后对第二个字段排序。

select count(*),level,dept from staff group by level,dept;

 

拥有 having,having必须引用group子句中的列或者聚合函数处理过的列。

select count(name),dept from staff group by dept having count(name)>1;

select count(*),dept from staff group by dept having dept!=’开发部’;

#同样也可以用where实现

select count(*),dept from staff where dept !=’开发部’group by dept;


limit子句,它的作用就是截取结果集的一部分

limit n,m;返回第n行开始的第m条数据

mysql为了和postgreSQL兼容,它还支持了如下语法:limit m offset n。

select * from 表 limit 0,3;//查询的是先三条数据

select * from 表 limit 3;

select * from 表 limit 3 offset 0;


order by 子句 asc 升序 desc 降序

order by 字段名1 [desc|asc] ,字段名2 [desc|asc].....;

#先根据字段1进行排序,然后按照字段2进行排序.....

select * from表 order by year desc;

select * from表 order by year desc,id desc;

select * from表 order by name;

 

union子句 -> 要求两个表的列数应该相同

select 语句 union [all] select 语句;

#all表示结果集中保留所有数据,否则删除重复数据

select * from 表1 union select * from 表2 order by id;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值