SQL中一个表是否包含另外一个表的问题的实现
2010-03-22 23:01
453 查看
create table table1 ( id int primary key, name varchar(40) not null ) create table table2 ( id int primary key, name varchar(40) not null ) --查看表2是否包含表1 --如果表2不包含表1则输出表1的内容,否则如果表2包含表1则不输出表1 select * from table1 where exists ( --表1中有而表2中没有的数据。 --如果这个子查询有查询结果的话说明表1中有的数据在表2中不是全部都有的, --所以表2不能包含表1 select * from table1 where not exists ( select * from table2 where table1.id = table2.id ) )
上面的查询大体思想就是在table1中逐个取出元组,然后在table2中查找是否有这么一个元组。
如果table2有这个元组,表示table2包含这个元组,继续看table1的下一个元组。
如果table2没有这个元组,则表示table2不能完全包含table1,这样就可以实现查看一个表是否
包含另外一个表了。
就这么一个试验,我进行了下面的测试:查询所有课程中,被cs系全部老师教过的课程。
就事说找到这样一个课程:该课程被所有的老师都讲过。
于是有了下面的代码:
select * from course c where not exists ( select id from ( select id from professor where deptid = 'cs'--找到cs系全部老师的编号id ) a --给老师编号id的表起个别名为a where not exists ( select * from ( select profid from teaching t where t.crscode = c.crscode ) b --给从老师教课这个表中得到的教授了相应课程的老师的编号,这个表起名为b where a.id = b.profid ) )
上面代码的意思是:
1.在课程course表中拿出一个课程C,
2.找到cs系的全部老师,
3.从cs系的老师中拿出一个老师T,然后从 老师-教课 这个表中查看老师T是否教了课程C
(1)如果老师T教了课程C,则继续看cs系的其他老师。如果cs系的其他老师也都教过课程C,
则课程C就是我们要找的课程。然后回到步骤1,重复。
(2)如果老师T没有教课程C,则可以直接断定课程C不是我们要找的课程,返回1,继续下一个课程。
这个查询大体就是上面解释这样。
相关文章推荐
- List的All方法使用问题:我用List1的All方法来确保List1的所有每个数组元素中是否包含Arr1中的任意元素,这个部分很难实现。 因为,没有一个数组中是否包含另一个数组中的任意元素这个功能
- 一个字符串 是否包含另外一个字符串
- python判断一个集合是否包含了另外一个集合中所有项的方法
- 用于判断数组是否完全包含另外的一个数组的所有元素
- oracle判断一个字符串中是否包含另外一个字符串
- oracle判断一个字符串中是否包含另外一个字符串
- SQL时间段在另外一个时间段内是否存在
- Demo_JDBC_实现一个用户登陆的功能并改进sql的注入问题
- 1.实现一个函数,可以左旋字符串中的k个字符。 AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA 2.判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如:给定s1
- oracle判断一个字符串中是否包含另外一个字符串
- sql语句实现从一个表的查询出某些数据插入另外一个表中
- html元素是否包含另外一个元素,以及classList属性
- Python实现判断一个字符串是否包含子串的方法总结
- 模式匹配(pattern matching)问题:判断一个长为n的字符串X中是否包含常为m的字串Y(m<=n)
- 编写js扩展方法实现判断一个数组中是否包含某个元素
- 1.实现一个函数,可以左旋字符串中的k个字符。 AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA 2.判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如:给定s1
- sql 一个字段是否包含另一个字段
- 一个用SQL实现数据排列的问题
- 如果在一个实现类中改变另外一个类中的变量,但是怎么改网页上都没变化的问题。
- java中判断一个字符串是否包含另外一个字符串,如果包含,计算出字符串的开始位置