子查询:在一个查询语句中包含了另外一个查询语句。
select * from commodityinfo
where sortid=
(select sortid from commoditysort where sortname=’手机数码‘)
简单子查询的语法:
select * from 表1 where 列1 >(子查询)
特点:
1.子查询必须放在一对小括号内
2.“=”比较运算符,还可以和其他的比较运算符一起使用,要求子查询的列只能有一个。
3.子查询通常做为where的条件。
4.子查询中不能出现order by子句。
---查询手机数码的商品信息
【1】根据已知项去查未知项,已知项是商品类别名称
select * from commodityinfo
where sortid=
(select sortid from commoditysort where sortname=’手机数码‘)
通常情况下多表连接查询都可以使用子查询替换,反过来则不成立,不是所有的子查询都可以被表连接查询。
多表连接查询与子查询各自的应用场合:
子查询:适合于作为查询的where条件,子查询只能查询主表的字段。
多表连接查询:适用于从多表中查询数据,连接查询可以查看连接表中的任意字段。
--查询购买苹果Iphone6的客户的姓名和住址
【1】多表连接查询
select u.username,u.useraddress from commodityinfo as c
inner join orderinfo as o on c.commodityid=o.commodityid
inner join userinfo as u on u.userid=o.userid
where c.commodityname = '苹果Iphone6'
【2】子查询:根据已知项查询未知项
select username as 用户名,useraddress as 用户地址 from userinfo
where userid=
(select userid from orderinfo
where commodityid=
(select commodityid from commodityinfo where commodityname='苹果Iphone6))