MySQL数据库-多表查询和同表查询

多表查询

  1. 使用外连接

语法:

 select 字段 from 表一 left join 表二 on 连接条件 

也可也把left换成right,就变成以表二为基本表,如果表二中有的数据表一没有,也会出现。谁为基本表谁的全部记录就会显示

比如目前有两个表分别是goods和type:

goods表

请添加图片描述

type表

请添加图片描述

现要查询商品名称和对应的类型,SQL语句如下:

SELECT goods.Name '商品名称',type.Name '类别' FROM goods LEFT JOIN `type` ON  goods.TypeId=type.TypeId

查询结果:

请添加图片描述

从SQL语句中可以看出基准表是goods,所以goods表中的商品名称都显示出来了,虽然商品飞机没有定义类型。

  1. 直接在fome后面加上要查询的全部表

SQL语句如下:

SELECT goods.Name '商品名称',type.Name '类别' FROM goods,`type` WHERE goods.TypeId=type.TypeId

查询结果:

请添加图片描述

这种查询方式不会显示没有匹配的记录。

同表查询

还是通过goods表和type表来演示

要求查询商品名称和对应的类型以及类型的上级类型

从type表中可以发现上级类型还是要在type表中查询。

这时我们可以把type表看成是两张表,给type表取两个别名,再结合多表查询的方法进行查询。

SQL语句如下:

SELECT goods.Name,type1.Name TypeName,Type2.Name AS UpTypeName
	FROM Goods,`type` type1 ,`type` type2
	WHERE Goods.TypeId=type1.TypeId AND type1.UpId=type2.TypeId

请添加图片描述

练习

添加一个order,订单表。

请添加图片描述

  1. 查询库存量大于0,并且商品名称以“新品”开头的所有商品名称、类别、上级类别、和库存量,并按照商品类别和商品名称顺序排序

SQL:

SELECT goods.Name '商品名称',type1.Name '类别',Type2.Name AS '上级类别',Goods.Stock '库存量'
	FROM Goods,`type` type1 ,`type` type2
	WHERE Stock>0 AND Goods.Name LIKE '新品%' AND Goods.TypeId=type1.TypeId AND type1.UpId=type2.TypeId
	ORDER BY type1.Name AND Goods.Name 

结果:

请添加图片描述

  1. 查询类别名称为“化妆品”的商品名称以及剩下的商品库存量(需要去掉商品订单中的商品数量)

SQL:

SELECT Goods.Name '商品名称',(Goods.Stock-Order.Num) '库存量'
	FROM Goods,`Type`,`Order` 
	WHERE Type.Name LIKE "化妆品" AND Type.Typeid=Goods.Typeid AND Order.OrderId=Goods.GoodsId

结果:
请添加图片描述
更多内容请移步个人博客:乌托邦

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值