欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Mysql多表查询

程序员文章站 2024-03-21 16:41:40
...

多表查询

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 条件

下面通过一张图说明连接的区别:Mysql多表查询
举例:
–查询哪些分类的商品已经上架
隐式内连接:

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;

相关标签: MySQL 多表查询