子查询(查询模型)

查询模型

列就是变量,在每一行上,列的值都在变化

where条件是表达式,在哪一行上表达式为真,哪一行就取出来,比如 下面的条件,shop_price 在不同的行

有不同的值,在哪一行时,shop_price>500 如果为真,则这一行就取出来

查询结果集在结构上可以当成表看

 

 

where的子查询

查询最新的商品

mysql> select goods_name,goods_id from goods where goods_id=(select max(goods_i
)from goods);
+------------+----------+
| goods_name | goods_id |
+------------+----------+
| 诺基亚N85       |       32 |
+------------+----------+

 

取出每个栏目下最大的goods_id 的商品

首先取到最大的goods_id

mysql> select max(goods_id),cat_id from goods
    -> group by cat_id;
+---------------+--------+
| max(goods_id) | cat_id |
+---------------+--------+
|            16 |      2 |
|            32 |      3 |
|            18 |      4 |
|            23 |      5 |
|             7 |      8 |
|             6 |     11 |
|            26 |     13 |
|            30 |     14 |
|            28 |     15 |
+---------------+--------+

然后只要把  goods_id =16,32,33……28 这样的几条商品取出来

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

where 型子查询注意点

如果where 列=(内层 sql),则内层sql返回的必是单行单列,单个值

如果where 列 in(内层 sql),则内层sql只能返回单列可以是多个行,但一定是单列

 

from 型子查询

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

典型题目

每个栏目下最新最贵的商品

select goods_id,cat_id,goods_name from goods order by cat_id asc,goods_id desc;

然后把上面的语句结果当做成一张表

select * from (select goods_id,cat_id,goods_name from goods order by cat_id asc,goods_id desc) as tmp group by cat_id;

其中 tmp为临时表名

 

exists 型 子查询

指把外层sql结果,拿到内层sql去测试,如果内层sql成立,则该行取出

 

例子:查出有商品的栏目

posted @ 2013-11-23 04:14  long896130895  阅读(297)  评论(0)    收藏  举报