欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

mysql学习之基础篇06

程序员文章站 2022-04-10 16:15:54
子查询:又分为where型子查询,from型子查询,exists型子查询这三类。 where型子查询:指把内层查询的结果作为外层查询的比较条件: 举个例子: 我们想查出goods_id最大的商品,要求不能用排序: 我们还想查出每个栏目下goods_id最大的商品,要求使用where型子查询: fro ......

子查询:又分为where型子查询,from型子查询,exists型子查询这三类。

where型子查询:指把内层查询的结果作为外层查询的比较条件:

举个例子:

我们想查出goods_id最大的商品,要求不能用排序:

select goods_id,goods_name,cat_id,shop_price from goods where goods_id=(select max(goods_id)from goods);

mysql学习之基础篇06

我们还想查出每个栏目下goods_id最大的商品,要求使用where型子查询:

select goods_id,goods_name,cat_id,shop_price from goods where goods_id in (select max(goods_id)from goods group by cat_id);

mysql学习之基础篇06

from型子查询:

 内层sql的查询结果当成一张临时表,供外层sql再次查询

举个例子,我们想查询上面那张表中shop_price在20到100之间的商品:

select t1.goods_id,t1.goods_name,t1.cat_id,t1.shop_price 

from(select goods_id,goods_name,cat_id,shop_price from goods where goods_id in (select max(goods_id)from goods group by cat_id))

as t1 where t1.shop_price between 20 and 100;

 

exists 型子查询:

把外层的查询结果拿到内层进行测试,如果内层存在,则输出外层

我们还有一张category表:

mysql学习之基础篇06

我们现在想取出category栏目下有商品的栏目:

select * from category 
where exists (select * from goods where category.cat_id=goods.cat_id);

mysql学习之基础篇06

 

对null的理解:

建表时列后面not null default ''/not null default 0 是什么意思?

答:就是让这个列的值不为nul,就算某个列确实没有填值,也不让它为null

为什么?

答:null是空,它的比较要用到特殊的比较符is null,is not null ,效率不高而且会影响索引效果

左连接:

假设a表在左,不动,有一张b表在a右边滑动,a表与b表之间通过一个关系来筛选b表的行。

a left join b on 条件。 条件为真,则b表中对应的行被取出。

上面的category表有一列cat_name,我们把它跟goods表左连接看看效果:

select goods_id,goods_name,shop_price,goods.cat_id,cat_name 
from goods left join category on goods.cat_id=category.cat_id;

mysql学习之基础篇06

我们可以看到category表中的cat_name列与goods表连接在了一起

右连接也是类似,不过处于移植性和兼容性方面考虑,我们通常使用左连接。

我们有两个表t,m:

mysql学习之基础篇06

mysql学习之基础篇06

我们想把它显示为以下的效果:

mysql学习之基础篇06

该怎么做?提示:使用两次左连接

select t1.tname,mres,t2.tname,matime 
from m left join t as t1 on t1.tid=m.hid
left join t as t2 on t2.tid=m.gid
where matime between '2006-06-01' and '2006-07-01';

mysql学习之基础篇06

 

union:

合并两条或多条sql语句的结果

语法:sqla union sqlb

要求查询价格低于100元和价格高于4000元的商品(不能用or

(select goods_id,goods_name,cat_id,shop_price from goods where shop_price<100)
union
(select goods_id,goods_name,cat_id,shop_price from goods where shop_price>4000);

mysql学习之基础篇06

使用union时默认去重,如果不想去掉重复数据可以用union all