次のテーブルがあります
- 生徒(シド、スネーム、年齢)
- コース(cid、cname、期間)
- 登録 (sid、cid、日付)
javaまたはrdbmsを受講した学生の sid を見つける
select sid
from enroll e,
course c
where (c.cname like 'java' and c.cid=e.cid)
or (c.cname like 'rdbms' and c.cid=e.cid);
または:
select sid
from enroll e,
course c
where cname like 'java' and c.cid=e.cid
union
select sid
from enroll e,
course c
where cname like 'rdbms' and c.cid=e.cid;
2 番目の選択肢:
select sid
from enroll
where cid in (select cid
from course
where cname like 'java'
or cname like 'rdbms');
上記のクエリはすべて、期待どおりの結果をもたらします。
javaとrdbmsを受講した学生の sid を見つけるために、3 つすべてを変更しましたが、以下の 1 番目と 3 番目のクエリは機能しません。
select sid
from enroll e,
course c
where (c.cname like 'java' and c.cid=e.cid)
and (c.cname like 'rdbms' and c.cid=e.cid);
別:
select sid
from enroll e,
course c
where cname like 'java' and c.cid=e.cid
intersect
select sid
from enroll e,
course c
where cname like 'rdbms' and c.cid=e.cid;
2 番目の選択肢:
select sid
from enroll
where cid in (select cid
from course
where cname like 'java' and cname like 'rdbms');