MySQL-案例应用:数据的检索和过滤(内连接、左外连接、右外连接)

以购物商城的数据表为基础,进行实例操作:

应用1:查询分类名称为手机数码的所有商品

第1步:查询分类名为手机数码的ID

先确定“手机数码”在哪个数据表?,确定是category数据表

“手机数码的ID”中的ID,在category数据表是cid字段

接下来,尝试查询“手机数码”条件对category数据表的所有信息:

SELECT * FROM category WHERE cname='手机数码';

MySQL-案例应用:数据的检索和过滤(内连接、左外连接、右外连接)_第1张图片

我们只要cid,就将*改为cid

SELECT cid FROM category WHERE cname='手机数码';

MySQL-案例应用:数据的检索和过滤(内连接、左外连接、右外连接)_第2张图片

这样,就得到了我们想要的“ID”,确定是1。

第2步:得出ID为1的结果

分析:查询分类名称为手机数码的所有商品,那么,商品在哪个数据表中呢?确定是product数据表。

先直接使用product数据表中cno等于1进行查询,会得到想要的:

SELECT * FROM product WHERE cno = 1;

MySQL-案例应用:数据的检索和过滤(内连接、左外连接、右外连接)_第3张图片

只是,数据查询中,我们无法直观知道ID是1,那怎么实现呢?

通过子查询完成,动态实现

SELECT * FROM product WHERE cno = (SELECT cid FROM category WHERE cname='手机数码');

MySQL-案例应用:数据的检索和过滤(内连接、左外连接、右外连接)_第4张图片

可以看到,显示结果是一样的!换句话说,LIMIT n 等价于 LIMIT 0,n。

 

应用2:查询出(商品名称,商品分类名称)信息

第1种方式:左连接

通过左连接查询,得到所有信息

SELECT * FROM product p LEFT OUTER JOIN category c ON p.cno = c.cid;

MySQL-案例应用:数据的检索和过滤(内连接、左外连接、右外连接)_第5张图片

在以上信息中,可以看到“商品名称,商品分类名称”,需要的是字段pname与cname,进一步查询

SELECT p.pname,c.cname FROM product p LEFT OUTER JOIN category c ON p.cno = c.cid;

MySQL-案例应用:数据的检索和过滤(内连接、左外连接、右外连接)_第6张图片

第2种方式:子查询

先在product数据表中查询,获得pname、cno

MySQL-案例应用:数据的检索和过滤(内连接、左外连接、右外连接)_第7张图片

product数据表中cno,对应category中的cname,需要子查询通过cno等于cid条件判断:

SELECT pname,(SELECT cname FROM category c WHERE p.cno=c.cid ) AS 商品分类名称 FROM product p;

MySQL-案例应用:数据的检索和过滤(内连接、左外连接、右外连接)_第8张图片

执行之后,出来的结果是一样的!

持续更新之中...

你可能感兴趣的:(开发应用)