本文在上篇博客 SQL 知识点回顾总结(一)的基础上,再结合《SQL 必知必会》一书对 SQL 相关知识点进行了补充整理,供大家参考,也方便自己查阅备忘。
- 在指定一条 order by 子句时,应该保证它是 select 语句中最后一条子句。如果它不是最后的子句,将会出现错误信息。
- 通常,order by 子句中使用的列将是为显示而选择的列。但是实际上并不一定要这样,用非检索的列排序数据是完全合法的。
- 如果想在多个列上进行降序排序,必须对每一列指定 DESC 关键字。
- 通配符只能用于文本字段(字符串),非文本数据类型字段不能使用通配符搜索。
4.1 通配符 % :like ‘%’ 不会匹配为 NULL 的行
4.2 通配符 _ :只匹配单个字符
4.3 通配符 []:指定一个字符集,匹配指定位置(通配符的位置)的一个字符 - TRIM 函数
RTRIM():去掉字符串右边的空格;
LTRIM():去掉字符串左边的空格;
TRIM() :去掉字符串左右两边的空格。 - 测试计算:省略了 from 子句的 select 语句就是简单地访问和处理表达式,例如 select 3*2 将返回6,select trim(’ abc ') 将返回 abc
- soundex() 函数:soundex()考虑了类似的发音字符和音节,使得能对字符串进行发音比较而不是字母比较。
例如:select name from … where soundex(name) = soundex(‘Michael Green’) - 聚集函数
8.1 AVG() 函数忽略列值为NULL的行
8.2 如果指定列名,则 count() 函数会忽略指定列的值为空的行,但如果 count() 函数中用的是星号(*),则不忽略。
8.3 avg(distinct xxx) 只考虑各个不同的xxx所对应的平均值 - group by 子句必须出现在 where 子句之后,order by 子句之前
- having 与 where 区别:使用having时应该结合group by子句(having为组级过滤),而where子句用于标准的行级过滤。
- insert 与 insert select:insert 通常只插入一行,要插入多行,必须执行多个 insert 语句。insert select 可以用一条 insert 插入多行,不管select语句返回多少行,都将被 insert 插入。
- 表的复制:create table copyTable as
select * from testTable - delete、truncate table 与 drop:delete 语句可以从表中删除指定行;如果要删除所有行,可以使用 truncate table 语句,也可以使用 drop table。
不同之处在于 drop table 不但会删除表中所有数据,还会将整个表结构从数据库中移除,如果想重新向表中存储数据的话必须重建该数据表。 - 使用事务处理,通过确保成批的SQL操作要么完全执行,要么完全不执行,用来维护数据库的完整性。
- 事务处理用来管理 insert、update和delete语句。不能回退select语句(回退select语句也没有必要),也不能回退create后drop操作。
- 事务处理中的几个语句:
rollbck:回退;
commit:提交;
savepoint:保留点;越多越好,保留点越多,就能越灵活地进行回退。 - 使用游标操作数据
下面的示例用@@FETCH_STATUS控制在一个WHILE循环中的游标活动
DECLARE E1cursor cursor /* 声明游标,默认为FORWARD_ONLY游标 */
FOR SELECT * FROM c_example
OPEN E1cursor /* 打开游标 */
FETCH NEXT from E1cursor /* 读取第1行数据 */
WHILE @@FETCH_STATUS = 0 /* 用WHILE循环控制游标活动 */
BEGIN
FETCH NEXT from E1cursor /* 在循环体内将读取其余行数据 */
END
CLOSE E1cursor /* 关闭游标 */
DEALLOCATE E1cursor /* 删除游标 */ - 主键与唯一约束:
相同点:Unique key与primarykey 约束都强调唯一性;
不同点:
(1)一个表只能有一个PRIMARY KEY,但可以有多个UNIQUE KEY ;
(2)unique key 约束只针对非主键列,允许有空值。Primary key 约束针对主键列,不允许有空值。
UNIQUE KEY的用途:主要是用来防止数据插入的时候重复的。表的主键就是一个唯一性约束,不过主键只能有一个,所以如果其他列的数据不允许重复的话,就可以建立唯一性约束。