3.8.4 重复元组存在性测试
unique
SQL提供一个unique结构用于测试在一个子查询的结果中是否存在重复元组。
unique结果为真的情况
如果作为参数的子查询结果中没有重复的元组, unique结构将返回true值。
unique结果为假的情况
当且仅当在关系中存在着两个元组t1和t2,且t1=t2时unique测试结果为假
注意空值
由于在t1或t2的某个域为空时,判断t1=t2为假,所以尽管一个元组有多个副本,只要该元组有一个属性为空, unique测试就有可能为真。
SQL查询 找出所有在2009年最多开设一次的课程
我们可以用unique结构书写查询”找出所有在2009年最多开设一次的课程”,如下所示:
1 | select T.course_id |
注意如果某门课程不在2009年开设,那么子查询会返回一个空的结果, unique谓词在空集上计算出真值。
MySQL好像不支持unique结构
在不使用unique结构的情况下,上述查询的一种等价表达方式是
1 | select T.course_id |
1 | mysql> select T.course_id |
not unique
我们可以用not unique结构测试在一个子查询结果中是否存在重复元组。为了说明这一结构,考虑查询”找出所有在2009年最少开设两次的课程”,如下所示:
1 | select T.course_id |
MySQL也不支持not unique
原文链接: 3.8.4 重复元组存在性测试