- 使用表别名
作用:
- 缩短SQL语句
- 允许在单条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的互换。
注意:
❑ 注意所使用的联结类型。一般我们使用内部联结,但使用外部联结也是有效的。
❑ 保证使用正确的联结条件,否则将返回不正确的数据。
❑ 应该总是提供联结条件,否则会得出笛卡儿积。
❑ 在一个联结中可以包含多个表,甚至对于每个联结可以采用不同的联结类型。虽然这样做是合法的,一般也很有用,但应该在一起测试它们前,分别测试每个联结。这将使故障排除更为简单。