问一道SQL语言的题目

来源:百度知道 编辑:UC知道 时间:2024/06/17 04:20:46
有这样一个关系表:领国(国名,领国)
要求用SQL语言查询:列出所有跟中国间接相邻的国家名。(间接相邻就是他们的邻国跟中国相邻但是自己本身跟中国不相邻)。
麻烦写出具体的SQL查询语句。最好再解释一下你的思路,谢谢了!

应该不难,自连接应该可以:
试试这个:
select 国名 from 邻国 邻国1,邻国 邻国2
where 邻国1.邻国=邻国2.国名 and 邻国2.邻国='中国' and 邻国1.邻国 <>‘中国’;

思路很简单,嵌套查询,先查出所有与中国邻国,然后查出所有这些国家的邻国(不包含中国),即为所求
select 国名 form 表 where 邻国 in
(
select 邻国 from 表 where 邻国='中国'
)
and 邻国 !='中国'
看下这个可以不

select 国名 from 表
where
邻国 in(select 国名 from 表 where 邻国='中国') --找出中国的邻国的邻国
and 国名 <>'中国' --排除中国自己
and 国名 not in (select 国名 from select 国名 from 表 where 邻国='中国') --排除三国相邻的情况

这样剩下的就是对的

select distinct 国名 from 领国 where 领国 in (select distinct 领国 from 领国 where 国名='中国') and 国名 not in ( select distinct 领国 from 领国 where 国名='中国' ) and 国名<>'中国'

以下是集合关系:

{中国间接相邻的国家}={(与中国相邻的国家)的相邻的国家}-{与中国相邻的国家}-{中国}

明白了这个就理解SQL语句就不难了.

可以在表中再添加字段吗?

那样的话,添加标识列:
IfNear1(int型,1代表自己本身与中国相邻,0代表自己本身与中国不相邻);IfNear2(int型,1代表邻国与中国相邻,0代表邻国与中国不相邻)