(08)MySQL:多表查询、子查询

本文详细介绍了MySQL中的多表查询,包括内连接、外连接(左连接和右连接)的概念及用法,并给出了实际查询案例。同时,文章还探讨了子查询的运用,如单行单列、单行多列和多行多列子查询,并提供了相应的查询示例。

(08)MySQL:多表查询、子查询

-- 多表查询:语法如下
SELECT<字段名列表>FROM<表名或视图>
[inner join <表名或视图> on 条件]
[WHERE<查询条件>]
[GROUP BY<分组的字段名]
[ORDER BY<排序的列名>[ASCDEsC]]
[LMIT[位置偏移量,]行数];

-- 连接查询
1.交叉连接查询(基本不会使用-得到的是两个表的笛卡尔积) [了解]	
2.内连接查询(使用的关键字 inner join  -- inner可以省略)
内连接原理 : 内连接根据我们连接条件大大的缩小的笛卡尔积的范围;在内连接中只有主外键能够关联上的数据才能被查询出来!
隐式内连接:select * from A,B where 条件;
显示内连接:select * from A inner join B on 条件; (推荐写法)
3.外连接查询(使用的关键字 outer join -- outer可以省略)
外连接可以把关联查询的两张表的一张表作为主表,另外一张作为从表,而外链接使用保证主表的数据完整;
查询原理 : 左外连接查询是以left关键字左边的表为基准表,保证左表数据完整,如果右表没有与左表数据匹配的记录,那么右表将以一条null数据填充查询结果,保证左表的完整
左外连接:select * from A left outer join B on 条件;
右外语法: select * from A right outer join B on 条件;(了解)
-- 案例
	-- 1.查询价格在一万以内名字中包含 '想' 的商品
	隐式内连接:select * from category c,product p where c.cid = p.c_id and p.price <= 10000 and p.pname like '%想%';
	显式内连接:分工明确 不容易写乱套
	select * from category c 
	inner join product p on c.cid = p.c_id -- 此处设置管理
	where p.price < 10000 and p.pname like '%想%'; -- 此处设置条件
	-- 2.查询所有分类商品的个数
	左外连接:
	select c.cname,count(p.c_id) gs from category c
	left join product p on c.cid = p.c_id 
	group by c.cname;

-- 子查询
定义:一条select语句结果作为另一条select语法一部分(查询条件,查询结果,表等)。
语法:select * from 表名 where 查询字段 >|<|= (查询条件,查询结果,表等);
	-- 案例 :  查询和海尔洗衣机同样价格的商品
	连接查询: 没法连接呀,发生在一张表的查询,关联字段也找不到,你叫我怎么连接?啊?怎么连接?
	单行单列子查询:select * from product p where p.price = (select p.price from product p where p.pname like '%海尔%洗衣机%');
	-- 案例 :  查询所有商品的商品类别名称
	单行多列子查询:select * from category where cid in (select DISTINCT c_id from product);
	-- 下面这条语句就是把一个查询结果直接封装为一个虚拟表a表 然后在封装的虚拟表a表的基础上又做查询 这种子查询叫做 多行多列子查询
	多行多列子查询:select * from (select p.*,c.cname from product p inner join category c on p.c_id = c.cid) a where a.price > 10000
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值