2-7 查询所有不姓张、不姓李、也不姓王的学生的学号sid、姓名name
create or replace view test2_07 as
select sid, name
from pub.student
where name not like '张%' and name not like '李%' and name not like '王%'
或
create or replace view test2_07 as
select sid,name
from pub.student
where name not in(select name
from pub.student
where name like '张%' or name like '李%' or name like'王%');
2-9 查询选修了300003号课程的学生的sid、name、score
create or replace view test2_09 as
select s.sid, s.name, sc.score
from pub.student s, pub.student_course sc
where cid = '300003' and s.sid = sc.sid
或使用 natural join语句
create or replace view test2_09 as
select sid,name,score
from pub.student natural join pub.student_course
where cid='300003';
2-10 找出选修了所有课程的学生的学号、姓名
create or replace view test6_06 as
select s.sid,s.name
from pub.student s
where not exists(
select *
from pub.course c
where not exists(
select * from pub.student_course sc
where sc.sid = s.sid and sc.cid = c.cid
))
关于NOT IN 和 NOT EXISTS
"NOT IN": "NOT IN"操作符用于在一个查询中判断某个值是否不在另一个查询结果的集合中。它通常用于子查询中,将子查询的结果作为集合,然后检查某个值是否不在该集合中。例如:
SELECT column_name FROM table_name WHERE column_name NOT IN (SELECT column_name FROM another_table)
注意,"NOT IN"操作符在使用时需要确保子查询的结果集不包含NULL值,否则可能导致不符合预期的结果。
"NOT EXISTS": "NOT EXISTS"操作符用于判断子查询的结果集是否为空,如果为空,则返回真(True)。它通常用于条件判断中,检查子查询是否返回任何行。例如:
SELECT column_name FROM table_name t WHERE NOT EXISTS (SELECT 1 FROM another_table WHERE another_table.column_name = t.column_name)
"NOT EXISTS"操作符在使用时不受NULL值的影响,它会根据子查询是否返回行来进行判断。如果子查询返回了至少一行,则条件判断为假(False),否则为真(True)。
总结:
- "NOT IN"用于检查某个值是否不在另一个查询结果的集合中。
- "NOT EXISTS"用于检查子查询是否为空,即子查询是否返回任何行。