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;
上一篇: mysql8.0版本安装