Mysql多表查询

多表查询

1.交叉连接查询(笛卡尔积——得到的是两个表的乘积)
语法:select * from A,B;
2.内连接查询(使用的关键字 inner join --inner可以省略)
隐式内连接:select * from A,B where 条件;
显示内连接:select * from A inner join B on 条件;
3.外连接查询(使用的关键字 outer join --outer 可以省略)
左外链接:left outer join
select * from A left outer join B on 条件;
右外连接:right outer join
select * from A right outer join B on 条件;
内外连接的区别:
内连接查询:只能查询出符合条件的记录,只查询等值的部分要求显示两个或者多个表中都有的数据叫内连接,条件过滤使用where,表和表之间可以使用等号或者and进行;
外连接查询:既能查询出符合条件的记录,也能根据一方强行将另一方查询出来,条件过滤使用on,表和表之间使用left/right (outer) join xxx on 条件

下面通过一张图说明连接的区别:在这里插入图片描述
举例:
–查询哪些分类的商品已经上架
隐式内连接:

SELECT DISTINCT c.cname FROM category c , products p 
	WHERE c.cid = p.category_id AND p.flag = '1';

显示内连接:

SELECT DISTINCT c.cname FROM category c 
	INNER JOIN products p ON c.cid = p.category_id 
	WHERE p.flag = '1';

–查询所有分类商品的个数
左外连接:

SELECT cname,COUNT(category_id) FROM category c 
	LEFT OUTER JOIN products p 
		ON c.cid = p.category_id 
	GROUP BY cname;

子查询

子查询:一条select语句结果作为另一条select句法的一部分(查询条件,查询结果,表等),当查询条件是未知事物的时候,考虑使用子查询。
select …查询字段 …from…表…where…查询条件

举例:
–查询“化妆品”分类上架商品详情
作为查询条件:

SELECT * FROM products p 
	WHERE p.category_id = 
	( 
		SELECT c.cid FROM category c 
			WHERE c.cname='化妆品'
	);

作为另一张表:

SELECT * FROM products p , 
	 	 	(SELECT * FROM category WHERE cname='化妆品') c 
		WHERE p.category_id = c.cid;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值