首先,要对联接有透彻的了解。不仅是内连接和左连接。了解交叉联接的功能以及完全外部联接。了解会导致您选择特定连接类型的情况。了解它们是不可互换的,并且使用左联接的查询可能返回与使用内部联接的查询不同的结果。(有人会认为这很明显,但是我读了太多的问题,人们在描述问题时随机地尝试了不同的联接。)
接下来,我们将真正了解聚合及其工作原理。Mysql将使您摆脱不以标准方式进行分组的麻烦。但是要有纪律来正确地完全定义group by子句。它可以帮助您了解自己在做什么,并使您的知识更容易转移到其他数据库。
了解案例陈述的作用。
在进行复杂的查询时,要学会分块地工作。在每个块上验证您是否具有期望的结果。因此,举例来说,假设您需要针对最近3个月内退回的订单,退货原因以及客户的联系信息编写报告查询。第一步是获取最近三个月内退回的订单。知道您有那个实体后,就可以添加有关退货原因的信息。一旦有了该实体,就可以添加退回该实体的客户。有了该实体后,请添加该人的联系信息。在每个阶段,检查您的结果,看看它们是否有意义。在这种情况下,我可能只想在每个退回订单中只保留一条记录。如果在任何中间阶段,结果的数量增加或减少,您就会知道查询存在问题。有时在构建基块中,您将希望看到其他字段,只是为了验证信息是否正确。我将它们放在单独的行上,并在下一步进行操作时将它们注释掉(一旦我知道我是对的,在最后将它们删除),以便可以再次轻松查看它们是否增加了其他皱纹,从而使查询变得有趣。如果不全面了解结果的外观,就无法正确执行复杂的查询。认为它看起来不错,因为它返回了一些结果,几乎可以保证您在大部分时间内都有错误的结果。m右),因此如果再次添加皱纹使查询变得有趣,则可以轻松再次看到它们。如果不全面了解结果的外观,就无法正确执行复杂的查询。认为它看起来不错,因为它返回了一些结果,几乎可以保证您在大部分时间内都有错误的结果。m右),因此如果再次添加皱纹使查询变得有趣,则可以轻松再次看到它们。如果不全面了解结果的外观,就无法正确执行复杂的查询。认为它看起来不错,因为它返回了一些结果,几乎可以保证您在大部分时间内都有错误的结果。
下面列出了一些您无需考虑即可在SQL中完成的基本操作:
- 首先是没有连接(没有选择*)但具有选择条件的直接选择
- 您应该知道如何合并两个或多个表并获取所有表中的记录
- 您应该知道如何合并两个或多个表并获取所有表中的记录,但是从表中仅返回一条记录,且该记录具有一对多关系的许多方面。
- 您应该能够在一个表中但不在关联表中获取记录
- 您应该能够汇总报告的数据
- 您应该能够在一张表中插入一条记录
- 您应该能够更新表中的一条记录
- 您应该能够删除表中的一条记录
- 您应该能够在没有游标的情况下将一组记录插入到表中
- 您应该能够在没有游标的情况下更新表中的一组记录
- 您应该能够删除没有光标的表中的一组记录
- 您应该能够在一个事务中执行多个操作并处理错误捕获
- 您应该能够创建记录的合并,并且知道何时使用UNION Vice UNION ALL。
- 您应该能够根据某些条件(使用CASE)更改一个字段的数据
一旦您对基本的SQL知识感到满意之后,就可以了解数据库结构。我可以针对我所支持的非常复杂的数据库编写复杂的查询,其速度比其他人快得多,因为我了解结构,而不必考虑存储在何处。如果您了解表的结构和外键关系以及查找值的存储位置以及列的含义(不仅是它们的名称,还包含它们中包含的数据),那么您可以是查询该数据库的专家。在任何新工作中,我要做的第一件事是彻底了解数据库结构。