1.外键的级联操作
大家都知道在定义了外键之后,如果对主键表进行数据删除或更新时,如果存在数据关联,则触发外键约束抛出异常并且删除操作被回滚。这个就是SQL SERVER的默认设置。
其实我们还可以设置其操作为“级联”、“设置NULL”或者“设置默认值”。“级联”也就是在发生主键表删除或更新操作时,相关外键数据也被删除或者更新为与主键一致的值。“设置NULL”即将如果外键列可接受NULL值,则更新为NULL。“设置默认值”即将外键列相关行设置为默认值。这3个选择在许多场景中可给我们带来很大的方便,可以根据需要应用。
2.Top 关键字
TOP不仅可以指定返回的行数,还可以用百分比的形式。
例如:
SELECT TOP (10) PERCENT FROM 表名 返回前10%的数据行
“WITH TIES” 关键字
这个关键字是干什么的呢?它的意思是“与xxx打成平局”,也就是说并列排名也都列出来。通常我们取Top,一定是与某种排序相关ORDER BY,那么就可能存在并列排名的情况。
举个例子:
我们想获得用户表中年龄最大的前10位:SELECT TOP 10 * FROM User ORDER BY Age DESC。但是可能排名第10位的有3个年龄一样的并列排名的人。那我们执行TOP 10就只会取到10个人,会丢掉2个人,这在实际业务中是有错误的。这时我们就可以使用WITH TIES关键字:
SELECT TOP 10 WITH TIES * FROM User ORDER BY Age DESC
此时我们取到的将是12条数据,因为最后3个人是并列排名
3.标示列字段插入字段内容
我们都知道,如果把一个字段设置为标识列,也就是通常说的自增列,我们就无法使用Insert语句为其指定要插入的值,如果我们这么做了,会报错。因为标识列在一般情况下是只读的,所以不允许插入数据。
但是我们可以通过先执行 SET IDENTITY_INSERT 表名 ON语句,然后就可以在标识列字段插入数据了。
4.COUNT与GROUP BY
我们经常需要按某列分组统计数量,例如学生选课,我们希望按课程分组统计每门课程的学生数。那么通常我们会这么写:SELECT CourseName,Count(*) FROM Course GROUP BY CourseName。
这看起来很好,但是问题是如果这门课程没有人选,则不会出现在结果集中。很明显这不是我们想要的结果,我们想要的是如果没人选的课程,则Count列为0。那怎么办呢?
我们可以这样做:
SELECT CourseName,Count(*) FROM Course GROUP BY ALL CourseName
在GROUP BY后面加上ALL关键字就可以实现我们想要的了
未完待续