MySQL-案例应用:数据的检索和过滤(内连接、左外连接、右外连接)
以购物商城的数据表为基础,进行实例操作:
应用1:查询分类名称为手机数码的所有商品
第1步:查询分类名为手机数码的ID
先确定“手机数码”在哪个数据表?,确定是category数据表
“手机数码的ID”中的ID,在category数据表是cid字段
接下来,尝试查询“手机数码”条件对category数据表的所有信息:
SELECT * FROM category WHERE cname='手机数码';
我们只要cid,就将*改为cid
SELECT cid FROM category WHERE cname='手机数码';
这样,就得到了我们想要的“ID”,确定是1。
第2步:得出ID为1的结果
分析:查询分类名称为手机数码的所有商品,那么,商品在哪个数据表中呢?确定是product数据表。
先直接使用product数据表中cno等于1进行查询,会得到想要的:
SELECT * FROM product WHERE cno = 1;
只是,数据查询中,我们无法直观知道ID是1,那怎么实现呢?
通过子查询完成,动态实现
SELECT * FROM product WHERE cno = (SELECT cid FROM category WHERE cname='手机数码');
可以看到,显示结果是一样的!换句话说,LIMIT n 等价于 LIMIT 0,n。
应用2:查询出(商品名称,商品分类名称)信息
第1种方式:左连接
通过左连接查询,得到所有信息
SELECT * FROM product p LEFT OUTER JOIN category c ON p.cno = c.cid;
在以上信息中,可以看到“商品名称,商品分类名称”,需要的是字段pname与cname,进一步查询
SELECT p.pname,c.cname FROM product p LEFT OUTER JOIN category c ON p.cno = c.cid;
第2种方式:子查询
先在product数据表中查询,获得pname、cno
product数据表中cno,对应category中的cname,需要子查询通过cno等于cid条件判断:
SELECT pname,(SELECT cname FROM category c WHERE p.cno=c.cid ) AS 商品分类名称 FROM product p;
执行之后,出来的结果是一样的!
持续更新之中...