|
|
2012-3-31 表连接
作者:Patrick Barel
难度:低
我有两个表:
CREATE TABLE AMIS_DEPT
(
deptno NUMBER(2) NOT NULL,
dname VARCHAR2(14),
loc VARCHAR2(13)
);
ALTER TABLE AMIS_DEPT
ADD CONSTRAINT PK_AMIS_DEPT PRIMARY KEY (DEPTNO)
USING INDEX;
CREATE TABLE AMIS_EMP
(
empno NUMBER(4) NOT NULL,
ename VARCHAR2(10),
deptno NUMBER(2) NOT NULL
);
ALTER TABLE AMIS_EMP
ADD CONSTRAINT PK_AMIS_EMP PRIMARY KEY (EMPNO)
USING INDEX ;
ALTER TABLE AMIS_EMP
ADD CONSTRAINT FK_AMIS_DEPTNO FOREIGN KEY (DEPTNO)
REFERENCES AMIS_DEPT (DEPTNO);
里面有这些数据:
INSERT INTO AMIS_DEPT( DEPTNO, DNAME) VALUES ( 10, 'ACCOUNTING');
INSERT INTO AMIS_DEPT( DEPTNO, DNAME) VALUES ( 20, 'RESEARCH');
INSERT INTO AMIS_DEPT( DEPTNO, DNAME) VALUES ( 30, 'SALES');
INSERT INTO AMIS_DEPT( DEPTNO, DNAME) VALUES ( 40, 'OPERATIONS');
INSERT INTO AMIS_EMP( EMPNO, ENAME, DEPTNO) VALUES ( 7369, 'SMITH', 20);
INSERT INTO AMIS_EMP( EMPNO, ENAME, DEPTNO) VALUES ( 7499, 'ALLEN', 30);
INSERT INTO AMIS_EMP( EMPNO, ENAME, DEPTNO) VALUES ( 7521, 'WARD', 30);
INSERT INTO AMIS_EMP( EMPNO, ENAME, DEPTNO) VALUES ( 7566, 'JONES', 20);
INSERT INTO AMIS_EMP( EMPNO, ENAME, DEPTNO) VALUES ( 7654, 'MARTIN', 30);
INSERT INTO AMIS_EMP( EMPNO, ENAME, DEPTNO) VALUES ( 7698, 'BLAKE', 30);
INSERT INTO AMIS_EMP( EMPNO, ENAME, DEPTNO) VALUES ( 7782, 'CLARK', 10);
INSERT INTO AMIS_EMP( EMPNO, ENAME, DEPTNO) VALUES ( 7788, 'SCOTT', 20);
INSERT INTO AMIS_EMP( EMPNO, ENAME, DEPTNO) VALUES ( 7839, 'KING', 10);
INSERT INTO AMIS_EMP( EMPNO, ENAME, DEPTNO) VALUES ( 7844, 'TURNER', 30);
INSERT INTO AMIS_EMP( EMPNO, ENAME, DEPTNO) VALUES ( 7876, 'ADAMS', 20);
INSERT INTO AMIS_EMP( EMPNO, ENAME, DEPTNO) VALUES ( 7900, 'JAMES', 30);
INSERT INTO AMIS_EMP( EMPNO, ENAME, DEPTNO) VALUES ( 7902, 'FORD', 20);
INSERT INTO AMIS_EMP( EMPNO, ENAME, DEPTNO) VALUES ( 7934, 'MILLER', 10);
COMMIT
/
哪些选项的查询能够返回没有员工的部门?
(A)
SELECT d.*
FROM amis_dept d
WHERE NOT EXISTS (SELECT 1
FROM amis_emp e
WHERE e.deptno = d.deptno)
(B)
SELECT d.*
FROM amis_dept d
WHERE d.deptno NOT IN (SELECT e.deptno
FROM amis_emp e)
(C)
SELECT d.*
FROM amis_dept d
LEFT OUTER JOIN amis_emp e ON (d.deptno = e.deptno)
WHERE e.empno IS NULL
(D)
SELECT d.*
FROM amis_dept d
JOIN amis_emp e ON (d.deptno <> e.deptno)
(E)
SELECT d.*
FROM amis_dept d
NOT INTERSECT
SELECT d.*
FROM amis_dept d
JOIN amis_emp e ON (d.deptno = e.deptno)
(F)
SELECT d.*
FROM amis_dept d
MINUS
SELECT d.*
FROM amis_dept d
JOIN amis_emp e ON (d.deptno = e.deptno)
|
|