--select语句的查询结果可以进行集合操作--集合操作主要包括交集,并集,差集--并集union,交集intersect,差操作except--查询计算机系的学生及年龄不大于19岁的学生--实际上需要的是计算机系的学生或者说年龄不大于19岁的学生select *
from Student
where Sdept='CS'unionselect *
from Student
where Sage<=19;--使用union将多个查询结果合并起来的时候,默认情况下--系统会自动的去掉重复的元组,如果想要保留重复的元组,--可以使用union all关键字来实现--这时候如果两个集合中中有了相同的元组,这时候进行--集合的并集的时候会保留重复的元组select *
from Student
where Sdept='CS'unionallselect *
from Student
where Sage>=19;--通常也可以使用or关键字来表达查询结果中的并集的关系--查询计算机系的学生及年龄不大于19岁的学生select *
from Student
where Sdept='CS'or Sage<=19;--查询选修了课程1或者选修了课程2的学生--实际上是求选修了课程的学生信息与选修了课程2的学生信息的并集select *
from SC
where Cno='1'unionselect *
from SC
where Cno='2';--如果对结果需要保留重复的元组,可以使用union all关键字select *
from SC
where Cno='1'unionallselect *
from SC
where Cno='2';--对于这种要求也可以使用其他的查询语句进行表达--通常会使用这种形式来表达查询select *
from SC
where Cno='1'or Cno='2';--查询计算机科学系的学生与年龄不大于19学生的交集select *
from Student
where Sdept='CS'intersectselect *
from Student
where Sage<=19;--对于查询语句的交集,我们也可以使用and关键字进行表达--通常我们会选择使用and关键字来表达查询结果中集合的交集select *
from Student
where Sdept='CS'and Sage<=19;--查询选修了1号课程又选修了2号课程的学生.--实际上,就是选修了一号课程的学生集合与选修了2号课程学生集合的交集--表达查询结果中的交集的关键字是intersectselect Sno
from SC
where Cno='1'intersectselect Sno
from SC
where Cno='2';select *
from SC
where Cno='1'intersectselect *
from SC
where Cno='2';--为什么上面的两条查询语句的结果是不同的呢?--同样我们也采用其他的查询语句来表达类似的查询--选修了1号课程的学生,同时也选修了2号课程,--可以理解为:在选修了2号课程的前提下选修了一号课程--我们可以现将选修了2号课程的学生的学号确定下来select Sno
from SC
where Cno='2';--然后根据上一条查询结果的基础上确定又选修了2号课程的学生select Sno
from SC
where (Sno='201215121'or Sno='201215122') and Cno='2'
--同样也可以使用in关键字来表达
select Sno
from SC
where Sno in('201215121' ,'201215122') and Cno='2';--也可以理解为:在选修了1号课程的前提下选修了2号课程select Sno
from SC
where Cno='1';--然后在第一条语句的基础之上,这些学号中选修了1号课程的学生select Sno
from SC
where (Sno='201215121'or Sno='201215122') and Cno='1';--同样也可以使用in关键字来表达select Sno
from SC
where Sno in('201215121' ,'201215122') and Cno='1';--查询计算机科学系的学生与年龄不大于19岁的学生的差集select *
from Student
where Sdept='CS'exceptselect *
from Student
where Sage<=19;--这是为什么?ORA-00933: SQL 命令未正确结束--实际上就是查询计算机科学系的学生中年龄大于19岁的学生select *
from Student
where Sdept='CS'and Sage>19;