《SQL必知必会》读书小记

  • SQL语言关键字使用大写,而对列名和表名使用小写,使代码更易于阅读和调试。
  • DISTINCT关键字必须直接放在列名的前面,且作用于所有的列,不仅仅是直接跟在其后的那一列。其后有多个列的情况下只有多个列同时相同才会去重。
  • oracle使用rowrum来进行结果记录条数的限制;mysql使用limit来限制。LIMIT 2 OFFSET 3 = LIMIT 3,2
  • order by按照相对列位置进行排序,指定的列必须在select清单中。比如ORDER BY 2,3
  • Mysql不支持方括号([])通配符,比如以J或者M开头,LIKE '[JM]%'
  • 尽量少使用通配符(LIKE),如果要使用,也尽量不要把它们用在搜索模式的开始处,把通配符置于开始处,搜索起来是最慢的。
  • TRIM()去掉字符串左右两边的空格,RTRIM()去掉字符串右边的空格,LTRIM()去掉字符串左边的空格。
  • 使用别名(alias)最好加上AS关键字,这是一条最佳实践。
  • 每一个DBMS都有特定的函数,只有少数的几个函数被所有主要的DBMS等同地支持,SQL函数不是可移植的。
  • 对于一些读音相同,但是拼写不同的字符串,可以使用SOUNDEX()函数。比如Michael GreenMichelle Green发音相似,所以它们的SOUNDEX值匹配,WHERE SOUNDEX('Michael Green') = SOUNDEX('Michelle Green')
  • SQL的聚集函数在各种主要SQL实现中得到了相当一致的支持。
  • COUNT(*)对表中行的数目进行计数,不管表列中包含的是空值(NULL)还是非空值,使用COUNT(column)对特定列中具有值的行进行计数,忽略NULL值。
  • 所有的WHERE子句都可以使用HAVING来替代,唯一的差别是,WHERE过滤行,而HAVING过滤分组。或者说WHERE在数据分组前过滤,HAVING在数据分组后过滤。
  • 在联结两个表时,实际要做的是将第一个表中的每一行与第二个表中的每一行配对。WHERE字句作为过滤条件,只包含那些匹配给定条件(这里是联结条件)的行。没有联结条件的表关系返回的结果叫做笛卡尔积,检索出的行的数目等于第一个表的行数乘以第二个表的行数。返回笛卡尔积的联结也叫叉联结
  • 与列别名不同,表别名不返回到客户端。
  • 联结包含了那些在相关表中没有关联行的行,这种联结称为外联结左外联结包含左边表的不关联的行,右外联结包含右边表的不关联的行,全外联结包含两个表的不关联的行。
  • 不要使用没有明确给出列的INSERT语句。
  • INSERT通常只插入一行,要插入多行,必须执行多个INSERT语句。INSERT SELECT是个例外,它可以用一条INSERT插入多行。
  • 使用强制实施引用完整性的数据库,这样DBMS将不允许删除其数据与其他表相关联的行。
  • 视图不能索引,也不能有关联的触发器或默认值。
  • 使用事务处理,通过确保成批的SQL操作要么全部完全执行,要么完全不执行,来维护数据库的完整性。
  • 事务:指一组SQL语句;回退:指撤销指定SQL语句的过程;提交:指将未存储的SQL语句结果写入数据库表。保留点:指事务处理中设置的临时占位符,可以对它发布回退。
  • 事务处理用来管理INSERTUPDATEDELETE语句,不能回退CREATEDROP操作。

猜你喜欢

转载自blog.csdn.net/a_842297171/article/details/80248441