不是缺少逗号,而是第一个插入语句中的整个日期值是错误的。
这个:'1999-AUG-31
没有,甚至不是一个字符串(缺少尾随单引号)。但是,它也不是有效的日期值。将它与包含日期文字的第二条语句进行比较:DATE '1999-08-31'
(是的,这也是你应该在第一条语句中做的)。
修复后:
SQL> INSERT INTO employees (EMPLOYEE_ID,LAST_NAME,EMAIL,HIRE_DATE,JOB_ID,DEPARTMENT_ID)
2 VALUES(176,'Taylor','jasontaylor@gmail.com',DATE '1999-08-31','SA_REP',80);
-----------------
1 row created. this was wrong
SQL> INSERT INTO employees (EMPLOYEE_ID,DEPARTMENT_ID)
2 VALUES(200,'Whalen','justinwhalen@gmail.com',DATE '1993-06-18','AD_ASST',200);
1 row created.
SQL>
关于您的自然连接问题:自然连接隐式连接两个表中的公共列(它们具有相同的名称)。
这意味着您的查询:
SQL> SELECT LAST_NAME,DEPARTMENT_ID,END_DATE,EMPLOYEE_ID FROM employees NATURAL JOIN job_history;
LAST_NAME DEPARTMENT_ID END_DATE JOB_ID EMPLOYEE_ID
------------------------- ------------- ---------- ---------- -----------
Taylor 80 06-12-0031 SA_REP 176
返回与内连接相同的结果,加入公共列:
SQL> select e.last_name,e.department_id,h.end_Date,e.job_id,e.employee_id
2 from employees e join job_history h on h.employee_id = e.employee_id
3 and h.job_id = e.job_id
4 and h.department_id = e.department_id;
LAST_NAME DEPARTMENT_ID END_DATE JOB_ID EMPLOYEE_ID
------------------------- ------------- ---------- ---------- -----------
Taylor 80 06-12-0031 SA_REP 176
SQL>
如果您希望查询返回“更多”行,那么它们应该在这些公共列中具有匹配的数据。例如,尽管 EMPLOYEE_ID
值匹配,但 AD_ASST
表中没有 job_history
作业值,也没有值为 department_id
的 200
。
需要返回两个员工的数据:删除员工200,修改后的职位和部门数据重新录入;那么你的 NATURAL JOIN 就起作用了。
SQL> delete from job_history where employee_id = 200;
1 row deleted.
SQL> INSERT INTO job_history (EMPLOYEE_ID,START_DATE,'2001-JAN-14','2001-JUN-17',200);
1 row created.
SQL> SELECT LAST_NAME,EMPLOYEE_ID FROM employees NATURAL JOIN job_history;
LAST_NAME DEPARTMENT_ID END_DATE JOB_ID EMPLOYEE_ID
------------------------- ------------- ----------- ---------- -----------
Taylor 80 0031-DEC-06 SA_REP 176
Whalen 200 2001-JUN-17 AD_ASST 200
本文链接:https://www.f2er.com/1056.html