我不了解左外部联接,右外部联接的概念,或者根本不理解为什么我们需要使用联接!我正在努力解决的问题以及正在处理的表格在这里:链接
问题3(b)
在SQL中构造命令以解决以下查询,解释了为什么必须使用(外部)联接方法。[5分]“找到每名工作人员及其his属(如果有)的姓名”
问题3(c)-
使用(i)join方法和(ii)子查询方法在SQL中构造命令以解决以下查询。[10分]“查找在计算机化项目上工作超过20小时的每位工作人员的身份名称”
谁能简单地向我解释一下?
联接用于将两个相关的表组合在一起。
在您的示例中,您可以组合Employee表和Department表,如下所示:
SELECT FNAME, LNAME, DNAME FROM EMPLOYEE INNER JOIN DEPARTMENT ON EMPLOYEE.DNO=DEPARTMENT.DNUMBER
这将导致一个记录集,如:
FNAME LNAME DNAME ----- ----- ----- John Smith Research John Doe Administration
我用INNER JOIN上面的。INNER JOINs将两个表组合在一起,以便 仅 显示两个表中具有匹配项的记录,并且在这种情况下,将它们 连接 到部门编号(Employee中的字段DNO,Department表中的DNUMBER)。
INNER JOIN
LEFT JOIN使用s可以在第一个表中有记录但第二个表中 没有 记录时合并两个表。例如,假设您要列出所有雇员以及所有受抚养者的列表:
LEFT JOIN
SELECT EMPLOYEE.FNAME as employee_first, EMPLOYEE.LNAME as employee_last, DEPENDENT.FNAME as dependent_last, DEPENDENT.LNAME as dependent_last FROM EMPLOYEE INNER JOIN DEPENDENT ON EMPLOYEE.SSN=DEPENDENT.ESSN
这里的问题是,如果员工 没有 受抚养人,那么他们的记录将根本不会显示-因为DEPENDENT表中没有匹配的记录。
因此,使用 左 连接将所有数据保留在“左”(即第一个表)上,并将所有匹配的数据保留在“右”(第二个表)上:
SELECT EMPLOYEE.FNAME as employee_first, EMPLOYEE.LNAME as employee_last, DEPENDENT.FNAME as dependent_first, DEPENDENT.LNAME as dependent_last FROM EMPLOYEE LEFT JOIN DEPENDENT ON EMPLOYEE.SSN=DEPENDENT.ESSN
现在,我们获得了 所有 员工记录。如果给定员工没有匹配的受抚养人,则dependent_first和dependent_last字段将为空。
dependent_first
dependent_last