很适合入门的一本SQL书,虽相见已晚,但看完了,总要记录点什么。
- DESC关键字只应用到直接位于其前面的列名。如果想在多个列上进行降序排序,必须对每一列指定DESC关键字。与DESC相对的是ASC,实际上,ASC没有多大用处,因为升序是默认的。
- 在一个列不包含值的时候,称其包含空值NULL。NULL:无值,它与字段包含0,、空字符串或仅仅包含空格不同。
- 确定值是否为NULL,不能简单地检查是否=NULL,而是使用 IS NULL 子句。
- 处理OR操作符之前,优先处理AND操作符。
- WHERE子句中的NOT操作符有且只有一个功能,那就是否定其后所跟的任何条件。
- LIKE后跟的是通配符搜索模式,最常用的是%,%表示任何字符出现任意次数。另一个有用的通配符是_,_只匹配单个字符。
- 在很多DBMS中,AS关键字是可选的,不过最好使用它,这被视为一条最佳实践。
- 虽然SELECT通常用于从表中检索数据,但是省略了FROM子句后就是简单地访问和处理表达式。
- 用于文本数据时,MAX()返回按该列排序后的最后一行。
- 过滤是基于分组聚集值,而不是特定行的值。
- HAVING和WHERE的差别:WHERE在数据分组之前进行过滤,HAVING在分组后进行过滤。
- 相同的数据出现多次绝不是一件好事,这是关系数据库设计的基础。关系表的设计就是要把信息分解成多个表,一类数据一个表。各表通过某些共同的值互相关联。
- 在联结两个表时,实际要做的是将第一个表的每一行与第二个表中的每一行配对。WHERE子句作为过滤条件,只包含那些匹配给定条件的行。没有WHERE子句,第一个表的每一行将与第二个表中的每一行配对(笛卡尔积),而不管它们逻辑上是否能配在一起。
- 许多DBMS处理联结远比处理子查询快得多。
- 标准联结返回所有数据,相同的列甚至多次出现。自然联结排除多次出现,使每一列只返回一次。事实上,很可能永远都不会用到不是自然联结的内联结。
- 在使用OUTER JOIN语法时,必须使用RIGHT或LEFT关键字指定包括其所有行的表。
- 调整FROM或WHERE子句中表的顺序,左外联结可以转换为右外联结。因此,这两种外联结可以互换使用,哪个方便用哪个。
- UNION从查询结果集中自动去除了重复的行;换句话说,它的行为与一条SELECT语句中使用多个WHERE子句条件一样。
- UNION几乎总是完成与多个WHERE条件相同的工作。
- UNION ALL为UNION的一种形式,它完成WHERE子句完成不了的工作。如果确实需要每个条件的匹配行全部出现(包括重复行),就必须使用UNION ALL而不是WHERE。
- 在使用UNION组合查询时,只能使用一条ORDER BY子句,它必须位于最后一条SELECT语句之后。实际上,DBMS将用它来排序所有SELECT语句返回的所有结果。
- 不要使用没有明确给出列的INSERT语句。
- SELECT INTO 是试验新SQL语句前进行表复制的很好工具。先进行复制,可在复制的数据上测试SQL代码,而不会影响实际的数据。
- 使用UPDATE时一定要小心,因为稍不注意,就会更新表中所有行。
- 使用DELETE时一定要小心,因为稍不注意,就会删除表中所有行。
- DELETE不需要列表或通配符。DELETE删除整行而不是删除列。要删除指定的列,请使用UPDATE语句。
- 如果想从表中删除所有行,不要使用DELETE。可使用TRUNCATE TABLE语句,它完成相同的工作,而速度更快(因为不记录数据的变动)。
- 除非确实打算更新和删除每一行,否则绝对不要使用不带WHERE子句的UPDATE或DELETE语句。
- 在UPDATE或DELETE语句使用WHERE子句前,应该先用SELECT进行测试,保证它过滤的是正确的记录,以防编写的WHERE子句不正确。