我正在尝试学习子查询。
我对此有麻烦:
两张表:
CREATE TABLE DEPT
(DEPTNO NUMBER(2) CONSTRAINT DEPT_PRIMARY_KEY PRIMARY KEY,
LOC varchar2(3));
CREATE TABLE EMP
(ENAME varchar2(10),
JOB varchar2(9),
DEPTNO NUMBER(2) NOT NULL
CONSTRAINT EMP_FOREIGN_KEY REFERENCES DEPT (DEPTNO));
我想获取名称(emp.ename)和工作(emp.job),但仅在“芝加哥”中也存在工作的地方。
这是我所做的:
SELECT emp1.ename, emp1.job
FROM emp emp1
WHERE emp1.job EXISTS (SELECT emp2.job
FROM emp emp2
FULL JOIN dept ON (emp2.deptno = dept.deptno)
WHERE dept.loc = 'CHICAGO');
我总是在第3行中收到“无效的关系运算符”错误。
结果示例:
ENAME | JOB | LOC
JONES | SALE | CHICAGO
FORD | SALE | NEW YORK //He doesn't sit in CHICAGO but the job also exists in Chicago
为了简化查询,您可以使用:
select emp1.ename, emp1.job
from EMP emp1
where emp1.deptno in (SELECT DEPT.DEPTNO from DEPT where DEPT.loc = 'CHICAGO');
要从emp1中选择名称和工作,其中emp1的工作与emp2的位置芝加哥的工作相同:
SELECT emp1.ename, emp1.job
FROM emp emp1
WHERE emp1.job IN (SELECT emp2.job
FROM emp emp2
FULL JOIN dept ON (emp2.deptno = dept.deptno)
WHERE dept.loc = 'CHICAGO');
如果存在至少一个在芝加哥中具有位置的记录,则从emp1中选择名称和工作。
SELECT emp1.ename, emp1.job
FROM emp emp1
WHERE EXISTS (SELECT emp2.job
FROM emp emp2
FULL JOIN dept ON (emp2.deptno = dept.deptno)
WHERE dept.loc = 'CHICAGO');
在您的情况下,我认为第一个和第二个查询会更合适。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句