MySQL自学笔记4--where、from、exists型子查询

MySQL自学笔记

使用MySQL 5.5以及MySQL自带命令客户端

子查询

定义:一个查询是另外一个查询的条件时,称为子查询。子查询就是在原有的查询语句中,嵌入新的查询,来得到想要的结果集。根据子查询的嵌入位置,可以分为三种子查询:where型子查询、from型子查询、exists型子查询

where型子查询

将内层查询的结果作为外出查询的比较条件 典型的语法:

select * from table1Name
where colName = (select colName from table2Name where ...)
# 上面的table1Name和table2Name可以是一样的,也可以是不一样的
# 上面的句子中等号相当于符号in,如下:
# where colName in (select colName from table2Name where ...)

举一个例子:存在一个goods表,查询里面最新商品、最贵商品

select goods_id, goods_name
from goods
where goods_id = (select max(good_id) from goods);
# 查询出最新的商品
select goods_id, goods_name, shop_price 
from goods
where shop_price in (select max(shop_price) from goods group by cat_id);

from型子查询

将内层的查询结果当作临时表,供给外出的SQL语句进行再次查询。可以给临时表起一个别名,用关键字as 典型的语法:

select * from (select * from  table1Name where ...) where ...

举一个例子:有一张成绩表stu,查询两门及两门以上不及格同学的平均分

select name, avg(socre) from stu where name in (select name from (select name, sum(score < 60) as temp1 from stu group by name having temp1 > 1) as temp2) group by name;

exists型子查询

将外层的查询结果拿到内层,看内层的查询是否成立。该查询实际上不返回任何的数据,而是返回True或False。该查询可以与in型子查询互换,但是该查询效率高。 典型的语句:

select * from table1Name
where exists (select * from table2Name where ..)

举一个例子:对于goods表和category表,查询有商品的栏目

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

转载于:https://my.oschina.net/QinghaiZheng/blog/830163

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值