《SQL必知必会》读书笔记

很适合入门的一本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子句不正确。 
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号