Mysql(八)创建高级联结

本文介绍SQL中使用表别名缩短语句、解决重复表引用问题的方法,包括自联结、自然联结、外部联结等高级查询技巧,并强调正确选择联结类型的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  •  使用表别名

作用:

  1. 缩短SQL语句
  2. 允许在单条SELECT语句中多次使用相同的表

SELECT b.ts_code,COUNT(*)

FROM StockBasicData AS s,BasicLevel AS b

WHERE s.ts_code = b.ts_code

AND b.level = 9

GROUP BY b.ts_code

注意:表别名只在查询执行中使用。与列别名不一样,表别名不返回到客户机。

  • 自联结

例:加入我们发现当total_pay = 114556000数据出现了错误,我们想知道该支股票的其他数据是否也存在相应的问题,我们可以这样做。

 SELECT s1.ts_code,s1.total_pay

 FROM StockBasicData AS s1 ,StockBasicData AS s2

 WHERE s1.ts_code = s2.ts_code AND s2.total_pay = 114556000

注意:StockBasicData 表因为使用了两次,所以会重复,所以需要使用别名。

 

当然该种情况也可以使用另外一种方式实现:

 SELECT ts_code,total_pay

 FROM StockBasicData

 WHERE ts_code = (

SELECT ts_code

FROM StockBasicData

WHERE total_pay = 114556000)

 

使用上面两种何种情况,需要视查询的效率而定。

  • 自然联结

当我们使用 SELECT * 时,有可能会出现重复的列,为了解决这种问题,我们可以这样做。

SELECT s.*,b.level

FROM  StockBasicData AS s, BasicLevel AS b

WHERE b.ts_code = s.ts_code

 

  • 外部联结

我们使用内部联结INNER时可能会发现有些数据在表1却不在表2的情况,加入我们需要展示所有的数据,我们则需要使用外部联结 RIGHT OUTER JION 和LEFT OUTER JOIN

例:

SELECT *

FROM student RIGHT OUTER JOIN project

ON project.`name` = student.`name`

这里我们使用的RIGHT意思就是将左侧表插入的右侧表中。

LEFT与其相反,因此我们可以通过更换两个表的位置来实现left与right的互换。

 

注意:

❑ 注意所使用的联结类型。一般我们使用内部联结,但使用外部联结也是有效的。

❑ 保证使用正确的联结条件,否则将返回不正确的数据。

❑ 应该总是提供联结条件,否则会得出笛卡儿积。

❑ 在一个联结中可以包含多个表,甚至对于每个联结可以采用不同的联结类型。虽然这样做是合法的,一般也很有用,但应该在一起测试它们前,分别测试每个联结。这将使故障排除更为简单。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值