Baj*_*lor 4 sql database oracle
我正在努力学习Subquerys.
我有这个麻烦:
两个表:
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));
Run Code Online (Sandbox Code Playgroud)
我想获得名称(emp.ename)和工作(emp.job),但只有"CHICAGO"中的工作也存在.
这就是我所做的:
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');
Run Code Online (Sandbox Code Playgroud)
我总是在第3行得到"无效的关系运算符"错误.
结果示例:
ENAME | JOB | LOC
JONES | SALE | CHICAGO
FORD | SALE | NEW YORK //He doesn't sit in CHICAGO but the job also exists in Chicago
Run Code Online (Sandbox Code Playgroud)
要简化查询,您可以使用:
select emp1.ename, emp1.job
from EMP emp1
where emp1.deptno in (SELECT DEPT.DEPTNO from DEPT where DEPT.loc = 'CHICAGO');
Run Code Online (Sandbox Code Playgroud)
要从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');
Run Code Online (Sandbox Code Playgroud)
如果在芝加哥有至少一个位置记录,则从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');
Run Code Online (Sandbox Code Playgroud)
在您的情况下,我假设第一个和第二个查询更合适.