select c.name, o.ordid, i.itemid from customer c, ord o, item i
where c.custid = o.custid = i.ordid;
select c.name, o.ordid, i.itemid from customer c, ord o, item i
where c.custid = o.custid and o.itemid = i.ordid;
select c.name, o.ordid, i.itemid from customer c, ord o, item i
where c.custid = o.custid or o.itemid = i.ordid;
2つの表しか結合できない。
問題8
次のSQL文を実行したときの正しい結果を選びなさい。従業員(emp)と給与のランク表(salaryrank)に明示的な結合列はありません。
select e.name, e.salary, s.rank from emp e, salaryrank s
where e.salary between s.minsal and a.maxsal;
select worker.ename, worker.job, worker.sal, manager.ename
from emp worker, emp manager
where worker.mgrno(+) = manager.empno;
select worker.ename, worker.job, worker.sal, manager.ename
from emp worker, emp manager
where worker.mgrno = manager.empno(+);
select worker.ename, worker.job, worker.sal, manager.ename
from emp worker, emp manager
where worker.mgrno(+) = manager.empno(+);
select worker.ename, worker.job, worker.sal, manager.ename
from emp worker, emp manager
where worker.mgrno = manager.empno;
副問い合わせ
問題1
SALLYよりも高い給与をもらっている人を示すためのSQL文を選びなさい。
select ename, sal from emp > select ename, sal from emp where ename = 'SALLY';
select ename, sal from emp where sal > (select sal from emp where ename = 'SALLY');
1つのSQL文では実行できない。
select ename, sal from emp where sal > ename = 'SALLY';
問題2
副問い合わせが記述できる場所を選びなさい。
SELECT句
HAVING句
FROM句
ORDER BY句
問題3
次のSQL文を実行したときの正しい結果を選びなさい。
select ename, job, deptno from emp
where deptno = (select deptno from dept where dname = 'TOKYO')
and sal > (select sal from emp where job = 'SALESMAN');
WHERE句には1つしか副問い合わせは書けないのでエラーになる。
副問い合わせは同一表に対してのみ検索できるので、エラーになる。
副問い合わせで単一行が戻ってきた場合のみ、条件に合致するデータが表示される。
問題なく実行される。
問題4
従業員表(emp)から給与(sal)の平均が最も高い職種(job)を求めるSQL文を選びなさい。
select job, max(avg(sal)) from emp group by job;
select job, sal from emp where sal > max(avg(sal)) group by job;
select job, avg(sal) from emp group by job having avg(sal) = (select max(avg(sal)) from emp group by job);
select job,avg(sal) from emp where avg(sal) = (select max(avg(sal)) from emp group by job);