sql面试学到新内容
1.事物的保存点
MYSQL可以让我们对事务进行部分回滚,就是在事务里调用SAVEPOINT语句来设置一些命名标记。如果想要回滚到那个标记点位置,需要使用ROLLBACK语句来指定哪个保存点。
mysql> truncate table d; Query OK, 0 rows affected (0.02 sec) mysql> start transaction; Query OK, 0 rows affected (0.00 sec) mysql> insert into d values(1); Query OK, 1 row affected (0.01 sec) mysql> savepoint my_savepoint; Query OK, 0 rows affected (0.00 sec) mysql> insert into d values(2); Query OK, 1 row affected (0.00 sec) mysql> rollback to savepoint my_savepoint; Query OK, 0 rows affected (0.00 sec) mysql> insert into d values(3); Query OK, 1 row affected (0.00 sec) mysql> commit; Query OK, 0 rows affected (0.00 sec) mysql> select * from d; +------+ | name | +------+ | 1 | | 3 | +------+ 2 rows in set (0.00 sec)
2.SQL Server 排序函数
ROW_NUMBER:
根据组显示每一条记录在该组中出现的位置,例如:若有两个第一名,则这两个第一名在一组内排名为1、2,下一组的排序仍从1开始,依次类推。
RANK:
在结果集中每一条记录所在的排名位置,但排名可能不连续,例如:若同一组内有两个第一名,则该组内下一个名次直接跳至第三名。
DENSE_RANK:
功能与Rank相似,但排名的数值是连续的,例如:若同一组内有两个第一名,则该组内下一个名次为第二名
NTILE:
根据指定的分组数量将结果集分区,并记录其在组中的位置。可以对结果集的数据排序后,按照指定的数量把结果集分成N组,并给予每组一个组编号,分组的方式很简单,将结果集的总记录数除以N,若有余数M,则前M组都多增一条记录,因此,并非所有的组都有相同的记录数,但多记录的组最多只有一条记录。
3.SQL Server 其他函数
pivot:行转列函数
over :开窗函数
partition by:分析函数
参考文章
1.在SQL Server 事务中使用Savepoints来保存提交点
2.Sql 四大排名函数(ROW_NUMBER、RANK、DENSE_RANK、NTILE)简介
6.left join on 后and 和 where 的区别
休对故人思故国 且将新火试新茶 诗酒趁年华