- 每个SQL语句都是由一个或多个关键字构成的。
- SQL语句不区分大小写,且以分号分隔。
- 在处理SQL语句时,其中所有空格都会被忽略。
- 可以用*通配符检索出名字未知的列。
- DISTINCT关键字指示数据库只返回不同的值(它必须直接放在列名的前面,并且作用于所有列,不仅仅是跟在其后的那一列)。
- 在指定一条ORDER BY子句时,应该保证它是SELECT语句中最后一条子句。
- DESC关键字只应用到直接位于其前面的列名,表示降序。如果想在多个列上进行降序排序,必须对每一列指定DESC关键字。还可以用它的全写DESCENDING。
- 只检索所需数据需要指定搜索条件,搜索条件也称为过滤条件。
- WHERE子句在表名(FROM子句)之后给出。
- 在同时使用ORDER BY和WHERE子句时,应该让ORDER BY 位于WHERE之后。
- BETWEEN匹配范围中所有的值,包括指定的开始值和结束值。
- 用来联结或改变WHERE子句中的子句的关键字,也称为逻辑操作符。
- 在求值过程中,优先级为圆括号>AND>OR。
- WHERE子句中的IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配。IN取一组由逗号分隔、括在圆括号中的合法值。IN最大的优点是可以包含其它SELECT语句。
- WHERE子句中的NOT操作符用于否定其后所跟的任何条件。
- 通配符是用来匹配值的一部分的特殊字符。搜索模式是由字面量、通配符或两者组合构成的搜索条件。通配符搜索只能用于文本字段(字符串),非文本数据类型字段不能使用通配符搜索。
- %代表搜索模式中给定位置的0个、1个或多个字符。%不会匹配NULL。
- _只匹配单个字符,不能多也不能少。
- []匹配方括号中任意一个字符,它只能匹配单个字符。
- RTRIM()函数用于去掉值右边的所有空格,LTRIM()函数用于去掉值左边的所有空格,TRIM()函数用于去掉值左右两边的所有空格。
- SQL支持列别名。别名是一个字段或值的替换名,有时也称为导出列。别名用AS关键字赋予。
- Now()函数返回当前日期和时间。
- SOUNDEX()函数用法。
- 不管使用何种形式的字符串数据类型,字符串值都必须括在单引号内。
- 聚集函数是对某些运行的函数,计算并返回一个值。
- AVG()只能用来确定特定数值列的平均值,而且列名必须作为函数参数给出。为了获得多个列的平均值,必须使用多个AVG()函数。AVG()函数忽略列值为NULL的行。
- 如果指定列名,则COUNT()函数会忽略指定列的值为空的行,但如果COUNT()函数中用的是*号,则不忽略。
- MAX()函数忽略列值为NULL的行,它要求指定列名。在用于文本数据时,MAX()返回按该列排序后的最后一行。
- MIN()函数忽略列值为NULL的行,它要求指定列名。在用于文本数据时,MIN()返回该列排序后最前面的行。
- SUM()函数忽略列值为NULL的行。
- WHERE过滤行,HAVING过滤分组。WHERE在数据分组前进行过滤,HAVING在数据分组后进行过滤。
- 作为子查询的SELECT语句只能查询单个列。
- 可伸缩指能够适应不断增加的工作量而不失败。设计良好的数据库或应用程序称为可伸缩性好。
- 完全限定列名:用一个句点分隔表名和列名。
- 由没有联结条件的表关系返回的结果为笛卡尔积。检索出的行的数目将是第一个表中的行数乘以第二个表中的行数。有时候,返回笛卡尔积的联结,也称叉联结。
- 等值联结基于两个表之间的相等测试,也称为内联结。
- 表别名只在查询执行中使用。与列别名不一样,表别名不返回到客户端。
- 使用UNION时,重复的行会被自动取消。使用UNION ALL,DBMS不取消重复的行。如果确实需要每个条件的匹配行全部出现(包括重复行),就必须使用UNION ALL,而不是WHERE。
- 在用UNION组合查询时,只能使用一条ORDER BY子句,它必须位于最后一条SELECT语句之后。
- 如果表的定义允许,则可以在INSERT操作中省略某些列。省略的列必须满足以下某个条件:1、该列定义为允许NULL值(无值或空值);2、在表定义中给出默认值。这表示如果不给出值,将使用默认值。
- INSERT SELECT中SELECT语句可以包含WHERE子句,以过滤插入的数据。INSERT SELECT可以用一条INSERT插入多行,不管SELECT语句返回多少行,都将被INSERT插入。
- INSERT SELECT将数据添加到一个已经存在的表,SELECT INTO将数据复制到一个新表。INSERT SELECT导出数据,SELECT INTO导入数据。
- 在使用SELECT INTO时,不管从多少个表中检索数据,数据都只能插入到一个表中。
- 在更新多个列时,只需要使用一条SET命令,每个“列=值”对之间用逗号分隔(最后一列之后不用逗号)。
- 要删除某个列的值,可设置它为NULL(假如表定义允许NULL值)。NULL表示没有值,空字符串‘’是一个值。
- DELETE语句从表中删除行,甚至是删除表中所有行,但是它不删除表本身。可以使用TRUNCATE TABLE语句从表中删除所有行,它完成相同工作,并且速度更快(因为不记录数据的变动)。
- 只有不允许NULL值的列可作为主键,允许NULL值的列不能作为唯一标识。
- 视图的一些常见规则和限制:1、与表一样,视图必须唯一命名;2、视图可以嵌套;3、视图不能索引,也不能有关联的触发器或默认值。
- 覆盖(或更新)视图,必须先删除它,然后再重新创建。
- 视图为虚拟的表。它们包含的不是数据而是根据需要检索数据的查询。
- 存储过程就是为以后使用而保存的一条或多条SQL语句。存储过程三个优点:简单、安全、高性能。
- 应该注释所有代码,存储过程也不例外。增加注释不影响性能,因此不存在缺陷(除了增加编写时间外)。对代码进行注释的标准方式是在之前放置-- (两个连字符)。
- SQL Server中称这些自动增量的列为标识字段,而其它DBMS称之为自动编号或序列。
- 事务指一组SQL语句;回退指撤销指定SQL语句的过程;提交指将未存储的SQL语句结果写入数据库表;保留点指事务处理中设置的临时占位符,可以对它发布回退(与回退整个事务处理不同)。
- 事务处理不能回退SELECT语句、CREATE或DROP操作。
- SQL的ROLLBACK命令用来回退(撤销)SQL语句。
- 一般的SQL语句都是针对数据库表直接执行和编写的。这就是所谓的隐式提交,即提交(写或保存)操作是自动进行的。在事务处理块中,提交不会隐式进行。进行明确的提交,使用COMMIT语句。
- 要支持回退部分事务,必须在事务处理块中的合适位置放置占位符。这样如果需要回退,可以回退到某个占位符。在SQL中,这些占位符称为保留点。每个保留点都要取能够标识它的唯一名字,以便在回退时,DBMS知道回退到何处。可以在SQL代码中设置任意多的保留点,越多越好。
- SQL查询所检索出的结果称为结果集。
- 游标是一个存储在DBMS服务器上的数据库查询,它不是一条SELECT语句,而是被该语句检索出来的结果集。使用DECLARE语句创建游标。使用OPEN CURSOR语句打开游标。CLOSE语句用来关闭游标。
- 约束是指管理如何插入或处理数据库数据的规则。
- 外键有助于防止意外删除。
- 唯一约束用来保证一列(或一组列)中的数据是唯一的。它们类似于主键,但存在以下重要区别:1、表可以包含多个唯一约束,但每个表只允许一个主键;2、唯一约束列可包含NULL值;3、唯一约束列可修改或更新;4、唯一约束列的值可重复使用;5、与主键不一样,唯一约束不能用来定义外键。
- 检查约束用来保证一列(或一组列)中的数据满足一组指定的条件。
- 索引用来排序数据以加快搜索和排序操作的速度。索引必须唯一命名。索引改善检索操作的性能,但降低了数据插入、修改和删除的性能,因为在执行这些操作时,DBMS必须动态地更新索引。
- 触发器是特殊的存储过程,它在特定的数据库活动发生时自动执行。触发器内的代码具有以下数据的访问权:1、INSERT操作中的所有新数据;2、UPDATE操作中的所有新数据和旧数据;3、DELETE操作中删除的数据。
- 一般来说,约束的处理比触发器快,因此在可能的时候,应该尽量使用约束。
- 一般说来,需要保护的操作有:1、对数据库管理功能(创建表、更改或删除已存在的表等)的访问;2、对特定数据库或表的访问;3、访问的类型(只读、对特定列的访问等);4、仅通过视图或存储过程对表进行访问;5、创建多层次的安全措施,从而允许多种基于登录的访问和控制;6、限制管理用户账号的能力。安全性使用SQL的GRANT和REVOKE语句来管理。
数据库学习笔记
最新推荐文章于 2024-07-22 09:40:00 发布