1.在被引用表中没有与外键中的引用列列表匹配的主键或候选键。
解释
我的情况是由于在引用表中设置外键时,引用的列在被引用表中没有设置唯一性。外键通过将列加入另一个表中的唯一键来工作,该唯一键必须定义为某种形式的唯一索引,无论时主键还是其它唯一索引。
2.使用exists谓词时不要引入新的表,比如下面这道题:
-国家 (国名, 首都名, 面积)(首都名为外键,它所引用的是城市表的主键—城市名)
-城市 (城市名,首都名,人口) (‘首都名’字段为外键,它所引用的本表的主键—城市名。说
明:若一个城市是首都,则城市名、首都名字段内容相同,都是该城市名。)
-邻国(国名,邻国)(记录国与国之间相邻的关系。国名、邻国字段构成联合主键,二者都引
用国家表的国名字段。)
下面是我的表结构:
table 国家
table 邻国
求没有邻国的国名(代码如下):
select g1.国名
from 国家 g1
where not exists(
select * from 邻国 where
g1.国名=邻国.国名 or g1.国名=邻国.邻国
)
这段代码返回的是“日本”。
如果我们在not exists那个括号里面又写了一个国家表,那么我们就会返回一个空值,比如:
select 国家.国名
from 国家
where not exists(
select * from 国家,邻国 where
国家.国名=邻国.国名
)
3.查找与德国所有邻国都接壤的国家
,类似这样问所有、至少的,关系代数可以用division来实现,也就是除运算
4.order by默认是按升序来排列的。
5.where子句里面不能有聚合子句(count,avg,sum,min,max这些)
往表中插入新列:
alter table tableName add columnName varchar(30)
修改列的类型:
alter table tableName alter column columnName newType
修改列的名称
exec sp_rename 'tableName.column1','column2'(把表名为tableName的column1列名修改为column2)
删除列
alter table tableName drop column columnName
6-18
1.除运算